ALT Container OS подветка K8S: различия между версиями
Нет описания правки |
Kaf (обсуждение | вклад) |
||
Строка 44: | Строка 44: | ||
password_hash: $y$j9T$ZEYmKSGPiNFOZNTjvobEm1$IXLGt5TxdNC/OhJyzFK5NVM.mt6VvdtP6mhhzSmvE94 | password_hash: $y$j9T$ZEYmKSGPiNFOZNTjvobEm1$IXLGt5TxdNC/OhJyzFK5NVM.mt6VvdtP6mhhzSmvE94 | ||
ssh_authorized_keys: | ssh_authorized_keys: | ||
- ssh-rsa | - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1/GiEhIOcqs14pHPU9tNPKmV9XswRK91KEfqnhLtl9wWkojzuFekosSbCiy6g9DKTWK7rps7uZ4HAAGAof78e60kRWFgNWkQQqG/NKe1rrb0Iwv7kWwGhIWysWgZi466suvEGRFy1ysBpP1K0ChMRti+BWOqe8+OVCjSgT0WpguzL4j6onTXT8WJNTInPty6Fcfw2nMeq0JOu6zh49eblKAuB8nYJqUCNXYy5XJVUB5Qg54dKi2V0kBzbUWeKLhSGsHyBWW6HMsuOC5U9PVAX++h1+25vEarLyK1/R1EhTATkFJ2c6AMCTkrbhlkij0KrnpyHWd7G7vMb14+6Ewih kaf@basealt | ||
storage: | |||
storage: | |||
disks: | disks: | ||
- | - | ||
Строка 52: | Строка 54: | ||
partitions: | partitions: | ||
- number: 1 | - number: 1 | ||
label: varlib | label: varlib | ||
filesystems: | filesystems: | ||
- path: /var/lib | - path: /var/lib | ||
Строка 59: | Строка 62: | ||
wipe_filesystem: true | wipe_filesystem: true | ||
label: varlib | label: varlib | ||
with_mount_unit: true | with_mount_unit: true | ||
trees: | trees: | ||
- local: root # скопировать файловое дерево локального каталога root | - local: root # скопировать файловое дерево локального каталога root | ||
path: / | path: / | ||
files: | files: | ||
- path: /etc/docker/daemon.json # | - path: /etc/docker/daemon.json # переписав файл конфигурации dockerd с поддержкой overlay-драйвера BTRFS | ||
overwrite: true | overwrite: true | ||
- path: /etc/containers/storage.conf # | |||
- path: /etc/containers/storage.conf # переписав файл конфигурации crio/podman с поддержкой overlay-драйвера BTRFS | |||
overwrite: true | overwrite: true | ||
- path: /etc/profile.d/kube.sh | |||
mode: 0755 | |||
systemd: | systemd: | ||
units: | units: | ||
Строка 76: | Строка 86: | ||
Description=Start up kubernetes in master mode | Description=Start up kubernetes in master mode | ||
After=crio.service kube-proxy.service kubelet.service systemd-networkd.service systemd-resolved.service | After=crio.service kube-proxy.service kubelet.service systemd-networkd.service systemd-resolved.service | ||
[Service] | [Service] | ||
Type=oneshot | Type=oneshot | ||
Строка 83: | Строка 94: | ||
ExecStart=kubeadm init --cri-socket=/var/run/crio/crio.sock --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification | 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- | ExecStartPost=kubectl taint nodes localhost node-role.kubernetes.io/master- | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
Каталог '''root''' имеет следующую структуру: | Каталог '''root''' имеет следующую структуру: | ||
root/ | root/ | ||
└── etc | |||
├── containers | |||
│ └── storage.conf | |||
├── docker | |||
│ └── daemon.json | |||
├── profile.d | |||
│ └── kube.sh | |||
└── sudoers.d | |||
└── altcos | |||
Файлы ''/etc/containers/storage.conf'', ''/etc/docker/daemon.json'' являются стандартными файлами конфигурации для | Файлы ''/etc/containers/storage.conf'', ''/etc/docker/daemon.json'' являются стандартными файлами конфигурации для | ||
''CRI-O''('podman') и ''docker'' с измененными storage-драйверами с ''overlay'' на ''btrfs''. | ''CRI-O''('podman') и ''docker'' с измененными storage-драйверами с ''overlay'' на ''btrfs''. | ||
Файл ''/etc/profile.d/kube.sh' обеспечивает инициализацию переменной ''KUBECONFIG'' при работе под суперпользователем или инициализацию каталога ''~/.kube/'' при работе под пользователем ''altcos''. | |||
Файл ''/etc/sudoers.d/altcos'' обеспечивает беспарольный запуск ''sudo'' для удаленной инициализации узла кластера по протоколу ''ssh''. | |||
Архив каталога ''root'': | Архив каталога ''root'': | ||
[[Файл:Kuber root.tar|мини]] | |||
[[Файл:Altcos kuber confs.tar|мини| следующей ссылке]]. | [[Файл:Altcos kuber confs.tar|мини| следующей ссылке]]. | ||
Версия от 09:24, 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 AAAAB3NzaC1yc2EAAAADAQABAAABAQC1/GiEhIOcqs14pHPU9tNPKmV9XswRK91KEfqnhLtl9wWkojzuFekosSbCiy6g9DKTWK7rps7uZ4HAAGAof78e60kRWFgNWkQQqG/NKe1rrb0Iwv7kWwGhIWysWgZi466suvEGRFy1ysBpP1K0ChMRti+BWOqe8+OVCjSgT0WpguzL4j6onTXT8WJNTInPty6Fcfw2nMeq0JOu6zh49eblKAuB8nYJqUCNXYy5XJVUB5Qg54dKi2V0kBzbUWeKLhSGsHyBWW6HMsuOC5U9PVAX++h1+25vEarLyK1/R1EhTATkFJ2c6AMCTkrbhlkij0KrnpyHWd7G7vMb14+6Ewih kaf@basealt 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 с поддержкой overlay-драйвера BTRFS overwrite: true - path: /etc/containers/storage.conf # переписав файл конфигурации crio/podman с поддержкой overlay-драйвера BTRFS overwrite: true - path: /etc/profile.d/kube.sh mode: 0755 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 ├── profile.d │ └── kube.sh └── sudoers.d └── altcos
Файлы /etc/containers/storage.conf, /etc/docker/daemon.json являются стандартными файлами конфигурации для CRI-O('podman') и docker с измененными storage-драйверами с overlay на btrfs.
Файл /etc/profile.d/kube.sh' обеспечивает инициализацию переменной KUBECONFIG при работе под суперпользователем или инициализацию каталога ~/.kube/ при работе под пользователем altcos.
Файл /etc/sudoers.d/altcos обеспечивает беспарольный запуск sudo для удаленной инициализации узла кластера по протоколу ssh.
Архив каталога root: Файл:Kuber root.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-кластера поднимается автоматически.