部署到 Kubernetes - 从 CI 迈向 CD
部署到 Kubernetes - 从 CI 迈向 CD
1. 准备 Kubernetes 部署清单
Kubernetes 是一个声明式的系统。我们不告诉它“如何做”,而是告诉它我们期望的“最终状态 (Desired State)”是什么。我们通过 YAML 清单文件来描述这个最终状态。
首先,在你的项目根目录下创建一个 k8s/
文件夹,用于存放所有的 Kubernetes 配置文件。
k8s/deployment.yaml
这个文件定义了如何运行我们的应用 Pod。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sre-cicd-demo-app # Deployment 的名称
spec:
replicas: 2 # 我们希望运行 2 个 Pod 副本以实现基本的高可用
selector:
matchLabels:
app: sre-cicd-demo-app
template: # Pod 的模板
metadata:
labels:
app: sre-cicd-demo-app # Pod 的标签,需要与 selector 匹配
spec:
containers:
- name: app
# 这里是关键!我们使用一个占位符,稍后将在 CI/CD 流水线中动态替换它
image: ghcr.io/your-username/your-repo:placeholder
ports:
- containerPort: 3000
注意: 请将 ghcr.io/your-username/your-repo:placeholder
中的 your-username/your-repo
替换为你自己的 GitHub 用户名和仓库名。这个 :placeholder
标签非常重要,它是一个我们将要动态更新的目标。
k8s/service.yaml
这个文件定义了如何通过网络访问我们的应用 Pod。
apiVersion: v1
kind: Service
metadata:
name: sre-cicd-demo-service
spec:
selector:
app: sre-cicd-demo-app # 这个 selector 会找到上面 Deployment 创建的 Pod
ports:
- protocol: TCP
port: 80 # Service 暴露的端口
targetPort: 3000 # Pod 容器实际监听的端口