公司最近監控系統從zabbix切換到open-falcon,須要將open-falcon部署到私有的kubernetes集羣上。open-falcon團隊最近沒有更新維護,提交的PR沒有反應,因此將部署方法記錄到這裏。mysql
2019年04月15日更新,PR已經被open-falcon項目團隊接受,給項目官方一個👍,所有yaml文件連接調整到官方項目。linux
部署環境爲kubernetes 1.14 , 詳情見 kubectl version
:git
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服務方法以下:github
kubectl apply -f mysql.yaml 複製代碼
而後,初始化open-falcon須要使用的mysql庫:redis
sh init_mysql_data.sh
複製代碼
腳本內容以下:sql
#!/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/ 複製代碼
這個腳本主要作了下面幾件事:docker
注意: 按需修改 mysql.yaml 中的mysql密碼,一樣注意openfalcon-plus和dashboard中的mysql密碼。數據庫
若是已經有redis服務了,能夠跳過建立redis服務這個步驟。建立redis服務方法以下:後端
kubectl apply -f redis.yaml 複製代碼
kubectl apply -f openfalcon-plus.yaml 複製代碼
其中主要的點在使用ConfigMap配置了 entrypoint.shapi
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 複製代碼
這樣在不改動鏡像和deployment的狀況下,調整configmap就能夠調整openfalcon啓動的模塊。固然正式環境下,從源碼從新編譯鏡像更佳。由於supervisord管理進程的方式不 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,十秒後再啓動openfalcon的全家桶模塊。
kubectl apply -f openfalcon-dashboard.yaml 複製代碼
dashboard的部署,主要關注其中的 API_ADDR 這個環境變量是指向kubernetes集羣中open-falcon服務。我這裏偷懶,直接定義到deployment中了,合理的方式應該是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" .... 複製代碼
所有完成後,查看 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
。