createDeployment() с помощью клиента Kubernetes JavaScript

#javascript #kubernetes #kubectl

#javascript #kubernetes #kubectl

Вопрос:

Я пытаюсь создать развертывание или набор копий с помощью клиента Kubernetes Javascript. Документация клиента Kubernetes javascript практически не существует.

Есть ли какой-нибудь способ добиться этого?

Комментарии:

1. Да, вы смотрели примеры клиентов javascript? github.com/kubernetes-client/javascript/blob/master/examples /…

Ответ №1:

Предполагая, что с помощью:

  • createDeployment()
  • вы имеете в виду: createNamespacedDeployment()

Вы можете использовать приведенный ниже фрагмент кода для создания Deployment клиентской библиотеки с использованием Javascript:

 const k8s = require('@kubernetes/client-node');

const kc = new k8s.KubeConfig();
kc.loadFromDefault();

const k8sApi = kc.makeApiClient(k8s.AppsV1Api); // <-- notice the AppsV1Api

// Definition of the deployment
var amazingDeployment = {
    metadata: {
       name: 'nginx-deployment'
    },
    spec: {
       selector: {
          matchLabels: {
             app: 'nginx'
          }
       },
       replicas: 3,
       template: {
          metadata: {
             labels: {
                app: 'nginx'
             }
          },
          spec: {
             containers: [
                {
                   name: 'nginx',
                   image: 'nginx'
                   
                } ]
          }
       }
    }
 };

// Sending the request to the API
k8sApi.createNamespacedDeployment('default', amazingDeployment).then(
  (response) => {
    console.log('Yay! nYou spawned: '   amazingDeployment.metadata.name);
  },
  (err) => {
    console.log('Oh no. Something went wrong :(');
    // console.log(err) <-- Get the full output!
  }
);
  

Отказ от ответственности!

Этот код предполагает, что ваш ~/.kube/config уже настроен!

Запуск этого кода в первый раз с:

  • $ node deploy.js

должен выводить:

 Yay! 
You spawned: nginx-deployment
  

Вы можете проверить Deployment , существует ли:

  • $ kubectl get deployment nginx-deployment
 NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           6m57s
  

Повторный запуск этого кода приведет к выводу (развертывание уже существует!):

 Oh no. Something went wrong :(
  

Дополнительные ресурсы:

Комментарии:

1. Есть ли текущий способ сделать это? Я попробовал код и не смог заставить его работать с версией 0.13.2 sdk.

Ответ №2:

Будьте осторожны при попытке развертывания различных ресурсов, таких как deployment или service.

Вам нужно правильно указать версию API.

 const k8sApi = kc.makeApiClient(k8s.AppsV1Api) or (k8s.CoreV1Api) for namespace and etc.
  

Ответ №3:

Сначала вы создаете объект конфигурации kube, а затем создаете связанный тип API. То есть,

 import k8s from '@kubernetes/client-node';

const kubeConfig = new k8s.KubeConfig();
kubeConfig.loadFromCluster(); // Or whatever method you choose

const api = kubeConfig.makeApiClient(k8s.CoreV1Api); // Or whatever API 
                                                           // you'd like to 
                                                           // use.

const namespace = 'default';
const manifest = new k8s.V1ConfigMap();

// ... additional manifest setup code...

await api.createNamespacedConfigMap(namespace, manifest);

  

В этом суть. Если хотите, я недавно создал библиотеку с целью упрощения взаимодействия с API kubernetes javascript, и ее можно найти здесь:

https://github.com/ThinkDeepTech/k8s

Если это не поможет вам напрямую, возможно, это может послужить примером того, как взаимодействовать с API. Я надеюсь, что это поможет!

Кроме того, убедитесь, что приложение, выполняющее этот код, имеет необходимые разрешения (т.Е. Роли K8s, привязки ролей и конфигурации ServiceAccount), необходимые для выполнения действий, которые вы пытаетесь выполнить. В противном случае он выдаст ошибку.