Вызов GKE REST/Node API для получения количества узлов в пуле?

Как я могу получить текущий размер пула узлов GKE с помощью REST (или Node) API?

Я управляю своим собственным рабочим пулом, используя свое приложение Express, работающее в моем кластере, и могу установить размер пула и отслеживать успешность операции setSize, но я не вижу API для получения текущего количества узлов. Ресурс NodePool включает только исходное количество узлов, но не текущее количество. Я не хочу использовать gcloud или kubectl на одной из моих рабочих виртуальных машин.

Я мог бы обойти GKE и попытаться определить размер с помощью API Compute Engine (GCE), но я еще не изучал этот подход. Обратите внимание, что получить количество узлов даже из драйвера стека сложно. Кто-нибудь нашел обходные пути для получения текущего размера узла?

1 ответ

Размер рабочего пула можно получить из Compute Engine API, получив группу экземпляров, связанную с пулом узлов.

      const { google } = require('googleapis')
const Compute = require('@google-cloud/compute')

const container = google.container('v1')
const compute = new Compute()

const projectId = 'project-12345'
const zone = 'us-central1-a'
const nodePoolId = 'worker-pool'
const clusterId = 'cluster-name'

async function authorize() {
  const auth = new google.auth.GoogleAuth({
    scopes: [ 'https://www.googleapis.com/auth/cloud-platform' ],
  })
  return auth.getClient()
}

const getNodePoolSize = async () => {
  const auth = await authorize()
  const clusterName = `projects/${projectId}/zones/${zone}/clusters/${clusterId}`
  const request = { name: clusterName, auth }
  const response = await container.projects.locations.clusters.get(request)
  const nodePool = response.data.nodePools.find(({ name }) => name === nodePoolId)
  const igName = nodePool.instanceGroupUrls[0].match(/.*\/instanceGroupManagers\/([a-z0-9-]*)$/)[1]
  const instanceGroup = await compute.zone(zone).instanceGroup(igName).get()
  return instanceGroup[1 /* 0 is config, 1 is instance */].size
}

Обратите внимание, что здесь используются два разных механизма Node API. Мы могли бы использовать google.compute вместо @google-cloud/compute. Кроме того, эти два API аутентифицируются по-разному. Первый использует authorize() для получения клиента, в то время как последний аутентифицируется через учетную запись по умолчанию, установленную в переменных среды.

Другие вопросы по тегам