Kubernetes in Action笔记 - (6) ReplicationController和ReplicationSet
文章目录
托管的Pod
如果是直接创建Pod,当节点失效,这个Pod就会丢失。
如果是通过ReplicationController或者Deployment等资源来创建的,那就属于托管的资源。k8s集群会管理并检测它的运行状态,当一些意外情况发生的,k8s会自动采取应对措施。
ReplicationController
ReplicationController是一种k8s资源,会持续监控正在运行的pod列表, 并保证相应类型的pod的数目与期望相符。
一个ReplicationController有三个主要部分:
- label selector (标签选择器), 用于确定ReplicationController作用域中有哪些pod
- replica count (副本个数), 指定应运行的pod 数量
- pod template (pod模板), 用于创建新的pod 副本
使用 ReplicationController 的好处:
- 确保一个 pod (或多个 pod 副本)持续运行, 方法是在现有 pod 丢失时启动一个新 pod 。
- 集群节点发生故障时, 它将为故障节点上运行的所有 pod (即受ReplicationController 控制的节点上的那些 pod) 创建替代副本。
- 它能轻松实现 pod 的水平伸缩,手动和自动都可以
创建一个ReplicationController
1apiVersion: vl
2kind: Replicationcontroller
3metadata:
4 name: kubia
5spec:
6 replicas: 3
7 selector:
8 app: kubia
9 template:
10 metadata:
11 labels:
12 app: kubia
13 spec:
14 containers:
15 - name: kubia
16 image: luksa/kubia
17 ports:
18 - containerPort: 8080
通过kubectl get命令显示的关于ReplicationController的信息
1kubectl get rc
2
3kubectl get replicationcontroller
通过kubectl describe查看附加信息
1kubectl describe rc kubia
通过更改pod的标签, 可以将它从ReplicationController的作用域中添加或删除,甚至移动到另外一个ReplicationController
ReplicationController 的 pod 模板可以随时修改,但是只会影响后面新建的 Pod。如果需要修改旧的Pod,要将Pod删除,ReplicationController会自动根据新的模板创建Pod来替代。
通过修改replicas字段,可以实现水平缩放pod
1kubectl scale rc kubia --replicas=lO
也可以通过下面命令打开编辑器直接修改声明
1kubectl edit rc kubia
通过 kubectl delete 删除 ReplicationController 时, pod 也会被删除
1kubectl delete rc kubia
但是由于由 ReplicationController 创建的 pod 不是 ReplicationController 的组成部分, 只是由其进行管理, 因此可以只删除 ReplicationController 并保待 pod 运行。
1 kubectl delete rc kubia --cascade=false
ReplicaSet
它是新一代的ReplicationController, ReplicationController会被弃用。ReplicaSet 的行为与 ReplicationController 完全相同, 但 pod 选择器的表达能力 更强。
通常不会直接创建ReplicaSet, 而是在创建更高层级的 Deployment 资源时自动创建。
注意:ReplicaSet不是v1 API的一部分,因此需要确保在创建资源时指定正确的apiVersion
1# 与ReplicationController的定义基本相同,唯一的区别在选择器中。
2apiVersion: apps/v1beta2
3kind: ReplicaSet
4metadata:
5 name: kubia
6spec:
7 replicas: 3
8 selector:
9 matchLabels:
10 app: kubia
11 template:
12 metadata:
13 labels:
14 app: kubia
15 spec:
16 containers:
17 - name: kubia
18 image: luksa/kubia
19 ports:
20 - containerPort: 8080
除了matchLabels之外,还支持matchExpressions表达式。operator支持4中运算符:In, NotIn, Exists, DoesNotExist
1selector:
2 matchExpression:
3 - key: app
4 operator: In
5 values:
6 - kubia
删除ReplicaSet会删除所有的pod
1kubectl delete rs kubia
图书资料: