结合 GKE 和 Kustomize 在 Github Actions 中使用不同的环境

Use different environments in Github Actions in combination with GKE and Kustomize

我从 Google 的 Github 操作模板开始部署到 GKE。一切都按预期工作,现在我想为不同的环境扩展功能(即主分支上的推送进入生产,开发分支上的推送应该部署到阶段)。

在模板中,这应该在作业的最后部分:

    # Deploy the Docker image to the GKE cluster
- name: Deploy
  run: |-
    ./kustomize edit set image gcr.io/PROJECT_ID/IMAGE:TAG=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA
    ./kustomize build . | kubectl apply -f -
    kubectl rollout status deployment/$DEPLOYMENT_NAME
    kubectl get services -o wide

我将 kustomize build 行更改为:

kubectl kustomize kubernetes/overlays/stage | kubectl apply -f -

这是因为我的 kustomize 文件文件夹结构如下所示:

+---kubernetes
|   +---base
|   |       deployment.yml
|   |       kustomization.yml
|   |       service.yml
|   |
|   \---overlays
|       +---prod
|       |       deployment.yml
|       |       kustomization.yml
|       |       service.yml
|       |
|       \---stage
|               deployment.yml
|               kustomization.yml
|               service.yml

并且一开始所有的deplyoment.ymlservice.yml仍然和我添加环境结构之前一样,只有覆盖层中的kustomization.yml改为:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

bases:
- ../../base

patchesStrategicMerge:
  - deployment.yml
  - service.yml

当我现在 运行 Github 操作工作流部署失败并出现错误:

Error: Missing kustomization file 'kustomization.yaml'.

当使用本地 kubectl 命令时,它会生成所需环境的合并输出:

kubectl kustomize kubernetes/overlays/stage

我需要在根目录中包含所有资源的另一个文件名 kustomization.yaml

resources:
- ./kubernetes/overlays/stage
- ./kubernetes/overlays/prod

这样就可以了。

我们最终没有直接为此使用 kustomize,因为 kustomize edit set 没有将路径作为参数或选项。 相反,我们将图像细节手动回显到 base/kustomization.yaml 中。

echo "images:\n  - name: eu.gcr.io/project-id/image\n    newName: eu.gcr.io/$PROJECT_ID/$IMAGE\n    newTag: \"$GITHUB_SHA\""
>> ./deployment/base/kustomization.yaml

我们只在 base/deployment.yaml 中设置图像信息 (eu.gcr.io/project-id/image),并在叠加层中省略设置图像

然后可以 运行 例如kubectl kustomize ./kubernetes/overlays/prod 或使用 kubectl apply -k ./kubernetes/overlays/prod

直接应用于集群