一.系統環境
伺服器版本 | docker軟體版本 | Kubernetes(k8s)叢集版本 | CPU架構 |
---|---|---|---|
CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | v1.21.9 | x86_64 |
Kubernetes叢集架構:k8scloude1作為master節點,k8scloude2,k8scloude3作為worker節點
伺服器 | 作業系統版本 | CPU架構 | 程式 | 功能描述 |
---|---|---|---|---|
k8scloude1/192.168.110.130 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master節點 |
k8scloude2/192.168.110.129 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker節點 |
k8scloude3/192.168.110.128 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker節點 |
二.前言
使用ReplicationController的前提是已經有一套可以正常執行的Kubernetes叢集,關於Kubernetes(k8s)叢集的安裝部署,可以檢視部落格《Centos7 安裝部署Kubernetes(k8s)叢集》https://www.cnblogs.com/renshengdezheli/p/16686769.html。
三.ReplicationController概覽
ReplicationController 確保在任何時候都有特定數量的 Pod 副本處於執行狀態。 換句話說,ReplicationController 確保一個 Pod 或一組同類的 Pod 總是可用的。
注意
:對於ReplicationController,現在更推薦使用配置 ReplicaSet 的 Deployment 來建立副本管理機制。關於deployment控制器的詳細內容,請檢視部落格《Kubernetes(k8s)控制器(一):deployment》。
四.ReplicationController工作機制
當 Pod 數量過多時,ReplicationController 會終止多餘的 Pod。當 Pod 數量太少時,ReplicationController 將會啟動新的 Pod。 與手動建立的 Pod 不同,由 ReplicationController 建立的 Pod 在失敗、被刪除或被終止時會被自動替換。 例如,在中斷性維護(如核心升級)之後,你的 Pod 會在節點上重新建立。 因此,即使你的應用程式只需要一個 Pod,你也應該使用 ReplicationController 建立 Pod。 ReplicationController 類似於程式管理器,但是 ReplicationController 不是監控單個節點上的單個程式,而是監控跨多個節點的多個 Pod。
ReplicationController 通常縮寫為 "rc",並作為 kubectl 命令的快捷方式。
一個簡單的示例是建立一個 ReplicationController 物件來可靠地無限期地執行 Pod 的一個例項。 更複雜的用例是執行一個多副本服務(如 web 伺服器)的若干相同副本。
五.建立ReplicationController
配置ReplicationController,replicas: 3 指定3個副本。
[root@k8scloude1 daemonset]# vim ReplicationController.yaml
[root@k8scloude1 daemonset]# cat ReplicationController.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 0
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
建立replicationcontroller
[root@k8scloude1 daemonset]# kubectl apply -f ReplicationController.yaml
replicationcontroller/rc created
[root@k8scloude1 daemonset]# kubectl get rc
NAME DESIRED CURRENT READY AGE
rc 3 3 3 11s
檢視pod,發現有3個pod
[root@k8scloude1 daemonset]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-ddtpl 1/1 Running 0 28s 10.244.251.225 k8scloude3 <none> <none>
rc-dlzzj 1/1 Running 0 28s 10.244.112.170 k8scloude2 <none> <none>
rc-mw8dw 1/1 Running 0 28s 10.244.112.171 k8scloude2 <none> <none>
六.擴充套件replicationcontroller副本數
透過kubectl scale rc 擴充套件replicationcontroller副本數,--replicas=5 設定pod副本數為5
[root@k8scloude1 daemonset]# kubectl scale rc rc --replicas=5
replicationcontroller/rc scaled
現在有5個pod了
[root@k8scloude1 daemonset]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-ddtpl 1/1 Running 0 68s 10.244.251.225 k8scloude3 <none> <none>
rc-dlzzj 1/1 Running 0 68s 10.244.112.170 k8scloude2 <none> <none>
rc-gc8n5 1/1 Running 0 3s 10.244.251.226 k8scloude3 <none> <none>
rc-mw8dw 1/1 Running 0 68s 10.244.112.171 k8scloude2 <none> <none>
rc-s2l7z 1/1 Running 0 3s 10.244.112.172 k8scloude2 <none> <none>
[root@k8scloude1 daemonset]# kubectl get rc
NAME DESIRED CURRENT READY AGE
rc 5 5 5 72s
設定pod副本數為1
[root@k8scloude1 daemonset]# kubectl scale rc rc --replicas=1
replicationcontroller/rc scaled
[root@k8scloude1 daemonset]# kubectl get rc
NAME DESIRED CURRENT READY AGE
rc 1 1 1 103s
刪除replicationcontroller
[root@k8scloude1 daemonset]# kubectl delete rc rc
replicationcontroller "rc" deleted
[root@k8scloude1 daemonset]# kubectl get rc
No resources found in daemonset namespace.