Kubernetes: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
м (Avp переименовал страницу K8s в Kubernetes)
 
(не показана 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 автоматически приводит действующую конфигурацию в соответствии с тем, что указано в конфигурационном файле.