1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cookeem-kubeadm-ha

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README-EN.md

Установка кластера высокой доступности Kubernetes через kubeadm (поддержка Docker и containerd в качестве среды выполнения контейнеров для Kubernetes)

  • Среда выполнения контейнеров с использованием Docker.
  • Применимая версия Kubernetes: v1.24.x и выше.

Информация о узлах развёртывания

Имя хоста IP-адрес Комментарий
k8s-master01 192.168.0.101 Хост плоскости управления Kubernetes master01
k8s-master02 192.168.0.102 Хост плоскости управления Kubernetes master02
k8s-master03 192.168.0.103 Хост плоскости управления Kubernetes master03
k8s-vip 192.168.0.100 Плавающий IP-адрес Kubernetes, созданный keepalived. Если вы используете публичное облако, пожалуйста, предварительно подайте заявку на этот плавающий IP
# Пожалуйста, добавьте объяснение имени хоста для каждого узла
cat << EOF >> /etc/hosts
192.168.0.100 k8s-vip
192.168.0.101 k8s-master01
192.168.0.102 k8s-master02
192.168.0.103 k8s-master03
EOF

Описание архитектуры

  • Для демонстрации требуется развернуть только 3 высокодоступных главных узла.
  • Используйте keepalived и nginx в качестве высокодоступного балансировщика нагрузки, сгенерируйте конфигурацию балансировщика нагрузки с помощью инструмента командной строки dorycli и разверните балансировщик нагрузки через docker-compose.
  • Docker — среда выполнения контейнеров Kubernetes.

Сведения о версии

# Версия ОС: Debian 11
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye

# версия docker: 24.0.5
$ docker version
Client: Docker Engine — Community
  Version: 24.0.5
  API version: 1.43
  Go version: go1.20.6
  Git commit: ced0996
  Built: Fri Jul 21 20:35:45 2023
  OS/Arch: linux/amd64
  Context: default

Server: Docker Engine — Community
  Engine:
   Version: 24.0.5
   API version: 1.43 (minimum version 1.12)
   Go version: go1.20.6
   Git commit: a61e2b4
   Built: Fri Jul 21 20:35:45 2023
   OS/Arch: linux/amd64
   Experimental: false
  containerd:
   Version: 1.6.22
   GitCommit: 8165feabfdfe38c65b599c4993d227328c231fca
  runc:
   Version: 1.1.8
   GitCommit: v1.1.8-0-g82f18fe
  docker-init:
   Version: 0.19.0
   GitCommit: de40ad0

# версия cri-dockerd: 0.3.4
$ cri-dockerd --version
cri-dockerd 0.3.4 (e88b1605)

# версия dorycli: v1.6.5
$ dorycli version
dorycli version: v1.6.5
install dory-engine version: v2.6.5
install dory-console version: v2.6.5

# версия kubeadm: v1.28.0
$ kubeadm version
kubeadm version: &version.Info{Major: "1", Minor: "28", GitVersion: "v1.28.0", GitCommit: "855e7c48de7388eb330da0f8d9d2394ee818fb8d", GitTreeState: "clean", BuildDate: "2023-08-15T1 0:20: 15Z", GoVersion: "go1.20.7", Compiler: "gc", Platform: "linux/amd64"}

# версия kubernetes: v1.28.0
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane 35m v1.28.0
k8s-master02 Ready control-plane 31m v1.28.0
k8s-master03 Ready control-plane 30m v1.28.0

Установка Docker

  • Установите службу Docker на всех узлах.
# установить базовое программное обеспечение
apt-get update
apt-get install -y sudo wget ca-certificates curl gnupg htop git jq tree

# установить docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
   "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose

# проверить версию docker
docker version

# изменить конфигурацию docker
cat << EOF > /etc/docker/daemon.json
{
     "exec-opts": ["native.cgroupdriver=systemd"],
     "log-driver": "json-file",
     "log-opts": {
         "max-size": "100m"
     },
     "storage-driver": "overlay2"
``` ## install kubernetes

- **Установите программное обеспечение, связанное с Kubernetes, на всех узлах.**

```bash
# Установка компонентов, связанных с Kubernetes
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
kubeadm version

# Получите образ, необходимый для Kubernetes
kubeadm config images list --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
export PAUSE_IMAGE=$(kubeadm config images list --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers | grep pause)

# Обратите внимание, что образ паузы используется для настройки параметров запуска cri-dockerd
# Должно быть выведено: registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
echo $PAUSE_IMAGE

# Установите cri-dockerd для подключения Kubernetes и Docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz
tar zxvf cri-dockerd-0.3.4.amd64.tgz
cd cri-dockerd/
mkdir -p /usr/local/bin
install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd

# Создайте файл запуска cri-docker.socket
cat << EOF > /etc/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

# Создайте файл запуска cri-docker.service
# Обратите внимание на установку информации об образе контейнера паузы --pod-infra-container-image=$PAUSE_IMAGE
cat << EOF > /etc/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=$PAUSE_IMAGE
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Примечание: параметры StartLimit* были перемещены из «Service» в «Unit» в systemd 229.
# Оба старых и новых местоположения принимаются systemd 229 и выше, поэтому используются старые местоположения
# для работы с любой версией systemd.
StartLimitBurst=3

# Примечание: StartLimitInterval был переименован в StartLimitIntervalSec в systemd 230.
# И старое, и новое имя принимаются systemd 230 и выше, поэтому используется старое имя, чтобы этот параметр работал
# с любой версией systemd.
StartLimitInterval=60s

# Наличие ненулевых Limit* приводит к проблемам с производительностью из-за учёта накладных расходов
# в ядре. Мы рекомендуем использовать cgroups для локального учёта контейнеров.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Закомментируйте TasksMax, если ваша версия systemd не поддерживает его.
# Только systemd 226 и выше поддерживают эту опцию.
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# запустите cri-dockerd
systemctl daemon-reload
systemctl enable --now cri-docker.socket
systemctl restart cri-docker
systemctl status cri-docker

# Предварительно загрузите необходимый образ контейнера через kubeadm
kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock
docker images
  • Создайте и запустите высокодоступный балансировщик нагрузки через dorycli на узле k8s-master01: keepalived, nginx-lb
  • Адрес проекта dorycli: https://github.com/dory-engine/dorycli
# установите dorycli
cd /root
wget https://github.com/dory-engine/dorycli/releases/download/v1.6.5/dorycli-v1.6.5-linux-amd64.tgz
tar zxvf dorycli-v1.6.5-linux-amd64.tgz
chmod a+x dorycli
mv dorycli /usr/bin/

# Настройте автозаполнение dorycli, которое может
``` **Автоматически завершать подкоманды и параметры с помощью клавиши TAB на клавиатуре**

dorycli completion bash -h
source <(dorycli completion bash)
dorycli completion bash > /etc/bash_completion.d/dorycli

# Использовать dorycli для печати информации о конфигурации высокодоступного балансировщика нагрузки и сохранения её в kubeadm-ha.yaml

dorycli install ha print --language zh > kubeadm-ha.yaml

# Изменить информацию о конфигурации в соответствии с реальной ситуацией

# Имя сетевой карты каждого хоста можно получить с помощью следующей команды:
ip address

# Конфигурация этого примера выглядит следующим образом, пожалуйста, измените конфигурацию в соответствии с реальной ситуацией:
cat kubeadm-ha.yaml
# Версия kubernetes, которую необходимо установить:
version: "v1.28.0"
# Настройка зеркального хранилища kubernetes, если не задана, то используется официальный дефолтный репозиторий:
imageRepository: "registry.cn-hangzhou.aliyuncs.com/google_containers"
# Плавающий IP-адрес высокодоступного кластера kubernetes, созданного с использованием keepalived:
virtualIp: 192.168.0.100
# Используйте порт сопоставления apiserver высокодоступного кластера kubernetes, сопоставленный nginx:
virtualPort: 16443
# Хост-имя сопоставления плавающего IP-адреса, пожалуйста, установите сопоставление хост-имени в файле конфигурации /etc/hosts:
virtualHostname: k8s-vip
# Сокет времени выполнения контейнера kubernetes:
# В случае docker: unix:///var/run/cri-dockerd.sock
# В случае containerd: unix:///var/run/containerd/containerd.sock
# В случае cri-o: unix:///var/run/crio/crio.sock
criSocket: unix:///var/run/cri-dockerd.sock
# Адрес подсети pod кластера kubernetes, если не задан, используйте адрес подсети pod по умолчанию:
podSubnet: "10.244.0.0/24"
# Адрес подсети службы кластера kubernetes, если не задан, используйте адрес подсети службы по умолчанию:
serviceSubnet: "10.96.0.0/16"
# Пароль аутентификации keepalived, если не установлен, то используйте случайно сгенерированный пароль:
keepAlivedAuthPass: ""
# Конфигурации хостов controlplane управления kubernetes, количество высокодоступных главных узлов должно быть единичным и не менее 3:
masterHosts:
     # Хост-имя главного узла, пожалуйста, настройте сопоставление хоста в файле конфигурации /etc/hosts:
   - hostname: k8s-master01
     # IP-адрес главного узла:
     ipAddress: 192.168.0.101
     # Имя сетевой карты, используемой главным узлом для взаимного доступа, используется для привязки сетевой карты keepalived:
     networkInterface: eth0
     # Приоритет выбора keepalived, чем больше значение, тем выше приоритет, приоритет каждого главного узла не может быть одинаковым:
     keepalivedPriority: 120
     # Хост-имя главного узла, пожалуйста, настройте сопоставление хоста в файле конфигурации /etc/hosts:
   - hostname: k8s-master02
     # IP-адрес главного узла:
     ipAddress: 192.168.0.102
     # Имя сетевой карты, используемой главным узлом для взаимного доступа, используется для привязки сетевой карты keepalived:
     networkInterface: eth0
     # Приоритет выбора keepalived, чем больше значение, тем выше приоритет, приоритет каждого главного узла не может быть одинаковым:
     keepalivedPriority: 110
     # Хост-имя главного узла, пожалуйста, настройте сопоставление хоста в файле конфигурации /etc/hosts:
   - hostname: k8s-master03
     # IP-адрес главного узла:
     ipAddress: 192.168.0.103
     # Имя сетевой карты, используемой главным узлом для взаимного доступа, используется для привязки сетевой карты keepalived:
     networkInterface: eth0
     # Приоритет выбора keepalived, чем больше значение, тем выше приоритет, приоритет каждого главного узла не может быть одинаковым:
     keepalivedPriority: 100

# Создайте доступную конфигурацию балансировщика нагрузки через dorycli и выведите сгенерированную конфигурацию в текущий каталог
# После выполнения именования будет выведен сгенерированный файл описания и файл описания стартовой конфигурации
dorycli install ha script -o . -f kubeadm-ha.yaml --language zh

# Просмотрите конфигурационный файл kubeadm-config.yaml, сгенерированный dorycli Используется для kubeadm init для инициализации кластера Kubernetes.

# Конфигурация, сгенерированная в этом примере, выглядит следующим образом:
cat kubeadm-config.yaml
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
apiServer:
   certSANs:
     - "k8s-vip"
     - "192.168.0.100"
     - "k8s-master01"
     - "192.168.0.101"
     - "k8s-master02"
     - "192.168.0.102"
     - "k8s-master03"
     - "192.168.0.103"
controlPlaneEndpoint: "192.168.0.100:16443"
networking:
   podSubnet: "10.244.0.0/24"
   serviceSubnet: "10.96.0.0/16"
---
apiVersion: kubeadm.k8s.io/v1beta3
kind:InitConfiguration
nodeRegistration:
   criSocket: unix:///var/run/cri-dockerd.sock

# Устанавливается путь к файлу высокодоступного балансировщика нагрузки на узле master
export LB_DIR=/data/k8s-lb

# Копируется файл высокодоступного балансировщика на k8s-master01
ssh k8s-master01 mkdir -p ${LB_DIR}
scp -r k8s-master01/nginx-lb k8s-master01/keepalived root@k8s-master01:${LB_DIR}

# Запускается высокодоступный балансировщик нагрузки на узле k8s-master01
ssh k8s-master01 "cd ${LB_DIR}/keepalived/ && docker-compose stop && docker-compose rm -f && docker-compose up -d"
ssh k8s-master01 "cd ${LB_DIR}/nginx-lb/ && docker-compose stop && docker-compose rm -f && docker-compose up -d"

# Копируется файл высокодоступного балансировщика на k8s-master02
ssh k8s-master02 mkdir -p ${LB_DIR}
scp -r k8s-master02/nginx-lb k8s-master02/keepalived root@k8s-master02:${LB_DIR}

# Запускается высокодоступный балансировщик нагрузки на узле k8s-master02
ssh k8s-master02 "cd ${LB_DIR}/keepalived/ && docker-compose stop && docker-compose rm -f && docker-compose up -d"
ssh k8s-master02 "cd ${LB_DIR}/nginx-lb/ && docker-compose stop && docker-compose rm -f && docker-compose up -d"

# Копируется файл высокодоступного балансировщика на k8s-master03
ssh k8s-master03 mkdir -p ${LB_DIR}
scp -r k8s-master03/nginx-lb k8s-master03/keepalived root@k8s-master03:${LB_DIR}

# Запускается высокодоступный балансировщик нагрузки на узле k8s-master03
ssh k8s-master03 "cd ${LB_DIR}/keepalived/ && docker-compose stop && docker-compose rm -f && docker-compose up -d"
ssh k8s-master03 "cd ${LB_DIR}/nginx-lb/ && docker-compose stop && docker-compose rm -f && docker-compose up -d"

# Проверяется, создан ли плавающий IP на каждом узле master. Обычно плавающий IP привязан к k8s-master01
ip address

*Инициализация высокодоступного кластера Kubernetes.*

```bash
# Инициализируется высокодоступный кластер с использованием файла конфигурации kubeadm-config.yaml на k8s-master01
kubeadm init --config=kubeadm-config.yaml --upload-certs
# Команда kubeadm init выведет следующее приглашение, используйте это приглашение для выполнения операций присоединения на других узлах master
Теперь вы можете присоединить любое количество узлов control-plane, работающих со следующей командой на каждом из них от имени пользователя root:

   kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
     --discovery-token-ca-cert-hash sha256:xxx \
     --control-plane --certificate-key xxx

Обратите внимание, что ключ сертификата даёт доступ к конфиденциальным данным кластера, держите его в секрете!
В качестве меры предосторожности загруженные сертификаты будут удалены через два часа; при необходимости вы можете использовать
«kubeadm init phase upload-certs --upload-certs», чтобы перезагрузить сертификаты позже.

Затем вы можете присоединиться к любому количеству рабочих узлов, выполнив следующую команду на каждом от имени пользователя root:

kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
     --discovery-token-ca-cert-hash sha256:xxx


   kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
     --discovery-token-ca-cert-hash sha256:xxx \
     --control-plane --certificate-key xxx

# Выполните следующие команды на узлах k8s-master02 и k8s-master03, чтобы добавить k8s-master02 и k8s-master03 в высокодоступный кластер Kubernetes
# Помните, что команде kubeadm join необходимо установить --cri-socket unix:///var/run/cri-dockerd.sock
kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
         --discovery-token-ca-cert-hash sha256:xxx **--control-plane --certificate-key xxx --cri-socket unix:///var/run/cri-dockerd.sock**

Настроить kubectl на всех главных узлах для доступа к кластеру kubernetes:
1. Создайте каталог $HOME/.kube:
mkdir -p $HOME/.kube
2. Скопируйте файл admin.conf из /etc/kubernetes в $HOME/.kube/config:
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
3. Измените владельца и группу файла $HOME/.kube/config на текущего пользователя:
chown $(id -u):$(id -g) $HOME/.kube/config

На всех главных узлах настроить автозаполнение kubectl, чтобы можно было автоматически дополнять подкоманды и параметры с помощью клавиши TAB:
kubectl completion -h
kubectl completion bash > ~/.kube/completion.bash.inc
printf "
# Kubectl shell completion
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile
source $HOME/.bash_profile

Установить компоненты сети cilium на узел k8s-master01:
1. Скачайте последнюю версию cilium с GitHub:
wget https://github.com/cilium/cilium-cli/releases/download/v0.15.6/cilium-linux-amd64.tar.gz
2. Распакуйте архив:
tar zxvf cilium-linux-amd64.tar.gz
3. Переместите cilium в /usr/local/bin/:
mv cilium /usr/local/bin/
4. Установите cilium версии 1.14.0 и настройте режим chainingMode=portmap:
cilium install --version 1.14.0 --set cni.chainingMode=portmap

Разрешить планирование подов на всех узлах:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

Проверить статус всех подов:
kubectl get pods -A -o wide
NAMESPACE              NAME                                         READY   STATUS    RESTARTS      AGE     IP              NODE           NOMINATED NODE   READINESS GATES
kube-system            cilium-mwvsr                                 1/1     Running   0             21m     192.168.0.102   k8s-master02   <none>           <none>
kube-system            cilium-operator-b4dfbf784-zgr7v              1/1     Running   0             21m     192.168.0.102   k8s-master02   <none>           <none>
kube-system            cilium-v27l2                                 1/1     Running   0             21m     192.168.0.103   k8s-master03   <none>           <none>
kube-system            cilium-zbcdj                                 1/1     Running   0             21m     192.168.0.101   k8s-master01   <none>           <none>
kube-system            coredns-6554b8b87f-kp7tn                     1/1     Running   0             30m     10.0.2.231      k8s-master03   <none>           <none>
kube-system            coredns-6554b8b87f-zlhgx                     1/1     Running   0             30m     10.0.2.197      k8s-master03   <none>           <none>
kube-system            etcd-k8s-master01                            1/1     Running   0             30m     192.168.0.101   k8s-master01   <none>           <none>
kube-system            etcd-k8s-master02                            1/1     Running   0             26m     192.168.0.102   k8s-master02   <none>           <none>
kube-system            etcd-k8s-master03                            1/1     Running   0             25m     192.168.0.103   k8s-master03   <none>           <none>
kube-system            kube-apiserver-k8s-master01                  1/1     Running   0             30m     192.168.0.101   k8s-master01   <none>           <none>
kube-system            kube-apiserver-k8s-master02                  1/1     Running   0             26m     192.168.0.102   k8s-master02   <none>           <none>
kube-system            kube-apiserver-k8s-master03                  1/1     Running   1 (25m ago)   25m     192.168.0.103   k8s-master03   <none>           <none>
kube-system            kube-controller-manager-k8s-master01         1/1     Running   1 (26m ago)   30m     192.168.0.101   k8s-master01   <none>           <none>
kube-system            kube-controller-manager-k8s-master02         1/1     Running   0             26m     192.168.0.102   k8s-master02   <none>           <none>
kube-system            kube-controller-manager-k8s-master03         1/1     Running   0             24m     192.168.0.103   k8s-master03   <none>           <none>
kube-system            kube-proxy-gr2pt                             1/1     Running   0             26m     192.168.0.102   k8s-master02   <none>           <none>
kube-system            kube-proxy-rkb9b                             1/1     Running   0             30m     192.168.0.101   k8s-master01   <none>           <none> # [Необязательно] Проверьте, все ли ноды в нормальном состоянии

kubectl get nodes
| ИМЯ | СОСТОЯНИЕ | РОЛИ | ВОЗРАСТ | ВЕРСИЯ |
|:--:|:--:|:--:|:--:|:--:|
| k8s-master01 | Ready | control-plane | 31m | v1.28.0 |
| k8s-master02 | Ready | control-plane | 27m | v1.28.0 |
| k8s-master03 | Ready | control-plane | 26m | v1.28.0 |  

# [Необязательно] Протестируйте развёртывание приложения в кластере kubernetes

# Разверните приложение nginx и предоставьте к нему доступ через nodePort 31000
kubectl run nginx --image=nginx:1.23.1-alpine --image-pull-policy=IfNotPresent --port=80 -l=app=nginx
kubectl create service nodeport nginx --tcp=80:80 --node-port=31000
curl k8s-vip:31000  

## [Необязательно] Установите интерфейс управления kubernetes-dashboard

- Для управления приложениями, развёрнутыми в kubernetes, рекомендуется использовать `kubernetes-dashboard`.
- Чтобы узнать больше, ознакомьтесь с официальным репозиторием кода README.md: [kubernetes-dashboard](https://github.com/kubernetes/dashboard).

- Установка:
```shell script
# Установите kubernetes-dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml

# Настройте сервис kubernetes-dashboard для использования nodePort для предоставления доступа к порту
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
   labels:
     k8s-app: kubernetes-dashboard
   name: kubernetes-dashboard
   namespace: kubernetes-dashboard
spec:
   ports:
   - port: 443
     protocol: TCP
     targetPort: 8443
     nodePort: 30000
   selector:
     k8s-app: kubernetes-dashboard
   type: NodePort
EOF

# Создайте служебную учётную запись администратора
kubectl create serviceaccount -n kube-system admin-user --dry-run=client -o yaml | kubectl apply -f -

# Создайте привязку роли администратора кластера
kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kube-system:admin-user --dry-run=client -o yaml | kubectl apply -f -

# Вручную создайте секрет служебной учётной записи
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
   name: admin-user-secret
   namespace: kube-system
   annotations:
     kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token
EOF

# Получите токен управления kubernetes
kubectl -n kube-system get secret admin-user-secret -o jsonpath='{ .data.token }' | base64 -d

# Используйте браузер для доступа к kubernetes-dashboard: https://k8s-vip:30000
# Используйте токен управления kubernetes для входа в kubernetes-dashboard

[Необязательно] Установите контроллер входящего трафика traefik

  • Чтобы использовать функцию ingress в kubernetes, необходимо установить контроллер входящего трафика, и рекомендуется использовать traefik.

  • Чтобы узнать больше, обратитесь к официальной документации веб-сайта: traefik.

  • Разверните traefik на всех главных узлах kubernetes:

# Извлеките репозиторий helm traefik
helm repo add traefik https://traefik.github.io/charts
helm fetch traefik/traefik --untar

# Разверните traefik в режиме daemonset
cat << EOF > traefik.yaml
deployment:
   kind: DaemonSet
image:
   name: traefik
   tag: v2.6.5
ports:
   web:
     hostPort: 80
   websecure:
     hostPort: 443
service:
   type: ClusterIP
EOF

# Установите traefik
kubectl create namespace traefik --dry-run=client -o yaml | kubectl apply -f -
helm install -n traefik traefik traefik/ -f traefik.yaml

# Проверьте статус установки
helm -n traefik list
kubectl -n traefik get pods -o wide
kubectl -n traefik get services -o wide

# Убедитесь, что установка traefik прошла успешно. Если вывод — страница 404 не найдена, это означает успех
curl k8s-vip
curl -k https://k8s-vip ## [Необязательно] Установите инструмент сбора данных о производительности metrics-server

- Чтобы использовать функцию горизонтального масштабирования kubernetes [horizontal pod autoscale](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/), необходимо установить `metrics-server`.
- Для получения дополнительной информации ознакомьтесь с официальным документом README.md репозитория кода: [metrics-server](https://github.com/kubernetes-sigs/metrics-server).

```shell script
# pull image
docker pull registry.aliyuncs.com/google_containers/metrics-server:v0.6.1
docker tag registry.aliyuncs.com/google_containers/metrics-server:v0.6.1 k8s.gcr.io/metrics-server/metrics-server:v0.6.1

# Get metrics-server install yaml
curl -O -L https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
# Add --kubelet-insecure-tls parameter
sed -i 's/- args:/- args:\n - --kubelet-insecure-tls/g' components.yaml
# install metrics-server
kubectl apply -f components.yaml

# Wait for the metrics-server to be normal
kubectl -n kube-system get pods -l=k8s-app=metrics-server

# View the metrics of the node
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master01 146m 7% 2284Mi 59%
k8s-master02 123m 6% 2283Mi 59%
k8s-master03 114m 5% 2180Mi 57%

После установки metrics-server kubernetes-dashboard также может отображать данные о производительности.

[Необязательно] Установите сервисную сетку istio

  • Чтобы воспользоваться гибридной возможностью публикации в оттенках серого в сервисной сетке, необходимо развернуть сервисную сетку istio.
  • Дополнительную информацию можно найти в документации на официальном сайте istio: istio.io.
# Install istioctl, клиентский адрес загрузки https://github.com/istio/istio/releases/tag/1.18.2

# Download and install istioctl
wget https://github.com/istio/istio/releases/download/1.18.2/istioctl-1.18.2-linux-amd64.tar.gz
tar zxvf istioctl-1.18.2-linux-amd64.tar.gz
mv istioctl /usr/bin/

# Confirm версию istioctl
istioctl version

# Используйте istioctl для развертывания istio в kubernetes
istioctl install --set profile=demo\
--set values.gateways.istio-ingressgateway.type=ClusterIP \
--set values.global.imagePullPolicy=IfNotPresent \
--set values.global.proxy_init.resources.limits.cpu=100m \
--set values.global.proxy_init.resources.limits.memory=100Mi \
--set values.global.proxy.resources.limits.cpu=100m \
--set values.global.proxy.resources.limits.memory=100Mi

# Проверьте развёртывание istio
kubectl -n istio-system get pods,svc

[Необязательно] Примените облачный движок Dory-Engine

🚀🚀🚀 Dory-Engine Platform Engineering Best Practices (https://www.bilibili.com/video/BV1oM4y117Pj/)

Dory-Engine — это очень простое приложение облачного движка. Разработчики могут компилировать, упаковывать и развёртывать свои собственные программы из исходного кода в различные среды k8s или хосты без обучения, написания или настройки.

  1. Не нужно учиться: не нужно изучать, как писать сложные облачные скрипты и как развёртывать приложения в k8s, все конфигурации можно понять с первого взгляда.
  2. Не нужно писать: вам не нужно писать сложные облачные сценарии для сборки, упаковки и развёртывания, а также не нужно писать сложные файлы развёртывания приложений k8s. Вам нужно всего лишь несколько простых конфигураций, чтобы настроить собственный облачный конвейер.
  3. Не нужно настраивать: нет необходимости настраивать, как каждый инструмент DevOps и среда k8s взаимодействуют друг с другом для завершения облачного приложения. После активации проекта все инструменты и среды автоматически настраиваются.

Обратитесь к руководству по установке: https://github.com/dory-engine/dorycli.

🚀🚀🚀 Используйте dorycli для установки и развёртывания Dory-Engine (https://www.bilibili.com/video/BV1aG411D7Sj/).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Установить высокодоступный кластер Kubernetes с помощью kubeadm. Использовать версию v1.24.x и выше для контейнеров с runtime docker/containerd. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cookeem-kubeadm-ha.git
git@api.gitlife.ru:oschina-mirror/cookeem-kubeadm-ha.git
oschina-mirror
cookeem-kubeadm-ha
cookeem-kubeadm-ha
master