Разверните open-falcon в кластере kubernetes

Kubernetes
Разверните open-falcon в кластере kubernetes

Недавно компания переключила свою систему мониторинга с zabbix на open-falcon, что требует развертывания open-falcon в частном кластере kubernetes. Команда open-falcon в последнее время не обновляла техническое обслуживание, и отправленный PR не ответил, поэтому метод развертывания записывается здесь.

Обновленный 15 апреля 2019 года, PR был принят командой проекта open-falcon, дать проекту официальный 👍, и все ссылки на файлы yaml приведены в соответствие с официальным проектом.

среда кубернета

Среда развертывания — kubernetes 1.14, подробности см.kubectl version :

Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:53:57Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:45:25Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}

подготовить службу mysql

Если у вас уже есть служба mysql, вы можете пропустить шаг создания службы mysql. Метод создания службы mysql выглядит следующим образом:

kubectl apply -f mysql.yaml

Затем инициализируйте библиотеку mysql, которую должен использовать open-falcon:

sh init_mysql_data.sh

Содержание скрипта следующее:

#!/bin/sh

mysql_pod=$(kubectl get pods | grep mysql | awk '{print $1}')
cd /tmp && \
	git clone --depth=1 https://github.com/open-falcon/falcon-plus && \
	cd /tmp/falcon-plus/ && \
	for x in `ls ./scripts/mysql/db_schema/*.sql`; do
	    echo init mysql table $x ...;
	    kubectl exec -it $mysql_pod -- mysql -uroot -p123456 < $x;
	done

rm -rf /tmp/falcon-plus/

Этот скрипт в основном делает следующие вещи:

  1. Получите идентификатор модуля службы mysql в кластере.
  2. Загрузите скрипт инициализации данных из репозитория open-falcon на github.
  3. Выполните сценарий инициализации данных, чтобы инициализировать базу данных open-falcon.
  4. Очистить временные файлы и каталоги

Примечание. При необходимости изменитеmysql.yamlПароль mysql в , также обратите внимание на пароль mysql в openfalcon-plus и на приборной панели.

Подготовить сервис Redis

Если у вас уже есть служба Redis, вы можете пропустить шаг создания службы Redis. Способ создания службы Redis выглядит следующим образом:

kubectl apply -f redis.yaml

Запустите корзину семейства серверных сервисов open-falcon.

kubectl apply -f openfalcon-plus.yaml

Суть в том, чтобы использовать ConfigMap для настройкиentrypoint.sh

apiVersion: v1
kind: ConfigMap
metadata:
  name: openfalcon-configmap
data:
  entrypoint.sh: |-
    #!/bin/bash
    /bin/sh -c 'sleep 10 && sh ctrl.sh start graph hbs judge transfer nodata aggregator gateway api alarm'  & /usr/bin/supervisord -c /etc/supervisord.conf

Таким образом, модули, запускаемые openfalcon, можно настроить, настроив configmap без изменения образа и развертывания. Конечно, в формальной среде образ лучше перекомпилировать из исходников. Потому что способ, которым супервизор управляет процессами, неdocker.

/bin/sh -c 'sleep 10 && sh ctrl.sh start graph hbs judge transfer nodata aggregator gateway api alarm' & /usr/bin/supervisord -c /etc/supervisord.confЛогика этой команды заключается в том, чтобы сначала запустить supervisord, а затем через десять секунд запустить весь модуль Bucket семейства openfalcon.

Запустить open-falcon-dashboard

kubectl apply -f openfalcon-dashboard.yaml

Развертывание панели мониторинга, в основном сосредоточенное наAPI_ADDRЭта переменная среды указывает на службу open-falcon в кластере kubernetes. Я тут ленив и определяю это прямо в деплойменте, разумнее всего configmap.

 containers:
      - name: open-falcon-dashboard
        image: openfalcon/falcon-dashboard:v0.2.1
        command: ["sh","-c","cd /open-falcon/dashboard &&  ./control startfg"]
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8081
        env:
        - name: API_ADDR
          value: http://open-falcon:8080/api/v1
        - name: PORTAL_DB_HOST
          value: mysql
        - name: PORTAL_DB_PORT
          value: "3306"
        ....

Посетите open-falcon-dashboard

После того, как все сделано, проверьтеkubectl get svc :

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
mysql                   NodePort    10.110.20.201   <none>        3306:30535/TCP                  25m
open-falcon             NodePort    10.97.12.125    <none>        8433:31952/TCP,8080:31957/TCP   53s
open-falcon-dashboard   NodePort    10.96.119.231   <none>        8081:30191/TCP                  3s
redis                   ClusterIP   10.98.212.126   <none>        6379/TCP                        32m

получитьopen-falcon-dashboardЛокальный порт, предоставляемый службой30191, а затем браузер получает доступhttp://192.168.10.21:30191.

Все yaml-файлы