Kubernetes: различия между версиями
Kaf (обсуждение | вклад) |
Geochip (обсуждение | вклад) (Add info about the change of default runtime in cri-o from runc to crun when updating from version 1.30 to 1.31) |
||
| (не показаны 2 промежуточные версии 2 участников) | |||
| Строка 17: | Строка 17: | ||
Нужно установить следующие пакеты: | Нужно установить следующие пакеты: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# apt-get install | # apt-get install kubernetes1.28-kubeadm kubernetes1.28-kubelet kubernetes1.28-crio cri-tools1.28 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Вместо 1.28 можно указать любую доступную в репозитории версию. Список доступных пакетов можно посмотреть на сайте https://packages.altlinux.org/ru/search/?q=kubernetes | |||
</li> | </li> | ||
<li> | <li> | ||
И запустить | И запустить сервис crio, также рекомендуется активировать сервис kubelet, чтобы он запускался при перезагрузке хоста: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# systemctl enable --now crio kubelet | # systemctl enable --now crio | ||
# systemctl enable kubelet | |||
</syntaxhighlight> | </syntaxhighlight> | ||
</li> | </li> | ||
| Строка 49: | Строка 51: | ||
Для использования control plane образов на базе ALT вместо образов по умолчанию: | Для использования control plane образов на базе ALT вместо образов по умолчанию: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1. | # kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.28.14 --image-repository=registry.altlinux.org/p10 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 62: | Строка 64: | ||
Для использования control plane образов на базе ALT вместо образов по умолчанию: | Для использования control plane образов на базе ALT вместо образов по умолчанию: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=1. | # kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=1.28.14 --image-repository=registry.altlinux.org/p10 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 72: | Строка 74: | ||
: <code>--pod-network-cidr=10.244.0.0/16</code> — внутренняя (разворачиваемая Kubernetes) сеть, данное значение рекомендуется оставить для правильной работы <tt>Flannel</tt>; | : <code>--pod-network-cidr=10.244.0.0/16</code> — внутренняя (разворачиваемая Kubernetes) сеть, данное значение рекомендуется оставить для правильной работы <tt>Flannel</tt>; | ||
: <code>--image-repository=registry.altlinux.org/ | : <code>--image-repository=registry.altlinux.org/p10</code> — переопределение реестра, откуда будут скачиваться control plane образы. | ||
: <code>--kubernetes-version=1. | : <code>--kubernetes-version=1.28.14</code> — использовать версию kubernetes 1.28.14 для компонентов control plane. | ||
В конце вывода будет строка вида: | В конце вывода будет строка вида: | ||
| Строка 142: | Строка 144: | ||
└── kube-flannel.yml | └── kube-flannel.yml | ||
</syntaxhighlight> | </syntaxhighlight> | ||
:: Выберите для Вашей платформы (например <code>sisyphus</code>) установленной версии <code>kubernetes</code> необходимую версию <code>flannel</code> (например <code>0 | :: Выберите для Вашей платформы (например <code>sisyphus</code>) установленной версии <code>kubernetes</code> необходимую версию <code>flannel</code> (например <code>0.25.7</code>) и наберите команду разворачивания: | ||
:: <syntaxhighlight lang="console"> | :: <syntaxhighlight lang="console"> | ||
$ kubectl apply -f https://gitea.basealt.ru/alt/flannel-manifests/raw/branch/main/sisyphus/0/25/7/kube-flannel.yml | $ kubectl apply -f https://gitea.basealt.ru/alt/flannel-manifests/raw/branch/main/sisyphus/0/25/7/kube-flannel.yml | ||
| Строка 249: | Строка 251: | ||
</li> | </li> | ||
</ol> | </ol> | ||
== Обновление == | |||
=== CRI-O === | |||
При использовании cri-o следует обратить внимание на то, что до версии cri-o 1.30 по умолчанию использовался {{pkgL|runc}} в качестве рантайма. В версии cri-o 1.31 апстрим сменил рантайм по умолчанию на {{pkgL|crun}}. | |||
Если конфигурационный файл {{path|/etc/crio/crio.conf}} не менялся после установки пакета версий до 1.30, то по умолчанию используется {{pkg|runc}}, и данные рантайма хранятся в {{path|/run/runc}}, а после обновления с 1.30 до 1.31 теперь по умолчанию используется {{pkg|crun}} и данные ожидаются в {{path|/run/crun}}. | |||
Для избежания проблем с запуском сервиса cri-o следует перед обновлением зафиксировать желаемый райнтайм в конфигурационном файле {{path|/etc/crio/crio.conf}}. Достаточно раскомментировать строку с установкой рантайма по умолчанию. | |||
<syntaxhighlight lang="conf"> | |||
... | |||
default_runtime = "runc" | |||
... | |||
</syntaxhighlight> | |||
см. {{altbug|53963}} | |||
[[Категория:Виртуализация]] | [[Категория:Виртуализация]] | ||
{{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}} | ||
Текущая версия от 16:15, 16 сентября 2025
Kubernetes
Инструкция по работе с kubernetes.
Подготовка
Нужны несколько машин (nodes), одна из которых будет мастером. Системные требования:
- 2GB ОЗУ или больше;
- 2 ядра процессора или больше;
- Все машины должны быть доступны по сети друг для друга;
- Все машины должны успешно разрешать имена hostname друг друга (через DNS или hosts);
- Своп должен быть выключен
Пакеты и сервисы
-
Нужно установить следующие пакеты:
# apt-get install kubernetes1.28-kubeadm kubernetes1.28-kubelet kubernetes1.28-crio cri-tools1.28Вместо 1.28 можно указать любую доступную в репозитории версию. Список доступных пакетов можно посмотреть на сайте https://packages.altlinux.org/ru/search/?q=kubernetes
-
И запустить сервис crio, также рекомендуется активировать сервис kubelet, чтобы он запускался при перезагрузке хоста:
# systemctl enable --now crio # systemctl enable kubelet
Разворачивание кластера
Подготовка
Отключите подкачку:
# swapoff -a
Разворачивание
- На мастере нужно запустить одну из двух следующих команд для запуска кластера:
-
Для настройки сети с использованием Flannel:
# kubeadm init --pod-network-cidr=10.244.0.0/16
Для использования control plane образов на базе ALT вместо образов по умолчанию:
# kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.28.14 --image-repository=registry.altlinux.org/p10
-
Для настройки сети с использованием Calico
# kubeadm init --pod-network-cidr=192.168.0.0/16
Для использования control plane образов на базе ALT вместо образов по умолчанию:
# kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=1.28.14 --image-repository=registry.altlinux.org/p10
Пояснение флагов:
--pod-network-cidr=10.244.0.0/16— внутренняя (разворачиваемая Kubernetes) сеть, данное значение рекомендуется оставить для правильной работы Flannel;
--image-repository=registry.altlinux.org/p10— переопределение реестра, откуда будут скачиваться control plane образы.
--kubernetes-version=1.28.14— использовать версию kubernetes 1.28.14 для компонентов control plane.
В конце вывода будет строка вида:
kubeadm join <ip адрес>:<порт> --token <токен> --discovery-token-ca-cert-hash sha256:<хэш> -
Для настройки сети с использованием Flannel:
-
Настройка kubernetes для работы от пользователя
-
Создать каталог ~/.kube:
$ mkdir ~/.kube -
Скопировать конфиг:
# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config -
Изменить владельца конфига:
# chown <пользователь>: /home/<пользователь>/.kube/config
-
Создать каталог ~/.kube:
-
После этого все остальные ноды нужно подключить к мастеру:
# kubeadm join <ip адрес>:<порт> --token <токен> --discovery-token-ca-cert-hash sha256:<хэш>- Проверить наличие нод можно так:
$ kubectl get nodes -o wide- Вывод примерно следующий:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master NotReady control-plane 19m v1.24.8 172.16.0.8 <none> ALT Regular 5.15.90-std-def-alt1 cri-o://1.24.3 node NotReady <none> 19m v1.24.8 172.16.0.9 <none> ALT Regular 5.15.90-std-def-alt1 cri-o://1.24.3
Обратите внисание, что ноды находятся в состоянии NotReady. Они перейдут в состояние Ready после настройки сети.
-
Далее следует развернуть сеть. Для этого можно запустить один из следующих наборов команд:
- Для Flannel:
$ kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml- Для Flannel с использованием образов на базе ALT:
- Манифесты находятся по адресу https://gitea.basealt.ru/alt/flannel-manifests/<платформа>.
- Где <платформа> на текущий момент (25.10.2024):
sisyphus,p10,c10f2. - Каждый каталог платформы содержит каталоги
├── <major> │ ├── <minor> │ │ └── <patch> │ │ └── kube-flannel.yml ... └── latest └── kube-flannel.yml
- Выберите для Вашей платформы (например
sisyphus) установленной версииkubernetesнеобходимую версиюflannel(например0.25.7) и наберите команду разворачивания: $ kubectl apply -f https://gitea.basealt.ru/alt/flannel-manifests/raw/branch/main/sisyphus/0/25/7/kube-flannel.yml- Для последних версий
kubernetesможно использовать последнюю версиюflannel(тегlatest): $ kubectl apply -f https://gitea.basealt.ru/alt/flannel-manifests/raw/branch/main/sisyphus/latest/kube-flannel.yml
- Для Calico:
- Перед запуском
calico-манифестовперейдите в каталог/etc/cni/net.d/:
# cd /etc/cni/net.d/
- и создайте файл
100-crio-bridge.conflist
- и создайте файл
# cp 100-crio-bridge.conflist.sample 100-crio-bridge.conflist
- Запустите POD'ы из
calico-манифестов:
- Запустите POD'ы из
$ kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/master/manifests/tigera-operator.yaml$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/master/manifests/custom-resources.yaml- Проверить, что всё работает можно так:
$ kubectl get pods --namespace kube-system- Вывод должен быть примерно таким:
NAME READY STATUS RESTARTS AGE coredns-78fcdf6894-6trk7 1/1 Running 0 2h coredns-78fcdf6894-nwt5l 1/1 Running 0 2h etcd-k8s 1/1 Running 0 2h kube-apiserver-k8s 1/1 Running 0 2h kube-controller-manager-k8s 1/1 Running 0 2h kube-flannel-ds-894bt 1/1 Running 0 2h kube-flannel-ds-kbngw 1/1 Running 0 2h kube-flannel-ds-n7h45 1/1 Running 0 2h kube-flannel-ds-tz2rc 1/1 Running 0 2h kube-proxy-6f4lm 1/1 Running 0 2h kube-proxy-f92js 1/1 Running 0 2h kube-proxy-qkh54 1/1 Running 0 2h kube-proxy-szvlt 1/1 Running 0 2h kube-scheduler-k8s 1/1 Running 0 2h
Следует обратить внимание, что coredns находятся в состоянии Running. Количество kube-flannel и kube-proxy зависит от общего числа нод (в данном случае их четыре). Если coredns находится в состоянии "crashloopbackoff", то проверьте содержимое файла /etc/resolv.conf. Для каждой ноды в резолвере должны быть указаны реальные адреса (например 192.168.3.30, при развертывании в локальной сети на виртуальных машинах)
Тестовый запуск nginx
-
Для начала создадим Deployment:
$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml -
Затем создадим сервис, с помощью которого можно получить доступ к нашему приложению из внешней сети.
Сохраним в файл nginx-service.yaml следующую кофигурацию:
apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: type: NodePort ports: - port: 80 targetPort: 80 selector: app: nginx
-
Запустим новый сервис:
$ kubectl apply -f nginx-service.yaml -
Теперь можно узнать его порт:
$ kubectl get svc nginxВозможный вывод:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx NodePort 10.108.199.141 <none> 80:32336/TCP 4h
-
Проверим, что всё работает:
$ curl <ip адрес>:<порт>где
- ip адрес - это адрес любой из нод (не мастера), а порт - это порт сервиса, полученный с помощью предыдущей команды. Если использовать данные из примеров, то возможная команда:
curl 10.10.3.120:32336.
- ip адрес - это адрес любой из нод (не мастера), а порт - это порт сервиса, полученный с помощью предыдущей команды. Если использовать данные из примеров, то возможная команда:
Обновление
CRI-O
При использовании cri-o следует обратить внимание на то, что до версии cri-o 1.30 по умолчанию использовался runc в качестве рантайма. В версии cri-o 1.31 апстрим сменил рантайм по умолчанию на crun.
Если конфигурационный файл /etc/crio/crio.conf не менялся после установки пакета версий до 1.30, то по умолчанию используется runc, и данные рантайма хранятся в /run/runc, а после обновления с 1.30 до 1.31 теперь по умолчанию используется crun и данные ожидаются в /run/crun.
Для избежания проблем с запуском сервиса cri-o следует перед обновлением зафиксировать желаемый райнтайм в конфигурационном файле /etc/crio/crio.conf. Достаточно раскомментировать строку с установкой рантайма по умолчанию.
...
default_runtime = "runc"
...см. altbug #53963