Kubernetes
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 автоматически приводит действующую конфигурацию в соответствии с тем, что указано в конфигурационном файле.