#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), необходимые для выполнения действий, которые вы пытаетесь выполнить. В противном случае он выдаст ошибку.