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

OSCHINA-MIRROR/cookeem-kubeadm-ha

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

В запросе скорее всего текст технической направленности из области разработки и тестирования программного обеспечения. Основной язык текста запроса — английский.

  1. В запросе представлен набор команд для установки и настройки Kubernetes на сервере с операционной системой Ubuntu. Команды включают в себя установку необходимых пакетов, настройку конфигурационных файлов и запуск сервисов.

  2. Также в запросе представлены команды для установки cri-dockerd, который является интерфейсом между Docker и Kubernetes. Cri-dockerd позволяет использовать Docker контейнеры в качестве подов (контейнеров) в кластере Kubernetes.

  3. Далее в запросе приведены команды для создания и запуска высокодоступного балансировщика нагрузки с использованием keepalived и nginx-lb. Keepalived обеспечивает высокую доступность виртуальных IP-адресов, а nginx-lb обеспечивает балансировку нагрузки между узлами кластера.

  4. Наконец, в запросе представлена информация о проекте dorycli, который используется для автоматизации процесса установки и настройки высокодоступных сервисов в Kubernetes. Dorycli предоставляет набор команд и шаблонов для быстрой и простой настройки различных сервисов, включая балансировщики нагрузки.

  5. Для получения более подробной информации о каждой команде и её параметрах рекомендуется обратиться к документации соответствующих проектов или использовать справочные системы, такие как man или info. Инициализация высокодоступного кластера Kubernetes

  6. В файле конфигурации /etc/hosts необходимо настроить сопоставление имён хостов с IP-адресами.

  7. Виртуальное имя хоста: k8s-vip.

  8. Сокет времени выполнения контейнера в среде Kubernetes:

    • для Docker — unix:///var/run/cri-dockerd.sock;
    • для containerd — unix:///var/run/containerd/containerd.sock;
    • для cri-o — unix:///var/run/crio/crio.sock.
  9. Сокет keepalived: unix:///var/run/cri-dockerd.sock.

  10. Адрес подсети модуля Kubernetes (если не задан, используется адрес по умолчанию): 10.244.0.0/24.

  11. Адрес подсети службы Kubernetes (если не задан, используется адрес по умолчанию): 10.96.0.0/16.

  12. Пароль аутентификации keepalived (если не задан, генерируется случайный пароль).

  13. Конфигурация управляющего узла Kubernetes:

    • количество узлов должно быть не менее трёх и только одно из них может иметь высокий приоритет;

    • имена хостов должны быть заданы в файле /etc/hosts;

    • каждый узел должен иметь уникальный IP-адрес;

    • все узлы должны использовать одну и ту же сетевую карту для взаимодействия друг с другом.

    Пример конфигурации:

    • hostname: k8s-master01; ipAddress: 192.168.0.101; networkInterface: eth0; keepalivedPriority: 120.

    • hostname: k8s-master02; ipAddress: 192.168.0.102; networkInterface: eth0; keepalivedPriority: 110.

    • hostname: k8s-master03; ipAddress: 192.168.0.103; networkInterface: eth0; keepalivedPriority: 100.

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

  15. Файл kubeadm-config.yaml используется для инициализации кластера Kubernetes.

  16. Для настройки балансировщика нагрузки необходимо установить путь к файлам на узлах master: export LB_DIR=/data/k8s-lb.

  17. Файлы балансировщика нагрузки копируются на каждый узел master с помощью команд scp и ssh.

  18. На каждом узле master запускается балансировщик нагрузки с помощью docker-compose.

  19. После настройки балансировщика нагрузки можно инициализировать кластер Kubernetes с помощью команды kubeadm init --config=kubeadm-config.yaml --upload-certs. Данные, сохраните их в тайне!

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

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

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

  2. 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 к высокодоступному кластеру Kubernetes, выполните следующие команды на этих узлах:

  1. 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.

На всех узлах master настройте доступ к kubectl для взаимодействия с кластером Kubernetes:

  1. mkdir -p $HOME/.kube;
  2. cp -i /etc/kubernetes/admin.conf $HOME/.kube/config;
  3. chown $(id -u):$(id -g) $HOME/.kube/config.

На всех узлах master настройте автозаполнение для kubectl, чтобы можно было автоматически дополнять подкоманды и параметры с помощью клавиши TAB:

  1. kubectl completion -h;
  2. kubectl completion bash > ~/.kube/completion.bash.inc;
  3. printf "# Kubectl shell completion\nsource '$HOME/.kube/completion.bash.inc'\n" >> $HOME/.bash_profile;
  4. source $HOME/.bash_profile.

Установите компонент сети Cilium на узел k8s-master01:

  1. 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. mv cilium /usr/local/bin/;
  4. cilium install --version 1.14.0 --set cni.chainingMode=portmap.

Разрешите всем узлам master планировать поды:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-.

Проверьте состояние всех подов:

kubectl get pods -A -o wide. 26m 192.168.0.102 k8s-master02

kube-system kube-controller-manager-k8s-master03 1/1 Running 0 24m 192.168.0.103 k8s-master03

kube-system kube-proxy-gr2pt 1/1 Running 0 26m 192.168.0.102 k8s-master02

kube-system kube-proxy-rkb9b 1/1 Running 0 30m 192.168.0.101 k8s-master01

kube-system kube-proxy-rvmv4 1/1 Running 0 25m 192.168.0.103 k8s-master03

kube-system kube-scheduler-k8s-master01 1/1 Running 1 (26m ago) 30m 192.168.0.101 k8s-master01

kube-system kube-scheduler-k8s-master02 1/1 Running 0 26m 192.168.0.102 k8s-master02

kube-system kube-scheduler-k8s-master03 1/1 Running 0 23m 192.168.0.103 k8s-master03

Проверка состояния всех узлов

kubectl get nodes NAME STATUS ROLES AGE VERSION 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 (kubernetes-dashboard)

  • Для управления приложениями, развёрнутыми в Kubernetes, рекомендуется использовать панель управления kubernetes-dashboard.

  • Чтобы узнать больше, ознакомьтесь с официальной документацией на GitHub: https://github.com/kubernetes/dashboard

  • Установка:

# Установка 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 через браузер: https://k8s-vip:30000
# Войдите в панель управления kubernetes, используя токен управления

## [Необязательно] Установка контроллера входа Traefik

- Чтобы использовать функцию входа Kubernetes, необходимо установить контроллер входа. Рекомендуется использовать Traefik.
- Подробнее см. на официальном сайте: https://doc.traefik.io/traefik/

- Разверните Traefik на всех узлах master в кластере 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 page ## [Необязательно] Установка инструмента сбора данных о производительности metrics-server

- Для использования функции горизонтального автомасштабирования модулей Kubernetes необходимо установить metrics-server.
- Чтобы узнать больше, ознакомьтесь с официальной документацией в README.md на GitHub: [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_containers/metrics-server:v0.6.1 k8s.gcr.io/metrics-server/metrics-server:v0.6.1

# Получаем файл установки metrics-server yaml
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.

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

  • Чтобы использовать возможности смешанного развёртывания сервисной сетки, необходимо развернуть сервисную сетку istio.
  • Подробнее об этом можно узнать из документации на официальном сайте istio: istio.io.
# Устанавливаем 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 — лучшие практики платформы (https://www.bilibili.com/video/BV1oM4y117Pj/)

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

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

Инструкции по установке см. на странице: https://github.com/dory-engine/dorycli.

🚀🚀🚀 Как установить и развернуть Dory-Engine с помощью dorycli (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