点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
几种滚动发布方式
滚动更新通过设置MaxSurge和MaxUnavailable来规定可以有多少个额外的Pod和可以忍受多少个Pod无法提供服务(两个参数可以为0,但是不能同时为0),在整个更新的过程中都是平滑无缝衔接。
1.2 金丝雀发布
1.3 蓝绿发布
Deployment更新策略
strategy
spec:
replicas: 3
strategy:
type: Recreate
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2 # 一次可以添加多少个Pod
maxUnavailable: 0 # 滚动更新期间最大多少个Pod不可用
两者不能同时为0maxSurge:和期望ready的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。 数值:0, 副本数; 百分比:[0%, 100%] 向上取整,比如10个副本,5%的话==0.5个,但计算按照1。 maxUnavailable: 和期望ready的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑; 数值:0,副本数; 百分比:[0%, 100%] 向下取整,比如10个副本,5%的话==0.5个,但计算按照0个。
pod 启停过程
1)运行初始化容器(init container)过程 2)运行主容器(main container) a. 容器启动后钩子(post start)、容器终止前钩子(pre stop) b. 容器的存活性探测(liveness probe)、就绪性探测(readiness probe) 3)pod终止过程
用户发出删除 pod 命令; K8S 会给旧POD发送SIGTERM信号;将 pod 标记为“Terminating”状态;pod 被视为“dead”状态,此时将不会有新的请求到达旧的pod; 并且等待宽限期(terminationGracePeriodSeconds 参数定义,默认情况下30秒)这么长的时间; 第三步同时运行,监控到 pod 对象为“Terminating”状态的同时启动 pod 关闭过程; 第三步同时进行,endpoints 控制器监控到 pod 对象关闭,将pod与service匹配的 endpoints 列表中删除; 如果 pod 中定义了 preStop 处理程序,则 pod 被标记为“Terminating”状态时以同步的方式启动执行;若宽限期结束后,preStop 仍未执行结束,第二步会重新执行并额外获得一个2秒的小宽限期(最后的宽限期,所以定义prestop 注意时间,和terminationGracePeriodSeconds 参数配合使用); Pod 内对象的容器收到 SIGTERM 信号(SIGTERM 相当于kill); 宽限期结束之后,若存在任何一个运行的进程,pod 会收到 SIGKILL 信号(SIGKILL相当于kill -9); Kubelet 请求 API Server 将此 Pod 资源宽限期设置为0从而完成删除操作。

Pod 和托管它的工作节点的 IP 地址; Pod 何时启动· Pod 的服务质量 (QoS) 等级 (相关知识参考https://zhuanlan.zhihu.com/p/643442823); Pod 处于哪个阶段; 集群的条件,以及其各个容器的状态。

Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段; Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。该阶段并不是对容器或 Pod 状态的综合汇总,也不是为了成为完整的状态机。
Pod 的状态未知,因为 Kubelet 已停止报告与 API 服务器的通信。工作节点可能出现故障或与网络断开连接。 |
说明: 当一个 Pod 被删除时,执行一些 kubectl 命令会展示这个 Pod 的状态为 Terminating(终止)。这个 Terminating 状态并不是 Pod 阶段之一。Pod 被赋予一个可以体面终止的期限,默认为 30 秒。你可以使用 --force 参数来强制终止 Pod。
滚动更新涉及的要点
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2 # 一次可以添加多少个Pod
maxUnavailable: 0 # 滚动更新期间最大多少个Pod不可用
lifecycle:
postStart:
exec:
command:
- bin/sh
- '-c'
- >-
curl -s -X PUT
"http://nacos.xxxx.com:8848/nacos/v1/ns/instance?serviceName=$jar_name&username=$nacos_username&password=$nacos_password&namespaceId=$nacos_namespace&ip=$PodIP&port=$PORT&cluster=DEFAULT&metadata={}&enabled=true"
preStop:
exec:
command:
- /bin/sh
- '-c'
- >-
curl -s -X PUT
"http://nacos.xxxx.com:8848/nacos/v1/ns/instance?serviceName=$jar_name&username=$nacos_username&password=$nacos_password&namespaceId=$nacos_namespace&ip=$PodIP&port=$PORT&cluster=DEFAULT&metadata={}&enabled=false"
liveness :涉及服务自动重启。 检测失败后的动作由restartPolicy 决定,restartPolicy 字段,可能的值为 Always、OnFailure 和 Never。默认为 Always。 readiness:涉及服务是否有流量进入(只有在注册地址是svc域名时才有效)。
livenessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health
port: 18081
scheme: HTTP
initialDelaySeconds: 180
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 1
readinessProbe:
failureThreshold: 8
httpGet:
path: /actuator/health
port: 18081
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1

本文作者:郑金龙(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




