赞
踩
如果我们都人工的去解决遇到的pod重启问题,似乎又回到了以前刀耕火种的时代了是吧,如果有一种工具能够来帮助我们管理Pod就好了,Pod不够了自动帮我新增一个,Pod挂了自动帮我在合适的节点上重新启动一个Pod,这样是不是遇到重启问题我们都不需要手动去解决了。
幸运的是,Kubernetes就为我们提供了这样的资源对象:
本节先讲ReplicaSet和ReplicationController。
Replication Controller简称RC,RC是Kubernetes系统中的核心概念之一,简单来说,RC可以保证在任意时间运行Pod的副本数量,能够保证Pod总是可用的。如果实际Pod数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当Pod失败、被删除或者挂掉后,RC都会去自动创建新的Pod来保证副本数量,所以即使只有一个Pod,我们也应该使用RC来管理我们的Pod。可以说,通过ReplicationController,Kubernetes实现了集群的高可用性。
- #启动k8s
- minikube start
- #删除上次的pod
- kubectl delete -f pod_nginx.yml
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name: nginx
- spec:
- replicas: 3
- selector:
- app: nginx
- template:
- metadata:
- name: nginx
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- ports:
- - containerPort: 80
上面的YAML文件:
- kind:ReplicationController
- spec.replicas: 指定Pod副本数量,默认为1
- spec.selector: RC通过该属性来筛选要控制的Pod
- spec.template: 这里就是我们之前的Pod的定义的模块,但是不需要apiVersion和kind了
- spec.template.metadata.labels: 注意这里的Pod的labels要和spec.selector相同,这样RC就可以来控制当前这个Pod了。
- #创建一个ReplicationController的横向扩展
- kubectl create -f rc_nginx.yml
- kubectl get pods
- kubectl get rc
通过delete pods 的方式删除一个容器,立刻就有一个新的容器起来
- kubectl get rc
- kubectl get pod
- kubectl delete pods nginx-h2qbt
- kubectl get pods
- kubectl get rc
- kubectl scale rc nginx --replicas=2
- kubectl get rc
- kubectl scale rc nginx --replicas=5
- kubectl get pods -o wide
Replication Set简称RS,随着Kubernetes的高速发展,官方已经推荐我们使用RS和Deployment来代替RC了,实际上RS和RC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持基于集合的selector(version in (v1.0, v2.0)),这对复杂的运维管理就非常方便了。
kubectl命令行工具中关于RC的大部分命令同样适用于我们的RS资源对象。不过我们也很少会去单独使用RS,它主要被Deployment这个更加高层的资源对象使用,除非用户需要自定义升级功能或根本不需要升级Pod,在一般情况下,我们推荐使用Deployment而不直接使用Replica Set。
这里总结下关于RC/RS的一些特性和作用:
- apiVersion: apps/v1
- kind: ReplicaSet
- metadata:
- name: nginx
- labels:
- tier: frontend
- spec:
- replicas: 3
- selector:
- matchLabels:
- tier: frontend
- template:
- metadata:
- name: nginx
- labels:
- tier: frontend
- spec:
- containers:
- - name: nginx
- image: nginx
- ports:
- - containerPort: 80
- #删除ReplicationController创建的pod
- kubectl delete -f rc_nginx.yml
- #创建一个ReplicationController的横向扩展
- kubectl create -f rs_nginx.yml
- kubectl get pods -o wide
- kubectl get pods
- kubectl get rc
通过delete pods 的方式删除一个容器,立刻就有一个新的容器起来
- kubectl get rs
- kubectl get pod
- kubectl delete pods nginx-h2qbt
- kubectl get pods
- kubectl get rs
- kubectl scale rs nginx --replicas=2
- kubectl get rs
- kubectl scale rs nginx --replicas=5
- kubectl get pods -o wide
通过这次了解了pod的扩展,ReplicaSet和ReplicationController的方式,基本上可以抛弃上次的直接pod的方式创建app了。下次说说Deployment。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。