Рубрики
Uncategorized

Как создать кластер Kubernetes на Alpine Linux

Этот пост поможет вам понять KUBEALM, kubelet флаги и нюансы альпийского Создание продукта … Теги с Куберовщиками, дежопами, альпийскими, KUBEALM.

Этот пост поможет вам понять KUBEALM, kubelet флаги и нюансы альпийского

Создание готов к производству K8S Cluster — это почти ветер на сегодняшний день на большинстве облачных платформ, поэтому мне было любопытно увидеть, как трудно было бы создать кластер с нуля на моем собственном наборе VMS … Оказывается не очень сложно.

Для этого вы можете сделать это ?| Твердый способ или использовать некоторую автоматизацию. Вы представлены двумя вариантами:

  • kubespray который использует Anbible под капотом
  • Kubeadm, который является официальным способом сделать это, часть K/K и поддерживается удивительной командой K8S VMware

Поскольку бинар KubeAdm уже поставляется с пакетом Kubernetes на Alpine, я решил пойти с этим вариантом.

У меня уже был установлен KVM на моем машине и имел альпийский Linux 3.9 VM, готов к работе, поэтому вам нужно сделать приостановку здесь и предоставить свой VMS, если вы еще не допустили.

Как только у вас есть VM, вам необходимо добавить репозитории сообщества и тестирования, чтобы вы могли получить необходимые двоичные файлы для Kubernetes и Docker Packages:

# echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing/" >> /etc/apk/repositories
# echo "@community http://dl-cdn.alpinelinux.org/alpine/edge/community/" >> /etc/apk/repositories

Затем установите необходимые пакеты с помощью:

# apk add kubernetes@testing
# apk add docker@community
# apk add cni-plugins@testing

На данный момент, когда я попытался запустить свою службу докера, я бы получил ошибку:

# service docker start
supervise-daemon: --pidfile must be specified
failed to start Docker Daemon
ERROR: docker failed to start

Это, очевидно, ошибка на части контролировать демон И я создал запрос слияния на этот вопрос в Alpine/Aports Но, по-видимому, этот вопрос был решен в более новых версиях альпийского. Если вы все еще запускаете это, вам нужно редактировать свой /etc/init.d/docker Файл, добавить pidfile = "/Run/Docker/docker.pid " и внутри start_pre Блок Добавить mkdir -p/run/docker Отказ

Теперь вы можете дублировать свой виртуальную машину в KVM и назвать новый работник-1. :

# hostname worker-1
# echo "worker-1" > /etc/hostname

Убедитесь, что сделайте те же шаги для главного узла, но с именем мастер-1. .

Вы готовы создать свой контроль на самолете на главном узле, запустите:

# kubeadm init --apiserver-advertise-address=[ Master Node's IP Here ] --kubernetes-version=1.17.5

KUBEALM работает в фазах, и он сбился при достижении:

[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s

Запуск другого терминала (с использованием SSH) и перезапуская службу Kublet исправил эту проблему. Оказывается, kubeadm сначала начинает службу Kublet, а затем записывает файлы конфигурации, которые необходимо начать правильно. На других ОС, таких как Ubuntu, Systemd — ОС INITY SYSTEM- Позаботьтесь о перезапуске услуги по разбивающую службу до тех пор, пока не будут запущены конфигурационные файлы, и kublet не могут быть запущены.

Альпийская с другой стороны, использует OpenRC в качестве своей системы init, которая не перезапускается на круговых петлях. Для этого сообщества Gentoo представило контролировать демон который экспериментал на данный момент. Чтобы сделать это возможным на альпий, мы исправили эту проблему напрямую на KubeAdm с этим PR Отказ

Однажды kubeadm Забегает курс, он дает вам два примечания, одно — это местоположение вашего файла конфигурации Kube. Это файл, который kubectl Использует для аутентификации на API-сервере на каждом вызове. Вам необходимо скопировать этот файл на любых машинах, которые необходимо взаимодействовать с кластером, используя kubectl Отказ

Другой является заявлением в Join, как приведено ниже, то как вы добавите свои рабочие узлы в кластер. Сначала добавьте свой CNI на главный узел, а затем присоединитесь к рабочему узлу:

# on master node
master-1 # kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

# on worker node
worker-1 # kubeadm join 192.168.122.139:6443 --token hcexp0.qiaxub64z17up9rn --discovery-token-ca-cert-hash sha256:05653259a076769faa952024249faa9c9457b4abf265914ba58f002f08834006

Примечание. Ваша команда Join должна добиться успеха сейчас Но когда я изначально попробовал эту команду, моя служба Kubelet снова не сможет начать, потому что файлы конфигурации отсутствовали, и, удивительно, что перезапуская служба Kubelet не помогла на этот раз. (Шокирует, я знаю!)

После некоторого расследования я понял еще одно несоответствие между Systemd и OpenRC, --bootstrap-kubeconfig =/etc/kubernetes/bootstrap-kubelet.conf отсутствовал от /etc/conf.d/kubelet И добавив его исправить это, но не указывал CNI, и мои стручки получат докер IPS. Вы догадались правильно, другой аргумент Kublet отсутствует. (См. Полные изменения, которые были необходимы здесь )

На этом этапе вы можете развернуть свои рабочие нагрузки, и если вы приедете из Ubuntu World, одна тонкая разница, заключается в том, что вам необходимо убедиться, что приложения будут совместимы с MUSL, а не в отличие от Glibc. Например, если вы развертываете статические двоичные файлы, убедитесь, что вы компилируете Cgo_enabled = 0 Для создания бинарного бинара или если вы развертываете приложения узла, убедитесь, что ваш NPM установить бежит внутри альпийского контейнера.

Вот и все! Не стесняйтесь добраться до меня, если вам нужна помощь с вашими кластерами K8S.

Оригинал: «https://dev.to/xphoniex/how-to-create-a-kubernetes-cluster-on-alpine-linux-kcg»