+7 495 230 03 03 8 800 222 50 03
DevOps

Настройка k8s

В предыдущей статье мы рассмотрели базовую установку кластера Kubernetes. В данной статье мы хотим рассмотреть дальнейшую настройку, а именно:

  1. Добавление и удаление ноды
  2. Работа с helm
  3. Установка prometheus
  4. Обновление кластера Kubernetes до более высокой версии

По результатам работ из предыдущей статьи у нас остались 3 ноды.

Адресация нод (виртуальных машин):

  1. k8s-1 ip 10.15.73.41
  2. k8s-3 ip 10.15.73.42
  3. k8s-3 ip 10.15.73.43

Добавим еще одну — k8s-3 ip 10.15.73.44. Пока идет установка ОС на новой ноде, возвращаемся к ноде, откуда мы делали ранее все действия (k8s-1) и выполняем подготовительные действия.

Редактируем файл /etc/hosts и прописываем соответствие IP нашей новой ВМ:

10.15.73.44 k8s-4

Редактируем файл хостов для Ansible:

[root@k8s-1 ~]# nano /etc/ansible/hosts

Добавляем строчку:

k8s-3 ip 10.15.73.44

Итоговый вид будет следующим:

[k8sservers]
k8s-1
k8s-2
k8s-3
k8s-4

Копируем ключ на удаленный сервер. Выполняем команду:

[root@k8s-1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-4

Проверяем подключение:

[root@k8s-1 aws]# ssh k8s-4
[root@k8s-4 ~]# exit
logout
Connection to k8s-4 closed.

Выполняем ранее созданный плейбук с указанием хоста, на который будет применятся плейбук:

[root@k8s-1 aws]#  ansible-playbook /root/pb1.yml -l k8s-4

После выполнения нода готова для добавления в кластер. Редактируем файл /root/kubespray/inventory/sample/inventory.ini добавляем новую ноду k8s-4:

[root@k8s-1 ]# nano  /root/kubespray/inventory/sample/inventory.ini
k8s-1 ansible_ssh_host=10.15.73.41  ip=10.15.73.41
k8s-2 ansible_ssh_host=10.15.73.42  ip=10.15.73.42
k8s-3 ansible_ssh_host=10.15.73.43  ip=10.15.73.43
k8s-4 ansible_ssh_host=10.15.73.44  ip=10.15.73.44

[kube-master]
k8s-1

[etcd]
k8s-1
k8s-2
k8s-3


[kube-node]
k8s-2
k8s-3
k8s-4

[k8s-cluster:children]
kube-node
kube-master


 [root@k8s-1 ]# ansible-playbook -u root -b -i  /root/kubespray/inventory/sample/inventory.ini /root/kubespray/scale.yml

После выполнения команды не должно быть ошибок — это означает что нода добавилась корректно. Проверяем статус нод:

[root@k8s-1 kubespray]# kubectl get nodes

Вешаем лейбл на ноду k8s-4:

[root@k8s-1 ]# kubectl label node k8s-4  node-role.kubernetes.io/node= 

Меняем значения ниже в файле inventory/sample/group_vars/k8s-cluster/addons.yml:

helm_enabled: true # устанавливаем helm на ноды
local_volume_provisioner_enabled: true # активируем local volume provisioner
ingress_nginx_enabled: true # активируем ingress controller

Проверяем:

[root@k8s-1 kubespray] kubectl get pod -A

Мы должны увидеть ingress-nginx-controller и local-volume-provisioner.

Добавляем репозитории helm:

[root@k8s-1 ~]#helm repo add "stable" "https://charts.helm.sh/stable"
[root@k8s-1 ~]#helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

Создаем неймспейс kube-prometheus-stack:

[root@k8s-1 ~]# kubectl create namespace kube-prometheus-stack

Устанавливаем Prometheus и Grafana:

[root@k8s-1 ~]# helm install  prometheus-community/kube-prometheus-stack --generate-name -n kube-prometheus-stack

Проверяем установку:

[root@k8s-1 ~]#  helm list

Создаем файл ingress-grafana-prometheus.yml следующего содержания:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  namespace: kube-prometheus-stack
spec:
  rules:
  - host: grafana.test.local
    http:
      paths:
      - backend:
          serviceName: kube-prometheus-stack-1612340877-grafana
          servicePort: 80

Применяем:

[root@k8s-1 ~]# kubectl create -f ingress-grafana-prometheus.yml

Добавляем в хосты той машины откуда будем проверять следующее доменное имя (либо можно использовать заранее созданную на DNS сервере A запись grafana.test.local).

10.15.73.42 grafana.test.local
10.15.73.43 grafana.test.local
10.15.73.44 grafana.test.local

Если все сделано правильно и по ходу установки не было ошибок проверяем вход по адресу http://grafana.test.local. На этом установка закончена.

username: admin
password: prom-operator

Выполним удаление одной из нод. Пусть это будет нода k8s-2. Выполняем команду удаления которая описана в официальной документации kuberspray:

[root@k8s-1 ~]# ansible-playbook -i inventory/sample/inventory.ini remove-node.yml -e node=k8s-2

Здесь мы указываем путь к файлу конфигурации и ноду которую будем удалять, для самого удаления используется плейбук remove-node.yml.

После выполнения команды проверяем статус нод:

[root@k8s-]# kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
k8s-1      Ready     master    83d     v1.16.14
k8s-3      Ready     node       83d     v1.16.14
k8s-4      Ready     node       8d       v1.16.14

Удаляем информацию о ноде из файла инвентаризации inventory/sample/inventory.ini. Не забываем также, что у нас должно быть нечетное количество нод ectd.

[root@k8s-1 kubespray]# cat  inventory/sample/inventory.ini

k8s-1 ansible_ssh_host=10.15.73.41  ip=10.15.73.41
k8s-3 ansible_ssh_host=10.15.73.43  ip=10.15.73.43
k8s-4 ansible_ssh_host=10.15.73.44  ip=10.15.73.44

[kube-master]
k8s-1

[etcd]
k8s-1
k8s-3
k8s-4

[kube-node]
k8s-3
k8s-4


[k8s-cluster:children]
kube-node
kube-master

Выполняем обновление кластера с учетом новых нод ectd:

[root@k8s-1 kubespray]# ansible-playbook cluster.yml -i inventory/sample/inventory.ini

Выполним обновление до версии v1.17.17. Указываем файл инвентаризации и необходимую версию. Обновление выполняем через upgrade-cluster.yml.

[root@k8s-1 kubespray]# ansible-playbook upgrade-cluster.yml -b -i inventory/sample/inventory.ini -e kube_version=v1.17.7

Ожидаем выполнения всех операций и проверяем версию:

[root@k8s-1 kubespray]# kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.7", GitCommit:"b4455102ef392bf7d594ef96b97a4caa79d729d9", GitTreeState:"clean", BuildDate:"2020-06-17T11:39:47Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.7", GitCommit:"b4455102ef392bf7d594ef96b97a4caa79d729d9", GitTreeState:"clean", BuildDate:"2020-06-17T11:32:20Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

[root@k8s-1 kubespray]# kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
k8s-1      Ready     master   83d     v1.17.7
k8s-3      Ready     node       83d     v1.17.7
k8s-4      Ready     node       8d       v1.17.7

Мы можем помочь в настройке k8s и поддержке кластера. Оставьте заявку!

Дата публикации: 1 марта 2023
Не нашли ответа на свой вопрос?

Смотрите также

Обсуждение материала

Содержание

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

*нажимая на кнопку, Вы даете согласие на обработку персональных данных
Быстрое внедрение включает:
На сервере установлено следующее ПО (доступно при подключении по протоколу RDP):
Также настроено:
Перед внедрением клиент предоставляет информацию о пользователях (логины и пароли). После завершения работ, клиенту высылается инструкция и ярлык для подключения.
Индивидуальное внедрение по ТЗ клиента обсуждается отдельно.