部署到 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-apptemplate: # 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 创建的 Podports:- protocol: TCPport: 80 # Service 暴露的端口targetPort: 3000 # Pod 容器实际监听的端口