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

时间:2023-02-09 07:14:56

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