ICode9

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

k8s学习记录,RC/RS和Deployment(七)

2021-05-12 15:04:34  阅读:714  来源: 互联网

标签:kubectl RS -- Deployment nginx deploy RC Pod


RC和RS是部署Pod的两种方式,但是在生产环境中主要使用Deployment等方式进行Pod的管理和部署,这里只做了解

RC 复制控制器【Replication Controller】

可以确保Pod副本数达到期望值,可确保一个Pod或一组同类Pod总是可用

RS 复制集【Replica Set】

是支持基于集合的标签选择器的下一代RC,它主要用作Deployment协调创建、删除和更新Pod,它和RC的唯一区别是 RS支持标签选择器

实际应用中,虽然ReplicaSet可以单独使用,但是一般建议使用Deployment来自动管理ReplicaSet,除非自定义的Pod不需要更新或有其他编排等

  • StatefulSet 是一个有状态的应用部署【类似Redis、Rabbitmq】

  • DaemonSet 会在每个符合标签的节点上都会启一个容器,类似Calico,日志收集等【不支持scale扩容,每个主机一个】

  • Deployment 用于部署无状态的服务,最常用的控制器。一般用于管理维护企业内部无状态的微服务,比如:configserver,zuul,springboot;它可以管理多个副本的Pod,实现无缝迁移、自动扩容缩容,自动灾难恢复,一键回滚等功能。

Deployment

命令创建:

kubectl create deployment nginx --image=nginx:1.15.2

yaml文件创建:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2020-09-19T02:41:11Z"
  generation: 1
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 2 #副本数
  revisionHistoryLimit: 10 # 历史记录保留的个数
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.15.2
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

需要注意⚠️:

selector和metadata中的labels必须要配置成一样的,并且创建之后不可以修改

selector:
    matchLabels:
      app: nginx
.......
  metadata:
      creationTimestamp: null
      labels:
        app: nginx

更新Deployment

命令

修改nginx deployment中 pod名为nginx的镜像版本为nginx:1.15.3,并且record记录下,后续可以查看详细的修改记录

kubectl set image deploy nginx nginx=nginx:1.15.3 --record



命令查看滚动更新的过程状态

kubectl rollout status deploy nginx

回滚Deployment

1、直接回滚到上一个版本

查看历史版本

kubectl rollout history deploy nginx

开始回滚

kubectl rollout undo deploy nginx



⚠️可以看到镜像版本已经由nginx:bbbbajzjahq1adaqxxxxxagdfqqaaaa 回滚到了nginx:1adaqxxxxxagdfqqaaaa,向上回滚了1个版本

2、回滚到指定版本

查看指定版本的详细信息

kubectl rollout history deploy nginx --revision=3

回滚到指定的版本

kubectl rollout undo deploy nginx --to-revision=3


Deployment扩容

命令扩容/缩容

#扩容nginx这个deployment,增加为4个副本
kubectl scale --replicas=4 deploy nginx

修改yaml文件扩容/缩容

kubectl edit deploy nginx


Deployment更新暂停和恢复

每执行一个set命令,就会触发一次更新

#deployment暂停功能
kubectl rollout pause deployment nginx  #暂停

#进行第一次更新
kubectl set image deploy nginx=nginx:1.15.3 --record

#进行第二次更新,添加CPU内存配置
kubectl set resources deploy nginx -c nginx --limits=cpu=100m,memory=64Mi --requests=cpu=20m,memory=16Mi --record

#deployment恢复,开始执行上面的修改操作
kubectl rollout resume deploy nginx


Deployment更新注意事项

清理策略:

在默认情况下,revision保留10个旧的ReplicaSet,其余的将在后台进行垃圾回收,可以在.spec.revisionHistoryLimit设置保留ReplicaSet的个数。当设置为0时,不保留历史记录

spec:
  progressDeadlineSeconds: 600
  replicas: 2 #副本数
  revisionHistoryLimit: 10 # 历史记录保留的个数

.spec.minReadySeconds:可选参数,指定新创建的Pod在没有任何容器崩溃的情况下视为Ready最小的秒数,默认为0,即一旦被创建就视为可用。

滚动更新的策略

.spec.strategy.type:更新deployment的方式,默认是RollingUpdate

  1. RollingUpdate:滚动更新,可以指定maxSurge和maxUnavailable
  • maxUnavailable:指定在回滚或更新时最大不可用的Pod的数量,可选字段,默认25%,可以设置成数字或百分比,如果该值为0,那么maxSurge就不能0
  • maxSurge:可以超过期望值的最大Pod数,可选字段,默认为25%,可以设置成数字或百分比,如果该值为0,那么maxUnavailable不能为0
  1. Recreate:重建,先删除旧的Pod,在创建新的Pod

标签:kubectl,RS,--,Deployment,nginx,deploy,RC,Pod
来源: https://www.cnblogs.com/creamk87/p/14753405.html

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

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

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

ICode9版权所有