ZabbixをK3s上に構築しICMPの監視をを行う手順をまとめます.

Zabbix構築

まずはgithubからダウンロードしましょう

$ git clone https://github.com/zabbix/zabbix-docker.git

いろいろ調べたのですが/zabbix-docker/kubernetes.yamlをapplyして実行するそうです.

$ kubectl apply -f kubernetes.yaml -n zabbix

そしたらImagepullbackoffになっていました.理由としては学内の生徒が一斉にdockerhubに対してimageをpullしたためdockerhub側で制限がかけらているからです.6時間あたり100から200がダメらしいです.うちの学校ではsreの授業があるのでpullする回数が多く巻き込まれました.

https://www.docker.com/ja-jp/increase-rate-limits/#:~:text=%E8%A9%B3%E7%B4%B0%E6%83%85%E5%A0%B1,%E3%81%AB%E5%88%B6%E9%99%90%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

zabbix-m@zabbix-m:~/zabbix-docker$ kubectl get pods -n zabbix
NAME                                    READY   STATUS         RESTARTS   AGE
zabbix-web-5q66p                        0/1     ErrImagePull   0          18s
zabbix-java-gateway-6f87b4f94-lkv98     0/1     ErrImagePull   0          18s
zabbix-agent-xgnxj                      0/1     ErrImagePull   0          18s
zabbix-agent-jgrsn                      0/1     ErrImagePull   0          18s
zabbix-proxy-sqlite3-6985cddf9f-vhbxf   0/1     ErrImagePull   0          18s
zabbix-web-service-c5d9b867d-5w5fl      0/1     ErrImagePull   0          18s
zabbix-proxy-mysql-6bb7fc889-4kfbk      0/1     ErrImagePull   0          18s
zabbix-web-k4jfb                        0/1     ErrImagePull   0          18s
zabbix-server-55f46f45d9-kqcqz          0/2     ErrImagePull   0          18s
mysql-server-5ddbbfd9c7-tv8zd           0/1     ErrImagePull   0          18s

対処法としてはdockerにログインしてsecretを作成しdeploymentの下に追加することで回避できます.

今度はdocker loginができません

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: manato0405
Password: 
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied

調べたらdocker.sockにはrootかdockerのユーザしか権限がないらしい そのためdockerに権限を振らないといけない これでログインできる

$ sudo usermod -aG docker zabbix-m

そうしたらログイン!

zabbix-m@zabbix-m:~$ docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /home/zabbix-m/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

次にsecretを作成する.secretを作成することでdocker レジストリ(Docker Image)を引っ張ってくる際に認証してImageをとってこれる. https://ramesh-sahoo.medium.com/failed-to-pull-image-toomanyrequests-you-have-reached-your-pull-rate-limit-b46c9f1fe273

まずはsecretの作成

$ kubectl create secret generic regcred --from-file=.dockerconfigjson=<.docker/configのある場所の絶対パス> --type=kubernetes.io/dockerconfigjson -n <secretを適応させるnamespace>

作成できたらダウンロードしてきた設定ファイルに以下を追加(一例)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zabbix-web-service
  labels:
    app: zabbix
    tier: web-service
  namespace: zabbix
spec:
  selector:
    matchLabels:
     name: zabbix-web-service
     app: zabbix
  template:
    metadata:
      labels:
        name: zabbix-web-service
        app: zabbix
    spec:
      containers:
        - name: zabbix-web-service
          image: zabbix/zabbix-web-service:alpine-6.4-latest
          imagePullPolicy: IfNotPresent
          resources:
           limits:
            cpu: 100m
            memory: 512Mi
           requests:
            cpu: 100m
            memory: 512Mi
          ports:
          - containerPort: 10053
            protocol: TCP
            name: zabbix-web-svc
          livenessProbe:
            tcpSocket:
              port: 10053
            initialDelaySeconds: 5
            failureThreshold: 3
            periodSeconds: 2
          env:
          - name: ZBX_ALLOWEDIP
            value: "0.0.0.0/0"
          - name: ZBX_LISTENPORT
            value: "10053"
          - name: ZBX_DEBUGLEVEL
            value: "3"
          - name: ZBX_TIMEOUT
            value: "3"
          - name: ZBX_TLSACCEPT
            value: ""
          - name: ZBX_TLSCAFILE
            value: ""
          - name: ZBX_TLSCERTFILE
            value: ""
          - name: ZBX_TLSKEYFILE
            value: ""
          - name: DEBUG_MODE
            value: "false"
          securityContext:
            capabilities: {}
            privileged: false
      imagePullSecrets:
      - name: regcred
imagePullSecrets:と- name: regcredをDeploymentに投入

そしてapplyしてみる

$ kubectl apply -f kubernetes.yaml -n zabbix

Podの確認

^Czabbix-m@zabbix-m:~/zabbix-docker$ kubectl get pods -n zabbix
NAME                                    READY   STATUS    RESTARTS   AGE
zabbix-java-gateway-7557db7fd6-ljvtt    1/1     Running   0          2m5s
zabbix-agent-vw55z                      1/1     Running   0          2m5s
zabbix-agent-wlt2r                      1/1     Running   0          2m5s
zabbix-web-service-595c64d9bb-dg9fh     1/1     Running   0          2m5s
mysql-server-795b5c95f-88x24            1/1     Running   0          2m5s
zabbix-proxy-sqlite3-58547b8769-mrwh5   1/1     Running   0          2m5s
zabbix-web-lshnb                        1/1     Running   0          2m5s
zabbix-web-gp65f                        1/1     Running   0          2m5s
zabbix-proxy-mysql-85bdcf8bcf-4wcdn     1/1     Running   0          2m5s
zabbix-server-79b56cd87-5s2wv           2/2     Running   0          2m5s
いええーい!できました.

一応port-fowardしてみる

$ kubectl port-forward --address 192.168.100.101 svc/zabbix-web 8080:80 -n zabbix
スクリーンショット 2023-11-11 15.43.06.png (60.8 kB) できました!