赞
踩
前面我们一起学习了pod的原理和一些基本使用,但是在实际使用的时候并不会直接使用pod,而是会使用各种控制器来满足我们的需求,kubernetes中运行了一系列控制器来确保集群的当前转台与期望状态保持一致,他们就是kubernetes的大脑,例如,replicaset控制器负责维护集群汇总运行的pod数量,node控制器负责监控节点的状态,并在节点出现故障时及时作出相应,总而言之,在kubernetes中,每个控制器只负责某种类型的特定资源。
控制器 kubernetes控制器会监听资源的 创建/更新/删除事件,并出发reconcile函数作为响应, 调整过程称为reconcile loop 调谐循环,或者sync loop 同步循环,reconcile是一个使用资源对象的命名空间和资源对象名称来调用的函数,使得资源对象的实际状态与资源清单中定义的状态保持一致,调用完成后,reconcile会将资源对象的状态更新为当前实际状态,就是kubernetes项目中的一个通用编排模式,控制循环control loop
repliaSet
RS 的主要作用就是维持一组pod副本的运行,保证一定数量的pod的集群中正常运行,replicaset控制器会将持续监听,控制这些pod的运行状态,pod发送故障数量减少或者增加时会触发调用过程,始终保持一定副本数量
- apiVersion: app/v1
- kind: ReplicaSet
- metadata:
- name: nginx-rs
- namespace: dafault
- spec:
- replicas:3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- images: nginx
- ports:
- - containerPort: 80
-
上面的yaml文件结构和我们之前定义的pod看上去没太大两样,有常见的apiVersion ,kind,metadata,在spec下面描述的replicaSet的基本信息,其中包含三个重要内容
replicas 表示期望的pod的基本数量
selector :Label Selector用来匹配要控制的pod标签,需要和下面的pod模板中的标签一致
template: pod模板,实际上就是以前我们定义的pod内容,相当于pod的描述以模板的形式嵌入到replicaset中来
pod模板 template 这个概念非常重要,因为后面我们讲解到的大多数控制器都会使用pod模板来统一定义它所要管理的pod
通过查看rs kubectl get rs nginx-rs 可以看到当前资源对象的描述信息,包括SESIRED CURRENT READY 的状态值,创建完成后
kubectl get pods -l app=nginx
查看pod状态,selector选中,matchLabels。 -l app=nginx ,创建是使用的是默认的namespace:dafault,此处不需要代 -n
可以看到现在有3个pod,这三个pod就是我们在RS声明的副本数 replicas:3
可以看出又重新出现了一个pod,这个就是上面我们说的replicaSet控制器为我们做的工作,我们在yaml文件中声明了3个副本,然后删除了一个副本,这时候pod,DESIRED和CURRENT不一致,所以就需要启动一个新的pod来保持三个副本,这个过程上面我们说了就是调谐的过程,同样可以查看RS的描述信息来查看到相关的事件信息
- [root@master1 ~]# kubectl describe rs nginx-rs
- Name: nginx-rs
- Namespace: default
- Selector: app=nginx
- Labels: <none>
- Annotations: <none>
- Replicas: 3 current / 3 desired
- Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
- Pod Template:
- Labels: app=nginx
- Containers:
- nginx:
- Image: nginx
- Port: 80/TCP
- Host Port: 0/TCP
- Environment: <none>
- Mounts: <none>
- Volumes: <none>
- Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal SuccessfulCreate 44m replicaset-controller Created pod: nginx-rs-6pgn4
- Normal SuccessfulCreate 44m replicaset-controller Created pod: nginx-rs-vrn6z
- Normal SuccessfulCreate 44m replicaset-controller Created pod: nginx-rs-rwnnm
- Normal SuccessfulCreate 43m replicaset-controller Created pod: nginx-rs-529q6
可以发现最开始通过replicaSet控制器创建了3个pod,后面我们删除了pod后,replicaSet控制器又为我们创建了一个pod,和上面我们的描述是一致的,如果这个时候我们吧RS 资源对象replicas改为2
可以看到replicaSet控制器在发现我们的资源声明中副本数变为2后,就主动删除了一个pod,这样副本数就和期望保持一致了
我们可以查看一个pod的描述信息可以看到这个pod的所属控制器信息。另外被replicaSet持有的pod有一个metadata.ownerReferences指针指向当前的replicaSet,表示当前的pod的所有者,这个引用主要会被集群中的垃圾收集器使用以清理丢失所有者的pod对象,这个ownerRefences和数据库中的外键是不是非常类似。
如果要彻底删除pod,我们就只能删除RS对象
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。