下面是一个完整的 Kubernetes Deployment 配置文件,包含了常见的配置项,最后会附带详细解释。
yaml
apiVersion: apps/v1 # API版本号,表示部署的资源类型是 Deployment,版本为 apps/v1
kind: Deployment # 资源类型为 Deployment,用于定义应用的副本和更新策略
metadata:
name: my-nginx # 部署的名称,用于标识该资源对象
namespace: default # Kubernetes命名空间,默认是 default,意味着该部署将存在于默认命名空间中
labels:
app: my-nginx # 标签,用于标识该部署,可以用于选择器(selector)等操作
spec:
replicas: 3 # 定义部署的副本数量,也就是期望运行的 Pod 数量
selector:
matchLabels:
app: my-nginx # 选择器,用于匹配 Pod 的标签,确保 Deployment 管理这些 Pods
template:
metadata:
labels:
app: my-nginx # 为 Pods 设置标签,Deployment 会根据这个标签来管理 Pods
spec:
containers:
- name: my-nginx # 容器的名字,用于标识该容器
image: nginx:latest # 容器镜像,可以是 Docker Hub 或私有镜像仓库中的镜像
ports:
- containerPort: 80 # 容器内的端口,Pod 会暴露这个端口供外界访问
resources:
limits:
memory: "512Mi" # 容器的内存限制
cpu: "500m" # 容器的 CPU 限制
requests:
memory: "256Mi" # 容器请求的内存资源量,Kubernetes 会保证至少分配这么多内存
cpu: "250m" # 容器请求的 CPU 资源量,Kubernetes 会保证至少分配这么多 CPU
env:
- name: ENV_VAR_NAME # 环境变量,容器内的环境变量
value: "some_value"
volumeMounts:
- name: my-volume # 容器挂载的卷
mountPath: /usr/share/nginx/html # 卷挂载到容器的路径
volumes:
- name: my-volume # 卷的名称
configMap:
name: my-config # 使用 ConfigMap 作为卷的来源
items:
- key: config-file # 配置文件的 key
path: config-file # 文件路径
strategy:
type: RollingUpdate # 更新策略,表示滚动更新
rollingUpdate:
maxSurge: 1 # 最多可以多出 1 个 Pod
maxUnavailable: 1 # 最多可以不可用 1 个 Pod
minReadySeconds: 10 # Pod 启动后,至少需要10秒才能被认为是就绪的
revisionHistoryLimit: 5 # 保留之前的更新版本的数量,最多保存5个历史版本
progressDeadlineSeconds: 600 # 超过这个时间没有进展,则认为部署失败
各字段解释:
-
apiVersion: apps/v1
表示资源使用的 Kubernetes API 版本。
apps/v1
是 Deployment 的稳定版本。 -
kind: Deployment
定义资源类型为 Deployment。Deployment 是用来管理无状态应用的,确保所期望的 Pod 副本数可以持续运行。
-
metadata
资源的元数据:
name
:定义该 Deployment 的名称,标识 Kubernetes 中的这个资源。namespace
:指定 Deployment 所在的 Kubernetes 命名空间,默认为default
。labels
:为 Deployment 添加标签,用于选择、过滤等操作。
-
spec
Deployment 的规格:
-
replicas
:定义期望的 Pod 副本数量。这里设置为 3,表示期望有 3 个 Pod 运行。 -
selector
:通过标签选择 Pod 来管理它们。Deployment 会确保选择的 Pod 数量和类型与replicas
中定义的副本数一致。 -
template
:Pod 模板,定义将要运行在 Deployment 中的 Pod 的详细配置。-
metadata
:为 Pod 设置标签。 -
spec
:Pod 的详细配置,包括容器的定义。containers
:定义容器配置项,包含容器名称、镜像、端口、资源等。volumes
:卷配置,定义 Pod 中的存储。
-
-
-
resources
定义容器资源的限制和请求:
limits
:容器的资源限制,超过这个限制容器会被强制终止。requests
:容器请求的资源量,Kubernetes 会尝试为容器分配这些资源。
-
env
为容器设置环境变量,容器内的进程可以通过这些环境变量获取相关信息。
-
volumeMounts 和 volumes
volumeMounts
:定义容器挂载的卷的位置和名称。volumes
:在 Pod 级别定义卷的来源,可以是多种类型,如 ConfigMap、Secret、PersistentVolume 等。
-
strategy
设置滚动更新策略:
type: RollingUpdate
:表示使用滚动更新的方式来逐个更新 Pod。rollingUpdate
:设置具体的滚动更新策略,maxSurge
表示最多可以创建的额外 Pod 数量,maxUnavailable
表示最多可以不可用的 Pod 数量。
-
minReadySeconds
设置 Pod 启动并健康后,至少需要保持多少秒才算成功,就绪的 Pod 需要持续稳定一段时间。
-
revisionHistoryLimit
保留的历史版本数量,控制 Deployment 更新历史的数量。这里设置为 5,表示最多保存 5 次版本记录。
-
progressDeadlineSeconds
如果 Deployment 在指定时间内没有进展(例如没有足够的 Pod 可用),Kubernetes 将认为该部署失败。
小结:
- 这个 YAML 文件非常全面地展示了 Kubernetes Deployment 的配置项,可以满足大部分应用的需求。
- 在实际应用中,你可以根据具体需求修改这些字段,如镜像名称、资源配置、卷配置等。