Контекст kubectl против кластера
В чем разница между контекстом и кластером в мире конфига kubectl и kubernetes? Например, я вижу эти команды:
Available Commands:
current-context Displays the current-context
delete-cluster Delete the specified cluster from the kubeconfig
delete-context Delete the specified context from the kubeconfig
get-clusters Display clusters defined in the kubeconfig
get-contexts Describe one or many contexts
rename-context Renames a context from the kubeconfig file.
set Sets an individual value in a kubeconfig file
set-cluster Sets a cluster entry in kubeconfig
set-context Sets a context entry in kubeconfig
и в.kube/config я вижу:
- context:
cluster: arn:aws:eks:us-west-2:91XXXXXXX71:cluster/ignitecluster
namespace: ignite
user: arn:aws:eks:us-west-2:91XXXXXXX71:cluster/ignitecluster
name: arn:aws:eks:us-west-2: 91XXXXXXX71:cluster/ignitecluster
2 ответа
Кластеры
Кластер - это место, где настраиваются все компоненты, возможности и рабочие нагрузки Kubernetes.
Кластеры в Kubernetes идентифицируются соответствующими сертификатами центров сертификации (CA). Например, у вас есть три кластера.
rewanth@ubuntu:~$ cat ~/.kube/config
...
clusters:
- cluster:
certificate-authority: /home/rewanth/.minikube/development-ca.crt
server: https://192.168.177.136:8443
name: development
...
Пользователи
Пользователи в Kubernetes идентифицируются соответствующими сертификатами клиента / пользователя. Например, предположим, что у вас есть три пользователя.
rewanth@ubuntu:~$ cat ~/.kube/config
...
users:
- name: admin
user:
client-certificate: /home/rewanth/.minikube/admin.crt
client-key: /home/rewanth/.minikube/admin.key
...
Контексты
Итак, пользователь должен предоставить как cluster
сертификаты и user
сертификаты для проверки и запуска рабочих нагрузок на целевом ресурсе.
Нам нужно предоставить три сертификата для выполнения рабочих нагрузок в любом кластере.
- Один сертификат ЦС для кластера
- Два сертификата для пользователя: закрытый ключ и открытый ключ
Контекст упрощает эту работу, комбинируя конфигурации / сертификаты пользователя и кластера.
rewanth@ubuntu:~$ cat ~/.kube/config
...
contexts:
- context:
cluster: staging
user: user1
name: Context1
- context:
cluster: development
user: admin
name: Context2
- context:
cluster: development
namespace: private
user: user1
name: Context4
...
Итак, просто ссылаясь на Context2
означает, что мы хотим войти в Development
кластер как admin
пользователь.
Context4
означает, что мы хотим войти в private
пространство имен в development
кластер как user1
пользователь.
Context1
означает, что мы хотим войти в staging
кластер как user1
пользователь.
ВАЖНАЯ ЗАМЕТКА
Контекст не создает новых пользователей / кластеров. Контекст просто устанавливает новое сопоставление, упрощающее переключение между несколькими кластерами.
Кластер определяет конечную точку соединения для API Kubernetes кластера.
Пользователь определяет учетные данные для подключения к кластеру.
Контекст определяет как кластер, так и пользователя.
Кластер: Kubernetes объединяет отдельные физические или виртуальные машины в кластер, используя общую сеть для связи между каждым сервером. Этот кластер является физической платформой, в которой настроены все компоненты, возможности и рабочие нагрузки Kubernetes.
Контекст. Контекст - это просто набор параметров доступа, который содержит кластер Kubernetes, пользователя и пространство имен.
Текущий контекст - это кластер, который в настоящее время используется по умолчанию для kubectl, и все команды kubectl выполняются для этого кластера.
Из https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl:
A context is a group of access parameters.
Each context contains a Kubernetes cluster, a user, and a namespace.
The current context is the cluster that is currently the default for kubectl:
all kubectl commands run against that cluster
Итак, contextX = {clusterX, userX, namespaceX}