• (2022版)一套教程搞定k8s安装到实战 | Deployment


    视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》

    一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

    附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客


    Deployment概念

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

    创建一个Deployment

    手工创建

    1. kubectl create deployment nginx --image=nginx:1.15.2
    2. 复制代码

    从文件创建

    1. # cat nginx-deploy.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. annotations:
    6. deployment.kubernetes.io/revision: "1"
    7. creationTimestamp: "2020-09-19T02:41:11Z"
    8. generation: 1
    9. labels:
    10. app: nginx # 通过--show-labels看到的结果
    11. name: nginx
    12. namespace: default
    13. spec:
    14. progressDeadlineSeconds: 600
    15. replicas: 2 # 副本数
    16. revisionHistoryLimit: 10 # 历史记录保留的
    17. selector:
    18. matchLabels:
    19. app: nginx # 与template中的labels要保持一致,且不能修改
    20. strategy:
    21. rollingUpdate:
    22. maxSurge: 25%
    23. maxUnavailable: 25%
    24. type: RollingUpdate
    25. template:
    26. metadata:
    27. creationTimestamp: null
    28. labels:
    29. app: nginx
    30. spec:
    31. containers:
    32. - image: nginx:1.15.2
    33. imagePullPolicy: IfNotPresent
    34. name: nginx
    35. resources: {}
    36. terminationMessagePath: /dev/termination-log
    37. terminationMessagePolicy: File
    38. dnsPolicy: ClusterFirst
    39. restartPolicy: Always
    40. schedulerName: default-scheduler
    41. securityContext: {}
    42. terminationGracePeriodSeconds: 30
    43. 复制代码

    状态解析:

    1. [root@k8s-master-lb ~]# kubectl get deploy -o wide
    2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
    3. nginx 2/2 2 2 2m41s nginx nginx:1.15.2 app=nginx
    4. 复制代码

    NAME:Deployment名称

    READY:Pod的状态,已经Ready的个数

    UP-TO-DATE:已经达到期望状态的被更新的副本数

    AVAILABLE:已经可以用的副本数

    AGE:显示应用程序运行的时间

    CONTAINERS:容器名称

    IMAGES:容器的镜像

    SELECTOR:管理Pod的标签

    更新与回滚

    查看历史记录

    1. kubectl rollout history deploy nginx
    2. 复制代码

    回滚到上一个版本

    1. kubectl rollout undo deploy nginx
    2. 复制代码

    查看指定版本的详细信息

    1. kubectl rollout history deploy nginx --revision=5
    2. 复制代码

    回滚到指定的版本

    1. kubectl rollout undo deploy nginx --to-revision=5
    2. 复制代码

    扩缩容

    1. kubectl scale --replicas=3 deploy nginx
    2. 复制代码

    如果需要缩容,修改replicas即可。

    暂停

    1. # 暂停更新
    2. kubectl rollout pause deployment nginx
    3. # 进行一次变更
    4. kubectl set image deploy nginx nginx=nginx:1.15.3 --record
    5. # 进行二次变更
    6. kubectl set resources deploy nginx -c nginx --limits=cpu=200m,memory=128Mi --requests=cpu=10m,memory=16Mi
    7. # 开启更新
    8. kubectl rollout resume deploy nginx
    9. 复制代码

    Deployment注意事项

    1. [root@k8s-master-lb ~]# kubectl get deploy nginx -oyaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. annotations:
    6. deployment.kubernetes.io/revision: "1"
    7. creationTimestamp: "2022-08-04T01:12:05Z"
    8. generation: 2
    9. labels:
    10. app: nginx
    11. spec:
    12. progressDeadlineSeconds: 600
    13. replicas: 2
    14. revisionHistoryLimit: 10
    15. selector:
    16. matchLabels:
    17. app: nginx
    18. strategy:
    19. rollingUpdate:
    20. maxSurge: 25%
    21. maxUnavailable: 25%
    22. type: RollingUpdate
    23. template:
    24. metadata:
    25. creationTimestamp: null
    26. labels:
    27. app: nginx
    28. spec:
    29. containers:
    30. - image: nginx:1.15.2
    31. imagePullPolicy: IfNotPresent
    32. name: nginx
    33. resources: {}
    34. terminationMessagePath: /dev/termination-log
    35. terminationMessagePolicy: File
    36. dnsPolicy: ClusterFirst
    37. restartPolicy: Always
    38. schedulerName: default-scheduler
    39. securityContext: {}
    40. terminationGracePeriodSeconds: 30
    41. status:
    42. availableReplicas: 2
    43. conditions:
    44. - lastTransitionTime: "2022-08-04T01:12:05Z"
    45. lastUpdateTime: "2022-08-04T01:12:26Z"
    46. message: ReplicaSet "nginx-66bbc9fdc5" has successfully progressed.
    47. reason: NewReplicaSetAvailable
    48. status: "True"
    49. type: Progressing
    50. - lastTransitionTime: "2022-08-04T01:13:19Z"
    51. lastUpdateTime: "2022-08-04T01:13:19Z"
    52. message: Deployment has minimum availability.
    53. reason: MinimumReplicasAvailable
    54. status: "True"
    55. type: Available
    56. observedGeneration: 2
    57. readyReplicas: 2
    58. replicas: 2
    59. updatedReplicas: 2
    60. [root@k8s-master-lb ~]#
    61. 复制代码
    • .spec.revisionHistoryLimit:设置保留RS旧的revision的个数,设置为0的话,不保留历史数据
    • .spec.minReadySeconds:可选参数,指定新创建的Pod在没有任何容器崩溃的情况下视为Ready最小的秒数,默认为0,即一旦被创建就视为可用。
    • 滚动更新的策略:

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

        • RollingUpdate:滚动更新,可以指定maxSurge和maxUnavailable

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

  • 相关阅读:
    Vue基础-02
    coalesce函数判断oracle、postgresql中为null或者‘‘ 赋值默认
    二本菜鸡,颓废两年的自我救赎
    Apache httpd 安全漏洞处理-升级httpd版本
    ElasticSearch7.3学习(十七)----搜索结果字段解析及time_out字段解析
    论文阅读-Dr.Deep_基于医疗特征上下文学习的患者健康状态可解释评估
    区块链会议投稿资讯CCF A--ICSE 2025 截止8.2 附录用率
    嵌入式硬件笔记——flash
    Visual Studio 2019中的安全问题
    外包干了2个月,技术退步明显.......
  • 原文地址:https://blog.csdn.net/guolianggsta/article/details/126156640