一.rc控制器
replicationcontroller控制器资源,简称:rc控制器
简单理解,rc控制器就是控制相同的pod副本数量
使用rc控制器资源创建pod,就可以设定创建pod的数量
如果 ReplicationController 的标签为空,则这些标签默认为与副本控制器管理的 Pod 相同。
1.rc控制器资源管理
编辑rc资源清单
[root@master 0720]# cat rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc
spec:
replicas: 3
selector:
testt: testt
template:
metadata:
name: pod00
labels:
testt: testt
spec:
containers:
- name: demo000
image: nginx:1.20.1-alpine
ports:
- containerPort: 80
创建查看rc资源
[root@master 0720]# kubectl apply -f rc.yaml
replicationcontroller/rc created
[root@master 0720]# kubectl get rc
NAME DESIRED CURRENT READY AGE
rc 3 3 3 16s
删除rc资源
[root@master 0720]# kubectl delete rc rc
replicationcontroller "rc" deleted
注:若只pod而不删除rc控制器,pod会重新拉起
rc控制器创建的pod是按照标签进行副本数量控制的
rc控制器资源创建的pod,直接删除pod,还会重新拉起,只有删除rc资源,pod才会消失
修改rc资源,需要重新编rc资源清单,再次apply就可以修改了
2.rc控制器资源实现业务的升级与回滚
·模拟2个版本的镜像
1.第一个镜像
·编辑dockerfile
[root@master 0720]# cat Dockerfile
FROM nginx:1.20.1-alpine
COPY code/v1 /usr/share/nginx/html/index.html
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
·编辑index文件
[root@master 0720]# cat code/v1
v1: first
·构建镜像推送到harbor仓库
[root@master 0720]# cat 1.sh
#!/bin/bash
docker login -u admin -p 111aaa.. harbor.test.com
docker image build -t harbor.test.com/test/nginx:v1 .
docker push harbor.test.com/test/nginx:v1
[root@master 0720]# sh 1.sh
2.第二个镜像
· 编辑dockerfile
[root@master 0720]# cat Dockerfile
FROM nginx:1.20.1-alpine
COPY code/v2 /usr/share/nginx/html/index.html
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
·编辑index文件
[root@master 0720]# cat 1.sh
#!/bin/bash
docker login -u admin -p 111aaa.. harbor.test.com
docker image build -t harbor.test.com/test/nginx:v2 .
docker push harbor.test.com/test/nginx:v2
·构建镜像推送到harbor仓库
[root@master 0720]# sh 1.sh
·编辑rc、svc资源清单
[root@master 0720]# cat rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-nginx
spec:
#控制pod的副本数量
replicas: 3
#选择要创建副本的pod的标签(关联pod标签,把谁的副本设置成n个呀?)
selector:
testa: testa
#下面就是你要控制的pod了(就是pod资源的编辑);
template:
metadata:
name: pod-nginx
labels:
testa: testa
spec:
containers:
- name: c1
image: harbor.test.com/test/nginx:v1
ports:
- containerPort: 80
command:
- "nginx"
- "-g"
- "daemon off;"
---
#编辑service资源用于外部访问
apiVersion: v1
kind: Service
metadata:
name: svc-rc-nginx
spec:
type: NodePort
clusterIP: 10.200.10.10
selector:
testa: testa
ports:
- port: 88
targetPort: 80
nodePort: 30001
·创建rc、svc资源
[root@master 0720]# kubectl apply -f rc.yaml
replicationcontroller/rc-nginx created
service/svc-rc-nginx created
[root@master 0720]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rc-nginx-hrb5q 1/1 Running 0 7s
rc-nginx-qhlq5 1/1 Running 0 7s
rc-nginx-t6dw7 1/1 Running 0 7s
·浏览器访问
·模拟迭代,换镜像
1.把资源清单中的image镜像从v1换成v2
[root@master 0720]# cat rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-nginx
spec:
#控制pod的副本数量
replicas: 3
#选择要创建副本的pod的标签(关联pod标签,把谁的副本设置成n个呀?)
selector:
testa: testa
#下面就是你要控制的pod了(就是pod资源的编辑);
template:
metadata:
name: pod-nginx
labels:
testa: testa
spec:
containers:
- name: c1
image: harbor.test.com/test/nginx:v2
ports:
- containerPort: 80
command:
- "nginx"
- "-g"
- "daemon off;"
---
#编辑service资源用于外部访问
apiVersion: v1
kind: Service
metadata:
name: svc-rc-nginx
spec:
type: NodePort
clusterIP: 10.200.10.10
selector:
testa: testa
ports:
- port: 88
targetPort: 80
nodePort: 30001
2.重新执行apply
[root@master 0720]# kubectl apply -f rc.yaml
replicationcontroller/rc-nginx configured
service/svc-rc-nginx unchanged
3.删除原有pod
[root@master 0720]# kubectl delete pods --all
pod "rc-nginx-hrb5q" deleted
pod "rc-nginx-qhlq5" deleted
pod "rc-nginx-t6dw7" deleted
浏览器查看,发现迭代完成
二.rs控制器
replicaset副本控制器,简称:rs控制器;
用法:与rc控制器“几乎”相同;
能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式
注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样的标签,则算作一个副本
1.rs控制器资源的管理
·基于标签-创建rs资源
1.编辑rs资源清单
[root@master rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs001
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 3
#选择需要创建副本的pod的标签
selector:
#声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
matchLabels:
demoo: demoo
#pod模板,就是编写pod资源
template:
metadata:
name: pod-r
labels:
demoo: demoo
spec:
containers:
- name: deemo
image: harbor.xinjizhiwa.com/test/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off"]
2.创建查看rs资源
[root@master rs]# kubectl apply -f rs.yaml
replicaset.apps/rs001 created
·基于标签表达式创建rs资源
1.编辑rs资源清单(标签表达式-Exists)
[root@master rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs001
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 3
#选择需要创建副本的pod的标签
selector:
#基于标签表达式匹配pod
matchExpressions:
- key: demoo
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功
operator: Exists
#pod模板,就是编写pod资源
template:
metadata:
name: pod-r
labels:
demoo: demoo
spec:
containers:
- name: deemo
image: harbor.xinjizhiwa.com/test/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off"]
2. 编辑rs资源清单(标签表达式-In)
[root@master rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs001
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 3
#选择需要创建副本的pod的标签
selector:
#基于标签表达式匹配pod
matchExpressions:
- key: demoo
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功
operator: In
values:
- demoo
- d
#pod模板,就是编写pod资源
template:
metadata:
name: pod-r
labels:
demoo: demoo
spec:
containers:
- name: deemo
image: harbor.xinjizhiwa.com/test/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off"]
·查看rs资源
[root@master rs]# kubectl apply -f rs.yaml
replicaset.apps/rs001 created
·删除rs资源
[root@master rs]# kubectl delete rs rs001
replicaset.apps "rs001" deleted
2.rs资源的升级和回滚
·创建rs与pod资源(v2版本)
1.编辑资源清单
[root@master rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs001
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 3
#选择需要创建副本的pod的标签
selector:
#1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
matchLabels:
demo: demo
#2,基于标签表达式匹配pod
#matchExpressions:
#指定标签的key值(:左边的)
#- key: k8s
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
#operator: Notin
#指定value的列表
#values:
#- a
#pod模板,就是编写pod资源
template:
metadata:
name: pod-rs
labels:
demo: demo
spec:
containers:
- name: c1
image: harbor.test.com/test/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
2.创建查看资源
[root@master rs]# kubectl apply -f rs.yaml
replicaset.apps/rs001 created
[root@master rs]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rs001-2hprx 1/1 Running 0 15s 10.100.2.70 worker2 <none> <none>
rs001-bhrkn 1/1 Running 0 15s 10.100.2.71 worker2 <none> <none>
rs001-hzrhd 1/1 Running 0 15s 10.100.1.52 worker1 <none> <none>
[root@master rs]# curl 10.100.2.70
v2: second
·将版本镜像回滚到v1
1.修改资源清单
[root@master rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs001
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 3
#选择需要创建副本的pod的标签
selector:
#1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
matchLabels:
demo: demo
#2,基于标签表达式匹配pod
#matchExpressions:
#指定标签的key值(:左边的)
#- key: k8s
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
#operator: Notin
#指定value的列表
#values:
#- a
#pod模板,就是编写pod资源
template:
metadata:
name: pod-rs
labels:
demo: demo
spec:
containers:
- name: c1
image: harbor.test.com/test/nginx:v1
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
2.重新apply执行清单
[root@master rs]# kubectl apply -f rs.yaml
replicaset.apps/rs001 configured
3.删除现有rs启动的pod
[root@master rs]# kubectl delete pods --all
pod "rs001-2hprx" deleted
pod "rs001-bhrkn" deleted
pod "rs001-hzrhd" deleted
4.再次查看,全变成v1版本
[root@master rs]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rs001-bnb5c 1/1 Running 0 16s 10.100.1.53 worker1 <none> <none>
rs001-gw68s 1/1 Running 0 16s 10.100.1.54 worker1 <none> <none>
rs001-shdr7 1/1 Running 0 16s 10.100.2.72 worker2 <none> <none>
[root@master rs]# curl 10.100.1.53
v1: first