Вызов 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()
для получения клиента, в то время как последний аутентифицируется через учетную запись по умолчанию, установленную в переменных среды.