在 Kubernetes (K8s) 中,编写一个 Deployment 的 YAML 文件通常包括以下几个关键部分:
1. apiVersion
这是你希望使用的 Kubernetes API 版本。对于 Deployment,一般使用 apps/v1
版本。
apiVersion: apps/v1
2. kind
这指定了资源的类型,Deployment 类型是 Deployment
。
kind: Deployment
3. metadata
metadata
部分包含关于 Deployment 的元数据,例如名称、命名空间、标签等。常见的是设置 Deployment 的 name
和 labels
。
metadata:
name: my-app-deployment
labels:
app: my-app
4. spec
spec
部分描述了 Deployment 的具体配置。主要包括以下几个子部分:
-
replicas:指定要创建的 Pod 副本数量。
-
selector:选择器用于确定哪些 Pods 属于这个 Deployment。通常使用标签来选择。
-
template:这是用来创建 Pod 的模板,包含了 Pod 的元数据和规范(如容器配置)。
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app-image:latest
ports:
- containerPort: 80
-
replicas:这里指定创建 3 个副本的 Pod。
-
selector:选择器选择带有
app: my-app
标签的 Pods。 -
template:这个模板描述了 Pod 的配置,包含一个容器
my-app-container
,使用镜像my-app-image:latest
,并暴露端口 80。
完整的 YAML 示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app-image:latest
ports:
- containerPort: 80
关键点总结:
apiVersion
: 指定 API 版本(如apps/v1
)。kind
: 定义资源类型(如Deployment
)。metadata
: 包含资源的名称、标签等信息。spec
: 配置 Deployment 的详细信息,包括副本数、Pod 模板、选择器等。
这样定义的 Deployment 会创建一个包含三个副本的应用,每个副本都运行 my-app-image:latest
镜像并暴露端口 80。
apiVersion: apps/v1 # Kubernetes API版本,根据你的集群版本选择合适的API版本
kind: Deployment # 资源类型为Deployment
metadata:
name: my-deployment # 部署的名称
namespace: default # 可选,部署所在的命名空间,默认为default
labels: # 可选,用于标识和管理部署的标签
app: my-app
spec:
replicas: 3 # 指定Pod副本的数量
selector: # 标签选择器,用于关联此Deployment与Pod模板
matchLabels:
app: my-app # 确保selector匹配到具有相同app=my-app标签的Pod
template: # Pod模板定义了将要创建的Pod的具体内容
metadata:
labels: # Pod的标签,必须与上面的选择器相匹配
app: my-app
spec:
containers: # 容器列表
- name: my-container # 容器名称
image: nginx:1.21.0 # 使用的容器镜像
ports:
- containerPort: 80 # 容器暴露的端口
resources: # 可选,指定容器的资源请求和限制
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
livenessProbe: # 可选,存活探针配置
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe: # 可选,就绪探针配置
httpGet:
path: /readyz
port: 80
initialDelaySeconds: 5
periodSeconds: 5
strategy: # 可选,滚动更新策略
type: RollingUpdate # 更新策略类型,RollingUpdate或Recreate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 10 # 可选,保留的修订历史记录数
标签:哪些,app,deploy,yaml,Deployment,Pod,my,spec,metadata
From: https://www.cnblogs.com/leojazz/p/18688693