Установка Kubernetes на Ubuntu Server 22.04 LTS
Данная статья предназначена для тех, кто искал подробное и понятное руководство о том, как установить Kubernetes на Ubuntu Server 22.04 LTS.
Kubernetes — открытое программное обеспечение для оркестровки контейнеризированных приложений — автоматизации их развертывания, масштабирования и координации в условиях кластера.
В этом руководстве мы будем рассматривать тот случай, когда у вас уже есть сервер с установленной на нем операционной системой Ubuntu Server 22.04 LTS.
Подробно о том, как установить Ubuntu Server 22.04 LTS, вы можете прочитать в моем руководстве “Установка Ubuntu Server 22.04 LTS”.
Кроме того, на сервер должен быть установлен OpenSSH, а также открыт 22 порт, чтобы иметь возможность подключаться к серверу по протоколу SSH.
Для установки OpenSSH на сервер вы можете воспользоваться командой:
sudo apt install openssh-server
Если вы планируете подключиться к серверу, используя операционную систему Windows, то можете воспользоваться PuTTY или MobaXterm.
В данном руководстве рассматривается подключение к серверу при помощи терминального эмулятора iTerm2, установленного на операционную систему macOS.
Обратите внимание, вам потребуется открыть следующие порты TCP для доступа к вашему серверу:
Kubernetes Master (Control Plane):
- TCP порт 6443 - для работы Kubernetes API.
- TCP порт 2379-2380 - для работы etcd server client API.
- TCP порт 10250 - для работы Kubelet API.
- TCP порт 10259 - для работы kube-scheduler.
- TCP порт 10257 - для работы kube-controller-manager.
Kubernetes Worker:
- TCP порт 0250 - для работы Kubelet API.
- TCP порт 30000-32767 - для работы NodePort Services.
Мы будем рассматривать установку одного сервера с ролью Master и одного сервера с ролью Worker. В дальнейшем вы сможете самостоятельно добавить необходимое количество серверов для обеспечения высокой доступности.
Подключаемся к серверу, на который планируется установить роль Kubernetes Master.
Присвоим имя серверу с помощью команды:
sudo hostnamectl set-hostname kubernetes-master-1.heyvaldemar.net
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”.
Сервер с ролью Worker должен разрешать имя сервера с ролью Master, и также сервер с ролью Master должен разрешать имя сервера с ролью Worker.
Далее в файл “/etc/hosts” добавим IP-адрес и имя сервера с ролью Master с помощью команды:
echo "10.0.5.140 kubernetes-master-1.heyvaldemar.net kubernetes-master-1" | sudo tee -a /etc/hosts
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”, а в качестве IP-адреса 10.0.5.140.
Убедитесь, что имя сервера с ролью Worker имеет правильную запись DNS, а также обновите файл “/etc/hosts” на сервере с помощью команды:
echo "10.0.6.19 kubernetes-worker-1.heyvaldemar.net kubernetes-worker-1" | sudo tee -a /etc/hosts
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-worker-1.heyvaldemar.net”, а в качестве IP-адреса 10.0.6.19.
Перезапустим службу hostamed, чтобы внесенные изменения для имени сервера вступили в силу, с помощью команды:
sudo systemctl restart systemd-hostnamed
Проверим корректность имени сервера с помощью команды:
hostname
Теперь заменим текущий процесс оболочки на новый с помощью команды:
exec bash
Далее необходимо отключить файл подкачки с помощью команды:
sudo swapoff -a
Команда выше отключает файл подкачки до тех пор, пока система не будет перезагружена. Мы должны убедиться, что он останется выключенным даже после перезагрузки. Для этого нужно отредактировать файл “fstab”, закомментировав строку “/swapfile” символом “#”.
Выполняем команду:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Загрузите модули ядра с помощью команды:
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
Загружаем модуль “overlay” с помощью команды:
sudo modprobe overlay
Загружаем модуль “br_netfilter” с помощью команды:
sudo modprobe br_netfilter
Установите параметры ядра для Kubernetes с помощью команды:
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
Применим внесенные изменения с помощью команды:
sudo sysctl --system
Теперь добавим официальный ключ Docker с помощью команды:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
Далее подключаем репозиторий Docker с помощью команды:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
sudo apt update
Теперь установим пакеты, необходимые для работы Kubernetes, с помощью команды:
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates containerd.io
Теперь необходимо настроить containerd.
containerd - стандартная среда выполнения контейнеров с упором на простоту, надежность и переносимость.
Выполняем команду:
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
Выполняем команду:
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
Перезапустим containerd, чтобы применить внесенные изменения, с помощью команды:
sudo systemctl restart containerd
Включаем автозапуск сервиса containerd при запуске операционной системы с помощью команды:
sudo systemctl enable containerd
Теперь добавим официальный ключ Kubernetes с помощью команды:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Далее подключаем репозиторий Kubernetes с помощью команды:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Обратите внимание, на момент написания этого руководства Xenial является актуальным репозиторием Kubernetes, но когда репозиторий будет доступен для Ubuntu 22.04 (Jammy Jellyfish), то вам нужно будет заменить слово в команде выше с “xenial” на “jammy”.
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
sudo apt update
Теперь установим пакеты kubelet, kubeadm и kubectl с помощью команды:
sudo apt install -y kubelet kubeadm kubectl
На следующем шаге нужно запретить автоматическое обновление и удаление установленных пакетов с помощью команды:
sudo apt-mark hold kubelet kubeadm kubectl
Теперь необходимо запустить инициализацию кластера Kubernetes с помощью команды:
sudo kubeadm init --control-plane-endpoint=kubernetes-master-1.heyvaldemar.net
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”.
Обратите внимание, для добавления еще одного сервера в кластер вам потребуется проделать такую же работу по установке и настройке сервера, а затем выполнить команду kubeadm join с соответствующим токеном для сервера с ролью Master или Worker.
Далее необходимо выполнить несколько команд, чтобы начать взаимодействие с кластером.
Выполняем команду:
mkdir -p $HOME/.kube
Выполняем команду:
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
Выполняем команду:
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Далее можно посмотреть адреса мастера и сервисов с помощью команды:
kubectl cluster-info
Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:
kubectl get nodes
Подключаемся к серверу, на который планируется установить роль Kubernetes Worker.
Присвоим имя серверу с помощью команды:
sudo hostnamectl set-hostname kubernetes-worker-1.heyvaldemar.net
В данном руководстве в качестве имени сервера с ролью Worker используется “kubernetes-worker-1.heyvaldemar.net”.
Сервер с ролью Worker должен разрешать имя сервера с ролью Master, и также сервер с ролью Master должен разрешать имя сервера с ролью Worker.
Далее в файл “/etc/hosts” добавим IP-адрес и имя сервера с ролью Master с помощью команды:
echo "10.0.6.19 kubernetes-worker-1.heyvaldemar.net kubernetes-worker-1" | sudo tee -a /etc/hosts
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-worker-1.heyvaldemar.net”, а в качестве IP-адреса 10.0.6.19.
Убедитесь, что имя сервера с ролью Worker имеет правильную запись DNS, а также обновите файл “/etc/hosts” на сервере с помощью команды:
echo "10.0.5.140 kubernetes-master-1.heyvaldemar.net kubernetes-master-1" | sudo tee -a /etc/hosts
Наличие данной записи позволит серверу с установленным агентом разрешать имя сервера Kubernetes даже без записи DNS.
В данном руководстве в качестве имени сервера с ролью Master используется “kubernetes-master-1.heyvaldemar.net”, а в качестве IP-адреса 10.0.5.140.
Перезапустим службу hostamed, чтобы внесенные изменения для имени сервера вступили в силу, с помощью команды:
sudo systemctl restart systemd-hostnamed
Проверим корректность имени сервера с помощью команды:
hostname
Теперь заменим текущий процесс оболочки на новый с помощью команды:
exec bash
Далее необходимо отключить файл подкачки с помощью команды:
sudo swapoff -a
Команда выше отключает файл подкачки до тех пор, пока система не будет перезагружена. Мы должны убедиться, что он останется выключенным даже после перезагрузки. Для этого нужно отредактировать файл “fstab”, закомментировав строку “/swapfile” символом “#”.
Выполняем команду:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Загрузите модули ядра с помощью команды:
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
Загружаем модуль “overlay” с помощью команды:
sudo modprobe overlay
Загружаем модуль “br_netfilter” с помощью команды:
sudo modprobe br_netfilter
Установите параметры ядра для Kubernetes с помощью команды:
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
Применим внесенные изменения с помощью команды:
sudo sysctl --system
Теперь добавим официальный ключ Docker с помощью команды:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
Далее подключаем репозиторий Docker с помощью команды:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
sudo apt update
Теперь установим пакеты, необходимые для работы Kubernetes, с помощью команды:
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates containerd.io
Теперь необходимо настроить containerd.
containerd - стандартная среда выполнения контейнеров с упором на простоту, надежность и переносимость.
Выполняем команду:
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
Выполняем команду:
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
Перезапустим containerd, чтобы применить внесенные изменения, с помощью команды:
sudo systemctl restart containerd
Включаем автозапуск сервиса containerd при запуске операционной системы с помощью команды:
sudo systemctl enable containerd
Теперь добавим официальный ключ Kubernetes с помощью команды:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Далее подключаем репозиторий Kubernetes с помощью команды:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Обратите внимание, на момент написания этого руководства Xenial является актуальным репозиторием Kubernetes, но когда репозиторий будет доступен для Ubuntu 22.04 (Jammy Jellyfish), то вам нужно будет заменить слово в команде выше с “xenial” на “jammy”.
Нажимаем на кнопку “Enter”.
Обновим локальный индекс пакетов до последних изменений в репозиториях с помощью команды:
sudo apt update
Теперь установим пакеты kubelet, kubeadm и kubectl с помощью команды:
sudo apt install -y kubelet kubeadm kubectl
На следующем шаге нужно запретить автоматическое обновление и удаление установленных пакетов с помощью команды:
sudo apt-mark hold kubelet kubeadm kubectl
Далее необходимо добавить сервер с ролью Worker в кластер Kubernetes с помощью команды:
sudo kubeadm join kubernetes-master-1.heyvaldemar.net:6443 --token 5xuqag.tefxcfleieexwbos \
--discovery-token-ca-cert-hash sha256:8c3e8eb9d95cd16496db9f65956e2ce1c2164fa64d17a487374bd906dbc0dcb3
Сервер с ролью Worker успешно присоединен к кластеру Kubernetes.
Возвращаемся на сервер с ролью Kubernetes Master.
Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:
kubectl get nodes
Узлы находятся статусе “NotReady”. Чтобы это исправить нужно установить CNI (Container Network Interface) или сетевые надстройки, такие как Calico, Flannel и Weave-net.
Загрузим манифест Calico с помощью команды:
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
Установим Calico с помощью команды:
kubectl apply -f calico.yaml
Проверим статус подов в пространстве имен kube-system с помощью команды:
kubectl get pods -n kube-system
Теперь можно посмотреть список всех узлов в кластере и статус каждого узла с помощью команды:
kubectl get nodes
Узлы находятся статусе “Ready” и кластер Kubernetes готов к работе.
Пополнить запасы кофе автора
💡 Telegram | Boost
💖 PayPal
🏆 Patreon
💎 GitHub
🥤 BuyMeaCoffee
🍪 Ko-fi