Узнайте, как установить Kubernetes, из нашего руководства из 7 шагов. Это руководство идеально подходит для начинающих, поскольку оно проведет вас по каждому шагу установки Kubernetes.
Мы настроим кластеры Kubernetes с помощью официальной утилиты Kubeadm. Это очень упрощает настройку кластера.
Шаг 1: Создайте два сервера
Для создания кластеров Kubernetes вам потребуется как минимум два сервера Ubuntu. Эти серверы могут находиться на вашей локальной рабочей станции, облачных ИТ-серверах. Все, что вам нужно, это подключение к Интернету на серверах.
Серверы должны иметь минимум 2 vCPU и 2 ГБ оперативной памяти.
- Сервер 01: Будет действовать как плоскость контроллера Kubernetes
- Сервер 02: Будет действовать как рабочий узел Kubernetes.
На обоих серверах убедитесь, что брандмауэр отключен и все порты разрешены между серверами. Если вы хотите ограничить доступ к портам между серверами, включите все рекомендуемые порты плоскости управления и рабочих узлов, как показано на рисунке ниже.
Вы можете добавить больше серверов в качестве рабочих узлов в соответствии с вашими требованиями. Процесс установки будет одинаковым для всех рабочих узлов.
Примечание: Если вы хотите установить кластер Kubernetes в среде с воздушным зазором, мы рекомендуем вам подписаться на этот блог.
Шаг 2: Установите необходимые утилиты на все серверы
Следующим шагом будет установка следующих утилит на все серверы.
- Контейнерная среда выполнения (CRI-O)
- kubelet
- Kubeadm
- kubectl
Также мы выполним некоторые дополнительные настройки, необходимые для Kubernetes.
Чтобы упростить задачу, мы добавили все шаги в виде сценария оболочки.
Сохраните следующий сценарий командной строки как utilities.sh
#!/bin/bash
# Exit on error, undefined variable, or error in any pipeline
set -euxo pipefail
# Variables
KUBERNETES_VERSION="1.28.1-00"
OS="xUbuntu_22.04"
VERSION="1.28"
# Disable swap and keep it off during reboot
sudo swapoff -a
(crontab -l 2>/dev/null; echo "@reboot /sbin/swapoff -a") | crontab - || true
# Update package list
sudo apt-get update -y
# Install CRI-O Runtime
# Load required modules and set sysctl params
echo -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/crio.conf
sudo modprobe overlay
sudo modprobe br_netfilter
echo -e "net.bridge.bridge-nf-call-iptables=1\nnet.ipv4.ip_forward=1\nnet.bridge.bridge-nf-call-ip6tables=1" | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
sudo sysctl --system
# Add CRI-O to sources and install
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
sudo apt-get update
sudo apt-get install -y cri-o cri-o-runc
sudo systemctl daemon-reload
sudo systemctl enable crio --now
echo "CRI runtime installed successfully"
# Install Kubernetes components
sudo apt-get update -y
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
sudo apt-get update -y
sudo apt-get install -y kubelet="$KUBERNETES_VERSION" kubectl="$KUBERNETES_VERSION" kubeadm="$KUBERNETES_VERSION"
# Install jq and set Kubelet node IP
sudo apt-get install -y jq
local_ip=$(ip --json addr show eth0 | jq -r '.[0].addr_info[] | select(.family == "inet") | .local')
echo "KUBELET_EXTRA_ARGS=--node-ip=$local_ip" | sudo tee /etc/default/kubelet > /dev/null
Скопируйте скрипт на все серверы.
Войдите в систему от имени пользователя root. Для выполнения этого скрипта требуются права root.
sudo su
Добавьте права доступа к исполняемому скрипту с помощью следующей команды.
chmod +x utilities.sh
Запустите скрипт.
./utilities.sh
Скрипт установит и настроит все необходимое для кластера Kubernetes.
При успешном выполнении вы получите результат, как показано ниже.
Шаг 3: Создайте файл конфигурации Kubeadm
Следующим шагом будет создание файла конфигурации Kubeadm YAML со всеми необходимыми конфигурациями для control plane.
Сохраните следующий файл YAML как kubeadm.config
в узле control plane. Замените 35.89.184.80 на общедоступный или частный IP узла control plane.
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
apiServer:
certSANs:
- 127.0.0.1
- 35.89.184.80
extraArgs:
bind-address: "0.0.0.0"
scheduler:
extraArgs:
bind-address: "0.0.0.0"
controllerManager:
extraArgs:
bind-address: "0.0.0.0"
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
Шаг 4: Инициализируйте плоскость управления с помощью файла конфигурации
Теперь, используя kubeadm, мы запустим плоскость управления.
Выполните следующую команду kubeadm в узле плоскости управления, где вы сохранили kubeadm.config
файл.
kubeadm init --config=kubeadm.config
При успешном выполнении вы получите следующий результат, показанный на рисунке ниже. Скопируйте команду join и сохраните ее в блокноте. Нам нужно, чтобы команда join была запущена на рабочих узлах, чтобы присоединиться к главному узлу.
Выполните следующие действия, чтобы добавить файл admin.conf в домашнюю папку для использования команд kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Проверьте kubectl, выполнив следующую команду.
kubectl get pod -n kube-system
Вы должны увидеть результат, подобный приведенному ниже.
root@controlplane# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5dd5756b68-6t77f 1/1 Running 0 5m23s
coredns-5dd5756b68-gkbhp 1/1 Running 0 5m23s
etcd-controlplane 1/1 Running 1 5m36s
kube-apiserver-controlplane 1/1 Running 0 5m39s
kube-controller-manager-controlplane 1/1 Running 0 5m38s
kube-proxy-2264s 1/1 Running 0 5m23s
kube-scheduler-controlplane 1/1 Running 0 5m38s
root@controlplane:/home/ubuntu#
Шаг 5: Присоединяйтесь к рабочим узлам для управления Plane
Теперь, когда плоскость управления настроена, нам нужно присоединить рабочий узел к плану управления.
Выполните команду join, которую вы указали на последнем шаге, на рабочих узлах. Это должно выглядеть следующим образом.
kubeadm join 172.31.41.192:6443 --token e5919f.htqtr9b1zlf0pc26 \
--discovery-token-ca-cert-hash sha256:1b034aba240d892c3c05d7dd551623df51759164ed3072b368a7c0415a522266
Успешный результат должен выглядеть следующим образом
4oot@node01# kubeadm join 172.31.41.192:6443 --token e5919f.htqtr9b1zlf0pc26 \
--discovery-token-ca-cert-hash sha256:1b034aba240d892c3c05d7dd551623df51759164ed3072b368a7c0415a522266
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Выполните следующую команду на узле плоскости управления, чтобы проверить, присоединился ли узел к кластеру.
kubectl get nodes
Вы должны увидеть следующий вывод.
oot@controlplane:/home/ubuntu# kubectl get nodes
NAME STATUS ROLES AGE VERSION
controlplane Ready control-plane 14m v1.28.1
node01 Ready <none> 6m22s v1.28.1
Шаг 6: Проверка кластера
Давайте проведем smoke-тест и валидируем кластер.
Мы добавили все команды, которые вы можете использовать для проверки различных аспектов кластеров.
Команда | Описание |
---|---|
kubectl get nodes | Проверьте состояние узлов в кластере. |
kubectl get pods --all-namespaces | Проверьте, все ли модули запущены или успешно завершили работу. |
kubectl cluster-info | Получите основную информацию о кластере. |
kubectl get svc | Проверьте службы, работающие в пространстве имен по умолчанию. |
kubectl get componentstatuses | Проверьте состояние компонентов кластера, таких как etcd, controller-manager и т.д. |
kubectl api-resources | Просмотрите все доступные ресурсы API. |
kubectl config view | Просмотрите настройки kubeconfig. |
kubectl get events | Смотрите такие события, как операции масштабирования или ошибки. |
kubectl version | Проверьте версии клиента и сервера. |
Заключение
В этом блоге мы рассмотрели установку кластера Kubernetes с использованием простых шагов и конфигураций.
Далее вы можете попробовать развернуть приложения на кластере. Настройка кластера — одна из важных задач на сертификационном экзамене CKA.