K8s管理应用生命周期-Deployment篇

艺帆风顺 发布于 2025-04-02 14 次阅读


 在k8s中部署应用程序流程

编辑

1、使用Deployment部署Java应用

    kubectl create deployment web --image=XXX/java-demo
    kubectl get deployment,pods

    2、使用Service发布Pod

      kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web
      kubectl get service

      服务编排:YAML文件格式说明

          缩进表示层级关系

          不支持制表符“tab”缩进,使用空格缩进

          通常开头缩进2个空格

          字符后缩进1个空格

          字符后缩进1个空格,如冒号、逗号等

          “---”表示YAML格式,一个资源(文件) 的开始

          "#" 注释

      服务编排:YAML文件创建资源对象

      创建应用:

      编辑

      发布应用:

      编辑

      标签定义:

      标签:标记、过滤(-L) 、关联(主要体现在deployment、pod、service、三者标签保持一致)

      编辑

      官网创建Deployment应用案例

      Deployments | Kubernetes

        kubectl create #只创建
        kubectl apply #创建、更新
        kubectl apply -f xxx.yaml #部署
        kubectl delete -f xxx.yaml #卸载

        生成yaml文件方法

        用create命令生成

        kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml

        编辑

        通过已有资源用get命令导出

        kubectl get deployment nginx -o yaml > my-deploy.yaml

        Pod容器的字段拼写题诗

          kubectl explain pods.spec.containers
          kubectl explain deployment

          Deployment:介绍

          Deployment是最常用的K8s工作负载控制器(Workload Controllers),是K8s的一个抽象概念,用于更高级层级对象,部署和管理Pod。

          其他控制器还有DaemonSet、StatefulSet等。

          Deployment的主要功能

          管理Pod和ReplicaSet

          具有上线部署、副本设定、滚动升级、回滚等功能

          应用场景:网站、API、微服务

          编辑

          Deployment:应用生命周期管理

          编辑

          第一步:部署应用

          方法一:编写yaml文件部署:kubectl apply -f xxx.yaml

          方法二:kubectl create deployment web --image=nginx:1.6 --replicas=3

          第二步:应用升级

            kubectl apply -f xxx.yaml
            kubectl set image deployment/web nginx=nginx:1.17
            kubectl edit deployment/web #使用系统编辑器打开

            应用升级分类

            滚动发布    #批量分级

            蓝绿发布    #进行分组升级

            灰度发布:金丝雀、A/B    #逐步升级

            滚动升级:

                滚动发布是指每次只生级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。

            滚动升级在k8s中的实现:

            1个Deployment

            2个ReplicaSet

            ReplicaSet控制器

            ReplicaSet:副本集,主要维护Pod副本数量,不断对比当前Pod数量与期望Pod数量。

            主要用途:Deployment每次发布都会创建一个RS作为记录,用于实现滚动升级和回滚

            查看滚动升级过程

            kubectl describe deployment web

            编辑

            ReplicaSet控制器

            ReplicaSet:

            • 副本集,主要维护Pod副本数量, 不断对比当前Pod数量与期望Pod数量。

            ReplicaSet用途:

            • Deployment每次发布都会创建一个RS作为记录,用于实现滚动升级和回滚。

            查看RS记录

            kubectl get rs

            版本对应RS记录

            kubectl rolout history deployment web

            编辑

            Deployment:应用实例扩容和缩容

            水平扩容(启动多实例,提高并发)

            修改yaml里replicas值,再apply

            kubectl scale deployment web --replicas=10

            注意:replicas参数控制Pod副本数量

            编辑

            Deployment:应用发布失败回滚

            回滚(项目升级失败恢复到正常版本)

              kubectl rollout history deployment/web #查看历史发布版本
              kubectl rollout undo deployment/web #回滚上一个版本
              kubectl rollout undo deployment/web --to-revision=2 #回滚历史指定
              版本

              注:回滚是重新部署某一次部署时的状态,即当时版本所有配置

              rollout 查看历史版本

              rs 可以看到历史版本号与rs对应关系,从rs可以再得知当前对应的镜像

              # 获取发布版本与对应镜像

              kubectl describe $(kubectl get rs -o name -n test |grep "web1-") -n test |grep -E "revision:|Image:"

              # 回滚到上一个版本或者指定版本

                kubectl rollout undo deployment web1 -n test
                kubectl rollout undo deployment web1 --to-revision=1 -n test

                常规健康检查方法:端口监听、运行进程、HTTP状态码、端口探测

                Deployment:删除

                  kubectl delete deploy/web
                  kubect delete svc/web