Обмен технологиями

автономное развертывание кластера k8s

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Автономное развертывание K8s

среда

Вставьте сюда описание изображения

Цель

автономное развертывание k8s

шаг

Развертывание докера

Подробнее читайте в статье: «Офлайн-установка докера и офлайн-упаковка back-end проектов».
https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501
Все используемые файлы находятся по адресу:
Ссылка: https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
Код извлечения: fpuy

Установите cri_dockerd

1. Установите cri_dockerd

об/мин -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
Вставьте сюда описание изображения

2. Перезагрузите системный демон → Настройте автоматический запуск cri-dockerd → Запустите cri-dockerd.

Перезагрузить системный демон

sudo systemctl daemon-reload
  • 1

Настройте автоматический запуск cri-dockerd

sudo systemctl enable cri-docker.socket cri-docker
  • 1

Запустить кри-докерд

sudo systemctl start cri-docker.socket cri-docker

sudo systemctl status cri-docker.socket

sudo systemctl status cri-docker
  • 1
  • 2
  • 3
  • 4
  • 5

Вставьте сюда описание изображения

Проблема: не удалось запустить cri-docker.

Вставьте сюда описание изображения

мера:

Способ 1: systemctl перезапустить докер # Перезапустить докер

Способ 2. Удалите Docker и переустановите его, а затем снова выполните описанные выше действия.

*Установить Кубернетес

Установить кубектл

1. Установите кубектл

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • 1

2. Проверьте, завершена ли установка

kubectl version --client
  • 1

Вставьте сюда описание изображения

Установить кубеадм

3. Откройте порт или закройте брандмауэр (чтобы обеспечить плавный процесс установки).

Открытый порт (облачный сервер)

Открыть порт 6443

sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
  • 1

Перезагрузить брандмауэр

sudo firewall-cmd --reload
  • 1

Посмотреть все открытые порты

sudo firewall-cmd --zone=public --list-ports
  • 1

Или отключите брандмауэр (виртуальную машину)

Отключить брандмауэр

sudo systemctl stop firewalld
  • 1

Отключить автозапуск брандмауэра

sudo systemctl disable firewalld
  • 1

4. Отключите SELinux (убедитесь, что контейнер имеет доступ к системным ресурсам).

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • 1
  • 2

5. Установите kubeadm, kubelet и kubectl.

Загрузите соответствующий пакет автономной установки в формате rpm, который находится в каталоге 3_yum_package. Используйте команду для установки всех установочных пакетов rpm в каталоге.

cd 3_yum_package && rpm -ivh *.rpm
  • 1

Вставьте сюда описание изображения

6. Настройте автоматический запуск kubelet

sudo systemctl enable --now kubelet
  • 1

Вставьте сюда описание изображения

*Развертывание кластера k8s.

После выполнения вышеуказанных шагов у вас будет следующая среда

·Два сервера или виртуальные машины с разными IP-адресами могут взаимодействовать друг с другом и поддерживать состояние локальной сети. IP-адрес установлен на 192.168..34 и 192.168..35

· На обоих серверах установлена ​​среда выполнения контейнера (Docker+cri_dockerd), а также установлены компоненты Kubernetes kubectl, kubeadm и kubelet.

Экологическая подготовка

7. Закройте раздел подкачки. Он подразделяется на временное и постоянное выключение. Для сред виртуальных машин рекомендуется постоянное выключение, поскольку оно будет часто включаться и выключаться. Для облачных сред, напротив, рекомендуется временное выключение.

Временно закройте раздел подкачки

swapoff -a
  • 1

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

vi /etc/fstab
  • 1

# /dev/mapper/centos-swap swap swap значения по умолчанию 0 0

Перезапустите, чтобы изменения вступили в силу. Перезапуск может привести к изменению статуса cri-dockerd. В фактическом развертывании я не выбрал перезапуск. Предполагается, что версия или конфигурация настроены неправильно. Вы можете переустановить docker и. cri-dockerd, а затем запустите cri-dockerd, чтобы состояние cri -dockerd стало нормальным

перезагрузить

8. Установите runc в качестве операционной среды k8s.

Установить runc

sudo install -m 755 runc.amd64 /usr/local/bin/runc
  • 1

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

runc -v
  • 1

Вставьте сюда описание изображения

9. Docker и cri-dockerd настроили отечественное ускорение изображений (Поскольку имена следующих пакетов программного обеспечения, которые будут использоваться в этой папке, имеют зеркальные адреса, рекомендуется настроить соответствующее ускорение зеркала даже в локальной сети, чтобы kubectl не требовал Интернета для загрузки пакетов программного обеспечения и игнорировал локальное зеркало после установка завершена.

sudo tee /etc/docker/daemon.json <<-'EOF'

{

 "registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]

}

EOF

# 找到第10行

vi /usr/lib/systemd/system/cri-docker.service

# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Перезапустите компоненты Docker.

systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
  • 1

# Проверьте состояние компонента Docker

systemctl status docker cir-docker.socket cri-docker
  • 1

10. Проверьте имя хоста и хосты

главный узел

имя хоста — k8s-master

vi /etc/hostname
  • 1

Добавить сопоставление доменных имен

echo "192.168.**.35 k8s-slave01">> /etc/hosts
  • 1

Другие узлы

имя хоста为k8s-slave01

vi /etc/hostname
  • 1

Добавить сопоставление доменных имен

echo "192.168.**.34 k8s-master" >> /etc/hosts
  • 1

11. Перенаправьте IPv4 и позвольте iptables видеть поток моста.

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

 

sudo modprobe overlay

sudo modprobe br_netfilter
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Установите необходимые параметры sysctl, которые сохраняются после перезагрузки.

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward          = 1

EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

#Применяем параметры sysctl без перезапуска

sudo sysctl --system

 

lsmod | grep br_netfilter

lsmod | grep overlay

 

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

# Если ошибка iptables по-прежнему отображается во время инициализации, выполните

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables

echo "1">/proc/sys/net/ipv4/ip_forward
  • 1
  • 2
  • 3

Инициализировать узел/мастер плоскости управления

12. Инициализируйте главный узел

Перед инициализацией необходимо получить необходимый для инициализации докер-образ через конфиг-образы kubeadm:

Вставьте сюда описание изображения

Установите образ docker load -i **.tar

Соответствующие файлы изображений существуют в 5_kubeadm-images.

Выполните инициализацию:

kubeadm init --node-name=k8s-master list--image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.**.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  • 1

--image-repository=registry.aliyuncs.com/google_containers # Замените загруженный источник образа контейнера на Alibaba Cloud. В противном случае образ невозможно будет извлечь по сетевым причинам, и выполнение обязательно завершится неудачей.

–cri-socket=unix:///var/run/cri-dockerd.sock # Это указанная среда выполнения контейнера, посколькуContainerd также является одним из компонентов Docker. Загрузка Docker также загрузит контейнер при выполнении инициализации. обнаруживает, что существует несколько сред выполнения контейнера, он должен вручную выбрать одну. Здесь также можно увидеть, чтоContainerd на самом деле намного легче, чем Docker.

–apiserver-advertise-address=192.168.56.50 # Установите широковещательный адрес для сервера API. Выберите здесь локальный адрес IPv4. Если вы не хотите, чтобы API-СЕРВЕР был установлен на других узлах, не меняйте его на другой адрес.

--pod-network-cidr=10.244.0.0/16 # Укажите диапазон IP-адресов, который может использоваться сетью модуля. Если вы еще не уверены, вы можете игнорировать его и использовать это значение.

–service-cidr=10.96.0.0/12 # Укажите дополнительный сегмент IP-адреса для виртуального IP-адреса службы. Если вы еще не уверены, вы можете просто использовать это значение.

Проблема: проверка cordns:v1.10.1 не существует, на самом деле cordns:v1.10.1 уже есть, но это cordns:1.10.1.

Вставьте сюда описание изображения

Меры: Изменить тег cordns.

docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1
  • 1

Повторно выполните команду инициализации

Вставьте сюда описание изображения

Запишите информацию ниже kubeadm join, которая необходима для присоединения узла. Соответствующая информация для приведенного выше примера:

kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf 

​    --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
  • 1
  • 2
  • 3

Если вы забыли, вы можете использовать список токенов kubeadm для запроса. Токен существует в течение 24 часов, заново создать токен kubeadm create --print-join-command и удалить его с помощью идентификатора токена kubeadm token delete.

Пользователи без полномочий root, пожалуйста, выполните

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 1
  • 2
  • 3
  • 4
  • 5

Пользователь root выполняет напрямую

Оно вступает в силу временно и станет недействительным после перезапуска. Не рекомендуется.

export KUBECONFIG=/etc/kubernetes/admin.conf 
  • 1

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

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
  • 1

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

source ~/.bash_profile
  • 1

Проверьте, эффективна ли конфигурация

echo $KUBECONFIG 

/etc/kubernetes/admin.conf
  • 1
  • 2
  • 3

13. Установите и настройте сетевые плагины.

Здесь фланель используется для загрузки и загрузки файла kube-flannel.yml на сервер.

Загрузите соответствующий образ на сервер для установки. kube-flannel.yml и файлы изображений находятся в 6_kube-flannel.

Запросить сетевую карту

ifconfig

Вставьте сюда описание изображения

kube-flannel.yml по умолчанию будет искать сетевую карту enp1s0. В этом примере сетевая карта 34 — это enp1s0, и ее не нужно изменять.

//Измените kube-flannel.yml на 35 и добавьте –iface=enp0s3 для указания (здесь enp0s3 — это сетевая карта, соответствующая IP-адресу, например, часть в поле выше). Расположение параметров следующее:

container:

  ......

  command:

  - /opt/bin/flanneld

  arg:

  - --ip-masq

  - --kube-subnet-mgr

  - --iface=enp4s0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Настройка плагина flannel network для Kubernetes

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
  • 1

Вставьте сюда описание изображения

cat /run/flannel/subnet.env
  • 1

# Если такого файла или папки нет, вам необходимо создать их вручную. Содержимое такое же, как показано ниже.

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.0.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Узел узла присоединяется к мастеру

14. Узел узла присоединяется к мастеру.

14.1. Скопируйте /etc/kubernetes/admin.conf с машины главного узла на машину подчиненного узла.

scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
  • 1

# Не забудьте добавить admin.conf в переменную среды. Используйте его прямо здесь, чтобы он вступил в силу навсегда.

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile
  • 1
  • 2
  • 3

Если при копировании возникла проблема:

Ключ хоста ECDSA для 192.168.55.187 изменился, и вы запросили строгую проверку. Проверка ключа хоста не удалась.

Выполните следующие инструкции для восстановления

ssh-keygen -R 192.168.55.187
  • 1

14.2. Выполните команду соединения (после успешной инициализации главного узла будет подана команда соединения).

Например:

kubeadm join 192.168.51.34:6443 --token by7t4x.da3f98dzrvjylykz --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

Вставьте сюда описание изображения

14.3. Выполнение узлов kubectl get.

Вставьте сюда описание изображения

Кластер k8s успешно развернут! ! !

вопрос

Вопрос первый

kubectl получить узлы

Вставьте сюда описание изображения

Меры: Проверьте, закрыт ли своп, проверьте, открывает ли брандмауэр порт 6443;

Закрыть обмен

Вставьте сюда описание изображения

Временно отключите брандмауэр

Вставьте сюда описание изображения

успех

Вставьте сюда описание изображения

вопрос 2

kubectl получить узлы

После добавления узла k8s в кластер проверьте, что статус узла — NotReady.

Вставьте сюда описание изображения

мера:

systemctl restart kubelet.service

systemctl restart docker.service
  • 1
  • 2
  • 3

Перезапустите kubelet и докер.

Вставьте сюда описание изображения

Вопрос третий

kubeadm join 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

Тайм-аут инициализации возникает при добавлении дочерних узлов в кластер k8s.

Вставьте сюда описание изображения
мера:

kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1

Вставьте сюда описание изображения

успех

Вставьте сюда описание изображения

Вставьте сюда описание изображения

Вопрос 4

Скопируйте /etc/kubernetes/admin.conf с машины главного узла на машину подчиненного узла.

scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/

Если копирование файла не удалось, сообщение об ошибке будет выглядеть следующим образом:

Ключ хоста ECDSA для 192.168.55.187 изменился, и вы запросили строгую проверку.

Проверка ключа хоста не удалась.

Выполните следующие инструкции для восстановления

ssh-keygen -R 192.168.55.187
  • 1

Быстрое удаление

kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
  • 1
  • 2
  • 3

подчиненный узел

rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2

главный узел

rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2
  • 3
  • 4

При необходимости повторно инициализируйте кластер k8s.

kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.51.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  • 1

главный узел

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
  • 1
  • 2

главный узел

scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
  • 1
  • 2

подчиненный узел

kubeadm join 192.168.51.34:6443 --token 1k9kdy.dvn2qbtd7rjar1ly 
       --discovery-token-ca-cert-hash sha256:ff90d8ed41ae1902a839194f179a1c3ba8374a5197ea3111e10e5ca1c09fa442 --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2
kubectl get pod -A
kubectl get nodes
  • 1
  • 2