• kubernetes资源对象介绍及常用命令(二)


    Deployment

    Deployment顾名思义,就是部署的意思。Deploymen用于控制Pod,使Pod拥有多副本,自愈,扩缩容等能力。

    多副本

    副本,可以理解为Pod的数量。这些Pod会被随机分配到集群中的任意节点。

    创建一次名叫my-app的部署,使用镜像为nginx。副本数为3。

    • 命令行方式
    kubectl create deploy my-app --image=nginx --replicas=3
    • 1
    • yaml方式,my-app.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: my-app
      name: my-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: nginx
            name: nginx
    • 1
    kubectl apply -f my-app.yml
    • 1
    alt

    扩缩容

    扩缩容是将原有的副本数进行扩大或缩小。流量大的时候可以扩容,流量高峰过后可以进行缩容,资源利用最大化。

    • 命令行方式
    kubectl scale --replicas=5 deployment/my-app
    • 1

    alt 副本数由3个变成5个。

    • 修改yaml方式
    kubectl edit deployment my-app
    • 1

    将replicas修改成自己想要的数量,保存退出即可进行扩缩容。

    alt

    自愈&故障转移

    使用Deployment部署的应用始终和设定的副本数保持一致,当pod出现异常或者服务器宕机,亦或者删除pod,会在正常的节点重新拉起副本,以满足我们设定的副本数量。

    我们模拟将k8s-worker1节点宕机。

    alt 发现k8s-worker1节点的两个pod状态为Terminating。在k8s-worker2多了两个Running状态的pod。实现了故障转移。

    扩展

    查看集群内pod信息。

    kubectl get pod -owide
    • 1

    监控集群内pod情况,打印详细信息。

    kubectl get pod -w
    • 1
    alt

    阈值:pod出现了异常状况,k8s并不会立即杀死pod进行重启,而是超过了阈值才进行相应的重启操作,以防止因短暂网络问题等故障导致的频繁启动pod。

    滚动更新

    传统的更新升级需要将服务停止在做升级操作。k8s不用停止服务,会将pod依次替换成最新的,即启动一个新pod,杀死一个旧pod,直至全部更新完为止。

    将nginx镜像更新为1.16.1版本。

    • 命令行方式
    kubectl set image deployment/my-app nginx=nginx:1.16.1 --record
    • 1
    • 修改yaml方式
    kubectl edit deployment/my-app
    • 1

    将images修改为1.16.1中,保存退出即可。

    alt

    扩展

    查看某次部署的yaml。

    kubectl get deployment [my-app] -oyaml
    • 1

    版本回退

    将版本回退到历史的某一次。

    • 查看历史记录
    [root@k8s-master ~]# kubectl rollout history deployment/my-app
    deployment.apps/my-app 
    REVISION  CHANGE-CAUSE
    1         <none>
    2         kubectl set image deployment/my-app nginx=nginx:1.16.1 --record=true

    [root@k8s-master ~]# 
    • 1
    • 查看某个历史详情
    [root@k8s-master ~]# kubectl rollout history deployment/my-app --revision=2
    deployment.apps/my-app with revision #2
    Pod Template:
      Labels: app=my-app
     pod-template-hash=5ff664f457
      Annotations: kubernetes.io/change-cause: kubectl set image deployment/my-app nginx=nginx:1.16.1 --record=true
      Containers:
       nginx:
        Image: nginx:1.16.1
        Port: <none>
        Host Port: <none>
        Environment: <none>
        Mounts: <none>
      Volumes: <none>

    [root@k8s-master ~]# 
    • 1
    • 回滚(回到上次)
    [root@k8s-master ~]# kubectl rollout undo deployment/my-app
    deployment.apps/my-app rolled back
    [root@k8s-master ~]#
    • 1
    • 回滚(回到指定版本)
    [root@k8s-master ~]# kubectl rollout undo deployment/my-app --to-revision=2
    deployment.apps/my-app rolled back
    [root@k8s-master ~]# 
    • 1

    回滚的版本需要按照自己需要的填写。

    小结

    alt

    除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。 有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署 https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/

    本文由 mdnice 多平台发布

  • 相关阅读:
    线性表01- 数组与简易接口设计
    linux文件属性
    node插件MongoDB(三)—— 库mongoose 的使用和数据类型(一)
    算法基础:栈和队列
    HTML5-基本标签的使用
    ADRC自抗扰控制
    Linux简单使用的服务器日常巡检脚本
    14.6.4 索引操作
    ESBuild压缩CSS引发的一个兼容性Bug的解决姿势
    文生图王者登场:Stable Diffusion 3 Medium正式开源
  • 原文地址:https://blog.csdn.net/weixin_45842494/article/details/125550761