【问题标题】:github actions GKE workflow - deployment clarificationgithub 操作 GKE 工作流 - 部署说明
【发布时间】:2021-04-13 05:30:47
【问题描述】:

我已经使用 GitHub 上的源代码设置了一个 Google Cloud Platform kubernetes 集群(和 Container Registry)。源代码被分成文件夹,每个微服务都有单独的 Dockerfile。

我想使用 GitHub 操作设置 CI/CD。

据我了解,default GKE workflow 将使用机密连接到 gcloud,构建映像并将它们推送到 Container Registry。然后执行更新。

我的问题

  • 部署如何执行?
  • kustomize 有什么用途?
  • 除了 GKE 密钥/令牌之外,我是否必须在 gcloud 上配置任何其他内容
  • 假设我想更新多个 docker 镜像。构建多个图像并推送它们就足够了吗?如下所示(为了清楚起见,稍微简化了一点),或者我是否还必须修改 Deploy 作业:
    - name: Build
      run: |-
        docker build -t "gcr.io/$PROJECT_ID/$IMAGE_1:$GITHUB_SHA" service1/.
        docker build -t "gcr.io/$PROJECT_ID/$IMAGE_2:$GITHUB_SHA" service2/.
        docker build -t "gcr.io/$PROJECT_ID/$IMAGE_3:$GITHUB_SHA" service3/.

    - name: Publish
      run: |-
        docker push "gcr.io/$PROJECT_ID/$IMAGE_1:$GITHUB_SHA"
        docker push "gcr.io/$PROJECT_ID/$IMAGE_2:$GITHUB_SHA"
        docker push "gcr.io/$PROJECT_ID/$IMAGE_3:$GITHUB_SHA"

这是来自 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

【问题讨论】:

    标签: kubernetes google-cloud-platform continuous-integration google-kubernetes-engine continuous-deployment


    【解决方案1】:

    部署是如何执行的?

    要了解如何部署或运行​​此工作流,请参阅documentation

    kustomize 有什么用?

    kustomize 是一个configuration mangement 用于应用程序配置

    除了 GKE 密钥/令牌之外,我是否必须在 gcloud 上配置任何其他内容

    除非您为验证工作流程添加额外的安全层,否则您不必这样做。

    假设我想更新多个 docker 镜像。构建多个图像并推送它们就足够了吗?如下所示(为了清楚起见,稍微简化了一点),还是我还必须修改 Deploy 作业

    我认为不需要修改部署作业。构建多个图像并将它们推送到 GCR 中就足够了

    【讨论】:

    • 如果我还要问,更新图像不会神奇地在 pod 上执行更新,对吧?部署不跟踪 :latest 映像并且不会自行执行更新?
    【解决方案2】:

    我只是想在发布此问题并实施 GitHub 操作后与 GKE 分享我的经验。

    部署是如何执行的?

    基本上,工作流通过 gcloud CLI 设置与 GKE 的连接(这也设置了 kubectl 上下文)。
    建立连接并定位正确的集群后,您可以随意做任何事情。

    除了 GKE 密钥/令牌之外,我是否必须在 gcloud 上配置任何其他内容

    没有其他要求。只要记住正确地散列它并将其存储在 GitHub 上的秘密中。

    假设我要更新多个 docker 镜像...

    按照问题中的方式进行操作是绝对有效且功能齐全的。

    ...或者我是否还必须修改 Deploy 作业

    我决定稍微改变一下 Deploy。

    # Deploy update to services
    - name: Deploy
      run: |-
        kubectl set image deployment dep1 dep1="gcr.io/$PROJECT_ID/$IMAGE_1:$GITHUB_SHA"
        kubectl set image deployment dep2 dep2="gcr.io/$PROJECT_ID/$IMAGE_2:$GITHUB_SHA"
    

    这样我就不必使用我不熟悉的Kustomize了。
    如果您将update strategy 设置为 RollingUpdate - - 我认为这是默认设置 - - 图像标签的更改将触发滚动更新(其他策略也可能有效)。但是要使用这种方法,您必须在构建 Docker 镜像并使用上面的代码部署它们时使用相同的镜像标签。使用 $GITHUB_SHA 将为提交提供不同的哈希,可用于区分 docker 图像。

    这可能不是最优雅的解决方案,但我相信您可以提出更好的解决方案(例如获取发布标签),因为这只是一个变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2015-03-15
      • 2020-05-05
      • 2021-04-14
      • 2020-06-15
      相关资源
      最近更新 更多