快速安装

Kubeprober 基于 Master/Agent 架构管理海量的 Kubernetes 集群诊断问题,通常选择一个集群部署 Master, 其余集群部署 Agent,Master 和 Agent 均作为 Controller 运行在 Kubernetes 中。安装前请确认您已部署 Kubernetes 集群,并且可通过 kubectl 访问。

  • 本文将以 Kind 为例,介绍如何安装 Kubeprober 及其简单的使用操作。
  • 生产环境的部署方式可参考本文操作。
  • 部署前请克隆 Kubeprober 的代码仓库或者下载 Release 包。

部署 Kind 集群

  1. 准备一个包含 Ingress 的集群配置文件。

    1. kind: Cluster
    2. apiVersion: kind.x-k8s.io/v1alpha4
    3. nodes:
    4. - role: control-plane
    5. image: kindest/node:v1.18.15@sha256:5c1b980c4d0e0e8e7eb9f36f7df525d079a96169c8a8f20d8bd108c0d0889cc4
    6. kubeadmConfigPatches:
    7. - |
    8. kind: InitConfiguration
    9. nodeRegistration:
    10. kubeletExtraArgs:
    11. node-labels: "ingress-ready=true"
    12. extraPortMappings:
    13. - containerPort: 80
    14. hostPort: 80
    15. protocol: TCP
    16. - containerPort: 443
    17. hostPort: 443
    18. protocol: TCP
    19. - role: worker
    20. image: kindest/node:v1.18.15@sha256:5c1b980c4d0e0e8e7eb9f36f7df525d079a96169c8a8f20d8bd108c0d0889cc4
    21. - role: worker
    22. image: kindest/node:v1.18.15@sha256:5c1b980c4d0e0e8e7eb9f36f7df525d079a96169c8a8f20d8bd108c0d0889cc4
  2. 启动集群。

    shell script kind create cluster --name moon --config cluster.yaml

  3. 部署 Ingress。

    1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/v1.0.0-alpha.1/deploy/static/provider/kind/deploy.yaml

安装 Master

Master 端仅有一个 probe-master 组件,其依赖于 Kubernetes 的 Webhook 进行资源的前置校验工作。使用 cert-manager 服务进行 Webhook 证书的自动签发前,需先部署 cert-manager 服务,待 cert-manager 的 Pod 全部成功启动后再安装后续组件。 ```shell script kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml

  1. ### 配置 probe-master 的 Secret-key
  2. probe-master probe-tunnelAgent 端组件)的交互通过 Secret-key 进行认证。您可在 probe-master 配置 Secret-key 作为集群接入的统一凭证,为 probe-tunnel 组件同样配置相应的 Secret-key probe-master 交互。
  3. probe-master Secret-key 配置如下:
  4. ```shell script
  5. vim deployment/probe-master.yaml
  6. apiVersion: apps/v1
  7. kind: Deployment
  8. metadata:
  9. name: probe-master
  10. spec:
  11. template:
  12. spec:
  13. containers:
  14. - command:
  15. - /probe-master
  16. env:
  17. - name: SERVER_SECRET_KEY
  18. value: your-token-here

部署 Master 组件

  1. APP=probe-master make deploy

安装 Agent

Agent 端包含 probe-agent 与 probe-tunnel 组件,probe-tunnel 通过 WebSocket 与 probe-master 建立连接,提供从 probe-master 到被管理集群的控制通道,即 probe-agent 管理诊断项的生命周期,包括创建、执行、删除等。

由于 Kubernetes 本身没有集群名的概念,因此 Agent 端中加入该项,结合上文提及的 Secret-key,需在 Agent 端配置 Master 地址、 集群名、Secret-key 等内容。

```shell script vim deployment/probe-agent.yaml


apiVersion: v1 kind: ConfigMap metadata: name: probeagent namespace: system data: probe-conf.yaml: | probe_master_addr: http://probe-master.kubeprober.svc.cluster.local:8088 cluster_name: moon secret_key: your-token-here

  1. ### 部署 Agent 组件
  2. ```shell script
  3. APP=probe-agent make deploy

检查集群信息

probe-agent 与 probe-tunnel 成功启动后,会将集群信息上报至 probe-master,由 probe-master 创建对应的集群资源,可通过如下命令查看:

  1. kubectl get cluster

快速安装 - 图1

执行诊断

Kubeprober 对诊断项采用中心管理的方式,通过为 Cluster 添加 probe label 将诊断项关联至某一个集群中。

创建 Probe

在 probe-master 所在的集群创建 Probe 资源(位于 Default 的 Namespace 下)。

  1. apiVersion: kubeprober.erda.cloud/v1
  2. kind: Probe
  3. metadata:
  4. name: k8s
  5. spec:
  6. policy:
  7. # unit: minute
  8. runInterval: 30
  9. template:
  10. containers:
  11. - env:
  12. - name: NODE_NAME
  13. valueFrom:
  14. fieldRef:
  15. fieldPath: spec.nodeName
  16. name: k8s
  17. image: kubeprober/probe-k8s:v0.1.5
  18. resources:
  19. requests:
  20. cpu: 10m
  21. memory: 50Mi
  22. restartPolicy: Never
  23. configs:
  24. - name: control-plane
  25. env:
  26. - name: PRIVATE_DOMAIN
  27. value: "kubernetes.default"
  28. - name: DNS_CHECK_NAMESPACE
  29. value: "kube-system"
  30. - name: DNS_NODE_SELECTOR
  31. value: "k8s-app=kube-dns"
  32. - name: PUBLIC_DOMAIN
  33. value: "www.baidu.com"

上述 Probe 已指定运行策略,即每隔 30 分钟运行一次 K8s 诊断。 ```shell script kubectl apply -f probe.yaml

  1. ![](http://terminus-paas.oss-cn-hangzhou.aliyuncs.com/paas-doc/2021/10/08/cb1cc9e9-2cbe-41a1-bce0-92ada89de12c.png)
  2. ### 关联集群
  3. 通过 kubectl label 关联 Probe Cluster,例如将 K8s Probe 关联至 Moon 集群。
  4. ```shell script
  5. kubectl label cluster moon probe/k8s=true

快速安装 - 图2

查看诊断结果

通过 kubectl probe 指令查看特定集群的诊断结果。

运行 kubectl probe 指令需获取 probe-master 地址。由于本文以 Kind 为例进行部署,因此可创建一个 Ingress 将 probe-master 暴露出来。

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: kubeprober
  5. namespace: kubeprober
  6. spec:
  7. rules:
  8. - host: kubeprober.moon.cn
  9. http:
  10. paths:
  11. - backend:
  12. serviceName: probe-master
  13. servicePort: 8088

配置本地 hosts。 ```shell script 127.0.0.1 kubeprober.moon.cn

  1. 创建 kubectl probe 所需要的配置文件。
  2. ```shell script
  3. vi ~/.kubeprober/config
  4. {
  5. "masterAddr": "ws://kubeprober.moon.cn/clusterdialer"
  6. }

查看诊断结果。 shell script kubectl probe status -c moon 快速安装 - 图3