Установка 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 готов к работе.
Эксклюзивы для подписчиков Patreon
Присоединяйтесь к моему Patreon и погрузитесь в мир Docker и DevOps. Здесь вас ждет эксклюзивный контент, разработанный специально для энтузиастов и профессионалов в области IT. Вашим наставником будет Владимир Михалев, опытный специалист, предлагающий ряд уровней членства от новичков до экспертов.
Что вы получите
🏆 Посты только для патронов: Полный доступ к глубоким статьям, которые раскрывают методы работы с Docker и DevOps, включая пошаговые инструкции, продвинутые советы и подробные анализы, недоступные широкой публике.
🏆 Ранний доступ: Получите возможность первыми узнавать о новых материалах и обучающих программах, опережая технологические тренды.
🏆 Приоритетная поддержка: Ваши вопросы и проблемы будут решены в первую очередь, обеспечивая индивидуальный подход и непосредственную помощь.
🏆 Влияние на будущий контент: Ваши предложения и отзывы напрямую влияют на выбор тем и создание учебных пособий, делая материалы максимально актуальными и полезными.
🏆 Признание и взаимодействие: Активные участники и поддерживающие пользователи получают благодарности в видео и на публичных трансляциях, подчеркивая вашу значимость для нашего сообщества.
🏆 Особые скидки: Наслаждайтесь скидками на курсы и предстоящие мероприятия, которые доступны исключительно для членов Patreon.
🏆 Возможности для нетворкинг: Общайтесь с другими IT-специалистами и энтузиастами в поддерживающей атмосфере, расширяя вашу профессиональную сеть и обмениваясь знаниями.
🏆 Искренняя благодарность и обновления: Личная благодарность за вашу поддержку, которая стимулирует создание нового контента и постоянное развитие.
Присоединяйтесь ко мне сейчас и начните свое путешествие по освоению Docker и DevOps с эксклюзивными материалами и поддерживающим сообществом!
Мои курсы
🎓 Погрузитесь в мои обширные курсы по информационным технологиям, разработанные как для энтузиастов, так и для профессионалов. Независимо от того, хотите ли вы освоить Docker, покорить Kubernetes или углубить свои навыки в области DevOps, мои курсы предлагают структурированный путь к повышению вашего технического мастерства.
Мои услуги
💼 Загляните в мой каталог услуг и узнайте, как мы можем сделать вашу технологическую жизнь лучше. Будь то повышение эффективности вашей IT-инфраструктуры, развитие вашей карьеры или расширение технологических горизонтов — я здесь, чтобы помочь вам достичь ваших целей. От DevOps-трансформаций до сборки игровых компьютеров — давайте сделаем ваши технологии непревзойденными!
Пополнить запасы моего кофе
💡 Telegram | Boost
💖 PayPal
🏆 Patreon
💎 GitHub
🥤 BuyMeaCoffee
🍪 Ko-fi
Подпишись
⭐ Telegram | Блог
🎬 YouTube
🐦 Twitter
🎨 Instagram
🐘 Mastodon
🧵 Threads
🎸 Facebook
🧊 Bluesky
🎥 TikTok
💻 LinkedIn
📣 daily.dev Squad
🧩 LeetCode
🐈 GitHub
Этот контент создан искусственным интеллектом?
Нет! Каждая статья — результат моей работы, наполненной страстью к Docker и десятилетиями опыта в IT. Я применяю ИИ для улучшения грамматики, чтобы обеспечить четкость технических деталей, однако все идеи, стратегии и рекомендации исключительно мои. Этот метод иногда может вызывать срабатывание детекторов ИИ, но можете быть уверены, что вся представленная информация и опыт — подлинно мои.