Kubernetes(k8s)的RC(Replication Controller)副本控制器

本文介绍了Kubernetes的Replication Controller(RC)如何保证Pod的高可用,并通过标签选择器与Pod关联。详细阐述了RC的滚动升级过程,包括配置修改、镜像更新、私有仓库配置以及升级与回滚操作。
摘要由CSDN通过智能技术生成

1、RC(Replication Controller)副本控制器,Replication Controller的作用。

  应用托管在kubernetes之后,kubernetes需要保证应用能够持续运行,这是RC的工作内容,它会确保任何时间kubernetes中都有指定数量的Pod在运行。在此基础上,RC还提供了一些更高级的特性,比如滚动升级,升级回滚等等。

  通俗的理解就是,当将应用通过K8s运行起来之后,我们的k8s是需要保证容器一直处于持续运行,保证它的高可用,那么我们的RC就可以确保容器的高可用,RC的工作原理就是,RC是会一直监控我们的K8S容器,也就是说POD资源它的运行状态,一旦发现这个Pod资源有异常了,那么我们的RC就会控制k8s在其他的Node节点上启动一个新的Pod,以此来保证这个业务的高可用运行。RC除了保证Pod高可用之外,还提供了更高级的特性,比如滚动升级,升级回滚等等。

 

2、首先,查看你的k8s各个节点状态是否正常运行,然后创建一个rc的目录,用于存放RC(Replication Controller)的yaml配置文件。

 1 [root@k8s-master ~]# kubectl get nods
 2 the server doesn't have a resource type "nods"
 3 [root@k8s-master ~]# kubectl get node 
 4 NAME         STATUS    AGE
 5 k8s-master   Ready     6d
 6 k8s-node2    Ready     6d
 7 k8s-node3    Ready     6d
 8 [root@k8s-master ~]# kubectl get nodes
 9 NAME         STATUS    AGE
10 k8s-master   Ready     6d
11 k8s-node2    Ready     6d
12 k8s-node3    Ready     6d
13 [root@k8s-master ~]# clear
14 [root@k8s-master ~]# kubectl get componentstatus 
15 NAME                 STATUS    MESSAGE             ERROR
16 scheduler            Healthy   ok                  
17 controller-manager   Healthy   ok                  
18 etcd-0               Healthy   {
   "health":"true"}   
19 [root@k8s-master ~]# clear
20 [root@k8s-master ~]# cd k8s/
21 [root@k8s-master k8s]# ls
22 pod
23 [root@k8s-master k8s]# mkdir rc
24 [root@k8s-master k8s]# cd rc/
25 [root@k8s-master rc]# ls
26 [root@k8s-master rc]# vim nginx_rc_yaml
27 [root@k8s-master rc]# kubectl create -f nginx_rc_yaml 
28 replicationcontroller "myweb" created
29 [root@k8s-master rc]# kubectl get rc 
30 NAME      DESIRED   CURRENT   READY     AGE
31 myweb     2         2         1         13s
32 [root@k8s-master rc]# 

创建nginx_rc_yaml配置文件,配置内容,如下所示。

 1 # 声明api的版本。
 2 apiVersion: v1
 3 # kind代表资源的类型,资源是ReplicationController。
 4 kind: ReplicationController
 5 # 资源叫什么名字,是在其属性metadata里面的。
 6 metadata:
 7   # 第一个属性name的值是myweb,即ReplicationController的名字就叫做myweb。
 8   name: myweb
 9 # spec是详细,详细里面定义了一个容器。
10 spec:
11   # 声明副本数量是2,代表了RC会启动两个相同的Pod。
12   replicas: 2
13   # 选择器。
14   selector:
15     app: myweb
16   # Pod的启动模板,和Pod的yaml配置信息基本差不多的,几乎一样,但是这里没有名称,是因为两个Pod名称不能完全一样的。
17   # 没有指定名称,RC会随机生成一个名称。
18   template:
19     # 资源叫什么名字,是在其属性metadata里面的。但是这里让RC随机生成指定数量的名称。
20     metadata:
21       # 给Pod贴上了一个标签,标签是app: web,标签是有一定的作用的。
22       labels:
23         app: myweb
24     # spec是详细,详细里面定义了一个容器。
25     spec:
26       # 定义一个容器,可以声明多个容器的。
27       containers:
28         # 容器的名称叫做myweb
29         - name: myweb
30         # 使用了什么镜像,可以使用官方公有的,也可以使用私有的。
31           image: 192.168.110.133:5000/nginx:1.13
32         # ports定义容器的端口。
33           ports:
34         # 容器的端口是80,如果容器有多个端口,可以在后面接着写一行即可。
35             - containerPort: 80

配置,如下所示:

如果如何控制yaml的格式,可以使用notepad++的yaml语言格式,或者在线yaml解析,或者idea的yaml配置文件,idea的yaml配置文件也推荐使用哦。

创建好RC(Replication Controller)之后,可以进行检查。可以看到RC创建了两个Pod,可以查看一下Pod的数量和状态。

 1 [root@k8s-master rc]# kubectl get rc 
 2 NAME      DESIRED   CURRENT   READY     AGE
 3 myweb     2         2         1         7m
 4 [root@k8s-master rc]# kubectl get pods
 5 NAME          READY     STATUS             RESTARTS   AGE
 6 myweb-0hqc5   0/1       ImagePullBackOff   0          8m
 7 myweb-2np4k   1/1       Running            0          8m
 8 nginx         1/1       Running            1          3d
 9 test1         0/1       ImagePullBackOff   0          2d
10 test2         2/2       Running            1          2d
11 test4         1/1       Running            0          2d
12 [root@k8s-master rc]# 

很明显,我这里创建的两个Pod,有一个启动失败了。此时,我想将失败的Pod删除掉,但是我删除了一个,RC又帮助你启动了一个,嗯,真的是高可用啊,然后我将RC删除掉,这两个Pod就随着被删除掉了。

 1 [root@k8s-master ~]# kubectl get rc
 2 NAME      DESIRED   CURRENT   READY     AGE
 3 myweb     2         2         1         17m
 4 [root@k8s-master ~]# kubectl get pod -o wide
 5 NAME          READY     STATUS             RESTARTS   AGE       IP            NODE
 6 myweb-8cp7h   0/1       ImagePullBackOff   0          5m        172.16.85.3   k8s-master
 7 myweb-qcgjl   1/1       Running            1          14m       172.16.5.2    k8s-node2
 8 nginx         1/1       Running            2          3d        172.16.38.3   k8s-node3
 9 test1         0/1       ImagePullBackOff   0          2d        172.16.85.2   k8s-master
10 test2         2/2       Running            3          2d        172.16.38.2   k8s-node3
11 test4         1/1       Running            1          2d        172.16.5.3    k8s-node2
12 [root@k8s-master ~]# kubectl delete rc myweb
13 replicationcontroller "myweb" deleted
14 [root@k8s-master ~]# kubectl get rc
15 No resources found.
16 [root@k8s-master ~]# 

这里我将没有用的测试Pod都删除掉,因为我笔记本只有8g内存,可能内存不够用了。搞了一个小时,不是内存的问题,是之前部署k8s的时候,测试nginx的时候将nginx拼错了,尴尬。

1 [root@k8s-node2 ~]# docker images
2 REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZE
3 docker.io/busybox                         latest              1c35c4412082        8 days ago          1.22 MB
4 192.168.110.133:5000/nginx                1.13                ae513a47849c        2 years ago         109 MB
5 docker.io/nginx                           1.13                ae513a47849c        2 years ago         109 MB
6 192.168.110.133:5000/pod-infrastructure   latest              34d3450d733b        3 years ago         205 MB
7 docker.io/tianyebj/pod-infrastructure     latest              34d3450d733b        3 years ago         205 MB
8 [root@k8s-node2 ~]# 

而我的RC的yaml的配置文件,如下所示:

 1 Version: v1
 2 kind: ReplicationController
 3 metadata:
 4   name: myweb
 5 spec:
 6   replicas: 2
 7   selector:
 8     app: myweb
 9   template:
10     metadata:
11       labels:
12         app: myweb
13     spec:
14       containers:
15         - name: myweb
16           image: 192.168.110.133:5000/nginx:1.13
17           # imagePullPolicy: IfNotPresent
18           ports:
19             - containerPort: 80

但是主节点的docker镜像是192.168.110.133:5000/ngnix,造成了每次创建RC,在主节点的Pod都无法启动,尴尬,还排查了这么久

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值