Описание
Kubernetes предназначен для контейнеризированных приложений.
- Используется для автоматизации:
- Развертывания приложений;
- Масштабирования приложений;
- Управления приложениями.
Разработчик описывает ресурсы и конфигурацию приложения в манифесте (yaml-файле) и передает его в Kubernetes, используя для этого специальный инструмент (kubectl, Helm и др.) В результате Kubernetes создаст или настроит все запрошенные ресурсы. После этого Kubernetes будет контролировать, соответствует ли реальное состояние ресурсов желаемому, и при необходимости устранит расхождения (например, запустит упавший контейнер).
Структура кластера kubernetes
Физически Kubernetes представляет собой кластер, образованный несколькими узлами — нодами. Ноды бывают двух типов: вычислительные (worker) и управляющие (master). Команды управления посылаются на master node, а он уже управляет worker node.
- Cluster - основной компонент
- Nodes - кластер состоит из node
- Master node - сервер, который управляет worker nodes. Это узел кластера, реализующий логику управления самим кластером и ресурсами, которые находятся в его распоряжении;
- Worker node - это узел кластера, на котором непосредственно работают приложения и вспомогательные службы.
У каждой системы, которая добавляется к кластеру должно быть минимум 2 ядра и 1700МБ оперативной памяти.
Настройка master-сервера
Отключение swap
swapoff -aкроме того, чтобы он не подключался при перезагрузке, нужно закомментировать раздел swap в файле
/etc/fstabэто можно сделать вручную или командой
sed -i '/ swap /s/^/#/' /etc/fstab
Отключение SELinux
setenforce 0отключение навсегда
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Открытие портов файрвола
firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379-2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --permanent --add-port=10255/tcpприменение настроек
firewall-cmd --reload
ufw allow 6443 ufw allow 2379:2380/tcp ufw allow 10250 ufw allow 10251 ufw allow 10252 ufw allow 10255
Установка docker
добавление репозитория со свежей версией docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoустановка docker
yum install docker-ceКроме того можно установить дополнительные компоненты
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
добавление ключа репозитория
mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgдобавление репозитория
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullустановка docker
apt update apt install docker-ceКроме того можно установить дополнительные компоненты
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker systemctl enable dockerПроверка работы
systemctl status docker docker ps
Установка cri-dockerd
Репозиторий cri-dockerd на github
нужно скачать пакет cri-dockerd соответствующий версии системы
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.3/cri-dockerd-0.2.3-3.el8.x86_64.rpmустановка скачанного пакета
yum install cri-dockerd-0.2.2.20220610195206.0737013-0.el7.x86_64.rpm
нужно скачать пакет cri-dockerd соответствующий версии системы
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.3/cri-dockerd_0.2.3.3-0.ubuntu-jammy_amd64.debустановка скачанного пакета
apt install ./cri-dockerd_0.2.3.3-0.ubuntu-jammy_amd64.deb
sudo systemctl daemon-reload
systemctl start cri-docker.service systemctl enable cri-docker.service systemctl start cri-docker.socket systemctl enable cri-docker.socket
Установка компонентов kubernetes
для установки всех необходимых компонентов нужно добавить репозиторий kubernetes, для этого нужно создать файл
touch /etc/yum.repos.d/kubernetes.repoи записать в него следующее
[kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0или выполнить команду
cat > etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 EOFустановка компонентов кластера kubernetes
yum install kubelet kubeadm kubectl kubernetes-cni
добавление ключа репозитория
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/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установка компонентов кластера kubernetes
apt update apt install kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet systemctl start kubelet
Инициализация кластера
kubeadm init --pod-network-cidr 10.244.0.0/16 --cri-socket /var/run/cri-dockerd.sock
kubeadm join 192.168.10.15:6443 --token a13kru.12899wph6u4a8ir8 --discovery-token-ca-cert-hash sha256:b8343091597fedd9b7a271f5c5b4016af6dce7442c052784ddd01f414eff68c1Тоже самое можно получить после инициализации выполнив
kubeadm token create --print-join-command
/etc/kubernetes/admin.confчтобы каждый раз при выполнении команд kubectl не вводить путь к нему и, чтобы kubectl мог использовать любой пользователь, а не только root, нужно открыть доступ для чтения к этому файлу и добавить переменную окружения.
Открыть доступ на чтение командой
chmod a+r /etc/kubernetes/admin.confДобавить переменную окружения в файл
/etc/environmentдля этого вписать туда
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl get nodes --kubeconfig /etc/kubernetes/admin.conf
Настройка worker-сервера
Отключение swap
swapoff -aкроме того, чтобы он не подключался при перезагрузке, нужно закомментировать раздел swap в файле
/etc/fstabэто можно сделать вручную или командой
sed -i '/ swap /s/^/#/' /etc/fstab
Отключение SELinux
setenforce 0отключение навсегда
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Открытие портов файервола
firewall-cmd --permanent --add-port=30000-32767/tcp firewall-cmd --permanent --add-port=10250/tcpприменение настроек
firewall-cmd --reload
ufw allow 30000:32767/tcp ufw allow 10250
Установка docker
добавление репозитория со свежей версией docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoустановка docker
yum install docker-ceКроме того можно установить дополнительные компоненты
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
добавление ключа репозитория
mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgдобавление репозитория
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullустановка docker
apt update apt install docker-ceКроме того можно установить дополнительные компоненты
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker systemctl enable dockerПроверка работы
systemctl status docker docker ps
Установка cri-dockerd
Репозиторий cri-dockerd на github
нужно скачать пакет cri-dockerd соответствующий версии системы
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.3/cri-dockerd-0.2.3-3.el8.x86_64.rpmустановка скачанного пакета
yum install cri-dockerd-0.2.2.20220610195206.0737013-0.el7.x86_64.rpm
нужно скачать пакет cri-dockerd соответствующий версии системы
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.3/cri-dockerd_0.2.3.3-0.ubuntu-jammy_amd64.debустановка скачанного пакета
apt install ./cri-dockerd_0.2.3.3-0.ubuntu-jammy_amd64.deb
sudo systemctl daemon-reload
systemctl start cri-docker.service systemctl enable cri-docker.service systemctl start cri-docker.socket systemctl enable cri-docker.socket
Установка компонентов kubernetes
для установки всех необходимых компонентов нужно добавить репозиторий kubernetes, для этого нужно создать файл
touch /etc/yum.repos.d/kubernetes.repoи записать в него следующее
[kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0или выполнить команду
cat > etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 EOFустановка компонентов кластера kubernetes
yum install kubelet kubeadm kubectl kubernetes-cni
добавление ключа репозитория
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/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установка компонентов кластера kubernetes
apt update apt install kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet systemctl start kubelet
Подключение к кластеру
kubeadm join 192.168.10.15:6443 --token nwk1m5.b4mlrs3wwhes4b36 --discovery-token-ca-cert-hash sha256:434f1d2c06a5635803979733e0554a82dc910c76c8ae5508f54ade3ec9b0163b --cri-socket /var/run/cri-dockerd.sock
Примечания
systemctl restart kubelet
kubectl rollout restart deployment.apps/coredns -n kube-system kubectl rollout restart daemonset.apps/kube-proxy -n kube-system
Команды для управления кластером
- kubectl get nodes вывод списка узлов кластера
- kubeadm reset --cri-socket /var/run/cri-dockerd.sock отключение узла от кластера
- kubectl describe nodes подробное описание узлов кластера
- kubectl get nodes --show-labels вывод списка узлов кластера с отображением их меток
- kubectl get node -A -o wide полная информация об узлах кластера