Kubernetes客户端节点

时间:2018-10-22 13:34:35

标签: node.js kubernetes azure-aks

我正在使用AKS(Azure k8),此选项需要k8s node.js客户端

按名称杀死豆荚
更改部署窗格的数量
重新启动所有部署吊舱

我只需要此功能,女巫lib对此最合适?

也请提供一些使用lib的示例来实现某些功能。

谢谢

更新

我喜欢这个Node.js (TypeScript) github.com/Goyoo/node-k8s-client,能否提供有关服务帐户和访问权限的更多信息?

3 个答案:

答案 0 :(得分:1)

这是所有客户端库的完整列表。

https://kubernetes.io/docs/reference/using-api/client-libraries/

您将需要创建一个服务帐户和角色绑定,以配置适当的权限,以便从客户端库执行这些操作。

node.js特定的库:

  

Node.js(TypeScript)github.com/Goyoo/node-k8s-client

     

Node.js github.com/tenxcloud/node-kubernetes-client

     

Node.js github.com/godaddy/kubernetes-client

基本示例(使用godaddy客户端)

/* eslint no-console:0 */
//
// Demonstrate some of the basics.
//
const Client = require('kubernetes-client').Client;
const config = require('kubernetes-client').config;

const deploymentManifest = require('./nginx-deployment.json');

async function main() {
  try {
    const client = new Client({ config: config.fromKubeconfig(), version: '1.9' });

    //
    // Get all the Namespaces.
    //
    const namespaces = await client.api.v1.namespaces.get();
    console.log('Namespaces: ', namespaces);

    //
    // Create a new Deployment.
    //
    const create = await client.apis.apps.v1.namespaces('default').deployments.post({ body: deploymentManifest });
    console.log('Create: ', create);

    //
    // Fetch the Deployment we just created.
    //
    const deployment = await client.apis.apps.v1.namespaces('default').deployments(deploymentManifest.metadata.name).get();
    console.log('Deployment: ', deployment);

    //
    // Change the Deployment Replica count to 10
    //

    const replica = {
      spec: {
        replicas: 10
      }
    };

    const replicaModify = await client.apis.apps.v1.namespaces('default').deployments(deploymentManifest.metadata.name).patch({ body: replica });
    console.log('Replica Modification: ', replicaModify);

    //
    // Modify the image tag
    //
    const newImage = {
      spec: {
        template: {
          spec: {
            containers: [{
              name: 'nginx',
              image: 'nginx:1.8.1'
            }]
          }
        }
      }
    };
    const imageSet = await client.apis.apps.v1.namespaces('default').deployments(deploymentManifest.metadata.name).patch({ body: newImage });
    console.log('New Image: ', imageSet);

    //
    // Remove the Deployment we created.
    //
    const removed = await client.apis.apps.v1.namespaces('default').deployments(deploymentManifest.metadata.name).delete();
    console.log('Removed: ', removed);
  } catch (err) {
    console.error('Error: ', err);
  }
}

main();

答案 1 :(得分:0)

答案 2 :(得分:0)

我推荐kubernetes-client/javascript。在我最喜欢原始API方法的所有API中,您可以看到一个示例here。原因是

  1. 根据我的经验,大多数时候我都是使用kubernetes客户端来执行可以通过运行kubectl命令获得结果的工作。该命令具有非常统一的格式和模式,可操作不同的资源,例如pod,命名空间等。k8内部提供的其余API也遵循kubectl命令的相同模式。因此,本质上,关键代码是高度可重用且组织良好的代码。
  2. 基于以上几点,使用API​​时,定义统一模式非常容易。我们可以用一种优雅的方式来处理响应,错误处理,日志等。该代码将简洁明了,易于理解,因此易于维护。