以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
初始化容器
1、基本介绍
初始化容器即 initContainer。
在 Kubernetes 中,initContainer 用于在 Pod 中的业务容器启动之前,执行某些特定的初始化任务来提升 Pod 运行状态的稳定,如:
2、主要特点
3、资源清单(示例)
apiVersion: apps/v1
kind: Deployment
metadata:
nanme: demo-deployment
spec:
...
spec:
initContainers:
- name: demo-init
image: busybox
command:
- "/bin/sh"
- "-c"
- "until nc -w 2 -z mysql 3306;do echo mysql is not ready.;sleep 2;done"
containers:
- name: demo-container
...
上述资源清单中定义了一个 initContainer,该 initContainer 使用 busybox 镜像(自带 ping、nslookup、nc 等工具),在业务容器启动之前执行命令探测 MySQL 服务是否就绪。当 initContainer 探测成功并退出后,业务容器 demo-container 开始启动,可以避免 demo-container 因无法连接 MySQL 服务而报错重启、Pod 一直处于 CrashLoopBackOff 状态。
重启策略
1、基本介绍
重启策略(Restart Policy)定义了当 Pod 中的容器失败时,Kubernetes 如何响应。
重启策略有 3 种选项:
2、资源清单(示例)
apiVersion: apps/v1
kind: Deployment
metadata:
nanme: demo-deployment
spec:
...
spec:
containers:
- name: demo-container
...
restartPolicy: Always
...
滚动更新策略
1、基本介绍
Deployment 对象的镜像、env 环境变量等发生变更后,Deployment 控制器会对 Pod 进行更新,有 2 种更新策略可选:
滚动更新策略(Rolling Update Strategy)可以通过逐步替换旧版本的 Pod 的方式,来实现应用程序的平滑过渡,确保应用程序的可用性和提供服务的稳定性。
2、资源清单(示例)
apiVersion: apps/v1
kind: Deployment
metadata:
nanme: demo-deployment
spec:
...
minReadySeconds: 5 # 等待设置的时间后开始更新
revisionHistoryLimit: 10 # 最多保存多少个历史版本
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
...
spec:
containers:
- name: demo-container
...
🔔 maxSurge:在更新过程中可以超出期望数量的最大 Pod 数量,可以是绝对值或百分比,默认为 25%
🔔 maxUnavailable:在更新过程中可以处于不可用状态的最大 Pod 数量,可以是绝对值或百分比,默认为 25%
3、主要优点