【问题标题】:createDeployment() with Kubernetes JavaScript client使用 Kubernetes JavaScript 客户端的 createDeployment()
【发布时间】:2022-04-06 05:01:13
【问题描述】:

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

有什么办法可以做到吗?

【问题讨论】:

标签: javascript kubernetes kubectl


【解决方案1】:

假设:

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

您可以使用以下代码 sn-p 使用 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!
  }
);

免责声明!

此代码假定您已经配置了 ~/.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 :(

其他资源:

【讨论】:

  • 目前有这样做的方法吗?我尝试了代码,但无法使其与 sdk 的 0.13.2 版本一起使用。
【解决方案2】:

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

您需要正确指定 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);
    
    

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

    https://github.com/ThinkDeepTech/k8s

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2018-07-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2021-09-30
      • 2023-02-16
      相关资源
      最近更新 更多