How to specify a GKE node pool configuration in a YAML file instead of using gcloud container node-pools create?

7/27/2019

It seems that the only way to create node pools on Google Kubernetes Engine is with the command gcloud container node-pools create. I would like to have all the configuration in a YAML file instead. What I tried is the following:

apiVersion: v1
kind: NodeConfig
metadata:
  annotations:
    cloud.google.com/gke-nodepool: ares-pool
spec:
  diskSizeGb: 30
  diskType: pd-standard
  imageType: COS
  machineType: n1-standard-1
  metadata:
    disable-legacy-endpoints: 'true'
  oauthScopes:
  - https://www.googleapis.com/auth/devstorage.read_only
  - https://www.googleapis.com/auth/logging.write
  - https://www.googleapis.com/auth/monitoring
  - https://www.googleapis.com/auth/service.management.readonly
  - https://www.googleapis.com/auth/servicecontrol
  - https://www.googleapis.com/auth/trace.append
  serviceAccount: default

But kubectl apply fails with:

error: unable to recognize "ares-pool.yaml": no matches for kind "NodeConfig" in version "v1"

I am surprised that Google yields almost no relevant results for all my searches. The only documentation that I found was the one on Google Cloud, which is quite incomplete in my opinion.

-- rubik
google-kubernetes-engine
kubernetes

1 Answer

7/27/2019

Node pools are not Kubernetes objects, they are part of the Google Cloud API. Therefore Kubernetes does not know about them, and kubectl apply will not work.

What you actually need is a solution called "infrastructure as code" - a code that will tell GCP what kind of node pool it wants.

If you don't strictly need YAML, you can check out Terraform that handles this use case. See: https://terraform.io/docs/providers/google/r/container_node_pool.html

You can also look into Google Deployment Manager or Ansible (it has GCP module, and uses YAML syntax), they also address your need.

-- Utku Ă–zdemir
Source: StackOverflow