createDeployment() 与 Kubernetes JavaScript 客户端

createDeployment() with Kubernetes JavaScript client

我正在尝试使用 Kubernetes Javascript 客户端创建部署或副本集。 Kubernetes javascript 客户端文档几乎不存在。

有什么办法可以实现吗?

假设通过:

  • createDeployment()
  • 您指的是:createNamespacedDeployment()

您可以使用下面的代码片段创建一个使用 Javascript 客户端库的 Deployment

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!
  }
);

Disclaimer!

This code assumes that you have your ~/.kube/config already configured!

运行此代码第一次使用:

  • $ 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 :(

其他资源:

尝试部署不同类型的资源(例如部署或服务)时要小心。

您需要正确指定 API 版本。

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

首先,您创建一个 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);

这就是它的要点。如果您愿意,我最近创建了一个库,旨在简化与 kubernetes 的交互 javascript api,可以在此处找到它:

https://github.com/ThinkDeepTech/k8s

如果它不能直接帮助您,也许它可以作为如何与 API 交互的示例。希望对您有所帮助!

此外,请确保执行此代码的应用程序具有执行您正在尝试的操作所需的必要权限(即 K8s 角色、RoleBinding 和 ServiceAccount 配置)。否则会报错。