• Deployment应用生命周期与Pod健康检查


    通过Deployment部署的应用生命周期的一般过程为:

    Created with Raphaël 2.3.0 部署 升级 回退 扩容 下线

    Deployment应用生命周期

    部署

    通过yaml文件部署项目:

    kubectl apply -f web.yaml
    
    • 1

    或者命令行临时部署(不推荐,一般只用于测试):

    kubectl create deployment web --image=nginx:1.16 --replicas=3
    
    • 1

    升级

    应用部署后通常会经历版本升级。

    #方法一:通过配置文件升级
    kubectl apply -f xxx.yaml
    #方法二:直接升级应用镜像版本
    kubectl set image deployment/web nginx=nginx:1.17
    #方法三:修改原来部署使用的yaml文件
    kubectl edit deployment/web
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    查看滚动升级过程:

    kubectl describe deployment xxx
    kubectl rollout status deployment/xxx
    
    • 1
    • 2

    K8S通过ReplicaSet控制器(RS)维护Pod的副本数量。RS会不断对比当前Pod的数量与期望的Pod数量。Deployment每次发布都会创建一个RS作为记录,用于实现滚动升级版本回退

    如果我们直接删除Deployment中的一个Pod,RS会生成一个新的Pod,以达到期望的Pod数量。

    kubectl delete pod xxx
    kubectl get pods
    
    • 1
    • 2

    查看RS记录:

    kubectl get rs [-n default]
    
    • 1

    查看版本对应RS记录:

    kubectl rollout history deployment xxx
    
    • 1

    回退

    应用升级失败后,通常要回退应用版本。

    查看历史版本:

    kubectl rollout history deployment/web
    
    • 1

    回退到上一个版本:

    kubectl rollout undo deployment/web
    
    • 1

    回滚到指定历史版本:

    kubectl rollout undo deployment/web --to-revision=2
    
    • 1

    查看镜像对应的版本号:

    kubectl describe rs | grep -E "revision|Image"
    kubectl describe rs xxx | grep -E "revision|Image"
    kubectl describe $(kubectl get rs -o name | grep "web1-") | grep -E "revision|Image"
    
    • 1
    • 2
    • 3

    扩容

    随着业务量的变化,通常需要对应用进行水平扩容(或者缩容)。

    方法一:修改yaml配置文件里的replicas值,再重新apply。

    kubectl edit deployment/web
    kubectl apply -f xxx.yaml
    
    • 1
    • 2

    方法二:使用scale命令直接扩缩容。

    kubectl scale deployment web --raplicas=10
    
    • 1

    下线

    项目下线后,需要删除不再使用的Deployment和Service。

    kubectl delete deploy/web
    kubectl delete svc/web
    
    • 1
    • 2

    或者

    kubectl delete -f xxx.yaml
    
    • 1

    Pod健康检查

    Pod是K8S创建和管理的最小单元,由一个或多个容器组成。Pod中的容器共享网络存储资源。Pod中的容器始终位于同一个Node上,不会跨Node。

    可以单独运行一个Pod:

    kubectl apply -f pod.yaml
    kubectl run nginx --image=nginx
    
    • 1
    • 2

    此时的Pod不属于任何一个Deployment,也没有对应的ReplicaSet,因此被删除后不会再自动生成一个新的。

    Sidecar模式

    一个Pod中可以运行多个容器。通过在Pod中定义专门容器,来执行主业务容器需要的辅助工作,这种部署Pod的方法被称为边车模式Sidecar)。其好处是将辅助功能(如日志收集、应用监控)同主业务容器解耦,实现独立发布和能力重用。

    重启策略

    可以为Pod定义重启策略restartPolicy,一般可选以下三种模式:

    • Always:当容器终止退出后,总是重启容器,为默认策略;
    • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器;
    • Never:当容器终止退出时,从不重启容器。

    健康检查

    可以为Pod定义健康检查,一般可选以下三种检查探针:

    • livenessProbe(存活检查):如果检查失败,将kill容器,并根据重启策略进行操作。
    • readinessProbe(就绪检查):如果检查失败,会把Pod从Service endpoints中剔除。
    • startupProbe(启动检查):启动检查成功才由存活检查接手,用于保护慢启动容器。

    健康检查一般可以通过以下三种检查方式实现:

    • httpGet:发送HTTP请求,返回200-400范围状态码为成功;
    • exec:执行shell命令返回状态码是0为成功;
    • tcpSocket:发起TCP Socket建立成功。
  • 相关阅读:
    自学java怎么入门?
    Python seaborn大更新,带来全新绘图方式seaborn.objects
    Leetcode-2 两数相加
    关于企业如何替换 FTP 和加速 FTP 的问题
    亚马逊测评自养号策略:手机与PC结合的重要性
    N——>BatchSize &&数据维度理解和处理(chun, cat, squeeze, unsqueeze)
    【RTOS训练营】定时器的机制、源码分析和晚课提问
    区块链 | ERC721 标准
    Kafka安装启动(含安装包)
    java 单元测试Junit
  • 原文地址:https://blog.csdn.net/Sebastien23/article/details/126079590