Kubernetes API 是声明式的,这意味着您可以定义资源的理想状态,而 Kubernetes 则负责维护该状态。
当您在 Kubernetes 中创建或修改资源时,您并不能直接控制系统的每一步操作。相反,你只需声明你想要什么,Kubernetes 就会确保当前状态与你想要的状态相匹配。
[代码清单]
# Define a Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
\- name: nginx
image: nginx:1.14.2
ports:
\- containerPort: 80
[执行结果]
deployment.apps/nginx-deployment created
在声明式模型中,你可以使用 YAML 或 JSON 文件描述系统所需的状态。例如,定义 “部署”(Deployment)时,你可以指定一个 Pod 应该有多少个副本在运行。Kubernetes 会持续监控集群,并调整资源以匹配所声明的状态。如果 Pod 出现故障或节点无法访问,Kubernetes 会自动创建新的 Pod,以保持所需的副本数量。它还简化了复杂系统的管理,让用户专注于 “做什么 ”而不是 “怎么做”。Kubernetes 的控制器负责处理 “如何”,确保系统的实际状态与预期状态保持一致。
[小知识]
与声明式方法相反的是命令式方法,其中每个操作都必须明确定义。Kubernetes 支持这两种方法,但声明式方法因其可扩展性、可维护性和处理复杂场景的能力而更受青睐。