Kuberbetes之 ReplicationController

Replication Controller簡稱RC,它能夠保證Pod持續運行,並且在任何時候都有指定數量的Pod副本,在此基礎上提供一些高級特性,比如滾動升級和彈性伸縮

它在k8s中的架構如圖:

Kuberbetes之 ReplicationController

RC會在每個節點上創建Pod,Pod上如果有相應的Images可以直接創建,如果沒有,則會拉取這個鏡像再進行創建


一個replicationControl有三個主要部分

label selector 用於確定replicationControl作用域中有哪些pod

replica count 副本個數,指定應運行的pod數量

pod template pod模板用於創建新得pod副本

[root@kbs1 yml]# cat jianrc.yml

apiVersion: v1

kind: ReplicationController

metadata:

name: jian-mariadb

spec:

replicas: 2

selector:

app : jian-mariadb

template:

metadata:

labels:

app: jian-mariadb

spec:

containers:

- name: mysql-jian-image

image: mysql_slave

imagePullPolicy: Never

ports:

- containerPort: 3306


[root@kbs1 yml]# kubectl create -f jianrc.yml

replicationcontroller/jian-mariadb created


[root@kbs1 yml]# kubectl get pods -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

jian-mariadb-589sg 1/1 Running 0 2m42s 172.30.80.3 192.168.135.197

jian-mariadb-s4dj5 1/1 Running 0 2m42s 172.30.89.2 192.168.135.196

[root@kbs1 yml]# kubectl get rc

NAME DESIRED CURRENT READY AGE

jian-mariadb 2 2 2 3m6s

[root@kbs1 yml]# kubectl describe rc jian-mariadb

Name: jian-mariadb

Namespace: default

Selector: app=jian-mariadb

Labels: app=jian-mariadb

Annotations:

Replicas: 2 current / 2 desired

Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed

Pod Template:

Labels: app=jian-mariadb

Containers:

mysql-jian-image:

Image: mysql_slave

Port: 3306/TCP

Host Port: 0/TCP

Environment:

Mounts:

Volumes:

Events:

Type Reason Age From Message

---- ------ ---- ---- -------

Normal SuccessfulCreate 3m22s replication-controller Created pod: jian-mariadb-s4dj5

Normal SuccessfulCreate 3m22s replication-controller Created pod: jian-mariadb-589sg


刪除podreplicationCotroller會自動創建新的pod

[root@kbs1 yml]# kubectl get pods -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

jian-mariadb-589sg 1/1 Running 0 3m51s 172.30.80.3 192.168.135.197

jian-mariadb-s4dj5 1/1 Running 0 3m51s 172.30.89.2 192.168.135.196

[root@kbs1 yml]# kubectl delete pod jian-mariadb-s4dj5

pod "jian-mariadb-s4dj5" deleted

[root@kbs2 ~]# kubectl get pods -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

jian-mariadb-589sg 1/1 Running 0 4m35s 172.30.80.3 192.168.135.197

jian-mariadb-5vfrv 1/1 Running 0 29s 172.30.89.3 192.168.135.196

jian-mariadb-s4dj5 1/1 Terminating 0 4m35s 172.30.89.2 192.168.135.196

[root@kbs1 yml]# kubectl get pods -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

jian-mariadb-589sg 1/1 Running 0 5m 172.30.80.3 192.168.135.197

jian-mariadb-5vfrv 1/1 Running 0 54s 172.30.89.3 192.168.135.196

將pod移出replicationcontroller

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-589sg 1/1 Running 0 8m18s app=jian-mariadb

jian-mariadb-5vfrv 1/1 Running 0 4m12s app=jian-mariadb

[root@kbs1 yml]# kubectl label pod jian-mariadb-5vfrv env=dev

pod/jian-mariadb-5vfrv labeled

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-589sg 1/1 Running 0 8m36s app=jian-mariadb

jian-mariadb-5vfrv 1/1 Running 0 4m30s app=jian-mariadb,env=dev

[root@kbs1 yml]# kubectl label pod jian-mariadb-5vfrv app=jian-mariadb-test --overwrite

pod/jian-mariadb-5vfrv labeled

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-589sg 1/1 Running 0 9m43s app=jian-mariadb

jian-mariadb-5vfrv 1/1 Running 0 5m37s app=jian-mariadb-test,env=dev

jian-mariadb-q7thx 0/1 ContainerCreating 0 2s app=jian-mariadb


刪除一個pod又會恢復正常的兩個pod

[root@kbs1 yml]# kubectl delete pod jian-mariadb-589sg

pod "jian-mariadb-589sg" deleted

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-5vfrv 1/1 Running 0 16m app=jian-mariadb,env=dev

jian-mariadb-hbjcg 1/1 Running 0 67s app=jian-mariadb


修改副本數

[root@kbs1 yml]# kubectl scale rc jian-mariadb --replicas=4

replicationcontroller/jian-mariadb scaled

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-5vfrv 1/1 Running 0 21m app=jian-mariadb,env=dev

jian-mariadb-74qrm 1/1 Running 0 2m52s app=jian-mariadb

jian-mariadb-hbjcg 1/1 Running 0 5m54s app=jian-mariadb

jian-mariadb-jsz7g 1/1 Running 0 2s app=jian-mariadb

[root@kbs1 yml]# kubectl scale rc jian-mariadb --replicas=2

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-5vfrv 1/1 Running 0 22m app=jian-mariadb,env=dev

jian-mariadb-hbjcg 1/1 Running 0 6m37s app=jian-mariadb


刪除rc不刪除pod

[root@kbs1 yml]# kubectl delete rc jian-mariadb --cascade=false

replicationcontroller "jian-mariadb" deleted

[root@kbs1 yml]# kubectl get rc

No resources found.

[root@kbs1 yml]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

jian-mariadb-5vfrv 1/1 Running 0 42m app=jian-mariadb,env=dev

jian-mariadb-hbjcg 1/1 Running 0 27m app=jian-mariadb


分享到:


相關文章: