### 6.2 ReplicaSet(rs)- 较少单独使用
```
rs的主要作用是保证一定数量的pod正常运行,它会持续监听这些pod的运行状态,一旦pod发生故障就会重启或重建,同时还支持对pod数量的扩容、缩容和镜像版本升级、降级。
```

> ReplicaSet的资源清单
```
apiVersion: apps/v1 # 指定api版本
kind: ReplicaSet # 指定资源类型
metadata: # 元数据
name: # rs名称
namespace: # 所属命名空间
labels: # 标签
controller: rs
spec: # 详情描述
replicas: 3 # 副本数量
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # 标签匹配规则 match n.匹配
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
```
> 此处需要了解的配置项就是spec中的几个选项:
```
replicas:指定副本数量,其实就是当前RS创建出来的pod的数量(默认是1)。
selector:标签选择器,它的作用就是建立pod控制器和pod之间的关联关系,采用的Label Selector机制,在pod模板上定义标签(label),在控制器上定义选择器,就可以表明当前控制器能管理哪些pod了。
template:模板,就是当前控制器创建pod所使用的模板,里面其实就是前一章学过的pod的定义。 /ˈtemplət/ n.模板
```
#### 6.2.1 创建rs
```
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: pc-replicaset
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.20.0
2.创建rs
[root@master ~]# kubectl create -f pc-replicaset.yaml
3.查看rs
[root@master ~]# kubectl get rs -n dev -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
pc-replicaset 3 3 3 81s nginx nginx:1.20.0 app=nginx-pod
# 字段解释
DESIRED:期望副本数量 desired /dɪˈzaɪrd/ adj.期望得到的
CURRENT:当前副本数量 current /ˈkɜːrənt/ adj.当前的
READY:已经准备好提供服务的副本数量 ready /ˈredi/ adj.准备好的
4.查看当前控制器创建出来的pod(这里发现控制器创建出来的pod的名称是在控制器名称后面拼接了-xxxxx随机码)
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pc-replicaset-g9jvs 1/1 Running 0 2m54s
pc-replicaset-tb5sg 1/1 Running 0 2m54s
pc-replicaset-wr45z 1/1 Running 0 2m54s
[root@master ~]#
```
#### 6.2.2 扩容与缩容
##### 6.2.2.1 通过kubectl edit rs 命令扩缩容
```
1.语法:Kubectl edit [资源类型] [资源对象] -n 命名空间
2.范例:
[root@master ~]# kubectl edit rs pc-replicaset -n dev
3.查看pod,发现pod已经从3个变成6个了。
[root@master ~]# kubectl get rs pc-replicaset -n dev
NAME DESIRED CURRENT READY AGE
pc-replicaset 6 6 6 119m
```
##### 6.2.2.2 通过kubectl scale rs 命令扩缩容
```
1.语法:kubectl scale --replicas=副本数 rs <rs_name> -n 命名空间
2.范例
[root@master ~]# kubectl scale --replicas=2 rs pc-replicaset -n dev
3.查看pod,发现pod已经从6个变成2个了。
[root@master ~]# kubectl get rs pc-replicaset -n dev
NAME DESIRED CURRENT READY AGE
pc-replicaset 2 2 2 118m
```
#### 6.2.3 镜像更新
##### 6.2.3.1 通过 kubectl edit rs 命令更新
```
1.命令:
kubectl edit rs <rs_name> -n 命名空间
2.将"- image: nginx:1.20.0"修改为"- image: nginx:1.26.0",就是将nginx从1.20.0升级到1.26.0
[root@master ~]# kubectl edit rs pc-replicaset -n dev
3.查看版本,发现镜像版本已从1.20.0变成1.26.0
[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
pc-replicaset 2 2 2 26m nginx nginx:1.26.0 app=nginx
```
##### 6.2.3.2 通过 kubectl set image 命令更新
```
注意:通过 kubectl set 进行扩缩容(kubectl exec -it 进到pod中,nginx -v发现版本并未修改)
```
```
1.命令:
kubectl set image rs <rs_name> <要更新的容器>:<容器的tag> -n 命名空间
2.对ppd可控制器pc-replicaset的nginx容器进行升级
[root@master ~]# kubectl set image rs pc-replicaset nginx=nginx:1.20.0 -n dev
replicaset.apps/pc-replicaset image updated
3.查看版本发现已经变成1.20.0
[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
pc-replicaset 2 2 2 44m nginx nginx:1.20.0 app=nginx
```
#### 6.2.4 删除rs
> 删除rs及其管理的pod
```
方法一(推荐):
1.使用yaml删除pc-replicaset控制器,但不删除其管理的pod
[root@master ~]# kubectl delete -f pc-replicaset.yaml
replicaset.apps "pc-replicaset" deleted
方法二:
1.删除pc-replicaset及其管理的pod
[root@master ~]# kubectl delete rs pc-replicaset -n dev
replicaset.apps "pc-replicaset" deleted
2.查看rs和pod
[root@master ~]# kubectl get rs,pod -n dev
No resources found in dev namespace.
```
> 仅删除rs,保留其管理的pod(不推荐)
```
1.使用参数--cascade=false用来仅删除pc-replicaset控制器,但不删除其管理的pod。 cascade /kæˈskeɪd/ n.级联
[root@master ~]# kubectl delete rs pc-replicaset --cascade=false -n dev
replicaset.apps "pc-replicaset" deleted
2.查看rs和pod,发下只剩下pod了。
[root@master ~]# kubectl get rs,pod -n dev
NAME READY STATUS RESTARTS AGE
pod/pc-replicaset-dmhhs 1/1 Running 0 83s
pod/pc-replicaset-ng4x8 1/1 Running 0 83s
pod/pc-replicaset-pd9qr 1/1 Running 0 83s
```
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




