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
apiVersion: vl
kind: Replicationcontroller
metadata:
name: kubia
spec:
replicas: 3
selector:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
ports:
- containerPort: 8080
通过kubectl get命令显示的关于ReplicationController的信息
kubectl get rc
kubectl get replicationcontroller
通过kubectl describe查看附加信息
kubectl describe rc kubia
通过更改pod的标签, 可以将它从ReplicationController的作用域中添加或删除,甚至移动到另外一个ReplicationController
ReplicationController 的 pod 模板可以随时修改,但是只会影响后面新建的 Pod。如果需要修改旧的Pod,要将Pod删除,ReplicationController会自动根据新的模板创建Pod来替代。
通过修改replicas字段,可以实现水平缩放pod
kubectl scale rc kubia --replicas=lO
也可以通过下面命令打开编辑器直接修改声明
kubectl edit rc kubia
通过 kubectl delete 删除 ReplicationController 时, pod 也会被删除
kubectl delete rc kubia
但是由于由 ReplicationController 创建的 pod 不是 ReplicationController 的组成部分, 只是由其进行管理, 因此可以只删除 ReplicationController 并保待 pod 运行。
kubectl delete rc kubia --cascade=false
ReplicaSet
它是新一代的ReplicationController, ReplicationController会被弃用。ReplicaSet 的行为与 ReplicationController 完全相同, 但 pod 选择器的表达能力 更强。
通常不会直接创建ReplicaSet, 而是在创建更高层级的 Deployment 资源时自动创建。
注意:ReplicaSet不是v1 API的一部分,因此需要确保在创建资源时指定正确的apiVersion
# 与ReplicationController的定义基本相同,唯一的区别在选择器中。
apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchLabels:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
ports:
- containerPort: 8080
除了matchLabels之外,还支持matchExpressions表达式。operator支持4中运算符:In, NotIn, Exists, DoesNotExist
selector:
matchExpression:
- key: app
operator: In
values:
- kubia
删除ReplicaSet会删除所有的pod
kubectl delete rs kubia
图书资料: