GKE 使用不同的映像自动部署多个部署/服务

时间:2021-03-09 20:47:23

标签: kubernetes google-kubernetes-engine google-cloud-build cloudbuild.yaml

我目前正在查看 GKE 和 Google Cloud 上的一些教程。我在这里关注了这个https://cloud.google.com/solutions/integrating-microservices-with-pubsub#building_images_for_the_app(源代码https://github.com/GoogleCloudPlatform/gke-photoalbum-example

此示例有 3 个部署和一项服务。示例教程让您通过命令行部署所有内容,这很好并且一切正常。然后我开始研究如何通过云构建自动化部署并发现这一点:

https://cloud.google.com/build/docs/deploying-builds/deploy-gke#automating_deployments

这些文档说您可以为触发器创建构建配置(例如推送到特定存储库),它将触发构建。他们为此显示的示例 yaml 如下:

# deploy container image to GKE
- name: "gcr.io/cloud-builders/gke-deploy"
  args:
  - run
  - --filename=kubernetes-resource-file
  - --image=gcr.io/project-id/image:tag
  - --location=${_CLOUDSDK_COMPUTE_ZONE}
  - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}

我了解如何传入位置和集群参数,这些文档还对资源文件(文件名参数)和图像参数进行了以下说明:

kubernetes-resource-file 是 Kubernetes 配置文件的文件路径或包含 Kubernetes 资源文件的目录路径。

image 是所需的容器镜像名称,通常是应用程序名称。

将此与所有服务都在一个存储库中的演示应用程序存储库相关联,我相信我可以提供文件名参数的文件夹路径,例如存储库中的配置文件夹 https://github.com/GoogleCloudPlatform/gke-photoalbum-example/tree/master/config

但这里的问题是这些资源文件本身有一个 image 属性,所以我不知道这与云构建触发器 yaml 的 image 属性有什么关系。我也不知道如何在触发器 yaml 中拥有多个“图像”属性,其中每个部署都有自己的容器图像。

总的来说,我是 GKE 和 Kubernetes 的新手,所以我想知道我是否误解了 kubernetes-resource-file 在这种情况下应该是什么。

但是,当多个部署/服务都捆绑到一个存储库中时,是否可以以这种方式自动部署多个部署/服务?或者 Google 是否只是为本教程简化了一些东西——现实情况是,大多数服务都在自己的存储库中,以便单独构建/测试/部署?

无论如何,image 属性与部署 yaml 中已经定义了 image 的事实有何关联?例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    name: photoalbum-app
  name: photoalbum-app
spec:
  replicas: 3
  selector:
    matchLabels:
      name: photoalbum-app
  template:
    metadata:
      labels:
        name: photoalbum-app
    spec:
      containers:
      - name: photoalbum-app
        image: gcr.io/[PROJECT_ID]/photoalbum-app@[DIGEST]
        tty: true
        ports:
        - containerPort: 8080
        env:
        - name: PROJECT_ID
          value: "[PROJECT_ID]"

 

1 个答案:

答案 0 :(得分:1)

您使用的命令非常适合测试一个映像的部署。但是当您使用 Kubernetes (K8S) 和 GCP (GKE) 的托管版本时,您通常不会这样做。

您使用 YAML 文件来描述您的部署、服务和您想要的所有其他 K8S 对象。部署时,您可以执行这样的操作

=QUERY({indirect(A1)},"Select * where Col2 >0")

如果你有多个文件,你可以使用通配符是你想要的

kubectl apply -f <file.yaml>

如果你更喜欢只使用一个文件,你可以用 kubectl apply -f config/*.yaml 分隔对象

---