ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

k8s之ReplicaSet

2021-07-16 21:01:49  阅读:211  来源: 互联网

标签:kubectl ReplicaSet replicaset rs pc nginx pod k8s


ReplicaSet介绍

ReplicaSet的主要作用是保证一定数量的pod能够正常运行,它会持续监听这些pod的运行状态,一旦pod发生故障,就会重启或重建。同时它还支持对pod数量的扩缩容和版本镜像的升级。

 

ReplicaSet的资源清单文件

apiVersion: apps/v1  #版本号
kind: ReplicaSet  #类型
metadata:    #元数据
  name:    #rs名称
  namespace:   #所属命名空间
  labels:   #标签
    controller: rs
spec:   #详情描述
  replicas:  #副本数量
  selector:  #选择器,通过它指定该控制器管理哪些pod
    matchLabels:   #Labels匹配规则
       app: nginx-pod
    matchExpressions:   #Expression匹配规则
      - {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的定义

创建ReplicaSet

创建pc-replicaset.yaml文件,内容如下:

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.17.1

 使用配置文件创建rs

[root@master ~]# vim pc-replicaset.yaml
[root@master ~]# kubectl create -f pc-replicaset.yaml 
replicaset.apps/pc-replicaset created
[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
pc-replicaset   3         3         3       17m   nginx        nginx:1.17.1   app=nginx-pod

查看pod

[root@master ~]# kubectl get pod -n dev
NAME                      READY   STATUS    RESTARTS   AGE
pc-replicaset-fmlgx       1/1     Running   0          17m
pc-replicaset-jg9xz       1/1     Running   0          17m
pc-replicaset-rs92t       1/1     Running   0          17m

rs扩缩容

第一种方式:编辑rs文件

编辑rs的副本数量,修改spec:replicas

[root@master ~]# kubectl edit rs pc-replicaset -n dev
#找到spec:replicas并将其从3替换成6
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx-pod
  template:

再次查看rs,发现rs已经扩充为了6个

[root@master ~]# kubectl edit rs pc-replicaset -n dev
replicaset.apps/pc-replicaset edited
[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
pc-replicaset   6         6         6       22h   nginx        nginx:1.17.1   app=nginx-pod

查看pod,发现又新创建了3个pod

[root@master ~]# kubectl get pod -n dev
NAME                  READY   STATUS    RESTARTS   AGE
pc-replicaset-88q2r   1/1     Running   0          115s
pc-replicaset-fmlgx   1/1     Running   1          22h
pc-replicaset-j5pz6   1/1     Running   0          115s
pc-replicaset-jg9xz   1/1     Running   1          22h
pc-replicaset-rs92t   1/1     Running   1          22h
pc-replicaset-xkdjg   1/1     Running   0          115s

第二种方式:使用命令

命令格式:

kubectl scale rs rs名称 --replicas=rs数量 -n 命名空间

将rs的数量减少为2个

[root@master ~]# kubectl scale rs pc-replicaset --replicas=2 -n dev
replicaset.apps/pc-replicaset scaled
[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
pc-replicaset   2         2         2       22h   nginx        nginx:1.17.1   app=nginx-pod
[root@master ~]# kubectl get pod -n dev
NAME                  READY   STATUS    RESTARTS   AGE
pc-replicaset-jg9xz   1/1     Running   1          22h
pc-replicaset-rs92t   1/1     Running   1          22h

发现rs的数量已经减少为了2个

rs镜像升级

在生产环境中,可能会遇见镜像某个版本出现问题,必须升级镜像,因此rs就给我们提供了升级rs镜像的功能

方式一:编辑rs文件

[root@master ~]# kubectl edit rs pc-replicaset -n dev
#找到image,将其改为1.17.2
    spec:
      containers:
      - image: nginx:1.17.2
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}

查看rs镜像,发现已经变成了1.17.2

[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
pc-replicaset   2         2         2       23h   nginx        nginx:1.17.2   app=nginx-pod

方式二:使用命令

命令格式

kubectl set image rs rs名称 容器=镜像版本 -n 命名空间

使用命令将镜像版本修改回1.17.1

[root@master ~]# kubectl set image rs pc-replicaset nginx=nginx:1.17.1 -n dev
replicaset.apps/pc-replicaset image updated
[root@master ~]# kubectl get rs pc-replicaset -n dev -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
pc-replicaset   2         2         2       23h   nginx        nginx:1.17.1   app=nginx-pod

删除rs

使用kubectl delete命令会删除rs以及它管理的pod

在k8s删除rs前,会将rs的replicasclear调整为0,等待所有的pod被删除之后,再执行rs对象的删除

三种删除rs的方式

#第一种方式:使用kubectl delete
kubectl delete rs rs名称 -n 命名空间
#第二种方式:只删除rs保留pod(不推荐使用) kubectl delete rs rs名称 -n 命名空间 --cascade=false
#第三种方式:直接使用yaml删除(推荐) kubectl delete -f yaml文件名

这里使用第三种方式进行演示

[root@master ~]# kubectl delete -f pc-replicaset.yaml 
replicaset.apps "pc-replicaset" deleted
[root@master ~]# kubectl get rs pc-replicaset -n dev
Error from server (NotFound): replicasets.apps "pc-replicaset" not found

发现rs已经被删除

标签:kubectl,ReplicaSet,replicaset,rs,pc,nginx,pod,k8s
来源: https://www.cnblogs.com/Ayanamidesu/p/15013048.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有