尝试使用 Zabbix 6.0 的 Kubernetes 监控功能来监控 Red Hat OpenShift

首先

在Zabbix 6.0中新增了对Kubernetes的监控功能,现在可以监控Kubernetes基础架构。
本文总结了将Kubernetes监控功能应用于OpenShift的情况。

Zabbix 6.0 的 Kubernetes 監控功能

Zabbix Helm Chartを使用してKubernetesクラスタにZabbixプロキシとZabbixエージェントをインストールし、KubernetesノードやPodに関する情報を収集します。
提供される以下のKubernetes監視用テンプレートを使用し、KubernetesノードとPodの自動検出と監視が行えます。

    • Kubernetes nodes by HTTP

 

    • Kubernetes cluster state by HTTP

 

    • Kubernetes API server by HTTP

 

    • Kubernetes Controller manager by HTTP

 

    • Kubernetes Scheduler by HTTP

 

    Kubernetes kubelet by HTTP

先决条件

Kuberbetes監視の前提条件は、以下の通りです。

    • Kubernetes cluster 1.18+

 

    • Helm 3.0+

 

    • Zabbix server 6.0+

 

    kube-state-metrics 2.13.2+

我所使用的环境

・这是之前在这里发布过文章的Zabbix Server 6.0.1环境。
・OpenShift(基于IBM Cloud的Red Hat OpenShift):v4.8.26_1542。

设置步骤

将Zabbix Helm Chart安装到OpenShift集群中。

安装 Helm 3.

如果没有安装必备的Helm,则需要在之前进行安装。

# curl -fsSL -o get_helm.sh  https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
# chmod 700 get_helm.sh
# ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
将1.2版本的存储库进行克隆。
# git clone https://git.zabbix.com/scm/zt/kubernetes-helm.git
Cloning into 'kubernetes-helm'...
remote: Enumerating objects: 125, done.
remote: Counting objects: 100% (125/125), done.
remote: Compressing objects: 100% (124/124), done.
remote: Total 125 (delta 70), reused 0 (delta 0)
Receiving objects: 100% (125/125), 33.44 KiB | 8.36 MiB/s, done.
Resolving deltas: 100% (70/70), done.

2022/08/21現在、branch/6.2が提供されています。必要に応じて最新のBranchを利用します。
本記事の環境では、branch/6.0を使用しています。

1.3 Chartのデフォルト設定値をzabbix_values.yamlにエクスポート
# cd kubernetes-helm
# git checkout release/6.0
# helm show values . > ./zabbix_values.yaml
1.4 值的编辑

OpenShiftにデプロイする場合のみ、valueからsecurityContext設定を削除する必要があります。
※OpenShiftはvanillaのKubernetesに比べてuid, gidの扱いが厳格になっており、デフォルトで65535より小さいuid, gidの使用が禁止されている為
参考)A Guide to OpenShift and UIDs

# vi zabbix_values.yaml
(以下を削除)
      securityContext:
        runAsUser: 65534
        runAsGroup: 65534
        fsGroup: 65534
创建一个使用Zabbix的命名空间。

这次我们选择了一个名为 zabbix-monitoring 的命名空间,但是您可以根据需要进行任意设置。

# oc new-project zabbix-monitoring
安装Kubernetes Helm 1.6。
# helm install zabbix . --dependency-update -f ./zabbix_values.yaml -n zabbix-monitoring

Getting updates for unmanaged Helm repositories...
...Successfully got an update from the "https://prometheus-community.github.io/helm-charts" chart repository
Saving 1 charts
Downloading kube-state-metrics from repo https://prometheus-community.github.io/helm-charts
Deleting outdated charts
W0316 19:54:07.223940  485684 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0316 19:54:10.166080  485684 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
NAME: zabbix
LAST DEPLOYED: Wed Mar 16 19:54:06 2022
NAMESPACE: zabbix-monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing zabbix-helm-chrt.


Your release is named zabbix.
Zabbix agent installed:  "zabbix/zabbix-agent2:alpine-6.0.2"
Zabbix proxy installed:  "zabbix/zabbix-proxy-sqlite3:alpine-6.0.2"


Annotations:
app.kubernetes.io/name: zabbix-zabbix-helm-chrt
helm.sh/chart: zabbix-helm-chrt-0.0.1
app.kubernetes.io/version: "trunk"
app.kubernetes.io/managed-by: Helm




Service account created:
    zabbix-service-account


To learn more about the release, try:


  $ helm status zabbix
  $ helm get all zabbix

以上,安装已完成。

确认已部署资源

麦克风

zabbix-agentがDaemonSetとしてデプロイされ(クラスターはWorkerNode3ノード)、zabbix-kube-state-metricsとzabbix-proxyがdeploymentでデプロイされました。

# oc get pod
NAME                                       READY   STATUS    RESTARTS   AGE
zabbix-agent-5spdn                         1/1     Running   0          60s
zabbix-agent-cgrrx                         1/1     Running   0          60s
zabbix-agent-ngnt2                         1/1     Running   0          60s
zabbix-kube-state-metrics-78868498-krr6t   1/1     Running   0          60s
zabbix-proxy-5d49c88d9b-tnzjx              1/1     Running   0          60s

服务账号

# oc get sa
NAME                           SECRETS   AGE
builder                        2         6d21h
default                        2         6d21h
deployer                       2         6d21h
zabbix-agent-service-account   2         7m39s
zabbix-kube-state-metrics      2         7m39s
zabbix-service-account         2         7m39s

服务

# oc get svc
NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
zabbix-kube-state-metrics       ClusterIP   172.21.211.142   <none>        8080/TCP    19d
zabbix-zabbix-helm-chrt-agent   ClusterIP   172.21.246.99    <none>        10050/TCP   19d
zabbix-zabbix-helm-chrt-proxy   ClusterIP   172.21.156.172   <none>        10051/TCP   19d

最终点

# oc get ep
NAME                            ENDPOINTS                                                    AGE
zabbix-kube-state-metrics       172.30.88.174:8080                                           29d
zabbix-zabbix-helm-chrt-agent   10.129.176.23:10050,10.129.176.27:10050,10.129.176.7:10050   29d
zabbix-zabbix-helm-chrt-proxy   172.30.17.208:10051                                          29d

3. Zabbix Server的设置配置

テンプレートを適用し、ZabbixServerからOpenShiftのリソース情報を取得していきます。

3.1 创建Zabbix代理

image.png

3.2 应用 Kubernetes 节点通过 HTTP 模板。

为了应用”通过HTTP监视Kubernetes节点”的模板,需要将节点注册为主机。
点击”设置>主机>创建主机”,添加集群节点的主机。
由于此环境是完全托管的OpenShift,MasterNode由IBMCloud进行管理,因此在这里我们选择了一个WorkerNode作为主机。

    • テンプレートは、”Kubernetes nodes by HTTP” を選択

 

    インターフェース > エージェント にWorkerNodeのIPを入力

为创建的主机设置主机宏。

    マクロ             値{$KUBE.API.ENDPOINT}<scheme>://<host>:<port>/api
当環境では
https://c100.private.jp-tok.containers.cloud.ibm.com:31403/api{$KUBE.API.TOKEN}zabbix-service-accountシークレットから取得する[※]

※请使用以下命令来获取令牌。

#oc get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d
image.png

应用HTTP模板的Kubernetes集群状态为3.3.

クラスター監視用テンプレート “Kubernetes cluster state by HTTP”を適用するため、ノードをホスト登録します。
(3.2で”Kubernetes nodes by HTTP”テンプレートを適用したホストに、”Kubernetes cluster state by HTTP”を適用することはできません。ディスカバリーがバッティングし、エラーとなりますので、別のホストを設定する必要があります)

点击“设置>主机>创建主机”以添加集群节点主机。

image.png

对创建的主机进行主机宏设置。

    マクロ             値{$KUBE.API.ENDPOINT}<scheme>://<host>:<port>/api
当環境では
https://c100.private.jp-tok.containers.cloud.ibm.com:31403/api{$KUBE.API.TOKEN}zabbix-service-accountシークレットから取得{$KUBE.API.HOST}当環境では、c100.private.jp-tok.containers.cloud.ibm.com{$KUBE.API.PORT}デフォルト6443
当環境の場合は31403を設定{$KUBE.API_SERVER.PORT}デフォルト6443
当環境の場合は31403を設定
image.png

以下的模板残留部分无需手动应用于主机。它们将自动适用于已发现的资源。

    • Kubernetes API server by HTTP

 

    • Kubernetes Controller manager by HTTP

 

    • Kubernetes Scheduler by HTTP

 

    Kubernetes kubelet by HTTP

确认数据

设定完成后,我们来确认一下对于 OpenShift 的发现结果和项目数据的获取内容。

ノード情報

Node discoveryによりOpenShiftクラスターの全てのノード(当環境の場合、3WorkerNode)が検出されプロトタイプホストとして登録されていることが確認できます。

スクリーンショット 2022-04-05 15.54.35.png
image.png

Pod数据

已经获取了在OpenShift集群上运行的所有Pod的状态和资源情况。

image.png

发现其他资源并获取数据

image.png

应用Kubernetes监控功能到OpenShift时,我注意到的一些事项。

Zabbix服务器的负载

我们使用了一个刚部署但没有运行任何应用程序的OpenShift集群作为环境,但即使如此,已发现的项目数量仍然达到了37185个。
由于执行发现操作和获取大量项目数据的负载,经常会出现处理不及时的情况,导致轮询器超时,并且无法获取项目数据。此外,由于存储数据增加,数据库在大约10天后就会崩溃。
如果要将OpenShift添加为现有的Zabbix服务器的监控目标,则很可能需要增加Zabbix服务器的资源。

image.png

某些组件无法被检测到。

在Kubernetes集群中,APIServer、Controller-Manager和Scheduler被识别并自动注册为主机的原型。然而,在我们的OpenShift环境中,无法实现它们的自动识别。
另外,尽管Controller-Manager和Scheduler实际上正在运行,但无法正确获取其状态,导致收到Unhealthy事件的通知。

# oc get clusteroperator
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
console                                    4.8.31    True        False         False      28d
csi-snapshot-controller                    4.8.31    True        False         False      28d
dns                                        4.8.31    True        False         False      28d
image-registry                             4.8.31    True        False         False      28d
ingress                                    4.8.31    True        False         False      28d
kube-apiserver                             4.8.31    True        False         False      28d
kube-controller-manager                    4.8.31    True        False         False      28d
kube-scheduler                             4.8.31    True        False         False      28d

对于无法正确获取状态的问题,可能是由于以下命令输出的OpenShift 4.x已知的问题所引起的。

 oc get cs
W0330 14:16:42.128291   15591 warnings.go:67] v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0               Healthy     {"health":"true"}

最后

关于Zabbix的Kubernetes监控功能,只要求Kubernetes集群的版本为1.18+,没有明确提及对OpenShift的支持。

然而,在模板的README中提及了OpenShift,所以可能包含在支持范围内。

在本次尝试使用完全托管的OpenShift后,遗憾的是无法实现部分预期的检测和监控,但是节点的自动检测和Pod的运行状态监控可以正常实现。

广告
将在 10 秒后关闭
bannerAds