☸️ Простое управление несколькими кластерами Kubernetes с помощью kubectl & kubectx

by itisgood

Kubectl – это утилита командной строки, используемая для контроля и управления кластерами Kubernetes и объектами, на которых они работают.

Kubectl позволяет создавать, изменять и удалять различные ресурсы Kubernetes, такие как Deployments, Pod, Services, контексты переключения и даже для доступа к оболочке контейнера.

Мы начнем с установки kubectl, а затем перейдем к конфигурациям, которые должны быть более эффективными при управлении кластерами Kubernetes из CLI с помощью kubectl.

Обратите внимание, что у вас должен быть работающий кластер Kubernetes, прежде чем использовать это руководство.

Проверьте любое из наших руководств, показанное ниже.

Установка Kubectl на Linux и MacOS

При установке кластера Kubernetes вы должны установить kubectl в качестве основного требования.

Но это означает, что вам нужно войти на главный узел для запуска команд kubectl.

Вы можете установить kubectl на свой локальный компьютер с Linux или macOS.

Установка kubectl в Linux

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

Подтвердите вашу установку kubectl.

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:23:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3-k3s.2", GitCommit:"e7e6a3c4e9a7d80b87793612730d10a863a25980", GitTreeState:"clean", BuildDate:"2019-11-18T18:31:23Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}

Установка kubectl на macOS

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version

Настройка Kubectl

Инструмент kubectl ищет файл с именем config в каталоге $HOME/.kube, но отдельный файл можно указать с помощью параметра –kubeconfig.

Файлы kubeconfig помогают вам организовать информацию о кластерах, пользователях, пространствах имен и механизмах аутентификации.

$ ls $HOME/.kube/config
/home/jmutai/.kube/config
В этой конфигурации вам необходимо установить следующие элементы:
  • clusters – для настройки доступа к кластеру необходимо знать местоположение кластера и иметь учетные данные для доступа к нему. В этом разделе  вы зададите certificate-authority-data, access URL  и name
  • context: элемент context используется для группировки параметров доступа под удобным именем. Каждый контекст в файле конфигурации должен иметь три параметра:cluster, namespace, и user.
  • users: укажите используемый доступ аутентификации и учетные данные.

Для одного кластера ваш файл конфигурации будет выглядеть примерно так, как показано ниже.

cat .kube/config 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWakNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFUzTkRNNE16ZzJOVEFlRncweE9URXhNakl3TURVeE1EVmFGdzB5T1RFeE1Ua3dNRFV4TURWYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFUzTkRNNE16ZzJOVEJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQkpsb3NSY1FRTHlsL28yeFltQ0l4eHdsZ1F3ZTdlU1dxQmNaRFQ3Q2xJcXoKNnB4R24yb2w3MHM3N3dpcTNaRnkrSW0vdFhHSW16Y3N6MHFNYUpjUy9rV2pJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVJcjZ6NGRMUUw1Ck8wSUN3ejBWUEdhYUs0bEU3bFU3SmJXTWhoRk9vcDh1QWlBKzZhcG9NMFVtZ1IxYkFBeWNaS0VHL3AzQWRhWmEKMWV3TGxmUkxiWkJwa3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: 76dd75552cb14f3085445277a2091c6c
    username: admin
Получите URL-адрес кластера, данные CA и учетные данные пользователя, а затем подставьте их в файл.

Конфигурация Kubectl для нескольких кластеров 

Ниже приведен файл конфигурации шаблона для четырех кластеров Kubernetes, а именно:

  • k8s-dev – контекст k8s-dev, пользователь k8s-dev-admin.
  • k8s-staging – контекст – это k8s-staging, пользователь – k8s-staging-admin.
  • k8s-qa – контекст – k8s-qa, пользователь – k8s-qa-admin.
  • k8s-prod – контекст – это k8s-prod, пользователь – k8s-prod-admin.

Каждый кластер имеет уникальное имя, связанный контекст и пользователя.

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
    certificate-authority-data:
    server:
  name: k8s-dev

- cluster:
    certificate-authority-data:
    server:
  name: k8s-staging

- cluster:
    certificate-authority-data:
    server:
  name: k8s-qa

- cluster:
    certificate-authority-data:
    server:
  name: k8s-prod


contexts:
- context:
    cluster: k8s-dev
    user: k8s-dev-admin
  name: k8s-dev

- context:
    cluster: k8s-staging
    user: k8s-staging-admin
  name: k8s-staging

- context:
    cluster: k8s-qa
    user: k8s-qa-admin
  name: k8s-qa

- context:
    cluster: k8s-prod
    user: k8s-prod-admin
  name: k8s-prod

users:
- name: k8s-dev-admin
  user:
    password:
    username:

- name: k8s-staging-admin
  user:
    client-certificate-data:
    client-key-data:

- name: k8s-qa-admin
  user:
    client-certificate-data:
    client-key-data:

- name: k8s-prod-admin
  user:
    client-certificate-data:
    client-key-data:
Измените шаблон в соответствии с вашим вариантом использования и вставьте содержимое в $HOME/.kube/config.

Переключение между контекстами с kubectl

Просмотр текущих контекстов:
$ kubectl config get-contexts
CURRENT   NAME           CLUSTER        AUTHINFO             NAMESPACE
*         k8s-dev        k8s-dev        k8s-dev-admin        kube-system
          k8s-staging    k8s-staging    k8s-staging-admin    kube-system
          k8s-qa         k8s-qa         k8s-qa-admin         kube-system
          k8s-prod       k8s-prod       k8s-prod-admin       kube-system
Чтобы переключиться на другой контекст, используйте:
$ kubectl config use-context k8s-prod
Переключился на контекст "k8s-prod".

$ kubectl config use-context k8s-staging
Переключился на контекст "k8s-staging".

Тест:
$  kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
k3s-master01   Ready    master   10d   v1.16.3-k3s.2
k3s-worker01   Ready    <none>   9d    v1.16.3-k3s.2
k3s-worker02   Ready    <none>   9d    v1.16.3-k3s.2

Простое переключение контекста и пространства имен с помощью kubectx и kubens

kubectx помогает переключаться между кластерами вперед и назад, а kubens помогает плавно переключаться между пространствами имен Kubernetes:

Установите kubectx и kubens

wget https://raw.githubusercontent.com/ahmetb/kubectx/master/kubectx
wget https://raw.githubusercontent.com/ahmetb/kubectx/master/kubens
chmod +x kubectx kubens
sudo mv kubens kubectx /usr/local/bin

Помощь:

$ kubectx --help
USAGE:
  kubectx                       : list the contexts
  kubectx <NAME>                : switch to context <NAME>
  kubectx -                     : switch to the previous context
  kubectx -c, --current         : show the current context name
  kubectx <NEW_NAME>=<NAME>     : rename context <NAME> to <NEW_NAME>
  kubectx <NEW_NAME>=.          : rename current-context to <NEW_NAME>
  kubectx -d <NAME> [<NAME...>] : delete context <NAME> ('.' for current-context)
                                  (this command won't delete the user/cluster entry
                                  that is used by the context)

$ kubens --help
USAGE:
  kubens                    : list the namespaces in the current context
  kubens <NAME>             : change the active namespace of current context
  kubens -                  : switch to the previous namespace in this context
  kubens -c, --current      : show the current namespace
  kubens -h,--help          : show this message

Примеры:

# Вывести все контексты
$ kubectx
k8s-dev 
k8s-staging
k8s-qa
k8s-prod

# Переключиться на контекст k8s-prod
$ kubectx k8s-prod

# Отобразить все неймспейсы
$ kubens

# Переключиться на др. неймспейс
$ kubens <namespacename>

Далее гифки для демонстрации

kubectx demo GIF
kubens demo GIF
Я надеюсь, что наше руководство было полезным в вашем путешествии в мире Kubernetes с помощью kubectl и других инструментов, таких как kubectx и kubens.

 

You may also like

Leave a Comment