Kubernetes 이야기

Typescript client for kubernetes 본문

개발/typescript

Typescript client for kubernetes

kmaster 2022. 3. 9. 19:55
반응형

TypeScript로 Kubernetes api 호출하는 방법을 알아보자.

 

먼저 npm init 로 프로젝트를 생성해 보자.

 

# npm init

 

이제 TypeScript 와 필요한 client 를 설치해 보자.

# npm install -g typescript

 

Javascript용 Kubernetes client api를 설치하자.

# npm install @kubernetes/client-node

 

설치되어 있는 Kubernetes default Namespace에 Pod List를 얻어오는 샘플을 만들어 보자.

 

import k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();

const k8sApi = kc.makeApiClient(k8s.CoreV1Api);

k8sApi.listNamespacedPod('default')
    .then((res) => {
        console.log(res.body.items.map((pod) => pod.metadata!.name!))
    });

 

이제 컴파일 후 실행 해 보면 아래오 같이 출력되는걸 볼 수 있다.

 

node index.js
[
  'hello-v2-7b5b8f988c-2tq2n',
  'hello-v2-7b5b8f988c-h8mgw',
  'hello-v2-7b5b8f988c-v4kxt'
]

 

다음은 deployment를 출력하는 샘플을 보자

 

import k8s = require('@kubernetes/client-node');
import Table = require('easy-table');

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

const appsV1Api = kc.makeApiClient(k8s.AppsV1Api);
const coreV1Api = kc.makeApiClient(k8s.CoreV1Api);

async function getDeployments() {
  const deploymentsRes = await appsV1Api.listNamespacedDeployment('default');
  const deployments = [];
  for (const deployment of deploymentsRes.body.items) {
    deployments.push({
        name: deployment.metadata!.name,
        status: deployment.status!.conditions![0].status,
        image: deployment.spec!.template!.spec!.containers![0].image,
    });
  }

  await renderTable(deployments);
}

async function renderTable(data: any, showHeader = true) {
    const table = new Table();
    for (const d of data) {
        table.cell('Deployment', d.name);
        table.cell('Status', d.status ? 'running' : 'stopped');
        table.cell('Image', d.image);
        table.newRow();
    };
    table.sort(['Role|asc']);
    if (showHeader) {
        console.log(table.toString());
    } else {
        console.log(table.print());
    }
}

getDeployments().catch(console.error.bind(console));

 

참고

https://github.com/kubernetes-client/javascript

https://blog.codewithdan.com/using-the-kubernetes-javascript-client-library/

반응형

'개발 > typescript' 카테고리의 다른 글

Typescript 설치  (0) 2022.03.09
Comments