Kubernetes(k8s)控制器(三):ReplicationController

人生的哲理發表於2023-02-09

一.系統環境

伺服器版本 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.

相關文章