linuxea:kubernetes pod控制器ReplicaSet(9)

在之前,使用kubectl run的pod中,当pod被删除后会自动创建。而在kubectl create使用-f指定yaml文件时候,在删除则不会被创建。
在kubectl run的pod是被控制器管理的,pod控制会严格管控pod资源符合用户期望的目标状态,如:定义了3个pod资源,一旦缺少必然会重建补全,多余也会杀死终止,一旦故障尝试重启或者编排。倘若希望减少是可以用命令定义缩减。
然而使用create -f NAME.yaml的方式清晰简单,可定义想要的方式

ReplicaSet

replicaset:代用户创建指定的pod副本,并确保pod副本一直满足与用户期望的状态,并且支持扩展和缩容。
replicaset由三个部分组成,分别是"用户期望副本数","标签选择器"(选择和管理副本),"pod资源模板"。当用户创建副本后,标签选择根据信息创建pod副本,一旦pod副本缺少或者超出,则使用第三个组成部分"pod资源模板",根据pod资源模板进行扩展或者缩容

create一个模板

[root@linuxea linuxea]# cat replicaset.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: linuxea.com
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: linuxea.com
      release: v1
  template:
    metadata:
      name: linuxea.com-pod
      labels:
        app: linuxea.com
        release: v1
    spec:
      containers:
      - name: linuxea-container
        image: marksugar/nginx:1.14.b
        imagePlull: 
        ports: 
        - name: http
          containerPort: 80

这里使用逻辑域,加上matchLabels字段。selector必须匹配有app标签,name必须是linuxea.com,有release表情,那么值必须是v1
template的labels字段最好和selector中一样

[root@linuxea linuxea]# kubectl describe pods linuxea.com-8fkl2
Name:               linuxea.com-8fkl2
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               linuxea.node-2.com/10.10.240.203
Start Time:         Thu, 30 Aug 2018 13:41:01 +0100
Labels:             app=linuxea.com
                    release=v1
Annotations:        <none>
Status:             Running
IP:                 172.16.2.28
Controlled By:      ReplicaSet/linuxea.com
[root@linuxea linuxea]# curl 172.16.2.28
linuxea-linuxea.com-8fkl2.com-127.0.0.1/8 172.16.2.28/24
[root@linuxea linuxea]# curl 172.16.2.28/linuxea.html
linuxea-linuxea.com-8fkl2.com ▍ b9415aba0478a ▍version number 2.0

倘若此刻删除则会补全这个pod

[root@linuxea linuxea]# kubectl delete pods linuxea.com-v4l9h
pod "linuxea.com-v4l9h" deleted
[root@linuxea linuxea]# kubectl get pods -o wide --show-labels
NAME                             READY     STATUS    RESTARTS   AGE       IP             NODE                 NOMINATED NODE   LABELS
client-linuxea                   1/1       Running   0          6d        172.16.2.252   linuxea.node-2.com   <none>           run=client-linuxea
linuxea.com-8fkl2                1/1       Running   0          9m        172.16.2.28    linuxea.node-2.com   <none>           app=linuxea.com,release=v1
linuxea.com-bbzf2                1/1       Running   0          3m        172.16.3.32    linuxea.node-3.com   <none>           app=linuxea.com,release=v1

此刻若要扩展编辑yaml文件即可

[root@linuxea linuxea]# kubectl get rs
NAME                       DESIRED   CURRENT   READY     AGE
linuxea.com                2         2         2         27m
nginx-linuxea-5786698598   3         3         3         4d

使用 kubectl edit rs linuxea.com编辑,修改replicas数量即可

spec:
  replicas: 5

如下,此刻已经被扩展

[root@linuxea linuxea]# kubectl edit rs linuxea.com
replicaset.extensions/linuxea.com edited
[root@linuxea linuxea]# kubectl get pods -o wide
NAME                             READY     STATUS    RESTARTS   AGE       IP             NODE                 NOMINATED NODE
client-linuxea                   1/1       Running   0          6d        172.16.2.252   linuxea.node-2.com   <none>
linuxea.com-8fkl2                1/1       Running   0          27m       172.16.2.28    linuxea.node-2.com   <none>
linuxea.com-bbzf2                1/1       Running   0          22m       172.16.3.32    linuxea.node-3.com   <none>
linuxea.com-httpget              1/1       Running   2          3d        172.16.2.12    linuxea.node-2.com   <none>
linuxea.com-httpget-readiness    1/1       Running   0          2d        172.16.3.30    linuxea.node-3.com   <none>
linuxea.com-l9vwg                1/1       Running   0          9s        172.16.2.29    linuxea.node-2.com   <none>
linuxea.com-mml4h                1/1       Running   0          9s        172.16.3.33    linuxea.node-3.com   <none>
linuxea.com-vsn5l                1/1       Running   0          9s        172.16.1.33    linuxea.node-1.com   <none>

倘若需要修改image的版本,也可以如此

    spec:
      containers:
      - image: marksugar/nginx:1.14.a
[root@linuxea linuxea]# kubectl get rs -o wide
NAME                       DESIRED   CURRENT   READY     AGE       CONTAINERS          IMAGES                   SELECTOR
linuxea.com                5         5         5         38m       linuxea-container   marksugar/nginx:1.14.a   app=linuxea.com,release=v1

不过,这里修改的v1,只有重新创建才会生效,并不会立刻生效
此刻删除一个则会生效

[root@linuxea linuxea]# kubectl delete pods linuxea.com-l9vwg
pod "linuxea.com-l9vwg" deleted
[root@linuxea linuxea]# kubectl get pods -o wide
NAME                             READY     STATUS    RESTARTS   AGE       IP             NODE                 NOMINATED NODE
client-linuxea                   1/1       Running   0          6d        172.16.2.252   linuxea.node-2.com   <none>
linuxea.com-8f7b8                1/1       Running   0          45s       172.16.2.30    linuxea.node-2.com   <none>

在去curl已经完成修改

[root@linuxea linuxea]# curl  172.16.2.30/linuxea.html
linuxea-linuxea.com-8f7b8.com ▍ e58a6cb7d33c3 ▍version number 1.0

这就类似与灰度更新,倘若使用标签选择器进行修改和多次i修改即可变成蓝绿发布类型,但是其中必然涉及到太多的设计与参与,那么Deployment就可以,Deployment在下篇

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2018-09-13分类: kubernetes

标签: kubernetes

发表评论