ラズパイkubernetesにZabbix構築
以前docker-composeでZabbixを構築
したので
今度はkubernetesで構築してみました。
ちょっと入門編みたいな感じになっているんじゃないかと思います。
構築環境
以前構築したラズパイkubernetes
を使って構築します。
docker hubでARM64版が公開されている公式イメージを利用させていただきます。
マニフェストファイル
いろいろ試行錯誤してとりあえず以下で動きました。
今回初めて書いたのでもっといい書き方があるかもです。
Deploymentについて少し説明すると、
-
DBとServerとWebのコンテナは1つのPodにして、
コンテナ間の通信はPod内通信するようにしています。
Pod内のコンテナは同じホストになるようで127.0.0.1で通信できました。 -
volumesはemptyDir なんですがこれ永続化されないようです。
-
mariadbのargsはこれを入れないと、 以下のエラーが発生したのでその対策 です。
cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zabbix-deploy
spec:
replicas: 1
selector:
matchLabels:
app: zabbix
template:
metadata:
labels:
app: zabbix
spec:
containers:
- name: zabbix-db
image: mariadb:10.5
ports:
- name: mysql
containerPort: 3306
env:
- name: MYSQL_DATABASE
value: zabbix
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
value: zabbix
- name: MYSQL_ROOT_PASSWORD
value: P@ssword
args:
- --character-set-server=utf8
- --collation-server=utf8_bin
volumeMounts:
- name: zabbix-db-volume
mountPath: /var/lib/mysql
- name: zabbix-server
image: zabbix/zabbix-server-mysql:alpine-5.2-latest
ports:
- name: zabbix-server
containerPort: 10051
env:
- name: DB_SERVER_HOST
value: 127.0.0.1
- name: MYSQL_DATABASE
value: zabbix
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
value: zabbix
- name: zabbix-web
image: zabbix/zabbix-web-nginx-mysql:alpine-5.2-latest
ports:
- name: http
containerPort: 8080
env:
- name: ZBX_SERVER_HOST
value: 127.0.0.1
- name: DB_SERVER_HOST
value: 127.0.0.1
- name: MYSQL_DATABASE
value: zabbix
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
value: zabbix
- name: PHP_TZ
value: Asia/Tokyo
volumes:
- name: zabbix-db-volume
emptyDir:
medium: Memory
DBのパスワードとかはSecretを使ったほうがいいんでしょうね。
Serviceはこんな感じ。
MetalLBをインストールしているのでLoadBalancerにしています。
loadBalancerIPで固定IPにできるようです。
---
apiVersion: v1
kind: Service
metadata:
name: zabbix-service
spec:
type: LoadBalancer
loadBalancerIP: 192.168.10.245
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: zabbix
マニフェストapply
kubectl applyを実行します。
ファイル名はご自身のファイル名に変更してください。
% kubectl apply -f zabbix_deploy.yml
% kubectl apply -f zabbix_svc.yml
deleteすると書いてあるリソース全部消してくれるし、
変更は再度apply実行すれば再作成して反映してくれるし便利ですね。
kubectl get allを実行すると、
以下のようにpod、service、deployment、replicasetが作成されると思います。
(関係ない物は除外しています)
% kubectl get all
NAME READY STATUS RESTARTS AGE
pod/zabbix-deploy-86b9695796-88tsz 3/3 Running 0 4d4h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/zabbix-service LoadBalancer 10.103.151.48 192.168.10.245 8080:30834/TCP 4d4h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/zabbix-deploy 1/1 1 1 4d4h
NAME DESIRED CURRENT READY AGE
replicaset.apps/zabbix-deploy-86b9695796 1 1 1 4d4h
うまくいかない場合は以下のコマンドなど利用するとデバッグしやすいと思います。
- ログの確認
複数コンテナのあるpodに対して、特定のコンテナのログを確認するには、以下のようにします。
例えばmariadbの場合、
% kubectl logs pod/zabbix-deploy-86b9695796-88tsz zabbix-db
- サービスに紐づいているエンドポイントの確認
SeriveがどのIPと紐づいているか確認できます。
% kubectl get endpoints zabbix-service
NAME ENDPOINTS AGE
zabbix-service 10.244.2.35:8080 4d4h
- コンテナにログインする
複数コンテナのあるpodに対して、特定のコンテナにログインするには、以下のようにします。
% kubectl exec -it pod/zabbix-deploy-86b9695796-88tsz -c zabbix-server -- /bin/bash
bash-5.0$ zabbix_server -V
zabbix_server (Zabbix) 5.2.5
Revision 1afd0de 22 February 2021, compilation time: Feb 22 2021 16:22:17
Copyright (C) 2021 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.1.1j 16 Feb 2021
Running with OpenSSL 1.1.1j 16 Feb 2021
- リソースの詳細を確認する
コンテナにログインしなくても以下のコマンドでIPなど詳細が確認できます。
% kubectl describe pod/zabbix-deploy-86b9695796-88tsz
ログイン画面が出なくて上記コマンドでいろいろ調べたけど、結局繋がらなかったのは、
webの待ち受けポートが80じゃなくて8080だったことが原因でした。
あるぇー?そうだっけ?
うまくいけば以下のようにログイン画面が表示されると思います。
Usename:Admin
Password:zabbix
でログインできるんですが、前から最初大文字だっけ?
あるぇー?
動作テスト
なんとなく今回はWindows10からSNMP取ってみました。
説明は省略しますが、まずSNMPをインストールします。
サービスの設定を確認します。
ZabbixでHostsを追加します。
この辺りの手順はこちら
を
参考にしてもらえればと思います。
テンプレートはとりあえずのこちら。
しばらくするとLatest dataでデータが取得できているか確認できると思います。
ひとまずdocker-composeと同じことはできそうなので、なんとか使っていけそうです。
他にもオーケストレーションな部分をいろいろ試してみたいです。