使用自定义网络的 gke 集群部署

Posted

技术标签:

【中文标题】使用自定义网络的 gke 集群部署【英文标题】:gke cluster deployment with custom network 【发布时间】:2020-01-13 14:07:46 【问题描述】:

我正在尝试创建一个 yaml 文件以在我创建的自定义网络中部署 gke 集群。我收到一个错误

收到 JSON 有效负载。未知名称“网络”:找不到字段。”

我尝试了一些资源名称,但仍然遇到同样的问题

资源: - 名称:myclus 类型:container.v1.cluster 特性: 网络:项目/project-251012/global/networks/dev-cloud 区域:“us-east4-a” 簇: 初始集群版本:“1.12.9-gke.13” currentMasterVersion:“1.12.9-gke.13” ## 初始节点池配置。 节点池: - 名称:“myclus-pool1” 初始节点计数:3 版本:“1.12.9-gke.13” 配置: 机器类型:“n1-standard-1” oauthScopes: - https://www.googleapis.com/auth/logging.write - https://www.googleapis.com/auth/monitoring - https://www.googleapis.com/auth/ndev.clouddns.readwrite 可抢占:真 ## 从 v1.cluster 部分复制节点池配置,以对其进行显式管理。 - 名称:myclus-pool1 类型:container.v1.nodePool 特性: 区域:us-east4-a clusterId: $(ref.myclus.name) 节点池: 名称:“myclus-pool1”

我希望它将集群节点放置在这个网络中。

【问题讨论】:

【参考方案1】:

网络字段必须是集群规范的一部分。***属性应该只是zoneclusternetwork 应该与initialClusterVersion 在同一个缩进上。在container.v1.cluster API reference page 上查看更多信息

你的清单应该看起来更像:

编辑:API 参考文档中有关已弃用字段的一些混淆。我提供了一个适用于新 API 的 YAML,而不是您正在使用的那个。我已经更新了基本 v1 API 的正确语法,并进一步添加了更新的 API(目前依赖 gcp-types 进行部署。

资源: - 名称:myclus 类型:container.v1.cluster 特性: 项目编号:[项目] 区域:us-central1-f 簇: 名称:我的clus 区域:us-central1-f 网络:[网络名称] subnetwork: [subnet] ### 如果使用默认网络,请将此字段留空 初始集群版本:“1.13” 节点池: - 名称:my-clus-pool1 初始节点计数:0 配置: 图像类型:cos - 名称:my-pool-1 类型:container.v1.nodePool 特性: 项目编号:[项目] 区域:us-central1-f clusterId: $(ref.myclus.name) 节点池: 名称:my-clus-pool2 初始节点计数:0 版本:“1.13” 配置: 图像类型:ubuntu

较新的 API(提供更多功能并允许您使用更多功能,包括 v1beta1 API 和 beta 功能)如下所示:

资源: - 名称:myclus 类型:gcp-types/container-v1:projects.locations.clusters 特性: 父:projects/shared-vpc-231717/locations/us-central1-f 簇: 名称:我的clus 区域:us-central1-f 网络:共享-vpc subnetwork: local-only ### 如果使用默认网络,请将此字段留空 初始集群版本:“1.13” 节点池: - 名称:my-clus-pool1 初始节点计数:0 配置: 图像类型:cos - 名称:我的池 2 类型:gcp-types/container-v1:projects.locations.clusters.nodePools 特性: 父:projects/shared-vpc-231717/locations/us-central1-f/clusters/$(ref.myclus.name) 节点池: 名称:我的集群分离池 初始节点计数:0 版本:“1.13” 配置: 图像类型:ubuntu

另外注意,您可能想要修改您的范围,当前范围不允许您从 gcr.io 拉取图像,一些系统 pod 可能无法正常启动,如果您使用的是 Google 的存储库,您将无法拉出这些图像。

最后,您不想在集群规范中和单独重复节点池资源。相反,使用基本(默认)节点池创建集群,对于所有其他节点池,将它们创建为单独的资源以管理它们而无需通过集群。除了调整大小之外,您可以对节点池执行的更新很少

【讨论】:

Patrick 我修改了清单中的节点池部分,我目前收到此错误:(gcloud.deployment-manager.deployments.create) 操作错误 [operation-1568298555753-5925bf65143be-b311958e-826aaeec ]:错误:- 代码:CONDITION_NOT_MET 位置:/deployments/myclus-2/resources/myclus-pool1->$.properties 消息:'"":域:验证;关键字:属性;消息:未找到所需的属性;缺失:["clusterId","zone"];必需:["clusterId","zone"]' 看起来他们实际上还没有弃用节点池。有趣的是,这些 API 的文档并不是 100%。吉普你当前的节点池配置现在,它最终会改变,所以记住新的语法 操作错误 [operation-1568317977011-592607bea270a-5e00f3bc-cad3eb1e]:错误:- 代码:RESOURCE_ERROR 位置:/deployments/myclus-0/resources/myclus-pool2 消息:'"ResourceType" :"container.v1.nodePool","ResourceErrorCode":"404","ResourceErrorMessage":"code":404,"message":"未找到:projects/projectearth-251012/zones/us-east4-a/ clusters/myclus.","status":"NOT_FOUND","statusMessage":"Not Found","re​​questPath":"container.googleapis.com/v1/projects/projectearth-251012/zones/…"' 现在收到此错误,即使一切看起来都很好。错误操作 [operation-1568319955670-59260f1da1574-02f3d3bf-1305e804]:-code:RESOURCE_ERR 位置:/deployments/myclus-0/resources/myclus-pool1 '"ResourceType":"container.v1.nodePool","ResourceErrorCode": "404","ResourceErrorMessage":"code":404,"message":"未找到:projects/projectearth-251012/zones/us-east4-a/clusters/myclus。","status":"NOT_FOUND" ,"statusMessage":"未找到","re​​questPath":"container.googleapis.com/v1/projects/projectearth-251012/zones/…"' 感谢那些不是真正的项目 ID。我明白你的意思

以上是关于使用自定义网络的 gke 集群部署的主要内容,如果未能解决你的问题,请参考以下文章

在 GKE 集群上使用 Terraform 部署 Helm 工作负载

无法在 gke 集群上部署带有通量的 Git 存储库接收器

将现有 GKE 集群添加到 terraform stat 文件

第140天学习打卡(Docker --link 自定义网络 网络连通 部署Redis集群 发布SpringBoot镜像)

使用 Terraform 管理 GKE 及其部署

Docker——Docker网络(Network)+ 部署Redis高可用集群