• 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 多平台发布

  • 相关阅读:
    软件项目估算精准,6大注意事项
    现代化个人博客系统 ModStartBlog v5.5.0 附件归档优化,管理角色备注
    token系统讲解及过期处理
    Java 华为真题-新学校选址
    艾美捷RPMI-1640培养基L-谷氨酰胺化学性质说明
    有哪些比较流行的 C、C++和Java 的入门级项目?
    高教版《管理学》(第四版)重点知识整理
    SAP 电商云 Spartacus UI Configurable Product 的页面设置
    安森美LM317全系列低压差线性稳压器(LDO)多种不同封装类型 高性能更可靠
    用了这跨操作系统远控软件,我再也不出差了
  • 原文地址:https://blog.csdn.net/weixin_45842494/article/details/125550761