моя контактная информация
Почтамезофия@protonmail.com
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
1. Установите cri_dockerd
об/мин -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
2. Перезагрузите системный демон → Настройте автоматический запуск cri-dockerd → Запустите cri-dockerd.
Перезагрузить системный демон
sudo systemctl daemon-reload
Настройте автоматический запуск cri-dockerd
sudo systemctl enable cri-docker.socket cri-docker
Запустить кри-докерд
sudo systemctl start cri-docker.socket cri-docker
sudo systemctl status cri-docker.socket
sudo systemctl status cri-docker
Проблема: не удалось запустить cri-docker.
мера:
Способ 1: systemctl перезапустить докер # Перезапустить докер
Способ 2. Удалите Docker и переустановите его, а затем снова выполните описанные выше действия.
1. Установите кубектл
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
2. Проверьте, завершена ли установка
kubectl version --client
3. Откройте порт или закройте брандмауэр (чтобы обеспечить плавный процесс установки).
Открытый порт (облачный сервер)
Открыть порт 6443
sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
Перезагрузить брандмауэр
sudo firewall-cmd --reload
Посмотреть все открытые порты
sudo firewall-cmd --zone=public --list-ports
Или отключите брандмауэр (виртуальную машину)
Отключить брандмауэр
sudo systemctl stop firewalld
Отключить автозапуск брандмауэра
sudo systemctl disable firewalld
4. Отключите SELinux (убедитесь, что контейнер имеет доступ к системным ресурсам).
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
5. Установите kubeadm, kubelet и kubectl.
Загрузите соответствующий пакет автономной установки в формате rpm, который находится в каталоге 3_yum_package. Используйте команду для установки всех установочных пакетов rpm в каталоге.
cd 3_yum_package && rpm -ivh *.rpm
6. Настройте автоматический запуск kubelet
sudo systemctl enable --now kubelet
После выполнения вышеуказанных шагов у вас будет следующая среда
·Два сервера или виртуальные машины с разными IP-адресами могут взаимодействовать друг с другом и поддерживать состояние локальной сети. IP-адрес установлен на 192.168..34 и 192.168..35
· На обоих серверах установлена среда выполнения контейнера (Docker+cri_dockerd), а также установлены компоненты Kubernetes kubectl, kubeadm и kubelet.
7. Закройте раздел подкачки. Он подразделяется на временное и постоянное выключение. Для сред виртуальных машин рекомендуется постоянное выключение, поскольку оно будет часто включаться и выключаться. Для облачных сред, напротив, рекомендуется временное выключение.
Временно закройте раздел подкачки
swapoff -a
Чтобы навсегда закрыть раздел подкачки, закомментируйте строку, содержащую раздел подкачки, в fstab.
vi /etc/fstab
# /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
#Проверяем, прошла ли установка успешно
runc -v
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
Перезапустите компоненты Docker.
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
# Проверьте состояние компонента Docker
systemctl status docker cir-docker.socket cri-docker
10. Проверьте имя хоста и хосты
главный узел
имя хоста — k8s-master
vi /etc/hostname
Добавить сопоставление доменных имен
echo "192.168.**.35 k8s-slave01">> /etc/hosts
Другие узлы
имя хоста为k8s-slave01
vi /etc/hostname
Добавить сопоставление доменных имен
echo "192.168.**.34 k8s-master" >> /etc/hosts
11. Перенаправьте IPv4 и позвольте iptables видеть поток моста.
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
Установите необходимые параметры 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
#Применяем параметры 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
# Если ошибка iptables по-прежнему отображается во время инициализации, выполните
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/ipv4/ip_forward
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
--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
Повторно выполните команду инициализации
Запишите информацию ниже kubeadm join, которая необходима для присоединения узла. Соответствующая информация для приведенного выше примера:
kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf
--discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
Если вы забыли, вы можете использовать список токенов 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
Пользователь root выполняет напрямую
Оно вступает в силу временно и станет недействительным после перезапуска. Не рекомендуется.
export KUBECONFIG=/etc/kubernetes/admin.conf
Она вступает в силу навсегда. Нет необходимости выполнять эту команду снова после выполнения сброса kubeadm и повторной инициализации.
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
После выполнения постоянной эффективной команды вам необходимо получить ее источник, чтобы она стала эффективной.
source ~/.bash_profile
Проверьте, эффективна ли конфигурация
echo $KUBECONFIG
/etc/kubernetes/admin.conf
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
Настройка плагина flannel network для Kubernetes
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
cat /run/flannel/subnet.env
# Если такого файла или папки нет, вам необходимо создать их вручную. Содержимое такое же, как показано ниже.
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
14. Узел узла присоединяется к мастеру.
14.1. Скопируйте /etc/kubernetes/admin.conf с машины главного узла на машину подчиненного узла.
scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
# Не забудьте добавить admin.conf в переменную среды. Используйте его прямо здесь, чтобы он вступил в силу навсегда.
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
Если при копировании возникла проблема:
Ключ хоста ECDSA для 192.168.55.187 изменился, и вы запросили строгую проверку. Проверка ключа хоста не удалась.
Выполните следующие инструкции для восстановления
ssh-keygen -R 192.168.55.187
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;
Закрыть обмен
Временно отключите брандмауэр
успех
kubectl получить узлы
После добавления узла k8s в кластер проверьте, что статус узла — NotReady.
мера:
systemctl restart kubelet.service
systemctl restart docker.service
Перезапустите 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
успех
Скопируйте /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
kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
подчиненный узел
rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
главный узел
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
При необходимости повторно инициализируйте кластер 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
главный узел
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
главный узел
scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
подчиненный узел
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
kubectl get pod -A
kubectl get nodes