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

图书资料: