Установка kubectl в windows 10

Инструмент командной строки Kubernetes kubectl позволяет запускать команды для кластеров Kubernetes. Вы можете использовать kubectl для развертывания приложений, проверки и управления ресурсов кластера, а также для просмотра логов. Полный список возможных операций для kubectl смотрите в Обзоре kubectl.

Подготовка к работе

Используемая вами мажорная версия kubectl не должна отличаться от той, которая используется в кластере. Например, версия v1.2 может работать с версиями v1.1, v1.2 и v1.3. Использование последней версии kubectl поможет избежать непредвиденных проблем.

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

Установка бинарного файла kubectl с помощью curl в Linux

  1. Загрузите последнюю версию с помощью команды:

    curl -LO https://dl.k8s.io/release/`curl -LS https://dl.k8s.io/release/stable.txt`/bin/linux/amd64/kubectl
    

    Чтобы загрузить определенную версию, вставьте в фрагмент команды $(curl -LS https://dl.k8s.io/release/stable.txt) нужную версию.

    Например, команда загрузки версии 1.28.2 для Linux будет выглядеть следующим образом:

    curl -LO https://dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl
    
  2. Сделайте бинарный файл kubectl исполняемым:

    chmod +x ./kubectl
    
  3. Переместите бинарный файл в директорию из переменной окружения PATH:

    sudo mv ./kubectl /usr/local/bin/kubectl
    
  4. Убедитесь, что установлена последняя версия:

    kubectl version --client
    

Установка с помощью встроенного пакетного менеджера

  • Ubuntu, Debian или HypriotOS
  • CentOS, RHEL или Fedora
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubectl

Установка с помощью стороннего пакетного менеджера

  • Snap
  • Homebrew

Если вы используете Ubuntu или другой Linux-дистрибутив, в котором есть пакетный менеджер snap, kubectl доступен в виде приложения snap.

snap install kubectl --classic

kubectl version

Если вы работаете в Linux и используете пакетный менеджер Homebrew, то kubectl можно установить через него.

brew install kubectl

kubectl version

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

Установка бинарного файла kubectl с помощью curl в macOS

  1. Загрузите последнюю версию:

    curl -LO "https://dl.k8s.io/release/$(curl -LS https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
    

    Чтобы загрузить определенную версию, вставьте в фрагмент команды $(curl -LS https://dl.k8s.io/release/stable.txt) нужную версию.

    Например, команда загрузки версии 1.28.2 для macOS будет выглядеть следующим образом:

    curl -LO https://dl.k8s.io/release/v1.28.2/bin/darwin/amd64/kubectl
    
  2. Сделайте бинарный файл kubectl исполняемым:

    chmod +x ./kubectl
    
  3. Переместите бинарный файл в директорию из переменной окружения PATH:

    sudo mv ./kubectl /usr/local/bin/kubectl
    
  4. Убедитесь, что установлена последняя версия:

    kubectl version --client
    

Установка с помощью Homebrew в macOS

Если вы используете macOS и Homebrew, то kubectl можно установить с помощью пакетного менеджера Homebrew.

  1. Выполните команду установки:

    brew install kubectl
    

    Или:

    brew install kubernetes-cli
    
  2. Убедитесь, что установлена последняя версия:

    kubectl version --client
    

Установка с помощью Macports в macOS

Если вы используйте macOS и Macports, то kubectl можно установить с помощью пакетного менеджера Macports.

  1. Выполните команду установки:

    sudo port selfupdate
    sudo port install kubectl
    
  2. Убедитесь, что установлена последняя версия:

    kubectl version --client
    

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

Установка бинарного файла kubectl с помощью curl в Windows

  1. Загрузите последнюю версию 1.28.2 по этой ссылке.

    Либо, если у вас установлен curl, выполните команду ниже:

    curl -LO https://dl.k8s.io/release/v1.28.2/bin/windows/amd64/kubectl.exe
    

    Последнюю стабильную версию (например, при написании скриптов) вы можете узнать из файла по ссылке https://dl.k8s.io/release/stable.txt.

  2. Переместите бинарный файл в директорию из переменной окружения PATH:

  3. Убедитесь, что версия kubectl соответствует загружённой:

    kubectl version --client
    

Установка с помощью Powershell из PSGallery

Если вы работаете в Windows и используете менеджер пакетов Powershell Gallery, вы можете установить и обновить kubectl с помощью Powershell.

  1. Выполните команды по установке (обязательно укажите DownloadLocation):

    Install-Script -Name install-kubectl -Scope CurrentUser -Force
    install-kubectl.ps1 [-DownloadLocation <path>]
    

    Установщик создаст $HOME/.kube вместе с конфигурационным файлом.

  2. Убедитесь, что установлена последняя версия:

    kubectl version --client
    

Установка в Windows с помощью Chocolatey или Scoop

Для установки kubectl в Windows вы можете использовать либо менеджер пакетов Chocolatey, либо установщик в командной строке Scoop.

  • choco
  • scoop
choco install kubernetes-cli
  1. Убедитесь, что установлена последняя версия:

    kubectl version --client
    
  2. Перейдите в домашнюю директорию:

    cd %USERPROFILE%
    
  3. Создайте директорию .kube:

    mkdir .kube
    
  4. Перейдите в созданную только что директорию .kube:

    cd .kube
    
  5. Настройте kubectl, чтобы было возможно использовать удаленный кластер Kubernetes:

    New-Item config -type file
    

Установка kubectl из SDK Google Cloud

Вы можете использовать kubectl из SDK Google Cloud, который использует этот CLI-инструмент.

  1. Установите Google Cloud SDK.

  2. Выполните команду для установки kubectl:

    gcloud components install kubectl
    
  3. Убедитесь, что установлена последняя версия:

    kubectl version --client
    

Проверка конфигурации kubectl

Чтобы kubectl мог найти и получить доступ к кластеру Kubernetes, нужен файл kubeconfig, который создаётся автоматически при создании кластера с помощью скрипта kube-up.sh или при успешном развертывании кластера Minikube. По умолчанию конфигурация kubectl находится в ~/.kube/config.

Посмотрите на состояние кластера, чтобы убедиться, что kubectl правильно сконфигурирован:

Если вы видите URL в ответ, значит kubectl корректно настроен для работы с вашим кластером.

Если вы видите сообщение следующего содержания, то значит kubectl настроен некорректно или не может подключиться к кластеру Kubernetes:

The connection to the server <server-name:port> was refused - did you specify the right host or port?

Например, если вы собираетесь запустить кластер Kubernetes на своем ноутбуке (локально), вам потребуется сначала установить специальный для этого инструмент, например Minikube, а затем снова выполнить указанные выше команды.

Если команда kubectl cluster-info возвращает URL в ответ, но вы не можете подключиться к своему кластеру, чтобы убедиться, что он правильно настроен, воспользуйтесь этой командой:

kubectl cluster-info dump

Дополнительная конфигурация kubectl

Включение автодополнения ввода shell

kubectl поддерживает автодополнение (автозаполнение) ввода в Bash и Zsh, которое сэкономит вам много времени на набор команд.

Ниже приведены инструкции по настройке автодополнения для Bash (для Linux и macOS) и Zsh.

  • Bash в Linux
  • Bash в macOS
  • Zsh

Основные сведения

Скрипт дополнения ввода kubectl для Bash может быть сгенерирован с помощью команды kubectl completion bash. Подключение скрипта дополнения ввода в вашу оболочку включает поддержку автозаполнения ввода для kubectl.

Однако скрипт дополнения ввода зависит от bash-completion, поэтому вам нужно сначала установить этот пакет (вы можете выполнить команду type _init_completion, чтобы проверить, установлен ли у вас уже bash-completion).

Установка bash-completion

bash-completion можно установить через многие менеджеры пакеты (см. здесь). Вы можете установить его с помощью apt-get install bash-completion или yum install bash-completion и т.д.

Приведенные выше команды создадут файл /usr/share/bash-completion/bash_completion, который является основным скриптом bash-completion. Возможно, вам потребуется вручную подключить этот файл в ~/.bashrc (необходимость выполнять эту операцию зависит от используемого менеджера пакетов).

Чтобы убедиться, что всё работает, перезагрузите оболочку и выполните команду type _init_completion. Если команда отработала успешно, установка сделана правильно, в противном случае добавьте следующее содержимое в файл ~/.bashrc:

source /usr/share/bash-completion/bash_completion

Перезагрузите вашу оболочку и убедитесь, что bash-completion правильно установлен, выполнив команду type _init_completion.

Включение автодополнения ввода kubectl

Теперь нужно убедиться, что скрипт дополнения ввода kubectl выполняется во всех сессиях командной оболочки. Есть два способа сделать это:

  • Добавьте запуск скрипта дополнения ввода в файл ~/.bashrc:

    echo 'source <(kubectl completion bash)' >>~/.bashrc
    
  • Добавьте скрипт дополнения ввода в директорию /etc/bash_completion.d:

    kubectl completion bash >/etc/bash_completion.d/kubectl
    
  • Если у вас определён псевдоним для kubectl, вы можете интегрировать его с автодополнением оболочки:

    echo 'alias k=kubectl' >>~/.bashrc
    echo 'complete -F __start_kubectl k' >>~/.bashrc
    

Оба подхода эквивалентны. После перезагрузки вашей оболочки автодополнение ввода для kubectl должно работать.

Основные сведения

Скрипт дополнения ввода kubectl для Bash может быть сгенерирован с помощью команды kubectl completion bash. Подключение скрипта дополнения ввода в вашей оболочке включает поддержку автозаполнения ввода для kubectl.

Однако скрипт дополнения ввода kubectl зависит от пакета bash-completion, который первым делом нужно установить.

Установка bash-completion

Вы можете проверить, установлен ли у вас bash-completion v2, набрав команду type _init_completion. Если он не установлен, вы можете сделать это с помощью Homebrew:

brew install bash-completion@2

Как указано в выводе этой команды, добавьте следующий код в файл ~/.bashrc:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Перезагрузите вашу командную оболочку и убедитесь, что bash-completion v2 корректно установлен, выполнив команду type _init_completion.

Включение автодополнения ввода kubectl

Теперь нужно убедиться, что скрипт дополнения ввода kubectl выполняется во всех сессиях командной оболочки. Есть два способа сделать это:

  • Добавьте запуск скрипта дополнения ввода в файл ~/.bashrc:

    echo 'source <(kubectl completion bash)' >>~/.bashrc
    
  • Добавьте скрипт дополнения ввода в директорию /etc/bash_completion.d:

    kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
    
  • Если у вас определён псевдоним для kubectl, вы можете интегрировать его с автодополнением оболочки:

    echo 'alias k=kubectl' >>~/.bashrc
    echo 'complete -F __start_kubectl k' >>~/.bashrc
    

Если вы установили kubectl с помощью Homebrew (как описано выше), то скрипт дополнения ввода kubectl уже должен быть находится в /usr/local/etc/bash_completion.d/kubectl. В этом случае вам не нужно ничего делать.

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

Скрипт дополнения ввода kubectl для Zsh может быть сгенерирован с помощью команды kubectl completion zsh. Подключение скрипта дополнения ввода в вашу оболочку включает поддержку автодополнения ввода для kubectl.

Чтобы подключить его во все сессии командной оболочки, добавьте следующую строчку в файл ~/.zshrc:

source <(kubectl completion zsh)

Если у вас определён псевдоним для kubectl, вы можете интегрировать его с автодополнением оболочки:

echo 'alias k=kubectl' >>~/.zshrc
echo 'compdef __start_kubectl k' >>~/.zshrc

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

Если появляется ошибка complete:13: command not found: compdef, то добавьте следующее содержимое в начало вашего файла ~/.zshrc:

autoload -Uz compinit
compinit

Что дальше

  • Установка Minikube.
  • Смотрите руководства по установке, чтобы узнать больше про создание кластеров.
  • Научитесь запускать и делать доступным приложение.
  • Если вам нужен доступ к кластеру, созданный не вами, посмотрите страницу Configure Access to Multiple Clusters.
  • Читайте референсную документацию kubectl.

StarWind VSAN

Change from v0 to v1 in the kubeconfig file from your kubernetes master node
Change from v0 to v1 in the kubeconfig file from your kubernetes master node

I have been working with Kubernetes quite a bit lately playing around with the lab environment and learning the ins and outs of connecting to and working with K8s clusters. The kubectl command (sometimes pronounced “coob cuttle”) is the de facto command that you will use to interact with your Kubernetes clusters. I mainly use a Windows workstation as my daily driver for most other things, so getting kubectl up and running on my Windows box was the end-goal. There were a few little details along the way, but ultimately, this wasn’t too difficult. In this post, I will walk you throgh how to install kubectl on Windows and create kubeconfig file.

What is kubectl?

The kubectl command is the command that allows you as a Kubernetes administrator to control and manage Kubernetes clusters. Much of the administration you will do with the Kubernetes cluster will be done with kubectl. To configure your kubectl command-line tool, you use a file located in your $HOME directory that is known as the kubeconfig file. In this file the kubectl command is pointed to your Kubernetes cluster and other context information that allows you to manage the cluster.

To install kubectl on Windows and create the kubeconfig file, it will generally involve the following steps:

  1. Create a folder to contain your Kubernetes tools
  2. Add the folder location to the Windows PATH environment variable
  3. Download the kubectl command
  4. Create the .kube directory
  5. Create the Windows kubectl kubeconfig file
  6. Change the API version listed in the kubeconfig file
  7. Verify connectivity to the Kubernetes cluster

1. Create a folder to contain your Kubernetes tools

I like to create a folder that will house the tools used for Kubernetes. Many of these tools are self-contained executables that you can run from any directory. Examples include kubectl and helm. I like to create a directory called “KubeTools” which house all the tools I use for interacting with Kubernetes. This way, you just add one folder to your Windows PATH variable and you are good to go for any Kubernetes tool you place in the folder.

Cameyo Virtual App Delivery

Make a windows folder to house kubectl
Make a windows folder to house kubectl

2. Add the folder location to the Windows PATH environment variable

After you have created the folder, add the folder to the Windows PATH environment variable. This makes it so you don’t have to navigate to the literal path of kubectl to run the command. You can simply type in the kubectl command from any command line context.

***As a note*** Docker Desktop for Windows adds its own version of kubectl to the Windows PATH. If you have installed Docker Desktop, you may need to place your PATH entry before the one added by the Docker Desktop installer or remove the Docker Desktop’s kubectl.

Add the directory to your windows path statement
Add the directory to your windows path statement

3. Download the kubectl command

After you have the folder in place and the directory in the PATH statement, you can download the kubectl command to your directory. To do you that, you run the CURL command below. Yes curl works in Windows 10.

curl -LO https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe
Downloading the kubectl command using curl in windows 10
Downloading the kubectl command using curl in windows 10

After you have configured the PATH statement and downloaded the kubectl command, run the kubectl command to verify you see the return from the command with the available parameters. This verifies the PATH statement is working as expected.

Running the kubectl command to verify windows path and other configuration
Running the kubectl command to verify windows path and other configuration

4. Create the .kube directory

Now that we have the kubectl utility downloaded and the Windows PATH statement in place to run the command from any command-line context, we need to create the directory the command looks to for the configuration. Kubectl looks at the path:

$HOME/.kube

For Windows, this is the root of your %USERPROFILE% directory of the user that will be running the kubectl command. All you need to do is create the “.kube” directory in this directory.

Create the kube directory in your windows userprofile directory
Create the kube directory in your windows userprofile directory

5. Create the Windows kubectl kubeconfig file

Since the .kube directory is created, we now need to create the kubeconfig file that is needed for the kubectl command. The kubeconfig file contains the configuration needed to tell kubectl how to connect to the Kubernetes cluster. An easy way to “create” this file is simply copy the file that is generated on your Kubernetes hosts using the kubeadm command.

If you haven’t created your Kubernetes Lab environment as of yet, take a look at my post: Kubernetes Home Lab Setup Step-by-Step where I show how to build a Kubernetes lab environment using three Ubuntu VMs running in a vSphere 7.0 Update 2a environment. In that post, you will see how to configure your Kubernetes lab environment. After you have used kubeadm to create the cluster, you will have a valid kubeconfig file that can be copied to your Windows workstation to connect to your Kubernetes cluster. Where is this kubeconfig file located?

/etc/kubernetes/admin.conf

Copy this admin.conf file down to your %userprofile%/.kube directory that was created above. Rename the file to simply “config” with no extension.

Copying over the kubeconfig file from your kubernetes cluster
Copying over the kubeconfig file from your kubernetes cluster
After copying the admin.conf file to config under the kube directory in the user profile
After copying the admin.conf file to config under the kube directory in the user profile

6. Change the API version listed in the kubeconfig file

One little issue I ran into after copying down the kubeconfig file to the %userprofile%/.kube directory was the API version listed in the file errored out. Below is the error received.

Error loading config file api version
Error loading config file api version

In looking at the kubeconfig file, it was indeed set to apiVersion: v0. I simply changed this to v1 and it resolved the issue.

Change from v0 to v1 in the kubeconfig file from your kubernetes master node
Change from v0 to v1 in the kubeconfig file from your kubernetes master node

7. Verify connectivity to the Kubernetes cluster

The last step is verifying connectivity to the Kubernetes cluster. After changing the API version in the kubeconfig file to v1, as you can see below, after getting the error we can now connect to the Kubernetes cluster and get pods.

The kubectl command is verified and is able to connect to the remote kubernetes cluster
The kubectl command is verified and is able to connect to the remote kubernetes cluster

Concluding

Hopefully this walkthrough of how to install kubectl on Windows and create Kubeconfig file will help any who need to setup their Windows workstation for working with a Kubernetes cluster. The process is fairly straightforward after you copy the files needed into the proper location and configure your Windows PATH variable. The only real flaky thing I saw was the API version in the kubeconfig file copied from the Linux server to the Windows host. After changing the API version to v1 everything started working.

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

If you are looking to access Kubernetes Cluster from your windows machine. Look no further! I will show you how to install Kubernetes kubectl command line utility by leveraging Chocolatey installer.

Note. I will be using Windows 10 to demonstrate.

Now lets go ahead and get started by opening PowerShell as administrator and execute below command.

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

Now that Chocolatey has been installed, we will go ahead with Kubernetes CLI setup.

Open PowerShell as an administrator and execute the below command.

choco install kubernetes-cli

You will be prompted to confirm if you want to proceed forward with the installation. Go ahead and say yes by typing Y and hit enter.

Connect to Kubernetes Cluster with Kubectl

Once you have install Kubernetes cli. Go to your Kubernetes master node and copy config file from ~/.kube/config to your windows machine to any location. We will move that file to required location once we create .kube directory on windows. Follow below steps.

Open PowerShell as an administrator and execute below commands.

Above command will take you to your user home directory. In user home directory create folder called .kube. If it already exist, you can skip this step.

Once the above directory has been created, we need to copy config file from Kubernetes master node to .kube folder. Earlier I mentioned to copy config file to your windows machine. Take that file and drop it on your under ~\.kube location path.

Basic operations

After you have followed the steps shown above, let’s go ahead and test connectivity with your Kubernetes cluster.

kubectl.exe config get-clusters

If the above command returns the name of the cluster, then you have applied changes successfully. The below command will get information from your master node.

kubectl.exe version -o yaml

For me, I received the following output. Yours may vary depending on your cluster configuration.

clientVersion:
  buildDate: 2018-01-04T11:52:23Z
  compiler: gc
  gitCommit: 3a1c9449a956b6026f075fa3134ff92f7d55f812
  gitTreeState: clean
  gitVersion: v1.9.1
  goVersion: go1.9.2
  major: "1"
  minor: "9"
  platform: windows/amd64
serverVersion:
  buildDate: 2018-01-18T09:42:01Z
  compiler: gc
  gitCommit: 5fa2db2bd46ac79e5e00a4e6ed24191080aa463b
  gitTreeState: clean
  gitVersion: v1.9.2
  goVersion: go1.9.2
  major: "1"
  minor: "9"
  platform: linux/amd64

Let’s execute one more command to ensure we are successfully connected to the Kubenetes cluster.

If you received something similar to what I have received below, then you are fully connected to the cluster, and you can go ahead and manage your cluster from a Windows machine.

NAME               STATUS    ROLES     AGE       VERSION
k8s-master-node    Ready     master    3h        v1.9.2
k8s-worker-node1   Ready     <none>    3h        v1.9.2

If you have any questions or have trouble setting up kubernetes-cli on your Windows machine. Drop in a comment below, and I would be happy to help you out.

Введение

Если вы когда-либо работали с кластерами Kubernetes, то знаете, что kubectl — самый незаменимый и, пожалуй, популярный инструмент для работы с кластерами. В этой статье мы разберем, как установить и настроить kubectl для комфортной и эффективной работы с k8s.

Что такое kubectl

Kubectl — это консольная утилита, которую авторы Kubernetes предоставляют для работы с объектами кластера. С помощью этой утилиты вы можете оценивать состояние кластера, разворачивать приложения и сервисы, управлять ресурсами кластера, смотреть логи. Это неполный список возможностей утилиты: чтобы перечислить все, понадобится отдельная статья.

Компоненты Kubernetes

Строго говоря, kubectl — ничто иное, как клиент Kubernetes API, главного механизма взаимодействия человека с кластером. Kubernetes API — это HTTP REST API, а значит, любое действие с кластером можно выполнить при помощи стандартных HTTP-запросов. Так, например, мы можем создать ресурс ReplicaSet, описанный в файле replicaset.yml двумя способами:

  • командой:
kubectl create -f replicaset.yaml
  • HTTP-запросом к API кластера.
POST 10.0.0.10/apis/apps/v1/namespaces/{namespace}/replicasets

Оба способа помогут обратиться к API кластера. Но чтобы использовать kubectl, не придется читать документацию API и искать нужную конечную точку для запроса.

Что происходит внутри кластера?

Kubernetes состоит из большого количества независимых компонентов, распределенных по узлам кластера и выполняющих отдельные задачи. Компоненты могут находиться как на одном узле кластера, так и распределены по нескольким узлам.

Самые важные компоненты Kubernetes

  • хранилище (как правило, etcd), которое содержит определение всех ресурсов кластера;
  • API-сервер — основной элемент управления кластером, предоставляет API для работы с кластером и хранилищем;
  • менеджер или диспетчер контроллеров — компонент, который запускает процессы контроллера. Kube-controller-manager следит за тем, чтобы в кластере были запущены нужные контроллеры (узла, репликации, учетных записей и токенов и другие);
  • планировщик отслеживает поды без узла и выбирает узел, на котором они впоследствии будут работать;
  • Kubelet — агент, который есть на каждом узле кластера. Кублет следит за тем, чтобы запустились все контейнеры, которые должны быть запущены.

Что происходит внутри кластера

  1. После выполнения команды kubectl create -f replicaset.yaml со стороны API-сервера kubernetes определение ресурса ReplicaSet сохраняется в хранилище.
  2. В диспетчере контроллеров запускается контроллер ресурса ReplicaSet. Он проверяет, есть ли в хранилище определения подов для ресурса. Так как в нашем примере создание ресурса выполняется впервые, определения подов в хранилище еще нет.
  3. Контроллер создает определение пода для каждой реплики, они также сохраняются в хранилище.
  4. Запускается планировщик. Он проверяет, есть ли поды, не назначенные на конкретные ноды.
  5. Планировщик распределяет поды по нодам и записывает выбранную ноду в определения подов в хранилище.
  6. На рабочей ноде кластера запускается kubelet. Он считывает определения подов из хранилища и запускает их на рабочей ноде.

Установка kubectl

Разработчики рекомендуют использовать последнюю версию утилиты и регулярно ее обновлять. Это поможет избежать проблем с совместимостью kubectl с кластером, к которому производится подключение. Узнать последнюю актуальную версию утилиты вы можете из файла.

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

Установку в операционных системах на базе ядра linux можно произвести несколькими способами.

Установка kubectl c помощью curl

Для установки средствами curl потребуется выполнить команду:

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

После этого необходимо сделать файл исполняемым и переместить его в директорию из переменной PATH:

chmod +x ./kubectl && sudo mv ./kubectl /usr/local/bin/kubectl

После этого вы можете проверить версию установленной утилиты, выполнив команду:

kubectl version --client

Установка kubectl c помощью встроенного пакетного менеджера

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

Для установки в операционных системах RHEL, Fedora и CentOS потребуется выполнить команды:

sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubectl

После этого можем проверить, что все установилось корректно. Выполняем команду:

kubectl version --client

Теперь проверим установку с помощью встроенного пакетного менеджера в Debian-like операционных системах: Debian, Ubuntu, а также Linux Mint и HypriotOS.

Для установки выполните следующие команды:

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Проверяем, все ли установилось как надо:

kubectl version --client

Установка при помощи стороннего менеджера

Также kubectl можно установить с помощью snap и homebrew.

Для установки через snap, необходимо выполнить команду:

snap install kubectl --classic
kubectl version

Для установки через homebrew, в свою очередь, это будут команды:

brew install kubectl

kubectl version

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

У пользователей MacOS установка kubectl тоже не вызовет трудностей. Установить утилиту можно несколькими способами. Рассмотрим их подробнее.

Установка бинарного файла kubectl в MacOS средствами curl

Для установки при помощи curl вам необходимо выполнить несколько действий:

  • загрузить последнюю версию kubectl,
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
  • сделать загруженный файл исполняемым и переместить его в директорию PATH;
chmod +x ./kubectl && sudo mv ./kubectl /usr/local/bin/kubectl
  • проверить, все ли работает корректно и установлена ли последняя версия утилиты.
kubectl version --client

Установка с помощью Homebrew или Macports в MacOS

С помощью этих пакетных менеджеров установить kubectl еще легче.

  • Если вы используете Homebrew, выполните одну из двух команд:
brew install kubernetes-cli

или

brew install kubectl
  • Для установки через Macports выполните следующие команды:
sudo port selfupdate
sudo port install kubectl

Проверяем, корректно ли установлена утилита:

kubectl version --client

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

Установка kubectl с помощью curl в Windows

На момент написания этой статьи актуальная версия kubectl — v1.25.0. Вы можете скачать её или воспользоваться утилитой curl:

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.25.0/bin/windows/amd64/kubectl.exe

После скачивания переместите .exe файл в папку из переменной PATH.

Теперь можно проверять, все ли установилось корректно:

kubectl version --client

Установка из PSGallery при помощи PowerShell

Если при работе с PowerShell вы используете PowerShell Gallery, вы можете установить kubectl, выполнив эти команды:

    Install-Script -Name install-kubectl -Scope CurrentUser -Force
install-kubectl.ps1 [-DownloadLocation <path>]

Проверяем, что все прошло как надо и утилита установилась правильно:

    kubectl version --client

Дополнительно отметим, что этими же командами можно обновить уже установленную ранее утилиту kubectl.

Установка с помощью пакетных менеджеров Chocolatey и Scoop

Если для установки программных пакетов вы используете пакетные менеджеры Chocolatey или Scoop, вы можете установить kubectl с их помощью.

Команда для установки с помощью Chocolatey будет выглядеть так:

choco install kubernetes-cli

Для установки с помощью scoop выполните команду:

scoop install kubectl

После этого проверяем, что kubectl установлен:

kubectl version --client

Далее необходимо перейти в вашу домашнюю директорию:

cd %USERPROFILE%

После этого вам нужно создать папку «.kube» и перейти в нее:

mkdir .kube
cd .kube 

Потом настраиваем kubectl для доступа к вашему кластеру:

New-Item config -type file

Проверка конфигурации kubectl

Чтобы подключиться к вашему кластеру, понадобится файл kubeconfig, который создается при разворачивании кластера скриптом kube-up.sh или при создании кластера средствами minikube. Директорией по умолчанию для файла kubeconfig будет ~/.kube/config.

Убедиться в том, что kubectl был сконфигурирован корректно, можно, выполнив команду:

kubectl cluster-info

Если все настроено корректно, ответ kubectl будет содержать сообщение вида:

Kubernetes control plane is running at https://10.0.0.33:8443
KubeDNS is running at https://10.0.0.33:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Если настройка kubectl была произведена с ошибками, вы получите такое сообщение:

The connection to the server <server-name:port> was refused - did you specify the right host or port?

Настройка и эффективное использование kubectl

Для более комфортной работы с утилитой kubectl мы рекомендуем провести небольшой «апгрейд» инструмента и добавить несколько полезных и приятных доработок.

Включение автодополнения команд в оболочке shell

Kubectl поддерживает автодополнение ввода практически «из коробки», поэтому первым логичным шагом будет включение автодополнения команд.

Автодополнение kubectl в bash

Скрипт, который выполняет автодополнение команд kubectl в командной оболочке bash, можно получить, написав команду:

    kubectl completion bash 

Но будет недостаточно выполнить только одну команду. Далее потребуется установить пакет bash-completion, который поможет включить автодополнение в командной оболочке. Сделать это можно командой:

    apt-get install bash-completion

После установки пакета выполните команду:

    type _init_completion

Если команда была выполнена без ошибок, то все установилось правильно. В ином случае вам необходимо добавить строчку в файл ~/.bashrc, чтобы подключить установленный пакет к командной оболочке:

    echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc

После завершения настройки bash-completion можно приступать к настройке автодополнения ввода kubectl. Чтобы скрипт автодополнения выполнялся во всех сессиях терминала, вам необходимо выполнить одно из нескольких действий:

  • добавить строку, которая запускает скрипт автодополнения ввода в файл конфигурации bash;
    echo 'source <(kubectl completion bash)' >>~/.bashrc
  • добавить скрипт дополнения в директорию с конфигурационными файлами утилиты bash-completion;
    kubectl completion bash >/etc/bash_completion.d/kubectl

После этого можно перезапускать командную оболочку.

Автодополнение kubectl в bash на MacOS

По умолчанию в macOS используется bash версии 3.2, с которым автопродление не будет корректно работать. Для корректной работы автопродления в macOS необходимо сменить оболочку (например, мы рекомендуем использовать zsh) или выполнить обновление bash до версии 4.1 или новее. Если у вас установлен Bash версии 4.1 или новее, инструкция ниже будет актуальна.

Первым делом вам необходимо установить инструмент bash-completion v2, используя ваш пакетный менеджер. Для Homebrew команда будет выглядеть так:

    brew install bash-completion@2

После завершения установки bash-completion, добавьте в файл ~/.bashrc следующий код:

    export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

После этого перезапустите командную оболочку и выполните команду:

    type _init_completion

Ее корректное выполнение поможет убедиться, что все установилось правильно.

После завершения настройки bash-completion можно приступать к настройке автодополнения ввода kubectl. Чтобы скрипт автодополнения выполнялся во всех сессиях терминала, вам необходимо:

  • добавить строку, которая запускает скрипт автодополнения ввода в файл конфигурации bash;
    echo 'source <(kubectl completion bash)' >>~/.bashrc
  • добавить скрипт дополнения в директорию с конфигурационными файлами утилиты bash-completion.
    kubectl completion bash >/etc/bash_completion.d/kubectl

После этого можно перезапускать командную оболочку. 

Автодополнение kubectl в zsh

Для организации автодополнения в оболочке zsh не потребуется устанавливать дополнительных программ и утилит, как это нужно делать при использовании Bash. Достаточно выполнить команду:

echo 'source <(kubectl completion zsh)' >>~/.zshrc

После выполнения команды и перезагрузки оболочки вы можете столкнуться с ошибкой такого вида:

complete:13: command not found: compdef

В таком случае в файл ~/.zshrc нужно будет добавить следующие строки:

autoload -Uz compinit
compinit

Быстрый просмотр спецификаций ресурсов в терминале

При создании YAML-файла, который определяет ресурсы, важно понимать значение каждого заполняемого поля. Основная часть информации содержится в документации к API Kubernetes, доступной на официальном сайте проекта. Постоянно переключаться с браузера на терминал и обратно не слишком удобно. Такого же мнения придерживаются и разработчики Kubernetes, поэтому в утилиту kubectl была добавлена возможность просмотра спецификаций по ресурсам.

Команда для вызова спецификаций имеет следующий вид:

kubectl explain resource[.field].

Если вы не до конца понимаете, какой именно ресурс вам нужен, можно выполнить команду, чтобы отобразить полный список:

kubectl api-resources

Можем видеть, что, например, ресурс endpoints имеет сокращение «ep». Это значит, что команды ниже будут равнозначны:

kubectl explain ep
kubectl explain Endpoints

Использование пользовательского формата вывода столбцов

В стандартном виде при выполнении команды kubectl get pods в ответ мы получаем следующий вывод:

вывод kubectl get pods

При всем удобстве такого формата он малоинформативен, так как содержит всего несколько полей из полного определения ресурса. Если вам необходимо больше информации, можно использовать настраиваемый формат вывода столбцов. С его помощью вы можете указывать, какие именно данные нужно получить. Вывести отдельным столбцом можно любое поле. Делается это с помощью ключа -o и опции вида:

-o custom-columns=<spec>

Также для фильтра можно использовать готовый файл:

-o custom-columns-file=template.txt

Вы можете задать выводимым столбцам собственные имена:

kubectl get pods -o custom-columns='Selectel:metadata.name'
Selectel
nginx-85b98978db-qf5vx
web-76b56fd968-5rgc8

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

Для организации пользовательского вывода столбцов в утилите kubectl используются выражения JSONPath — это специальный язык, созданный для выборки данных из документов в формате JSON. Учитывая этот факт, выбор одного поля, как в примере выше — самый простой метод использования JSONPath. Давайте рассмотрим все возможности, которые предоставлены разработчиками в рамках kubectl.

  • Выбрать все элементы списка.
    kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
  •  Выбрать конкретный элемент из списка.
    kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
  • Выбрать все элементы списка, попадающие под заданный фильтр.
    kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
  • Выбрать все поля по указанному пути.
    kubectl get pods -o custom-columns='DATA:metadata.*'
  • Выбрать все поля с указанным именем, вне зависимости от их расположения.
    kubectl get pods -o custom-columns='DATA:..image'  

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

    kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'

Вывод будет следующий:

другой вывод kubectl get pods

Легкое переключение между кластерами и пространствами имен

Kubectl был создан, чтобы упростить взаимодействие API с Kubernetes. Выполняя запрос к различным эндпоинтам, утилита проверяет файл kubeconfig, получая из него все необходимые для соединения параметры. Если вы работаете сразу с несколькими кластерами, в вашем kubeconfig будут содержаться параметры для подключения сразу к нескольким кластерам. Также, вероятно, у вас будет несколько файлов Kubeconfig — по одному файлу на кластер. В этом случае вы можете запускать kubectl с ключом —kubeconfig и выбирать необходимый файл, указывая его имя.

Файл kubeconfig

Файл kubeconfig содержит в себе определенное количество контекстов для различных кластеров:

  • Cluster — элемент, указывающий на URL API сервера вашего кластера;
  • User — учетные данные, с помощью которых происходит аутентификация в кластере;
  • Namespace — пространство имен, которое используется внутри кластера.

Как правило, для каждого из кластеров используется несколько файлов kubeconfig. В каждом файле может быть несколько контекстов с разными пользователями и пространствами имен. Вне зависимости от количества контекстов, один из них всегда будет текущим. Для подключения к другому контексту всегда нужно переключить контекст в файле kubeconfig. Чтобы менять пространства имен, нужно изменить элемент namespace файла kubeconfig.

Использование kubectx и kubens

Kubectx и kubens — две самые популярные утилиты для смены контекста и пространства имен при работе с кластерами kubernetes. Для их установки вы можете использовать команды:

sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens

Также для установки может использоваться специальный пакетный менеджер Krew. В таком случае установите пакетный менеджер (инструкция по установке есть на странице проекта) и введите команды:

kubectl krew install ctx
kubectl krew install ns
Примеры использования утилит из GitHub проекта

Kubens:

использование kubens

Kubectx:

использование kubectx

Использование алиасов командной оболочки

Чтобы изменить контекст или неймспейс, вам не потребуются дополнения или сторонние скрипты: можно использовать встроенные инструменты kubectl. Например, команда kubectl config поможет отредактировать файлы kubeconfig. Встроенные команды могут быть длинными и не слишком удобными, поэтому рекомендуем создавать алиасы командной оболочки, чтобы работать с kubectl было удобнее.

Приведенные ниже примеры алиасов используют стороннюю утилиту fzf, с помощью которой созданные алиасы могут совершать поиск по наименованиям.

Наши примеры алиасов выглядят так:

# Получить текущий контекст
alias krc='kubectl config current-context'
# Список всех контекстов
alias klc='kubectl config get-contexts -o name | sed "s/^/  /;\|^ $(krc)$|s/ /*/"'
# Изменить текущий контекст
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'

# Получить текущий неймспейс
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print \$5}" | sed "s/^$/default/"'
# Список всех доступных неймспейсов
alias kln='kubectl get -o name ns | sed "s|^.*/|  |;\|^ $(krn)$|s/ /*/"'
# Изменить текущий неймспейс
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"'

Сокращение ввода автоалиасами

Еще один способ ускорить работу с kubectl — настройка и использование автоалиасов для команд. Самый популярный проект на GitHub с готовыми алиасами содержит больше 1 200 сокращений для разных вариаций многоступенчатых команд kubectl. Может показаться, что ориентироваться в таком количестве сокращений еще сложнее, чем в самой утилите. Но участники проекта вывели систему сокращений алиасов.

  • k=kubectl
  • sys= —namespace kube-system

Команды:

  • g=get
  • d=describe
  • rm=delete
  • a:apply -f
  • ak:apply -k
  • k:kustomize
  • ex: exec -i -t
  • lo: logs -f

Ресурсы кластера

  • po=pod, dep=deployment, ing=ingress, svc=service, cm=configmap, sec=secret, ns=namespace, no=node

Флаги для команд:

  • output format: oyaml, ojson, owide
  • all: —all или —all-namespaces в зависимости от вводимой команды
  • sl: —show-labels
  • w=-w/—watch

Флаги, имеющие значение (например, название неймспейса):

  • n=-n/—namespace
  • f=-f/—filename
  • l=-l/—selector

Например, команда kubectl get pods -o yaml в виде алиаса будет выглядеть как kgpooyaml.

Также вы можете использовать некоторые из алиасов вне сложных конструкций. К примеру, команда kg pods будет возвращать таблицу с подами, аналогично командам kgpo и kubectl get pods.

Включение автодополнения алиасов kubectl

Без автодополнения алиасы теряют свой смысл, так как, учитывая многослойную структуры команд kubectl, работа с утилитой становится крайне неудобной. Если вы используете оболочку Zsh, никакой дополнительной настройки после добавления алиасов не потребуется. В случае с Bash придется устанавливать дополнительную утилиту complete-alias, чтобы автодополнение работало корректно. Это обусловлено тем, что при попытке дополнить вводимую команду Bash, в отличие от Zsh, ссылается не на команду, а на сам алиас.

Для работы complete-alias потребуется установить bash-completion, затем выполнить команду git clone, а дальше — указать путь к файлу complete_alias в файле .bashrc вашего пользователя.

Здесь необходимо включить автодополнение для всех установленных алиасов kubectl, созданных в текущей оболочке:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases);
do
  complete -F _complete_alias "$_a"
done

Команда сработает, только если kubectl-aliases был установлен в ~/.kubectl-aliases.

После этого добавьте код в файл .bashrc, чтобы автодополнение алиасов работало для других сессий терминала.

Расширение функционала kubectl при помощи плагинов

В версии 1.12 kubectl начал поддерживать механику работы с плагинами. Плагины расширяют и без того огромный функционал утилиты kubectl и сильно упрощают работу.

Установка плагинов

Плагины для утилиты kubectl — это исполняемые файлы со стандартным названием вида kubectl-x, где вместо X будет название плагина.

Для установки плагина стандартным способом достаточно поместить исполняемый файл с плагином в директорию из переменной PATH. Чтобы просмотреть список всех установленных у вас плагинов, нужно выполнить команду:

kubectl plugin list

Поиск и установка плагинов с помощью Krew

Krew — открытый проект, цель которого максимально упростить поиск и установку плагинов для kubectl. Krew преподносится как пакетный менеджер для плагинов kubectl и вполне оправдывает это звание: с помощью него можно найти, установить и обновить плагины. При этом сам Krew — плагин для kubectl. Установить его можно по подробной инструкции.

Самые важные команды Krew

  • найти плагин:
kubectl krew search <запрос> 
  • вывести информацию о плагине:
kubectl krew info <плагин>  
  • установить плагин:
kubectl krew install <плагин>  
  • обновить плагины:
kubectl krew upgrade
  • вывести список плагинов, установленных с помощью Crew:
kubectl krew list
  • удалить плагины:
kubectl krew remove <плагин>

Поиск плагинов в других местах

Krew — не единственное место, где можно найти плагины для kubectl. Многие из них доступны на GitHub.

Написание собственных плагинов

Если вы не смогли найти нужный плагин, можно попробовать написать свой собственный. Это может быть файл на любом языке, например, Bash, Python или Go. Чтобы написать более сложный плагин kubectl, можете использовать официальные клиентские библиотеки Kubernetes.

После создания файла, дайте ему название в формате kubectl-x и переместите в директорию из переменной PATH.

Заключение

В статье мы познакомились с таким инструментом как kubectl, разобрали механизмы его работы, а также провели его установку на примере разных ОС. Дополнительно описали способы улучшить опыт использования инструмента, сделать его комфортнее и проще.

  • Установка kali linux из под windows
  • Установка linux рядом с windows 10 uefi gpt
  • Установить языковой пакет для windows server 2019
  • Установка kali linux вместе с windows 10
  • Установка linux на флешку из под windows