如何部署到 GKE
我们也将相同的代码部署到 GKE(Google Kubernetes Engine)。您可以在以下链接找到逐步指导: GitHub Hands-On Steps。
Google 资源的部署
完整的部署过程在 setup-gke.sh
脚本中进行,您需要在 Cloud Shell 中执行该脚本。该脚本创建一个 GKE 集群,并且指定一个节点。出于测试目的,只有一个节点是足够的:
gcloud container clusters create $GKE_CLUSTER --num-nodes=1
此外,脚本还会创建一个用于 Docker 容器的制品库,并为部署创建一个服务账户。
在 Kubernetes 中,有一个概念叫做 pods,它们包含容器并通过部署文件(如 Deployment.yaml
)进行部署。部署文件定义了容器,并将其与镜像绑定:
spec:
containers:
- name: $GKE_APP_NAME
image: $GKE_REGION-docker.pkg.dev/$GKE_PROJECT/$GKE_PROJECT/$GKE_APP_NAME:$GITHUB_SHA
ports:
- containerPort: 80
env:
- name: PORT
value: "80"
在此文件中使用了环境变量,您可以使用 envsubst
替换变量值,然后通过 kubectl apply
命令应用:
envsubst < Deployment.yml | kubectl apply -f -
服务 用于暴露 pods —— 在这种情况下,是将其暴露到互联网。服务通过类似的方式进行部署,使用 Service.yml
文件:
spec:
type: LoadBalancer
selector:
app: $GKE_APP_NAME
ports:
- port: 80
targetPort: 80
部署服务可能需要一些时间,您可能需要多次执行以下命令:
$ kubectl get service
如果返回外部 IP 地址,您就可以使用该地址来测试您的部署(见图 9.5)。

服务账户的凭证存储在 key.json
文件中。您需要将其编码并保存为 GitHub 上的加密密钥。您可以使用以下命令将凭证编码为 Base64 格式:
$ cat key.json | base64
该脚本已完成此操作,因此您只需复制输出并将其粘贴到 GitHub 的加密密钥中,命名为 GKE_SA_KEY
。
使用 GitHub Actions 部署容器
在 GitHub Actions 工作流中的部署过程非常直接。认证和 gcloud
CLI 的设置通过 setup-gcloud
操作完成:
- uses: google-github-actions/setup-gcloud@v0.2.0
with:
service_account_key: ${{ secrets.GKE_SA_KEY }}
project_id: ${{ secrets.GKE_PROJECT }}
export_default_credentials: true
工作流接下来会构建并将容器推送到注册表。它使用 gcloud
进行 Docker 注册表的认证:
gcloud auth configure-docker \
$GKE_REGION-docker.pkg.dev \
--quiet
要将新镜像部署到 GKE,我们通过 get-gke-credentials
操作进行认证:
- uses: google-github-actions/get-gke-credentials@v0.2.1
with:
cluster_name: ${{ env.GKE_CLUSTER }}
location: ${{ env.GKE_ZONE }}
credentials: ${{ secrets.GKE_SA_KEY }}
接下来,我们只需替换部署文件中的变量,并将其传递给 kubectl apply
命令:
envsubst < Service.yml | kubectl apply -f -
envsubst < Deployment.yml | kubectl apply -f -
至此,按照动手实验的步骤,您应该能够成功完成 GKE 部署!
Kubernetes 部署 Kubernetes 部署可能非常复杂;然而,这超出了本书的范围。您可以使用不同的部署策略,例如:重建(Recreate)、滚动更新(Rolling Updates,亦称为 Ramped Updates)、蓝绿部署(Blue/Green Deployments)、金丝雀部署(Canary Deployments) 和 A/B 测试。一个好的起点是官方文档,您可以在以下链接找到:[Kubernetes Workloads Controllers](Kubernetes Deployment Strategies(https://github.com/ContainerSolutions/k8s-deployment-strategies)。 在处理 Kubernetes 时,还有许多其他工具可以使用。例如,Helm([https://helm.sh/](https://helm.sh/))是 Kubernetes 的包管理器,而 Kustomize([https://kustomize.io/](https://kustomize.io/))是一个可以帮助您管理多个配置的工具。 |