• DevOps
  • Защита информации
  • ИТ-поддержка
  • В предыдущей статье мы рассмотрели базовую установку кластера 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:

    [[email protected] ~]# nano /etc/ansible/hosts
    

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

    k8s-3 ip 10.15.73.44
    

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

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

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

    [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    

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

    [[email protected] aws]# ssh k8s-4
    [[email protected] ~]# exit
    logout
    Connection to k8s-4 closed.
    

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

    [[email protected] aws]#  ansible-playbook /root/pb1.yml -l k8s-4
    

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

    [[email protected] ]# 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
    
    
     [[email protected] ]# ansible-playbook -u root -b -i  /root/kubespray/inventory/sample/inventory.ini /root/kubespray/scale.yml
    
    

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

    [[email protected] kubespray]# kubectl get nodes
    

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

    [[email protected] ]# 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
    

    Проверяем:

    [[email protected] kubespray] kubectl get pod -A
    

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

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

    [[email protected] ~]#helm repo add "stable" "https://charts.helm.sh/stable"
    [[email protected] ~]#helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    

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

    [[email protected] ~]# kubectl create namespace kube-prometheus-stack
    

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

    [[email protected] ~]# helm install  prometheus-community/kube-prometheus-stack --generate-name -n kube-prometheus-stack
    

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

    [[email protected] ~]#  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
    
    

    Применяем:

    [[email protected] ~]# 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:

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

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

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

    [[email protected]]# 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.

    [[email protected] 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:

    [[email protected] kubespray]# ansible-playbook cluster.yml -i inventory/sample/inventory.ini
    

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

    [[email protected] kubespray]# ansible-playbook upgrade-cluster.yml -b -i inventory/sample/inventory.ini -e kube_version=v1.17.7
    

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

    [ro[email protected] 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"}
    
    
    [[email protected] 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 и поддержке кластера. Оставьте заявку!

    Не нашли ответа на свой вопрос?
    Содержание

    Есть вопросы?

    Закажите звонок специалиста!

    Есть вопросы?

    Закажите звонок специалиста!
    *нажимая на кнопку, Вы даете согласие на обработку персональных данных