Kubernetes

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску

Kubernetes (k8s) -- ПО для оркестровки контейнеризированных приложений.

Ubuntu

Для работы с Kubernetes используется обёртка microk8s.

Схема условной сети

Ноды с Kubernetes:

172.16.1.10
172.16.1.11

Добавление нод в кластер

На хосте, который является инициатором добавления в кластер, выполняем:

microk8s add-node

Команда выведет в stdout другую команду -- microk8s join с уникальным токеном, которую надо будет выполнить на хосте, который необходимо добавить в кластер.

На хосте, который мы хотим добавить в кластер, выполняем полученную от microk8s add-node команду:

microk8s join 172.16.1.10:25000/a41dfa46fb3fbef1f3a50538a6e91525/d23ca319533e

Проброс портов

Доступ к панели управления (dashboard), запущенной внутри контейнера Kubernetes, через порт 10443 на внешнем IP 172.16.1.10:

microk8s kubectl port-forward -address=172.16.1.10 -n kube-system service/kubernetes-dashboard 10443:443

ALT Linux

Для работы с Kubernetes используется обёртка k0s.

K0s - это дистрибутив Kubernetes, который был разработан, чтобы упростить развертывание и управление контейнерами.

Настройка ведущей ноды

Устанавливаем k0s:

 curl -sSLf https://get.k0s.sh | sudo sh

Устанавливаем k0s контроллер а также worker:

 k0s install controller --enable-worker

Таким образом, этот сервер будет как запускать, так и контролировать поды.

Включаем и запускаем это:

 systemctl enable --now k0sworker

В отличии от обычной установки Kubernetes, вместо команды kubectl используется команда k0s kubectl.

Проверим список запущенных подов включая системные:

 k0s kubectl get pods --all-namespaces

Создадим токен авторизации для ведомой машины и сохраним его в файл:

 k0s token create --role=worker > tokenfile

Проверим связь с ведомой машиной:

 ping <IP адрес slave машины>

Передаём токен на ведомую машину:

 scp /home/user/tokenfile user@10.207.146.149:/home/user/

Настройка ведомой ноды

Устанавливаем k0s:

 curl -sSLf https://get.k0s.sh | sudo sh

Устанавливаем worker с нашим token:

 sudo k0s install worker --token-file /home/user/tokenfile

Запуск сервиса

Проверим список подключенных устройств:

 k0s kubectl get nodes -o wide

Создадим файл nginx.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
  spec:
    containers:
    - name: nginx
      image: nginx:latest
      ports:
      - containerPort: 80

Запускаем:

 k0s kubectl apply -f nginx.conf

Теперь у нас есть 3 инстанса nginx, но они находятся во внетренней сети kubernetes. Пробросим порт 80 во внешнюю сеть:

 kubectl expose deployment nginx-deployment --type=NodePort --port=80

Теперь посмотрим какому порту во внешней сети это соответствует:

 kubectl expose deployment nginx-deployment --type=NodePort --port=80

Допустим мы получили:

 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1
 <none> 443/TCP 14d nginx-deployment NodePort 10.97.141.36 <none> 80:30550/TCP
 14d

Таким образом в этом конкретном случае, внешний порт это 30550, в вашем случае значение может отличаться Проверим наш IP-адрес через ip a:

 2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
 group default qlen 1000 link/ether 9e:fc:64:27:2d:df brd ff:ff:ff:ff:ff:ff
 altname enp0s19 inet 10.207.146.133/21 brd 10.207.151.255 scope global ens19
 valid_lft forever preferred_lft forever inet6
 300:1111:2222:3333:9cfc:64ff:fe27:2ddf/64 scope global dynamic mngtmpaddr
 noprefixroute

Мы имеем IP-адрес 10.207.146.133.

Проверка работы Nginx с ведомого узла

Проверим что сервер nginx работает и доступен:

 curl http://10.207.146.133:30550

Kubernetes сам восстанавливает состояние подов в соответствии с конфигурационным файлом, давайте убедимся в этом наглядно В нашем конфигурационном файле указано, что требуется иметь 3 пода (экземпляра) nginx:

 replicas: 3

Операции на ведущем узле

Посмотрим список запущенных подов и запомним случайные символы в их названии:

 [root@k0s-alt user]# k0s kubectl get pods                                    
 NAME                                READY   STATUS    RESTARTS      AGE      
 nginx-deployment-6b7f675859-7t9tj   1/1     Running   1 (67m ago)   23d      
 nginx-deployment-6b7f675859-fn4k9   1/1     Running   1 (67m ago)   23d      
 nginx-deployment-6b7f675859-fqmkm   1/1     Running   1 (67m ago)   23d

Удалим один из них:

 [root@k0s-alt user]# k0s kubectl delete pod nginx-deployment-6b7f675859-7t9tj  

Еще раз запросим список подов:

 [root@k0s-alt user]# k0s kubectl get pods                                       
 NAME                                READY   STATUS    RESTARTS      AGE         
 nginx-deployment-6b7f675859-fn4k9   1/1     Running   1 (74m ago)   23d         
 nginx-deployment-6b7f675859-fqmkm   1/1     Running   1 (74m ago)   23d         
 nginx-deployment-6b7f675859-qqf97   1/1     Running   0             3s          


Вместо пода который мы удалили kubernetes автоматически создал под *qqf97*, кототрый существует 3 секунды. Это связано с тем, что kubernetes автоматически приводит действующую конфигурацию в соответствии с тем, что указано в конфигурационном файле.