Добавить в корзинуПозвонить
Найти в Дзене
Николай Калюжный

Установка MicroK8s Kubernetes на Rocky Linux 9

Kubernetes — это бесплатный инструмент оркестровки с открытым исходным кодом, который получил широкое распространение в современной разработке программного обеспечения. Это позволяет автоматизировать, масштабировать и управлять развертываниями приложений. Как правило, приложения запускаются в контейнерах, а рабочие нагрузки распределяются по кластеру. Контейнеры используют архитектуру микрослужб, в которой приложения являются неизменяемыми, переносимыми и оптимизированными для использования ресурсов. Kubernetes имеет несколько дистрибутивов, которые включают в себя: OpenShift: это дистрибутив Kubernetes, разработанный компанией RedHat. Его можно запускать как локально, так и в облаке.
Google Kubernetes Engine: это простой и гибкий дистрибутив Kubernetes, который работает в Google Cloud.
Служба Azure Kubernetes: это облачный дистрибутив Kubernetes для облака Azure
Rancher: Этот дистрибутив Kubernetes специализируется на развертывании Kubernetes в нескольких кластерах. Этот дистрибутив п
Оглавление

Kubernetes — это бесплатный инструмент оркестровки с открытым исходным кодом, который получил широкое распространение в современной разработке программного обеспечения. Это позволяет автоматизировать, масштабировать и управлять развертываниями приложений. Как правило, приложения запускаются в контейнерах, а рабочие нагрузки распределяются по кластеру. Контейнеры используют архитектуру микрослужб, в которой приложения являются неизменяемыми, переносимыми и оптимизированными для использования ресурсов. Kubernetes имеет несколько дистрибутивов, которые включают в себя:

OpenShift: это дистрибутив Kubernetes, разработанный компанией RedHat. Его можно запускать как локально, так и в облаке.
Google Kubernetes Engine: это простой и гибкий дистрибутив Kubernetes, который работает в Google Cloud.
Служба Azure Kubernetes: это облачный дистрибутив Kubernetes для облака Azure
Rancher: Этот дистрибутив Kubernetes специализируется на развертывании Kubernetes в нескольких кластерах. Этот дистрибутив похож на OpenShift, но интегрирует Kubernetes с несколькими другими инструментами.
Canonical Kubernetes: Этот дистрибутив Kubernetes разработан компанией Canonical (компания, которая разрабатывает Ubuntu Linux). Это зонтик для двух сертифицированных CNF дистрибутивов Kubernetes: MicroK8s и Charmed Kubernetes. Он может быть запущен как локально, так и в облаке.

В этом руководстве мы узнаем, как установить MicroK8s Kubernetes на Rocky Linux 9 / AlmaLinux 9. MicroK8s — это мощный и легкий дистрибутив Kubernetes корпоративного уровня. Он занимает мало места на диске и памяти, но по-прежнему предлагает бесчисленное количество дополнений, включая Knative, Cilium, Istio, Grafana и т.д. Это самый быстрый многоузловой Kubernetes, который может работать в системах Windows, Linux и Mac. Microk8 можно использовать для упрощения и сокращения времени, затрачиваемого на развертывание кластера Kubernetes.

Microk8s является предпочтительным по следующим причинам:

Простота: он прост в установке и управлении. Он имеет установку одного пакета со всеми связанными зависимостями.
Безопасность: Обновления предоставляются для всех проблем безопасности и могут быть применены немедленно или запланированы в соответствии с вашим циклом обслуживания.
Маленький: это самый маленький дистрибутив Kubernetes, который можно установить на ноутбук или домашнюю рабочую станцию. Он совместим с Amazon EKS, Google GKE и Azure AKS, если работает в Ubuntu.
Комплексный: он включает в себя бесчисленную коллекцию манифестов, которые используются для общих возможностей Kubernetes, таких как входящий трафик, DNS, панель управления, кластеризация, мониторинг и обновления до последней версии Kubernetes и т. д.
Текущий: Он выводит восходящую ветку разработки и выпускает бета, RC и финальные выпуски в тот же день, что и вышестоящие K8.

Шаг 1 – Установите Snapd

Microk8s - это защелкивающаяся упаковка и так snapd требуется в системе Rocky Linux 9 / AlmaLinux 9. Для установки можно использовать следующие команды. snapd на Rocky Linux 9 / AlmaLinux 9.

Включите репозиторий EPEL.

sudo dnf install epel-release

Устанавливать snapd:

sudo dnf install snapd

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

sudo ln -s /var/lib/snapd/snap /snap

Экспортируйте привязки $PATH.

echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snap.sh
source /etc/profile.d/snap.sh

Запустите и включите службу:

sudo systemctl enable --now snapd.socket

Проверьте, работает ли служба:

$ systemctl status snapd.socket
● snapd.socket - Socket activation for snappy daemon
Loaded: loaded (/usr/lib/systemd/system/snapd.socket; enabled; vendor preset: disabled)
Active: active (listening) since Tue 2024-07-26 09:58:46 CEST; 7s ago
Until: Tue 2024-07-26 09:58:46 CEST; 7s ago
Triggers: ● snapd.service
Listen: /run/snapd.socket (Stream)
/run/snapd-snap.socket (Stream)
Tasks: 0 (limit: 23441)
Memory: 0B
CPU: 324us
CGroup: /system.slice/snapd.socket

systemctl status snapd.seeded.service
systemctl start snapd.seeded.service

Установите SELinux в разрешительный режим:

sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

Шаг 2 – Установите Microk8s

После установки Snapd вы можете легко установить Microk8s, выполнив команду:

$ sudo snap install microk8s --classic
2024-11-15T00:06:29Z INFO Waiting for automatic snapd restart…
microk8s (1.30/stable) v1.30.2 from Canonical✓ installed

Чтобы иметь возможность выполнять команды без проблем, вам необходимо установить следующие разрешения:

sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube

Чтобы изменения вступили в силу, выполните команду:

newgrp microk8s

Теперь проверьте установку, проверив статус Microk8s

$ microk8s status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # (core) Configure high availability on the current node
disabled:
community # (core) The community addons repository
dashboard # (core) The Kubernetes dashboard
dns # (core) CoreDNS
gpu # (core) Automatic enablement of Nvidia CUDA
helm # (core) Helm 2 - the package manager for Kubernetes
helm3 # (core) Helm 3 - Kubernetes package manager
host-access # (core) Allow Pods connecting to Host services smoothly
hostpath-storage # (core) Storage class; allocates storage from host directory
…..

Если сервис не поднялся и вы увидели вывод команды

microk8s status равным

permanently dropping privs did not work, необходимо перезайти или перегрузить хост и повтороить команду и все должно работать.

Получите список доступных узлов:

$ microk8s kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready 3m38s vx.y.z

Шаг 3 – Установка и настройка kubectl для MicroK8s

Microk8s поставляется с собственной версией kubectl, чтобы избежать помех с любой версией, доступной в системе. Это используется на терминале в качестве:

microk8s kubectl

Тем не менее, Microk8s можно настроить для работы с kubectl вашего хоста. Сначала получите конфиги Mikrok8s с помощью команды:

$ microk8s config
apiVersion: v1
clusters:

  • cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREekNDQWZlZ0F3SUJBZ0lVWlZURndTSVFhOU13Rm1VdmR1S09pM0ErY3hvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0Z6…
    server: https://192.168.205.12:16443
    name: microk8s-cluster
    contexts:
  • context:
    cluster: microk8s-cluster
    user: admin
    name: microk8s
    current-context: microk8s
    ……

Установите kubectl на Rocky Linux 9 / AlmaLinux 9 с помощью команды:

curl -LO https://storage.googleapis.com/kubernetes-release/release/curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt/bin/linux/amd64/kubectl
sudo chmod +x kubectl
sudo mv kubectl /usr/local/bin/

Сгенерируйте необходимый конфиг:

cd $HOME
microk8s config > ~/.kube/config

введите команду добавив окружение переменных:

export PATH=$PATH:/usr/local/bin

Получите доступные узлы:

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready 5m35s vx.y.z

Шаг 4 – Добавьте узлы в кластер Microk8s

Чтобы повысить производительность и высокий уровень доступности, можно добавить узлы в кластер Kubernetes.

На мастер-узле разрешите проложить необходимые порты через межсетевой экран:

sudo firewall-cmd --add-port={25000/tcp,16443/tcp,12379/tcp,10250/tcp,10255/tcp,10257/tcp,10259/tcp} --permanent
sudo firewall-cmd --reload

Кроме того, сгенерируйте команду, которая будет использоваться узлами для присоединения к кластеру;

$ microk8s add-node
microk8s join 192.168.205.12:25000/17244dd7c3c8068753fe8799cf72f2ac/976e1522f4b6

Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 192.168.205.12:25000/17244dd7c3c8068753fe8799cf72f2ac/976e1522f4b6 --worker

If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 192.168.205.12:25000/17244dd7c3c8068753fe8799cf72f2ac/976e1522f4b6

Установка и настройка Microk8s на узлах

Вам нужно установить Microk8s на узлы так же, как мы делали в шагах 1 и 2. После установки Microk8s на узлы выполните следующие команды:

export OPENSSL_CONF=/var/lib/snapd/snap/microk8s/current/etc/ssl/openssl.cnf
sudo firewall-cmd --add-port={25000/tcp,10250/tcp,10255/tcp} --permanent
sudo firewall-cmd --reload

Теперь используйте сгенерированную команду на мастере для присоединения узлов к кластеру Microk8s.

$ microk8s join 192.168.205.12:25000/17244dd7c3c8068753fe8799cf72f2ac/976e1522f4b6 --worker
Contacting cluster at 192.168.205.12

The node has joined the cluster and will appear in the nodes list in a few seconds.

Currently this worker node is configured with the following kubernetes API server endpoints:
- 192.168.205.12 and port 16443, this is the cluster node contacted during the join operation.

If the above endpoints are incorrect, incomplete or if the API servers are behind a loadbalancer please update
/var/snap/microk8s/current/args/traefik/provider.yaml

После добавления проверьте доступные узлы:

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready 41m vx.y.z
node1 Ready 7m52s vx.y.z

Чтобы удалить узел из кластера, выполните на узле следующую команду:

microk8s leave

Шаг 5 – Развертывание приложения с помощью Microk8s

Развертывание приложения в Microk8s аналогично другим дистрибутивам Kubernetes. Чтобы продемонстрировать это, мы развернем приложение Nginx, как показано на рисунке:

$ kubectl create deployment webserver --image=nginx
deployment.apps/webserver created

Проверьте развертывание:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
webserver-566b9f9975-cwck4 1/1 Running 0 28s

Шаг 6 – Развертывание сервисов Kubernetes на Microk8s

Чтобы развернутое приложение было доступным, мы предоставим созданный нами pod с помощью NodePort, как показано ниже:

$ kubectl expose deployment webserver --type="NodePort" --port 80
service/webserver exposed

Получите сервисный порт:

$ kubectl get svc webserver
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
webserver NodePort 10.152.183.89 80:30281/TCP 29s

Попробуйте получить доступ к приложению через Интернет через открытый порт.

-2

Шаг 7 – Масштабирование приложений на Microk8s

Масштабирование определяется как создание репликаций в модулях pod или развертываниях для обеспечения высокого уровня доступности. Эта функция широко используется в Kubernetes, что позволяет ему обрабатывать как можно больше запросов.

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

$ kubectl scale deployment webserver --replicas=4
deployment.apps/webserver scaled

Получите стручки:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
webserver-566b9f9975-cwck4 1/1 Running 0 8m40s
webserver-566b9f9975-ts2rz 1/1 Running 0 28s
webserver-566b9f9975-t656s 1/1 Running 0 28s
webserver-566b9f9975-7z6zq 1/1 Running 0 28s

Это так просто!
Шаг 8 – Включение панели управления microk8s

Панель управления предоставляет простой способ управления кластером Kubernetes. Так как это дополнение, нам нужно включить его, выполнив команду:

$ microk8s enable dashboard dns
Infer repository core for addon dashboard
Infer repository core for addon dns
Enabling Kubernetes Dashboard
Infer repository core for addon metrics-server
Enabling Metrics-Server
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
……

Создайте токен, который будет использоваться для доступа к панели управления.

kubectl create token default

Проверьте это:

$ kubectl get services -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
metrics-server ClusterIP 10.152.183.200 443/TCP 77s
kubernetes-dashboard ClusterIP 10.152.183.116 443/TCP 58s
dashboard-metrics-scraper ClusterIP 10.152.183.35 8000/TCP 58s
kube-dns ClusterIP 10.152.183.10 53/UDP,53/TCP,9153/TCP 53

Разрешите порт (10443) через брандмауэр:

sudo firewall-cmd --permanent --add-port=10443/tcp
sudo firewall-cmd --reload

Теперь перенаправьте трафик на локальный порт (10443) с помощью команды:

kubectl port-forward -n kube-system service/kubernetes-dashboard --address 0.0.0.0 10443:443

Теперь откройте панель управления с помощью URL-https://127.0.0.1:10443. В некоторых браузерах, таких как Chrome, вы можете найти ошибку с недействительными сертификатами при удаленном доступе к панели управления. В Firefox действуйте, как показано на рисунке

-3

Предоставьте сгенерированный токен для входа.
После успешного входа в систему вы увидите панель управления Microk8s ниже.

-4

С помощью приведенной выше панели управления вы можете легко управлять своим кластером Kubernetes.

Шаг 9 – Включите встроенное хранилище на Microk8s

Microk8s поставляется со встроенным дополнением для хранения, которое позволяет быстро создавать ПВХ. Чтобы включить и сделать это хранилище доступным для использования подами, выполните следующие команды:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/lib64"
microk8s enable hostpath-storage

После включения убедитесь, что подготовленный путь хоста был создан как pod.

$ kubectl -n kube-system get pods NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7f85f9c7b9-v7lk5 1/1 Running 0 3h42m
metrics-server-5f8f64cb86-82nn2 1/1 Running 1 (165m ago) 165m
calico-node-hljcb 1/1 Running 0 3h13m
calico-node-sjzd2 1/1 Running 0 3h9m
coredns-66bcf65bb8-m6x44 1/1 Running 0 163m
dashboard-metrics-scraper-6b6f796c8d-scwtx 1/1 Running 0 163m
kubernetes-dashboard-765646474b-256qb 1/1 Running 0 163m
hostpath-provisioner-f57964d5f-sh4wj 1/1 Running 0 24s

Кроме того, убедитесь, что класс хранения создан:

$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
microk8s-hostpath (default) microk8s.io/hostpath Delete WaitForFirstConsumer false 83s

Теперь мы можем использовать приведенный выше класс хранения для создания PVC.

Создание постоянного тома

Чтобы продемонстрировать, правильно ли работает класс хранения, создайте с его помощью PV.

$ vim sample-pv.yml apiVersion: v1
kind: PersistentVolume
metadata:
name: sampe-pv
spec:
# Here we are asking to use our custom storage class
storageClassName:
microk8s-hostpath capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
# Should be created upfront
path: '/data/demo'

Создайте путь хоста с необходимыми разрешениями.

sudo mkdir -p /data/demo
sudo chmod 777 /data/demo
sudo chcon -Rt svirt_sandbox_file_t /data/demo

Создайте PV:

kubectl create -f sample-pv.yml

Подтвердите создание:

$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
sampe-pv 5Gi RWO Retain
Available microk8s-hostpath 7s

Создание утверждения постоянного тома

После того, как PV был создан, теперь создайте PVC с помощью StorageClass:

vim sample-pvc.yml

Добавьте в файл следующую строку:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name:
my-pvc namespace: default
spec:
# Once again our custom storage class here
storageClassName:
microk8s-hostpath accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi

Примените манифест:

kubectl create -f sample-pvc.yml

Подтвердите создание:

$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Pending microk8s-hostpath 13s

Разверните приложение, использующее PVC.

$ vim pod.yml apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod spec:
volumes:
- name: task-pv-storage persistentVolumeClaim:
claimName: my-pvc containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage

Примените манифест:

kubectl create -f pod.yml

Теперь проверьте, привязан ли ПВХ:

$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
sampe-pv 5Gi RWO Retain
Bound default/my-pvc microk8s-hostpath 7m23s

$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound
sampe-pv 5Gi RWO microk8s-hostpath 98s

Шаг 10 – Включите ведение журнала с помощью Prometheus и Grafana

В Microk8s есть дополнение Prometheus, которое можно включить. Этот инструмент предлагает визуализацию логов через интерфейс Grafana.

Чтобы включить аддон, выполните:

$ microk8s enable prometheus Infer repository core for addon prometheus
Adding argument --authentication-token-webhook to nodes.
Configuring node 192.168.205.13
Restarting nodes.
Configuring node 192.168.205.13
Infer repository core for addon dns
Addon core/dns is already enabled
.......

Через несколько минут убедитесь, что необходимые поды установлены:

$ kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE
prometheus-adapter-85455b9f55-w975k 1/1 Running 0 89s
node-exporter-jnmmk 2/2 Running 0 89s
grafana-789464df6b-kt5hr 1/1 Running 0 89s
prometheus-adapter-85455b9f55-2g9rs 1/1 Running 0 89s
blackbox-exporter-84c68b59b8-5lkw4 3/3 Running 0 89s
prometheus-k8s-0 2/2 Running 1 (43s ago) 77s
node-exporter-dzj66 2/2 Running 0 89s
prometheus-operator-65cdb77c59-gfk4v 2/2 Running 0 89s
kube-state-metrics-55b87f58f6-m6rnv 3/3 Running 0 89s
alertmanager-main-0 2/2 Running 0 78s

Чтобы получить доступ к сервисам Prometheus и Grafana, вам необходимо переслать их:

$ kubectl get services -n monitoring NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-operator ClusterIP None <none> 8443/TCP 2m31s
alertmanager-main ClusterIP 10.152.183.136 <none> 9093/TCP 2m22s
blackbox-exporter ClusterIP 10.152.183.174 <none> 9115/TCP,19115/TCP 2m21s
grafana ClusterIP 10.152.183.248 <none> 3000/TCP 2m20s
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 2m20s
node-exporter ClusterIP None <none> 9100/TCP 2m20s
prometheus-adapter ClusterIP 10.152.183.173 <none> 443/TCP 2m20s
prometheus-k8s ClusterIP 10.152.183.201 <none> 9090/TCP 2m19s
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 93s
prometheus-operated ClusterIP None <none> 9090/TCP 93s

Разрешите использование предназначенных портов через брандмауэр:

sudo firewall-cmd --add-port={9090,3000}/tcp --permanent
sudo firewall-cmd --reload

Теперь откроем порты:

kubectl port-forward -n monitoring service/prometheus-k8s --address 0.0.0.0 9090:9090

Получите доступ к Прометею по URL-адресу http://IP_Address:9090

-5

Для Grafana вам также нужно предоставить порт:

kubectl port-forward -n monitoring service/grafana --address 0.0.0.0 3000:3000

Теперь доступ к сервису осуществляется по URL http://IP_Address:3000

Войдите в систему с учетными данными по умолчанию:

  • имя_пользователя=admin
  • Пароль=admin

Войдя в систему, измените пароль.

-6

Перейдите в раздел Dashboards-> Manage-> Default и выберите панель мониторинга для загрузки.

На этом заканчиваем это подробное руководство по установке MicroK8s Kubernetes на Rocky Linux 9 / AlmaLinux 9.