Replicationcontroller资源简称rc资源
RC资源介绍
保证指定数量的pod始终存活
通过标签选择器来关联pod
可以实现升级与回滚
创建RC资源
创建资源前同样需要yaml文件,先写入一个要使用的yaml文件:
vim nginx-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mynginx
spec:
replicas: 2
selector: ###标签选择器
app: myweb ###rc根据这个标签识别自己的pod资源,严格控制pod数量
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: 10.0.0.11:5000/nginx:latest
ports:
- containerPort: 80
创建rc资源
[root@master rc]# kubectl create -f nginx-rc.yaml
replicationcontroller "mynginx" created
#查看一下rc资源
[root@master rc]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mynginx 2 2 2 14s
#查看详细信息
[root@master rc]# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR
mynginx 2 2 2 53s myweb 10.0.0.11:5000/nginx:latest app=myweb
#查看pod资源
[root@master rc]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mynginx-qbc47 1/1 Running 0 1m 172.16.43.3 10.0.0.12
mynginx-z4j5z 1/1 Running 0 1m 172.16.17.2 10.0.0.13
nginx01 1/1 Running 0 36m 172.16.43.2 10.0.0.12
可以看到yaml内要创建俩个不同随机名字的pod已经正常创建,这时我们删除其中一个rc内的pod会自动重新生成一个pod资源进行补位
RC的滚动升级与一件回滚
使用edit可以修改rc内资源
[root@master rc]# kubectl edit rc mynginx
replicationcontroller "mynginx" edited
这里修改了副本数,直接从2改成了5,然后查看一下pod资源情况
[root@master rc]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mynginx-6ftfv 1/1 Running 0 2m 172.16.43.4 10.0.0.12
mynginx-dl0sl 1/1 Running 0 2m 172.16.17.3 10.0.0.13
mynginx-fbg9r 1/1 Running 0 2m 172.16.17.4 10.0.0.13
mynginx-qbc47 1/1 Running 0 20m 172.16.43.3 10.0.0.12
mynginx-z4j5z 1/1 Running 0 20m 172.16.17.2 10.0.0.13
nginx01 1/1 Running 0 56m 172.16.43.2 10.0.0.12
[root@master rc]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mynginx 5 5 5 20m
立马由2个升级为5个了
升级实验
实验前先做好准备
前面启动的所有pod资源都是使用nginx,这里准备升级nginx来达到升级实验的演示
之前使用的nginx镜像是1.13版本的,要达到升级目的需要先下载高版本的镜像
![](https://img.haomeiwen.com/i18109062/0b811d164cf0a695.png)
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.11:5000/busybox latest 83aa35aa1c79 3 weeks ago 1.22 MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22 MB
10.0.0.11:5000/nginx latest 40960efd7b8f 2 years ago 108 MB
nginx latest 40960efd7b8f 2 years ago 108 MB
registry latest a07e3f32a779 2 years ago 33.3 MB
10.0.0.11:5000/pod-infrastructure latest 34d3450d733b 3 years ago 205 MB
docker.io/tianyebj/pod-infrastructure latest 34d3450d733b 3 years ago 205 MB
由于我没有版本的镜像,pull也pull不下来,所以这里我打算直接在标签上做手脚
直接把标签打成要升级的版本号
[root@master ~]# docker tag nginx:latest 10.0.0.11:5000/nginx:1.15
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.11:5000/busybox latest 83aa35aa1c79 3 weeks ago 1.22 MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22 MB
10.0.0.11:5000/nginx 1.15 40960efd7b8f 2 years ago 108 MB
10.0.0.11:5000/nginx latest 40960efd7b8f 2 years ago 108 MB
nginx latest 40960efd7b8f 2 years ago 108 MB
registry latest a07e3f32a779 2 years ago 33.3 MB
10.0.0.11:5000/pod-infrastructure latest 34d3450d733b 3 years ago 205 MB
docker.io/tianyebj/pod-infrastructure latest 34d3450d733b 3 years ago 205 MB
直接推到仓库中
[root@master ~]# docker push 10.0.0.11:5000/nginx:1.15
The push refers to a repository [10.0.0.11:5000/nginx]
f4cc3366d6a9: Layer already exists
bba7659ae2e7: Layer already exists
cec7521cdf36: Layer already exists
1.15: digest: sha256:278fefc722ffe1c36f6dd64052758258d441dcdb5e1bbbed0670485af2413c9f size: 948
准备好要升级的nginx版本的yaml文件,注意和旧版本做好区分
vim nginx-rc1.15.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mynginx1 #名字一定不能重复
spec:
replicas: 5 #数量要和旧版保持一致
selector:
app: myweb2 #标签名也不可以重复
template:
metadata:
labels:
app: myweb2
spec:
containers:
- name: myweb2
image: 10.0.0.11:5000/nginx:1.15 # 版本名不可以重复
ports:
- containerPort: 80
使用命令kubectl rolling-update mynginx -f nginx-rc1.15.yaml --update-period=10s
开始升级
命令释解:rolling-update升级命令 + 要升级的rc资源 -f 指定要使用的yaml文件 --update-period=10s 间隔10秒升级一个pod资源
[root@master rc]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mynginx1-5z1jv 1/1 Running 0 3m 172.16.17.4 10.0.0.13
mynginx1-6xtkz 1/1 Running 0 4m 172.16.17.5 10.0.0.13
mynginx1-k5gwp 1/1 Running 0 4m 172.16.43.5 10.0.0.12
mynginx1-v3scb 1/1 Running 0 4m 172.16.17.3 10.0.0.13
mynginx1-wg1j4 1/1 Running 0 4m 172.16.43.4 10.0.0.12
nginx01 1/1 Running 0 1h 172.16.43.2 10.0.0.12
回滚命令kubectl rolling-update mynginx1 -f nginx-rc.yaml --update-period=10s
和升级一个原理,这里不做演示
网友评论