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

OSCHINA-MIRROR/cookeem-kubeadm-ha

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-containerd-EN.md 20 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 06:20 7b58cfa

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

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

Имя хоста 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 и развёртывание балансировщика через nerdctl compose.
  • Containerd — среда выполнения контейнеров Kubernetes.

Версия информации

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

# версия containerd: 1.6.24
$ containerd --version
containerd containerd.io 1.6.24 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523

# версия nerdctl: 1.7.0
nerdctl --version
nerdctl version 1.7.0

# версия buildkitd: v0.12.3
$ buildkitd --version
buildkitd github.com/moby/buildkit v0.12.3 438f47256f0decd64cc96084e22d3357da494c27

# версия cni-plugins: v1.3.0

# версия 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

Установка containerd

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

# установка containerd
apt-get install apt-transport-https software-properties-common ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable"

apt-get -y update
apt-get install -y containerd.io

systemctl status containerd

# установка kubeadm
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 -y update
apt-get install -y kubelet kubeadm kubectl
kubeadm version

# получение информации об образе паузы
PAUSE_IMAGE=$(kubeadm config images list --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers | grep pause)
echo ${PAUSE_IMAGE}

# изменение конфигурации containerd
containerd config default > /etc/containerd/config.toml

# изменение конфигурации containerd, поиск и редактирование SystemdCgroup = true
vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

# изменение конфигурации containerd, поиск и...
``` **Конфигурация кластера Kubernetes высокой доступности**

Основной язык текста запроса — китайский. Перевод на русский язык:

*unix:///var/run/crio/crio.sock*

criSocket: unix:///var/run/containerd/containerd.sock

# Адрес подсети модуля кластера kubernetes, если не установлен, используется адрес подсети модуля по умолчанию
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, который используется для инициализации кластера kubeadm
# Сгенерированная конфигурация в этом примере выглядит следующим образом:
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/containerd/containerd.sock

# Установите путь к файлу балансировщика нагрузки высокой доступности главного узла
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/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
ssh k8s-master01 "cd ${LB_DIR}/nginx-lb/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"

# Скопируйте файл балансировщика высокой доступности на k8s-master02
ssh k8s-master02 mkdir -p ${LB_DIR} # [Необязательно] Установка интерфейса управления kubernetes-dashboard

- Чтобы управлять приложениями, развёрнутыми в kubernetes, рекомендуется использовать `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*

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

**Дополнительно. Установка контроллера входящего трафика traefik**

* Для использования функции входящего трафика kubernetes необходимо установить контроллер входящего трафика, рекомендуется использовать traefik.
* Чтобы узнать больше, ознакомьтесь с официальной документацией веб-сайта: traefik (https://doc.traefik.io/traefik/).

* Установить traefik на всех главных узлах kubernetes:
```shell script
# Извлечь репозиторий 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, необходимо установить metrics-server.
* Подробнее читайте в официальном репозитории кода README.md: metrics-server (https://github.com/kubernetes-sigs/metrics-server).

```shell script
# Вытянуть образ
docker pull registry.aliyuncs.com/google_containers/metrics-server:v0.6.1
docker tag registry.aliyuncs.com/google_components/metrics-server:v0.6.1 k8s.gcr.io/metrics-server/metrics-server:v0.6.1

# Получите установочный yaml metrics-server
curl -O -L https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
# Добавьте параметр --kubelet-insecure-tls
sed -i 's/- args:/- args:\n - --kubelet-insecure-tls/g' components.yaml
# Установите metrics-server
kubectl apply -f components.yaml

# Подождите, пока metrics-server станет нормальным
kubectl -n kube-system get pods -l=k8s-app=metrics-server

# Просмотр показателей узла
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 может... Также отобразите данные о производительности.

![](images/kubernetes-dashboard.png)

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

- Чтобы использовать гибридную возможность публикации в оттенках серого сервисной сетки, необходимо развернуть сервисную сетку Istio.
- Для получения дополнительной информации ознакомьтесь с документацией на официальном веб-сайте Istio: istio.io.

```shell script
# Установите istioctl, клиент можно скачать по адресу https://github.com/istio/istio/releases/tag/1.18.2

# Скачайте и установите 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/

# Подтвердите версию 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 взаимодействуют друг с другом для завершения облачного приложения. После активации проекта все цепочки инструментов и среды автоматически настраиваются.

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

Опубликовать ( 0 )

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

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