Replication Controller簡稱RC,它能夠保證Pod持續運行,並且在任何時候都有指定數量的Pod副本,在此基礎上提供一些高級特性,比如滾動升級和彈性伸縮
它在k8s中的架構如圖:
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