Kubernetes: различия между версиями
Avp (обсуждение | вклад) м (Avp переименовал страницу K8s в Kubernetes) |
Avp (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
Kubernetes (k8s) -- ПО для оркестровки контейнеризированных приложений. | Kubernetes (k8s) -- ПО для оркестровки контейнеризированных приложений. | ||
− | = Схема условной сети = | + | = Ubuntu = |
+ | Для работы с Kubernetes используется обёртка <code>microk8s</code>. | ||
+ | |||
+ | == Схема условной сети == | ||
Ноды с Kubernetes: | Ноды с Kubernetes: | ||
Строка 8: | Строка 11: | ||
172.16.1.11 | 172.16.1.11 | ||
− | = Добавление нод в кластер = | + | == Добавление нод в кластер == |
На хосте, который является инициатором добавления в кластер, выполняем: | На хосте, который является инициатором добавления в кластер, выполняем: | ||
Строка 20: | Строка 23: | ||
microk8s join 172.16.1.10:25000/a41dfa46fb3fbef1f3a50538a6e91525/d23ca319533e | microk8s join 172.16.1.10:25000/a41dfa46fb3fbef1f3a50538a6e91525/d23ca319533e | ||
− | = Проброс портов = | + | == Проброс портов == |
Доступ к панели управления (dashboard), запущенной внутри контейнера Kubernetes, через порт 10443 на внешнем IP 172.16.1.10: | Доступ к панели управления (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 | microk8s kubectl port-forward -address=172.16.1.10 -n kube-system service/kubernetes-dashboard 10443:443 | ||
+ | |||
+ | = ALT Linux = | ||
+ | Для работы с Kubernetes используется обёртка <code>k0s</code>. | ||
+ | |||
+ | K0s - это дистрибутив Kubernetes, который был разработан, чтобы упростить | ||
+ | развертывание и управление контейнерами. | ||
+ | |||
+ | == Настройка ведущей ноды == | ||
+ | Устанавливаем k0s: | ||
+ | |||
+ | curl -sSLf https://get.k0s.sh | sudo sh | ||
+ | |||
+ | Устанавливаем k0s контроллер а также worker: | ||
+ | |||
+ | k0s install controller --enable-worker | ||
+ | |||
+ | Таким образом, этот сервер будет как запускать, так и контролировать поды. | ||
+ | |||
+ | Включаем и запускаем это: | ||
+ | |||
+ | systemctl enable --now k0sworker | ||
+ | |||
+ | В отличии от обычной установки Kubernetes, вместо команды <code>kubectl</code> используется команда <code>k0s kubectl</code>. | ||
+ | |||
+ | Проверим список запущенных подов включая системные: | ||
+ | |||
+ | 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 | ||
+ | |||
+ | Создадим файл <code>nginx.yaml</code>: | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | Запускаем: | ||
+ | |||
+ | 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-адрес через <code>ip a</code>: | ||
+ | |||
+ | 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 автоматически создал под <code>*qqf97*</code>, кототрый существует 3 секунды. Это связано с тем, что kubernetes автоматически приводит действующую конфигурацию в соответствии с тем, что указано в конфигурационном файле. |
Текущая версия на 15:15, 4 мая 2023
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 автоматически приводит действующую конфигурацию в соответствии с тем, что указано в конфигурационном файле.