ALT Container OS подветка K8S: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 5: Строка 5:
"движков" (см. [[Kubernetes]]):
"движков" (см. [[Kubernetes]]):
* ''docker'';
* ''docker'';
* ''crio'' (''podman'')
* ''CRI-O'' (''podman'')
   
   
В текущей реализации был выбран вариант движка ''crio'' обеспечивающий повышенный уровень защита запускаемых контейнеров.  
В текущей реализации был выбран вариант движка ''CRI-O'', обеспечивающий повышенный уровень защиты запускаемых контейнеров.  
Но, так как подветка ''K8S'' наследуется от основной ветки потока, включающей движок ''docker'',
Но, так как подветка ''K8S'' наследуется от основной ветки потока, включающей движок ''docker'',
в раках данной подветки можно запускать ''docker-контейнеры'', сервисы под ''docker-compose'' и организовавать
в рамках данной подветки можно запускать ''docker-контейнеры'', сервисы под ''docker-compose'' и организовывать
параллельно (или вместо) с кластером ''kubernetes'' и ''docker swarm'' кластер.  
параллельно (или вместо) с кластером ''kubernetes'' и ''docker swarm'' кластер.  


Строка 64: Строка 64:
       path: /
       path: /
   files:
   files:
     - path: /etc/docker/daemon.json # переписав файл конфигурации dockerd с поддержкой storage-драйвера BTRFS
     - path: /etc/docker/daemon.json # переписать файл конфигурации dockerd с поддержкой storage-драйвера BTRFS
       overwrite: true
       overwrite: true
     - path: /etc/containers/storage.conf # переписав файл конфигурации crio/podman с поддержкой storage-драйвера BTRFS
     - path: /etc/containers/storage.conf # переписать файл конфигурации CRI-O/podman с поддержкой storage-драйвера BTRFS
       overwrite: true
       overwrite: true
  systemd:
  systemd:
Строка 97: Строка 97:


Файлы ''/etc/containers/storage.conf'', ''/etc/docker/daemon.json'' являются стандартными файлами конфигурации для  
Файлы ''/etc/containers/storage.conf'', ''/etc/docker/daemon.json'' являются стандартными файлами конфигурации для  
''crio''('podman') и ''docker'' с измененными storage-драйверами с ''overlay'' на ''btrfs''.
''CRI-O''('podman') и ''docker'' с измененными storage-драйверами с ''overlay'' на ''btrfs''.


Архив каталога ''root'':
Архив каталога ''root'':
Строка 104: Строка 104:
Если Вы планируете использовать стандартный storage-драйвер ''overlay'' то в в YML-файле,  
Если Вы планируете использовать стандартный storage-драйвер ''overlay'' то в в YML-файле,  
* секции ''storage.trees'', 'storage.files' можно опустить
* секции ''storage.trees'', 'storage.files' можно опустить
* в секции ''storage.filesystem.format'' указать ''ext4'';
* в секции ''storage.filesystem.format'' указать ''ext4'';
Каталог ''root'' в этом случае не нужен.
Каталог ''root'' в этом случае не нужен.


Строка 123: Строка 123:
  -net user,hostfwd=tcp::10222-:22 -net nic
  -net user,hostfwd=tcp::10222-:22 -net nic


Обратите внимание, что за работы узла ''kubernetes'' требуется не менее 2-х ядер процессора и не менее 2GB оперативной памяти.
Обратите внимание, что для работы узла ''kubernetes'' требуется не менее 2-х ядер процессора и не менее 2GB оперативной памяти.
Каталог ''root'' содержащий файлы конфигурации ''/etc/containers/storage.conf'', ''/etc/docker/daemon.json''
Каталог ''root'', содержащий файлы конфигурации ''/etc/containers/storage.conf'', ''/etc/docker/daemon.json'',
должен находиться в каталоге запуска скрипта.  
должен находиться в каталоге запуска скрипта.  
Если это не так укажите при запуска команды butane после флага ''-d'' каталог месторасположение каталога ''root''.
Если это не так укажите при запуска команды butane после флага ''-d'' каталог месторасположение каталога ''root''.


Доступ по протоколу ''ssh'' обеспечивается через порт ''10222'' HOST-компьютерв ''localhost''.
Доступ по протоколу ''ssh'' обеспечивается через порт ''10222'' HOST-компьютера ''localhost''.


=== Запуск kubernetes на master-узле ===
=== Запуск kubernetes на master-узле ===


Для того, чтобы запустить сервис:
Для того, чтобы запустить сервис:
* зайдите через консоль или через ssh в пользователя ''altcos'';
* зайдите через консоль или через ssh под пользователем ''altcos'';
* выполните запуск сервиса ''initk8s'':
* выполните запуск сервиса ''initk8s'':
  $ sudo systemctl start initk8s
  $ sudo systemctl start initk8s


Во время запуска длительностью пару минут:
Во время запуска длительностью пару минут:
* производится загрузка из архива, входящего в состав qcow2-образа необходимых docker-образов;
* производится загрузка из архива, входящего в состав qcow2-образа, необходимых docker-образов;
* запуск их как сервисов;
* запуск их как сервисов;
* инициализация master-узла кластера;
* инициализация master-узла кластера;
Строка 166: Строка 166:
=== Работа с master-узлом кластера ===
=== Работа с master-узлом кластера ===


Вы можете работать с мастер узлом как под обычным пользователем (например ''altcos''), так и из суперпользователя.
Вы можете работать с мастер узлом как под обычным пользователем (например ''altcos''), так и от имени суперпользователя.


Для работы с master-узлом кластера под обычным пользователем с правами выполнения ''sudo'' выполните следующие команды:
Для работы с master-узлом кластера под обычным пользователем с правами выполнения ''sudo'' выполните следующие команды:
Строка 174: Строка 174:
  sudo chown $(id -u):$(id -g) ~/.kube/config
  sudo chown $(id -u):$(id -g) ~/.kube/config


Для работы с master-узлом кластера из суперпользователя выполниет команду:
Для работы с master-узлом кластера из суперпользователя выполните команду:
  export KUBECONFIG=/etc/kubernetes/admin.conf
  export KUBECONFIG=/etc/kubernetes/admin.conf


Строка 188: Строка 188:
=== Действия после перезагрузке системы ===
=== Действия после перезагрузке системы ===


После перзагрузки системы никаких дополнительных действий не требуется.
После перезагрузки системы никаких дополнительных действий не требуется.
master-узел kubernetes-кластера поднимается автоматически.
master-узел kubernetes-кластера поднимается автоматически.

Версия от 06:04, 17 ноября 2021

Подветка K8S обеспечивает разворачивание серверов для организации kubernetes-кластера.

В настоящее время (16.11.2021) дистрибутив ALTLinux обеспечивает разворачивание kubernetes-кластера под двумя типами "движков" (см. Kubernetes):

  • docker;
  • CRI-O (podman)

В текущей реализации был выбран вариант движка CRI-O, обеспечивающий повышенный уровень защиты запускаемых контейнеров. Но, так как подветка K8S наследуется от основной ветки потока, включающей движок docker, в рамках данной подветки можно запускать docker-контейнеры, сервисы под docker-compose и организовывать параллельно (или вместо) с кластером kubernetes и docker swarm кластер.

QCOW2 образ подветки altcos/x86_64/Sisyphus/k8s

В настоящее время реализован образ QCOW2 подветки altcos/x86_64/sisyphus/k8s. Скачать его можно по следующим ссылкам: [Полный] [Сжатый]

Так как размер основного диска достаточно небольшой (около 4GB) для хранения образов и запуска pod'ов необходимо создать дополнительный диск. Для этого создайте файл необходимого размера (например 30GB):

dd if=/dev/zero  of=hdb.qcow2 bs=1G count=30 

Запуск образа в режиме master-узла

Подготовка YML butane-файла для master-узла

Для запуска необходимо подготовить YML butane-файл, обеспечивающий следующий функционал при запуске образа:

  • форматирование дополнительного диска под файловую систему BTRFS для размещения образов и контейнеров;
  • монтирование его в каталог /var/lib;
  • копирование файлов конфигураций и "перекрытых" при монтировании подкаталогов каталога /var/lib/.
  • создание systemd-сервиса для инициализации master-узла kubernetes-кластера.

Файл конфигурации k8s_master.yml выглядит следующим образом:

variant: fcos
version: 1.3.0
passwd:
  users:
    - name: altcos
      groups:
        - wheel
        - docker
      password_hash: $y$j9T$ZEYmKSGPiNFOZNTjvobEm1$IXLGt5TxdNC/OhJyzFK5NVM.mt6VvdtP6mhhzSmvE94
      ssh_authorized_keys:
        - ssh-rsa  ... # открытый ключ пользователя для доступа к пользователю altcos
storage: 
  disks:
    -
      device: /dev/sdb
      wipe_table: true
      partitions:
        - number: 1
          label: varlib 
  filesystems:
    - path: /var/lib
      device: /dev/sdb1
      format: btrfs
      wipe_filesystem: true
      label: varlib
      with_mount_unit: true 
  trees:
    - local: root # скопировать файловое дерево локального каталога root
      path: /
  files:
    - path: /etc/docker/daemon.json # переписать файл конфигурации dockerd с поддержкой storage-драйвера BTRFS
      overwrite: true
    - path: /etc/containers/storage.conf # переписать файл конфигурации CRI-O/podman с поддержкой storage-драйвера BTRFS
      overwrite: true
systemd:
  units:
    - name: initk8s.service
      enabled: false
      contents: |
        [Unit]
        Description=Start up kubernetes in master mode
        After=crio.service kube-proxy.service kubelet.service systemd-networkd.service systemd-resolved.service
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        Environment="KUBECONFIG=/etc/kubernetes/admin.conf"
        ExecStartPre=loadDockerArchiveImages.sh
        ExecStart=kubeadm init --cri-socket=/var/run/crio/crio.sock --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification
        ExecStartPost=kubectl taint nodes localhost node-role.kubernetes.io/master-
        [Install]
        WantedBy=multi-user.target


Каталог root имеет следующую структуру:

root/
├── etc
    ├── containers
    │   └── storage.conf
    └── docker
        └── daemon.json

Файлы /etc/containers/storage.conf, /etc/docker/daemon.json являются стандартными файлами конфигурации для CRI-O('podman') и docker с измененными storage-драйверами с overlay на btrfs.

Архив каталога root: Файл:Altcos kuber confs.tar.

Если Вы планируете использовать стандартный storage-драйвер overlay то в в YML-файле,

  • секции storage.trees, 'storage.files' можно опустить
  • в секции storage.filesystem.format указать ext4;

Каталог root в этом случае не нужен.

Запуск образа как master-узла

Запуск образа производится скриптом:

#!/bin/sh
butane -d . -p k8s_master.yml > k8s_master.ign
sudo qemu-system-x86_64 \
	-m 2048 \
	-machine accel=kvm \
	-cpu host \
	-smp 2 \
	-hda k8s.20211116.0.0.qcow2 \
	-hdb hdb.qcow2 \
	-fw_cfg name=opt/com.coreos/config,file=k8s_master.ign \
	-net user,hostfwd=tcp::10222-:22 -net nic

Обратите внимание, что для работы узла kubernetes требуется не менее 2-х ядер процессора и не менее 2GB оперативной памяти. Каталог root, содержащий файлы конфигурации /etc/containers/storage.conf, /etc/docker/daemon.json, должен находиться в каталоге запуска скрипта. Если это не так укажите при запуска команды butane после флага -d каталог месторасположение каталога root.

Доступ по протоколу ssh обеспечивается через порт 10222 HOST-компьютера localhost.

Запуск kubernetes на master-узле

Для того, чтобы запустить сервис:

  • зайдите через консоль или через ssh под пользователем altcos;
  • выполните запуск сервиса initk8s:
$ sudo systemctl start initk8s

Во время запуска длительностью пару минут:

  • производится загрузка из архива, входящего в состав qcow2-образа, необходимых docker-образов;
  • запуск их как сервисов;
  • инициализация master-узла кластера;

Логи запуска можно посмотреть командой:

$ journalctl -u initk8s
Starting Start up kubernetes in master mode...
...
Loaded image(s): k8s.gcr.io/coredns:1.7.0
...
Loaded image(s): k8s.gcr.io/etcd:3.4.13-0
...
Your Kubernetes control-plane has initialized successfully!
...
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.0.2.15:6443 --token yhhb22.0q7bovdkg89l6hr7 \
    --discovery-token-ca-cert-hash sha256:16a864c569f23a5ecacafe5cb42931840fc7e4896b8c3946d0710133ea0b82bc
...
node/localhost untainted
Finished Start up kubernetes in master mode.

Рабочие (worker) узлы можно присоединять к кластеру указанной командой

kubeadm join ...

Работа с master-узлом кластера

Вы можете работать с мастер узлом как под обычным пользователем (например altcos), так и от имени суперпользователя.

Для работы с master-узлом кластера под обычным пользователем с правами выполнения sudo выполните следующие команды:

mkdir -p ~/.kube
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config

Для работы с master-узлом кластера из суперпользователя выполните команду:

export KUBECONFIG=/etc/kubernetes/admin.conf

Проверка работы master-узла

Для проверки работы узла наберите команду

# kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
localhost   Ready    control-plane,master   41m   v1.20.8

Примеры запуска POD'ов смотрите в документе Kubernetes.

Действия после перезагрузке системы

После перезагрузки системы никаких дополнительных действий не требуется. master-узел kubernetes-кластера поднимается автоматически.