В минулій статті, нам вдалося налаштувати мережу нашого майбутнього кластеру. Тепер ми будемо встановлювати всі компоненти на головний вузол, без яких не може працювати жоден Kubernetes кластер. Для цього здебільшого будемо слідувати офіціальній інструкції.
Перш за все нам необхідно встановити рантайм для контейнерів. Мабуть найбільш поширеним і відомим рішенням є Docker, на ньому ми і зупинимося. Якщо в майбутньому буде час і натхнення, то я в окремій статті опишу, що з себе на сьогоднішній день представляє цей рантайм, а також порівняю Docker з іншими доступними рішеннями. А на разі запускаємо наступну команду на мастері, для встановлення:
curl -sSL get.docker.com | sh && sudo usermod pi -aG docker && newgrp docker
Наступна крок – відключення swap:
sudo systemctl disable dphys-swapfile.service
sudo reboot
Після перезавантаження можна перевірити чи swap відключено за допомогою команди:
sudo swapon --summary
Якщо нічого не було виведено на екран – процедура відключення пройшла успішно. Далі виконуємо магічні мережеві налаштування, згідно гайду (не буду приховувати, сам не до кінця їх розумію). Для цього створюємо файл /etc/sysctl.d/k8s.conf з наступним вмістом:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
І застосовуємо їх командою:
sudo sysctl --system
Тепер нам необхідно встановити кілька потрібних програмок:
- kubelet – фоновий процес, запущений на кожному вузлі. Він відповідає за те, щоб вибрані контейнери працювали на відповідній машині.
- kubectl – утиліта для роботи з Kubernetes кластером.
- kubeadm – утиліта для запуску кластеру, яка автоматизую більшу частину роботи.
Загалом, можна обійтися і без kubeadm, але для цього довелося б написати ще як мінімум 5 окремих статей, по конфігурації всіх компонентів, генерації сертифікатів, ключів, тощо. Отже встановлюємо:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Наступний крок, необов’язковий, оскільки він і так виконується під час налаштування, але я б рекомендував його виконати окремо, оскільки це збереже вам багато часу у випадку помилки. Завантажуємо образи/зображення необхідних компонентів:
kubeadm config images pull
Завантаження не повинно забрати більше ніж пару хвилин, якщо у вас хороший інтернет провайдер. І нарешті фінальний крок у конфігурації мастера:
sudo kubeadm init --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address 10.0.0.1
Знову ж таки, на Raspberry Pi 4, процес не повинен зайняти більше ніж кілька хвилин, на кінці ви повинні побачити щось подібне до наступного:

Останній крок перед тим як ми зможемо перевірити роботу головних компонентів – конфігурації утиліти kubectl. Якщо уважно перечитати повідомлення з скріншоту вище, то можна побачити необхідні команди для копіювання конфігурації:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Перевіряємо функціональність:
kubectl get pods --all-namespaces
Повинні отримати наступний результат:

Ура!!! Всі (ну майже всі) компоненти працюють. Лишилося розібратися з компонентом coredns. Проблема в тому, що для правильної роботи Kubernetes необхідна спеціальна конфігурація внутрішної мережі (між подами які ми будемо запускати в майбутньому). На превелике щастя цю конфігурацію ми можемо здійснити за допомогою одної команди:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Цією командою буде встановлено Flannel Overlay. Якщо у випадку рантайм, є лише кілька розв’язань, то у випадку налаштувань мережі доступно кілька десятків. Також постараюся порівняти найбільш популярні в окремій статті.
Тепер перевірка подів, повинна показати що в них усіх статус встановлено на Running. Отже ми маємо правильно сконфігурований головний вузол, можна братися за робочі. Загалом процедура дуже подібна, на кожному з них виконуємо всі ті самі кроки, аж до kubeadm init. Замість неї необхідно запустити команду, яка була виведена у вас на екрані після створення кластера. У випадку якщо ви додаєте новий вузол і забули токен, то можна створити новий, якщо виконати на головному вузлі наступну команду:
kubeadm token create --print-join-command
І ви отримаєте команду для додавання вузла до кластера, яку необхідно виконати на самому вузлі:
sudo kubeadm join 10.0.0.1:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Повертаємося на головний вузол і перевіряємо стан кластера:
kubectl get nodes
Очікуйте побачити наступне на своєму екрані:

На цьому основна конфігурація Kubernetes кластера на Raspberry PI завершена. Я ще не вирішив, яка буде тема наступної статті, але швидше за все я постараюся розказати про призначення кожного компоненту на мастері і після чого можна буде переходити до якихось більш практичних речей.
Залишити відповідь