Как получить все запущенные POD в кластере Kubernetes - PullRequest
0 голосов
/ 12 июня 2019

Эта простая программа Node.js прекрасно работает на локальном компьютере, поскольку она извлекает конфигурацию kubernetes из моего локального файла /root/.kube/config

const Client = require('kubernetes-client').Client;
const Config = require('kubernetes-client/backends/request').config;

const client = new K8sClient({ config: Config.fromKubeconfig(), version: '1.13' });

const pods = await client.api.v1.namespaces('xxxxx').pods.get({ qs: { labelSelector: 'application=test' } });
console.log('Pods: ', JSON.stringify(pods));

Теперь я хочу запустить его как контейнер Docker на кластере и получить все POD текущего кластера (для того же / текущего пространства имен). Теперь, конечно, это не удается:

Error:  { Error: ENOENT: no such file or directory, open '/root/.kube/config'

Так, как заставить это работать, когда развернуто как контейнер Docker к кластеру? Эта небольшая служба должна сканировать все работающие POD ... Предположим, что ей не нужны данные конфигурации извлечения, поскольку она уже развернута. Поэтому ей необходим доступ к POD в текущем кластере

1 Ответ

2 голосов
/ 12 июня 2019

Пару концепций, которые вам понадобятся:

Для достижения конечной цели (которая, если я правильно понимаю): Контейнер Узел JS Приложение

Шаг 1: Поместить приложениев контейнере

Шаг 2. Создайте развертывание / statefulset / daemonset в соответствии с вашими требованиями, используя контейнер, созданный выше в шаге 1

Объяснение:

На шаге 2 выше {по умолчанию}, если вы не указали (явно) служебную учетную запись (настраиваемую), тогда это будет учетная запись по умолчанию с учетными даннымикоторые смонтированы внутри контейнера (по умолчанию) здесь

volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-xxxx
      readOnly: true

, что может быть проверено этой командой после (успешного) создания модуля

kubectl get pod -n {yournamespace(by default is default)} POD_NAME -o yaml

Сейчас (Удачи !!) если вы не можете получить доступ к кластеру с этими учетными данными, то в зависимости от того, какую учетную запись выпеть и права этой учетной записи должны быть доступны.Например, если вы используете abc serviceaccount, у которого нет привязки к нему, вы не сможете просматривать кластер.В этом случае вам необходимо создать (сначала) роль (для чтения модулей) и привязку роли (для этой роли) к учетной записи службы.

UPDATE :Проблема была решена путем изменения Config.fromKubeconfig() на Config.getInCluster() Ref Пояснение: функция fromKubeconfig() хороша, если вы запускаете свое приложение на узле, который является частью кластера kubernetes и в котором сохранен токен доступа к кластеру: /$USER/.kube/config, но если вы хотите запустить приложение nodeJS в контейнере в модулетогда вам понадобится Config.getInCluster() для загрузки токена.если вы достаточно любопытны, проверьте комментарии этого ответа!: P

Примечание: здесь обсуждаемая библиотека nodejs this

...