Deployment 资源是 Kubernetes 重要的组成部分之一,通过指定 Deployment 中的 Pod 模板和副本数量,Kubernetes 可以自动地创建并管理一组具有相同配置的 Pod,这样即使某些 Pod 发生故障或需要升级,也可以轻松地进行控制和管理。
因此,当我们使用?kind: Deployment
?时,YAML 文件中应该包括?spec
?字段来定义 Deployment 中的 Pod 模板和副本数量,并可以通过?metadata
?字段来为 Deployment 资源指定名称,标签和注释等元数据。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment # Deployment 的名称
spec:
replicas: 3 # 希望创建的 Pod 副本数量
selector:
matchLabels:
app: my-app # 用于选择要控制的 Pod 的标签
template:
metadata:
labels:
app: my-app # Pod 的标签
spec:
containers:
- name: my-container # 容器名称
image: nginx:latest # 容器所使用的镜像
ports:
- containerPort: 80 # 容器暴露的端口号
在这个示例中,包含了以下关键字:
apiVersion
:指定要使用的 Kubernetes API 的版本。对于 Deployment 类型,通常使用?apps/v1
。kind
:指定对象类型为 Deployment。metadata
:用于提供对象的元数据,其中?name
?字段指定了 Deployment 的名称。spec
:是 Deployment 对象的规格部分,用于定义 Deployment 的具体配置。
replicas
:指定希望创建的 Pod 副本数量。selector
:定义用于选择要控制的 Pod 的标签。template
:定义 Pod 的模板,用于创建实际的 Pod 对象。
metadata
:定义 Pod 的元数据部分,其中?labels
?字段用于给 Pod 设置标签。spec
:定义 Pod 的规格部分,其中?containers
?字段用于定义容器的配置。
name
:指定容器的名称。image
:指定容器所使用的镜像。ports
:定义容器暴露的端口号。Deployment YAML 文件还可以包含其他用于配置 Deployment 的关键字
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
在这个示例中,通过将?strategy.type
?设置为?RollingUpdate
,并分别设置?rollingUpdate.maxUnavailable
?和?rollingUpdate.maxSurge
?的值来定义滚动更新策略的参数。其中?maxUnavailable
?指定允许的不可用 Pod 的最大数量,maxSurge
?指定允许的超出副本数量的最大副本数。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
paused: true
在这个示例中,通过将?paused
?设置为?true
,将 Deployment 的更新暂停。这对于暂时停止 Deployment 的更新,并保持某个特定版本的副本运行非常有用。
这些关键字可以根据你的需求进行调整和扩展。当你编写完 YAML 文件后,可以使用?kubectl apply -f <YAML文件路径>
?命令将该文件应用到 Kubernetes 集群中,创建或更新 Deployment 对象。
?