我目前正在查看 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]"
答案 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
分隔对象
---