replicaset副本控制器,简称:rs控制器;
用法:与rc控制器"几乎"相同;
能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式
注意:不论是rc还是rs资源,都是通过"标签"惊醒匹配pod的,如果有同样的标签,则算作一个副本;
一、rs控制器资源的管理
1,基于标签-创建rs资源
· 编辑rs资源清单
[root@k8s231 rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs01
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 9
#选择需要创建副本的pod的标签
selector:
#声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
matchLabels:
k8s: xinjizhiwa
#pod模板,就是编写pod资源
template:
metadata:
name: pod-rs
labels:
k8s: xinjizhiwa
spec:
containers:
- name: c1
image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
· 创建rs资源
[root@k8s231 rs]# kubectl apply -f rs.yaml
· 查看是否创建成功
2,基于标签表达式创建rs资源
· 编辑rs资源清单(标签表达式-Exists)
[root@k8s231 rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs01
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 9
#选择需要创建副本的pod的标签
selector:
#1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
#matchLabels:
#2,基于标签表达式匹配pod
matchExpressions:
#指定标签的key值(:左边的)
- key: k8s
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
operator: Exists
#pod模板,就是编写pod资源
template:
metadata:
name: pod-rs
labels:
k8s: xinjizhiwa
spec:
containers:
- name: c1
image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
· 编辑rs资源清单(标签表达式-I n)
[root@k8s231 rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs01
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 9
#选择需要创建副本的pod的标签
selector:
#1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
#matchLabels:
#2,基于标签表达式匹配pod
matchExpressions:
#指定标签的key值(:左边的)
- key: k8s
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
operator: In
#指定value的列表
values:
xinjizhiwa
xin
#pod模板,就是编写pod资源
template:
metadata:
name: pod-rs
labels:
k8s: xinjizhiwa
spec:
containers:
- name: c1
image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
3,查看rs资源
[root@k8s231 rs]# kubectl get rs
NAME DESIRED CURRENT READY AGE
rs01 9 9 9 3m17s
4,删除rs资源
[root@k8s231 rs]# kubectl delete rs rs01
二、rs资源的升级和回滚
1,创建rs与pod资源(v2版本)
· 编辑资源清单
[root@k8s231 rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs01
spec:
#控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
replicas: 9
#选择需要创建副本的pod的标签
selector:
#1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
matchLabels:
k8s: xinjizhiwa
#2,基于标签表达式匹配pod
#matchExpressions:
#指定标签的key值(:左边的)
#- key: k8s
#指定key和value的关系,4个值可以选择
#第一个In:只要
#第二个Notin:只要不..
#第三个值Exists:只要key匹配成功就行,value可以使任意值;
#第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
#operator: Notin
#指定value的列表
#values:
#- xinjizhi
#- xin
#pod模板,就是编写pod资源
template:
metadata:
name: pod-rs
labels:
k8s: xinjizhiwa
spec:
containers:
- name: c1
image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
· 创建资源
[root@k8s231 rs]# kubectl apply -f rs.yaml
2,将版本镜像回滚到v1
· 修改资源清单
[root@k8s231 rs]# cat rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs01
spec:
replicas: 9
selector:
matchLabels:
k8s: xinjizhiwa
template:
metadata:
name: pod-rs
labels:
k8s: xinjizhiwa
spec:
containers:
- name: c1
#这里改成v1,代表回滚上一个镜像
image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v1
ports:
- containerPort: 80
command: ["nginx","-g","daemon off;"]
· 重新apply执行清单
[root@k8s231 rs]# kubectl apply -f rs.yaml
· 删除现有rs启动的pod
[root@k8s231 rs]# kubectl delete pods --all
· 再次查看,全变成v1版本
注意,也可以一个一个pod删除,就等于逐渐的一个一个pod进行升级和回滚,也叫金丝雀发布,在rs资源中,我们先不细讲,等到deployments资源时,会详细讲这个发布机制;