Как установить кластер Kubernetes MicroK8s на CentOS 8

Как установить кластер Kubernetes MicroK8s на CentOS 8

 

MicroK8s — это сертифицированное CNCF восходящее развертывание Kubernetes, которое полностью работает на вашей рабочей станции или пограничном устройстве. Благодаря тому, что он запускает все службы Kubernetes изначально (то есть без виртуальных машин), он упаковывает весь набор необходимых библиотек и двоичных файлов. Установка ограничена тем, насколько быстро вы можете загрузить пару сотен мегабайт, и удаление MicroK8s ничего не оставляет позади Источник: страница Ubuntu .

CNCF запускает сертифицированную программу соответствия Kubernetes, чтобы гарантировать соответствие, чтобы обеспечить бесперебойную совместимость от одной установки Kubernetes к другой. Соответствие программного обеспечения гарантирует, что версия Kubernetes каждого поставщика поддерживает необходимые API, как и версии сообщества с открытым исходным кодом. Источник: сайт CNCF .

В этом руководстве мы вместе сделаем следующее:

  • Установите кластер Kubernetes с помощью MicroK8s
  • Включите основные надстройки Kubernetes, такие как DNS и панель управления.
  • Развертывание модулей и добавление новых узлов
  • Настроить хранилище
  • Включить ведение журнала, мониторинг прометея и графаны
  • Настроить реестр

Все, что нам понадобится, это дистрибутив Linux с поддержкой Snap, и в этом руководстве мы будем придерживаться CentOS 8. Начнем.

Шаг 1. Обновите сервер и установите Snap

Чтобы начать работу на чистой и готовой платформе, мы обновим наш сервер, чтобы получить последние исправления и программное обеспечение, добавим репозиторий Epel, а затем установим наш пакет snap от Epel. Выполните приведенные ниже команды, чтобы добиться этого.

sudo dnf install epel-release -y
sudo dnf update
sudo dnf -y install snapd

Отключить SELinux

Если у вас есть SELinux в принудительном режиме, выключите его или используйте разрешающий режим.

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

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

sudo systemctl enable --now snapd.socket

Кроме того, чтобы включить поддержку классической привязки, введите следующее, чтобы создать символическую ссылку между /var/lib/snapd/snap и /snap, затем добавьте привязку к переменной PATH

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

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

$ snap find microk8s

Name      Version  Publisher   Notes    Summary
microk8s  v1.19.0  canonical✓  classic  Lightweight Kubernetes for workstations and appliances

Шаг 2: Установите MicroK8s на CentOS 8

Теперь, когда наш сервер обновлен и Snap установлен, мы готовы с комфортом загрузить MicroK8 и начать использовать его для тестирования и запуска наших приложений в режиме контейнеров. Чтобы установить MicroK8s, выполните простую команду snap ниже, и все будет готово. Такова красота Снаппи.

$ sudo snap install microk8s --classic
microk8s v1.19.0 from Canonical✓ installed

Если вы не добавите переключатель –classic, вы получите сообщение об ошибке. Так что любезно добавьте это.

Чтобы иметь возможность запускать команду microk8s от имени пользователя sudo, вам необходимо добавить пользователя в группу microk8s, затем выйти из системы и снова войти в систему. Добавьте пользователя, как показано ниже:

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

После того, как разрешения были реализованы, выйдите из системы и снова войдите в систему.

После этого мы можем просмотреть установленные снимки

$ snap list

Name      Version      Rev   Tracking       Publisher   Notes  
core      16-2.45.3.1  9804  latest/stable  canonical✓  core   
microk8s  v1.19.0      1668  latest/stable  canonical✓  classic

В целях добавления новых узлов позже нам нужно будет открыть порты на сервере. Это применимо, если на вашем сервере установлен брандмауэр. Добавьте порты следующим образом:

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

Шаг 3: Управление MicroK8s в CentOS 8

MicroK8s теперь установлен на нашем сервере, и мы готовы к работе. Для управления MicroK8 (то есть запуском, состоянием, остановкой, включением, отключением, списком узлов и т. Д.) Вы просто делаете следующее:

#####Check Status#####

$ microk8s status

microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none

#####Stop MicroK8s#####

$ microk8s stop

stop of [microk8s.daemon-apiserver microk8s.daemon-apiserver-kicker microk8s.daemon-cluster-agent microk8s.daemon-containerd microk8s.daemon-contr…Stopped

#####Start MicroK8s#####

$ microk8s start

Started.

#####List MicroK8s Nodes#####

$ microk8s kubectl get nodes

NAME     STATUS   ROLES    AGE    VERSION
master   Ready    <none>   2m6s   v1.19.0-34+1a52fbf0753680

#####Disable MicroK8s#####

$ sudo snap disable microk8s

#####Enable MicroK8s#####

$ sudo snap enable microk8s

Потрясающий материал! Наш MicroK8s установлен и без проблем реагирует на наши команды. Перейдем к следующему шагу.

Шаг 4. Разверните модули и включите панель управления

Здесь мы продолжим и развернем модули и включим панель инструментов, чтобы упростить нашу работу с помощью хороших визуальных эффектов. Развернем образец модуля Redis следующим образом:

$ microk8s kubectl create deployment my-redis --image=redis
deployment.apps/my-redis created

Список развернутых модулей

$ microk8s kubectl get pods --all-namespaces

NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE  
kube-system   calico-kube-controllers-847c8c99d-f7zd2   1/1     Running   2          3h48m
kube-system   calico-node-xxhwx                         1/1     Running   2          3h48m
default       my-redis-56dcdd56-tlfpf                   1/1     Running   0          70s

И наша последняя капсула Redis работает и мурлычет !!

Если вы хотите войти в экземпляр Redis, действуйте, как показано ниже:

$ microk8s kubectl exec -it my-redis-56dcdd56-tlfpf -- bash
root@my-redis-56dcdd56-tlfpf:/data#

Чтобы проверить журналы модуля, убедитесь, что вы включили его соответствующее пространство имен, потому что оно будет проверять только пространство имен “default” если оно не указано.

$ microk8s kubectl logs my-redis-56dcdd56-tlfpf -n default

1:C 14 Sep 2020 12:59:32.350 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 14 Sep 2020 12:59:32.350 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 14 Sep 2020 12:59:32.350 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 14 Sep 2020 12:59:32.352 * Running mode=standalone, port=6379.
1:M 14 Sep 2020 12:59:32.352 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower 
value of 128.
1:M 14 Sep 2020 12:59:32.352 # Server initialized
1:M 14 Sep 2020 12:59:32.352 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').
1:M 14 Sep 2020 12:59:32.352 * Ready to accept connections

Затем давайте включим панель управления и DNS, чтобы наслаждаться просмотром наших рабочих нагрузок. Включите его следующим образом

$ microk8s enable dns dashboard

Enabling Kubernetes Dashboard
Enabling Metrics-Server
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created

Нам понадобится токен для входа в Личный кабинет. Чтобы получить токен, выполните две команды ниже.

$ token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
$ microk8s kubectl -n kube-system describe secret $token

Name:         default-token-gnj26
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 40394cbe-7761-4de9-b49c-6d8df82aea32

Type:  kubernetes.io/service-account-token

Data

ca.crt:     1103 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InBOVTc3NVd5ZDJHT1FYRmhWZFJ5ZlBVbVpMRWN5M1BEVDdwbE9zNU5XTDgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLWduajI2Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI0MDM5NGNiZS03NzYxLTRkZTktYjQ5Yy02ZDhkZjgyYWVhMzIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.vHqwKlMGX650dTuChwYWsPYZFH7zRhRjuh-BEPtgYYPfrayKU08DSC5v3CixkrZH-wXZydOPit50H5SfCZPwY1TqDNCFgbz--0GnB7GhgwSoK4laXpr42Al7EBgbMWfUEAtnWXVkObUYzF31Sfhac2AnPIBp2kFlqJt8M03uoperJuFLl5x-fDacGrcXTQqvY2m5K1oE4zE38vtaJXdzgNfBMbtUrMneihoFczzOzwPLxzJJ4eZ7vAz1svG6JHO5PDDYbV0gded0egoLQkhu4Saavf8ILUjupJdYywA2VCqB6ERrrElMBHs5tYfckfyi4f6eR59_EZkf7-neCDWTAg

Скопируйте токен и сохраните его в надежном месте.

Далее вам нужно подключиться к сервису дашборда. Хотя оснастка MicroK8s будет иметь IP-адрес в вашей локальной сети (IP-адрес кластера службы kubernetes-dashboard), вы также можете получить доступ к панели управления, перенаправив ее порт на свободный порт на вашем хосте с помощью:

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

Обратите внимание, что мы добавили –адрес 0.0.0.0, чтобы он мог быть доступен с любого IP- адреса, а не локально (127.0.0.1) на сервере. Теперь вы сможете получить доступ к панели управления через порт 30560. Убедитесь, что этот порт включен на вашем брандмауэре, если он настроен в вашей среде.

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

Теперь откройте браузер и укажите IP-адрес или полное доменное имя вашего сервера. Это https://[ip или FQDN]:30560 . Должна отобразиться следующая страница входа. Вы заметите, что ему нужен токен или файл Kubeconfig. Мы уже сгенерировали токен, как указано выше (Fetch token). Просто скопируйте его и вставьте на страницу входа.

Вставьте токен

И вы должны быть введены

Шаг 5: Добавьте узлы в кластер

До сих пор мы работали над одним узлом (сервером), и если вы хотите масштабировать и распространять свои приложения на двух или более узлах (серверах), тогда это доставит вас туда. Чтобы добавить еще один узел в свой кластер, вам просто нужно установить на нем Snap и MicroK8S, поскольку это уже было описано в шагах 1 и 2. Выполните шаги 1 и 2 на своем новом сервере CentOS 8, затем продолжите ниже.

Если Firewalld запущен, разрешите порты

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

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

$ microk8s add-node

From the node you wish to join to this cluster, run the following:
microk8s join 172.26.24.237:25000/dbb2fa9e23dfbdda83c8cb2ae53eaa53

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

На новом узле выполните следующие команды

node-01 ~ $ microk8s join 172.26.24.237:25000/dbb2fa9e23dfbdda83c8cb2ae53eaa53

Contacting cluster at 172.26.16.92
Waiting for this node to finish joining the cluster. ..

Шаг 6: Настройка хранилища

MicroK8s поставляется со встроенным хранилищем, которое нужно просто включить. Чтобы включить хранилище, добавьте каталог /lib86 к пути переменной среды LD_LIBRARY_PATH, затем включите хранилище, как показано ниже, на главном узле:

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

deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon

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

$ microk8s kubectl get pods --all-namespaces

NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running   2          22h
kube-system   dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running   2          22h
kube-system   metrics-server-8bbfb4bdb-mgddj               1/1     Running   2          22h
kube-system   coredns-86f78bb79c-58sbs                     1/1     Running   2          22h
kube-system   calico-kube-controllers-847c8c99d-j84p5      1/1     Running   2          22h
kube-system   calico-node-zv994                            1/1     Running   2          21h
kube-system   hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running   0          71s <==

Подтвердите созданный StorageClass, выполнив следующую команду:

$ microk8s kubectl get storageclasses

NAME                          PROVISIONER            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
microk8s-hostpath (default)   microk8s.io/hostpath   Delete          Immediate           false                  8m42s

Как видите, существует класс хранилища с именем « microk8s-hostpath » cerated. Это важно, потому что это имя будет использоваться при создании PersistentVolumeClaims, как будет показано ниже.

Создать PersistentVolumeClaim

Чтобы создать наш образец PersistentVolumeClaim, просто откройте свой любимый редактор и добавьте следующие строки yaml . Обратите внимание на microk8s-hostpath в storageClassName.

$ nano sample-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elk-data-1
spec:
  storageClassName: microk8s-hostpath
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

Затем создайте PVC, выполнив команду create, как показано ниже. Вы должны увидеть напечатанное созданное сообщение.

$ microk8s kubectl create -f sample-pvc.yaml

persistentvolumeclaim/elk-data-1 created

Чтобы подтвердить, что наш PVC был создан, просто введите волшебную команду MicroK8S, как показано ниже. И да, ПВХ действительно создан.

$ microk8s kubectl get pvc

NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
elk-data-1   Bound    pvc-fe391d65-6909-4c76-a6c9-87b3fd5a58a1   2Gi        RWO            microk8s-hostpath   5s 

А поскольку MicroK8S доставляет постоянные тома динамически, наш PVC создаст постоянный том, что может быть подтверждено командой ниже.

$ microk8s kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS       REASON   AGE
pvc-fe391d65-6909-4c76-a6c9-87b3fd5a58a1   2Gi        RWO            Delete           Bound    default/elk-data-1   microk8s-hostpath            5m 39s

Шаг 7: Настройка реестра

Реестр — это в основном система хранения и доставки контента, содержащая именованные образы Docker, доступные в различных версиях с тегами, которые следуют за ходом разработки и выпусками. MicroK8S имеет встроенный реестр, который также необходимо включить и использовать. Включение реестра довольно просто, как мы до сих пор видели в других сервисах. Единственное, что следует учитывать, это то, что он выбирает 20 ГБ в качестве размера реестра по умолчанию, если вы его не укажете. Если вы хотите указать размер, вы просто добавляете конфигурацию размера, как показано ниже. Если вас устраивает 20G, игнорируйте вариант размера.

$ microk8s enable registry:size=25Gi

The registry is enabled
The size of the persistent volume is 25Gi

Подтвердите, что модуль реестра был развернут

$ microk8s kubectl get pods --all-namespaces

NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE  
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running   2          22h  
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running   2          22h  
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running   2          22h  
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running   2          22h  
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running   2          22h  
kube-system          calico-node-zv994                            1/1     Running   2          22h  
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running   0          52m  
container-registry   registry-9b57d9df8-6djrn                     1/1     Running   0          3m34s <==

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

$ sudo dnf -y install podman
$ podman pull redis

Подтвердите, что изображение было вытащено

$ podman images

REPOSITORY                TAG      IMAGE ID       CREATED      SIZE         9ueue state U
docker.io/library/redis   latest   84c5f6e03bf0   5 days ago   108 MB

Как видите, наш образ взят из репозитория docker.io.

Затем отредактируйте файл конфигурации Podman и включите локальный реестр в [registries.insecure], поскольку мы не будем использовать какие-либо сертификаты. Убедитесь, что вы добавили IP или имя хоста сервера, чтобы другие узлы в вашем кластере могли связаться с ним. Реестр прослушивает порт 32000, который мы уже открыли в брандмауэре на шаге 2.

$ sudo vim /etc/containers/registries.conf
[registries.insecure]
registries = ['172.26.16.92', '127.0.0.1']

Как видно из приведенной выше команды Podman images, наш образ взят из репозитория docker.io, как уже упоминалось. Давайте пометим его и настроим так, чтобы он соответствовал нашему локальному реестру и сохранялся в нем.

$ podman tag 84c5f6e03bf0 172.26.16.92:32000/custom-redis:geeksregistry
$ podman push 172.26.16.92:32000/custom-redis:geeksregistry

Getting image source signatures
Copying blob ea96cbf71ac4 done
Copying blob 2e9c060aef92 done
Copying blob 7fb1fa4d4022 done
Copying blob 07cab4339852 done
Copying blob 47d8fadc6714 done
Copying blob 45b5e221b672 done
Copying config 84c5f6e03b done
Writing manifest to image destination
Storing signatures

Снова запустите команду podman images, чтобы подтвердить изменения.

$ podman images

REPOSITORY                        TAG             IMAGE ID       CREATED      SIZE  
172.26.16.92:32000/custom-redis   geeksregistry   84c5f6e03bf0   5 days ago   108 MB
docker.io/library/redis           latest          84c5f6e03bf0   5 days ago   108 MB

Войдите в узел Worker и вытащите изображение

Теперь мы готовы извлечь образ из локального реестра, который мы только что включили. Войдите в свой рабочий узел или любой узел с установленным podman и попробуйте получить изображение с главного сервера. Если у вас не установлен podman, просто введите команду ниже.

node-01 ~ $ sudo dnf install -y podman

На рабочем узле снова или на любом сервере вы захотите получить изображения, отредактировать файл конфигурации podman и включить локальный реестр в [registries.insecure], поскольку мы не будем использовать какие-либо сертификаты.

$ sudo vim /etc/containers/registries.conf

[registries.insecure]
registries = ['172.26.16.92', '127.0.0.1']

После того, как все будет хорошо сделано, давайте теперь попробуем вытащить образ из реестра MicroK8S.

node-01 ~ $ podman pull 172.26.16.92:32000/custom-redis:geeksregistry

Trying to pull 172.26.16.92:32000/custom-redis:geeksregistry...
Getting image source signatures
Copying blob 08c34a4060bc done
Copying blob 50fae304733d done
Copying blob 8de9fbb8976d done
Copying blob 72c3268a4367 done
Copying blob edbd7b7fe272 done
Copying blob b6c3777aabad done
Copying config 84c5f6e03b done
Writing manifest to image destination
Storing signatures
84c5f6e03bf04e139705ceb2612ae274aad94f8dcf8cc630fbf6d91975f2e1c9

Проверить детали изображения

$ podman images

REPOSITORY                        TAG             IMAGE ID       CREATED      SIZE  
172.26.16.92:32000/custom-redis   geeksregistry   84c5f6e03bf0   5 days ago   108 MB

И теперь у нас есть хорошо работающий реестр !! Далее мы настроим ведение журнала и мониторинг на нашем кластере MicroK8s.

Шаг 8. Включите ведение журнала с помощью FluentD, Elasticsearch и Kibana

MicroK8s поставляется с пакетом под названием fluentd, который автоматически развертывает FluentD, Elasticsearch и Kibana (EFK) !!. Это позволяет довольно легко включить ведение журнала в вашем кластере с помощью доступных инструментов (EFK), что делает его еще более приятным.

Чтобы EFK запускался без ошибок, вам потребуется как минимум 8 ГБ памяти и 4 виртуальных ЦП. Если вы ограничены в памяти, вы можете отредактировать его Stateful Set, как будет показано после того, как мы включим fluentd.

Включите fluentd следующим образом:

$ microk8s enable fluentd

Enabling Fluentd-Elasticsearch
Labeling nodes
node/master labeled
Addon dns is already enabled.
Adding argument --allow-privileged to nodes.
service/elasticsearch-logging created
serviceaccount/elasticsearch-logging created
clusterrole.rbac.authorization.k8s.io/elasticsearch-logging created
clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging created
statefulset.apps/elasticsearch-logging created
configmap/fluentd-es-config-v0.2.0 created
serviceaccount/fluentd-es created
clusterrole.rbac.authorization.k8s.io/fluentd-es created
clusterrolebinding.rbac.authorization.k8s.io/fluentd-es created
daemonset.apps/fluentd-es-v3.0.2 created
deployment.apps/kibana-logging created
service/kibana-logging created
Fluentd-Elasticsearch is enabled

В случае , если вы видите elasticsearch-каротаж 0 в ожидании и его статус не меняется и fluentd вместе с kibana нометрии находятся в CrashLoopBackOff состоянии, логин к приборной панели и нажмите на elasticsearch-каротаж 0 стручка так , чтобы мы могли видеть его события. Если вы видите « Доступно 0/1 узлов: 1 Недостаточно памяти. microk8s ”, затем перейдите к редактированию набора с отслеживанием состояния, как показано ниже.

$ microk8s kubectl get pods --all-namespaces

NAMESPACE            NAME                                         READY   STATUS              RESTARTS   AGE
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running             2          24h
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running             2          24h
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running             2          24h
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running             2          24h
kube-system          calico-node-zv994                            1/1     Running             2          24h
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running             0          156m 
container-registry   registry-9b57d9df8-6djrn                     1/1     Running             0          107m 
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running             2          24h  
kube-system          elasticsearch-logging-0                      0/1     Pending             0          4m57s <==
kube-system          kibana-logging-7cf6dc4687-bvk46              0/1     ContainerCreating   0          4m57s
kube-system          fluentd-es-v3.0.2-lj7m8                      0/1     Running             1          4m57s

После редактирования удалите модуль elasticsearch-logging-0, чтобы он был воссоздан с новыми изменениями конфигурации. Дайте MicroK8s время, чтобы вытащить и развернуть модуль. Позже все должно работать следующим образом. Обратите внимание: если у вас достаточно памяти и ЦП, вы вряд ли столкнетесь с этими ошибками, потому что модуль elasticsearch по умолчанию запрашивает память объемом 3 ГБ.

microk8s kubectl get pods --all-namespaces
NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running   3          40h
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running   3          40h
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running   3          40h
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running   1          18h
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running   3          40h
container-registry   registry-9b57d9df8-6djrn                     1/1     Running   1          18h
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running   3          41h
kube-system          calico-node-zv994                            1/1     Running   3          40h
kube-system          elasticsearch-logging-0                      1/1     Running   0          20m <==
kube-system          fluentd-es-v3.0.2-j4hxt                      1/1     Running   10         25m <==
kube-system          kibana-logging-7cf6dc4687-mpsx2              1/1     Running   10         25m <==

Доступ к Kibana

После того, как модули будут работать элегантно, мы захотим получить доступ к интерфейсу Kibana, чтобы настроить наши индексы и начать анализ наших журналов. Для этого давайте познакомимся с деталями kibana, fluentd и elasticsearch. Выполните команду cluster-info следующим образом:

$ microk8s kubectl cluster-info

Kubernetes master is running at https://127.0.0.1:16443
CoreDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
Elasticsearch is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
Kibana is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kibana-logging/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Хотя оснастка MicroK8s будет иметь IP-адрес в вашей локальной сети (IP-адрес кластера службы регистрации кибаны), вы также можете связаться с Kibana, перенаправив его порт на свободный порт на вашем хосте следующим образом:

$ microk8s kubectl port-forward -n kube-system service/kibana-logging --address 0.0.0.0 8080:5601

Вы можете проверить службы в пространстве имен, где мы развернули EFK, выполнив команду ниже. Вы увидите, что служба « kibana-logging » прослушивает внутренний порт 5601, который мы перенаправили на свободный порт на сервере.

kubectl get services -n kube-system
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   42h
metrics-server              ClusterIP   10.152.183.8     <none>        443/TCP                  42h
kubernetes-dashboard        ClusterIP   10.152.183.88    <none>        443/TCP                  42h
dashboard-metrics-scraper   ClusterIP   10.152.183.239   <none>        8000/TCP                 42h
elasticsearch-logging       ClusterIP   10.152.183.64    <none>        9200/TCP                 48m
kibana-logging              ClusterIP   10.152.183.44    <none>        5601/TCP                 48m <==

Наша Kibana теперь прослушивает порт 8080. Разрешите этот порт на брандмауэре, если он у вас запущен на вашем сервере, как показано ниже:

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

После успешного завершения откройте браузер и получите доступ к интерфейсу Kibana, указав его на следующий URL-адрес http: // [IP или FQDN]: 8080 . Вы должны увидеть интерфейс, как показано ниже.

Нажмите « Исследуй самостоятельно ».

Создайте « Шаблон индекса ». Logstash должен отображаться по умолчанию из-за fluentd. Выберите его и создайте следующим образом

Выберите @timestamp в фильтре времени, затем нажмите « Создать шаблон индекса ».

После создания шаблона индекса щелкните значок « Обнаружить », и вы должны увидеть совпадения, как показано ниже.

Шаг 9. Включите Prometheus

MicroK8s поставляется со встроенным « модулем » Prometheus, который нужно просто включить. Модуль распаковывает Прометей вместе с удивительной Графаной. Нет ничего лучше этого !! Включите его, так как другие были включены следующим образом:

$ microk8s enable prometheus

Затем проверьте, развертываются ли они

E                                         READY   STATUS              RESTARTS   AGE
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running             4          42h
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running             4          42h
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running             4          42h
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running             2          20h
container-registry   registry-9b57d9df8-6djrn                     1/1     Running             2          19h
kube-system          elasticsearch-logging-0                      1/1     Running             0          39m
kube-system          kibana-logging-7cf6dc4687-6b48m              1/1     Running             0          38m
kube-system          calico-node-zv994                            1/1     Running             4          42h
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running             4          42h
kube-system          fluentd-es-v3.0.2-pkcjh                      1/1     Running             0          38m  
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running             4          42h  
monitoring           kube-state-metrics-66b65b78bc-txzpm          0/3     ContainerCreating   0          2m45s <==
monitoring           node-exporter-dq4hv                          0/2     ContainerCreating   0          2m45s <==
monitoring           prometheus-adapter-557648f58c-bgtkw          0/1     ContainerCreating   0          2m44s <==
monitoring           prometheus-operator-5b7946f4d6-bdgqs         0/2     ContainerCreating   0          2m51s <==
monitoring           grafana-7c9bc466d8-g4vss                     1/1     Running             0          2m45s <==

Доступ к веб-интерфейсу Prometheus

Подобно тому, как мы обращались к предыдущим веб-интерфейсам, мы собираемся перенаправить внутренний порт модуля на свободный на сервере. Как мы подтвердили в предыдущей команде, Prometheus развертывается в пространстве имен, называемом « мониторинг ». Мы можем получить все службы в этом пространстве имен, как показано ниже:

$ microk8s kubectl get services -n monitoring

kubectl get services -n monitoring
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
prometheus-operator     ClusterIP   None            <none>        8443/TCP                     7m41s
alertmanager-main       ClusterIP   10.152.183.34   <none>        9093/TCP                     7m36s
grafana                 ClusterIP   10.152.183.35   <none>        3000/TCP                     7m35s
kube-state-metrics      ClusterIP   None            <none>        8443/TCP,9443/TCP            7m35s
node-exporter           ClusterIP   None            <none>        9100/TCP                     7m35s
prometheus-adapter      ClusterIP   10.152.183.22   <none>        443/TCP                      7m34s
prometheus-k8s          ClusterIP   10.152.183.27   <none>        9090/TCP                     7m33s
alertmanager-operated   ClusterIP   None            <none>        9093/TCP,9094/TCP,9094/UDP   4m
prometheus-operated     ClusterIP   None            <none>        9090/TCP                     3m59s

Давайте перенесем Prometheus вперед и получим доступ к нему из браузера.

$ microk8s kubectl port-forward -n monitoring service/prometheus-k8s --address 0.0.0.0 9090:9090
Forwarding from 0.0.0.0:9090 -> 9090

Затем укажите в браузере IP-адрес или полное доменное имя вашего сервера на порту 9090, то есть http: [IP или FQDN]: 9090 . Как обычно, если на вашем компьютере с CentOS 8 запущен брандмауэр, разрешите это. Поскольку мы будем перенаправлять Grafana и на порт 3000, добавьте и этот порт.

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

Доступ к веб-интерфейсу Grafana

Аналогичным образом перенесите Grafana на порт 3000, как мы делали это ранее.

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

Forwarding from 0.0.0.0:3000 -> 3000

Затем укажите в браузере IP-адрес или полное доменное имя вашего сервера на порту 3000, то есть http: [IP или FQDN]: 3000. И вы должны увидеть красивую панель управления Grafana, как показано ниже. Имя пользователя и пароль по умолчанию — « admin » и « admin ». Вам будет предложено немедленно его изменить. Введите свой новый пароль, затем отправьте, и вам будет разрешено войти.

Введите новые учетные данные

И вам должно быть позволено

Дополнительную информацию о MicroK8s можно найти на этом официальном веб-сайте MicroK8S .

Заключение

Путешествие по установке было долгим и сопряжено с некоторыми трудностями, но мы успешно развернули MicroK8 вместе с ведением журнала, мониторингом, панелью управления и всем остальным, с которыми мы столкнулись. Мы надеемся, что руководство было полезным, и в случае обнаружения каких-либо ошибок, пожалуйста, сообщите нам об этом. Мы по-прежнему гордимся вашей безжалостной поддержкой и высоко ценим ее. Приветствую всех людей, которые неустанно трудятся над созданием инструментов, используемых разработчиками и инженерами по всему миру.