Kubernetes: различия между версиями
Avp (обсуждение | вклад) м (Avp переименовал страницу K8s в Kubernetes) |
Avp (обсуждение | вклад) |
||
| Строка 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>: | ||
| + | |||
| + | <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></code> | ||
| + | |||
| + | Запускаем: | ||
| + | |||
| + | 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 | ||
Версия 15:00, 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