Выполнение команд kubectl из модуля (контейнера) возможно и просто. Хотя более практично и рекомендуется вместо этого использовать Kubernetes API.
Для них обоих вы должны предоставить правильные разрешения для своих модулей, чтобы они могли пройти аутентификацию, чтобы иметь возможность выполнять вызовы API k8s (kubectl - это просто приложение, которое общается с вашим кластером через API).
Вот хороший пример от mster :
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s-101
spec:
replicas: 3
template:
metadata:
labels:
app: k8s-101
spec:
serviceAccountName: k8s-101-role
containers:
- name: k8s-101
imagePullPolicy: Always
image: yourrepo/yourcontainer
ports:
- name: app
containerPort: 3000
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: k8s-101-role
subjects:
- kind: ServiceAccount
name: k8s-101-role
namespace: default
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: k8s-101-role
Здесь мы даем кластер-роли для модулей развертывания и рассматриваем его как плохой пример, так как он опасен , он выставляет ваш кластер.
Затем вам нужно подготовить свои контейнеры для встроенного kubectl:
- Загрузить и построить
kubectl
внутри контейнера - Собрать приложение, скопировав
kubectl
в свой контейнер - Вуаля!
kubectl
предоставляет богатый клиентский интерфейс для управления вашим кластером кубернетов
Если вы предпочитаете общаться напрямую с API, вы больше ничего делать не надо. Просто go к документации , чтобы понять, как совершать звонки, а также проверьте Кластеры доступа с использованием Kubernetes API .