多集群使用 Kubeprober

    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

    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: cluster_name: erda-cloud secret_key: your-token-here

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

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

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

    1. apiVersion: kubeprober.erda.cloud/v1
    2. kind: Probe
    3. metadata:
    4. name: k8s
    5. spec:
    6. # unit: minute
    7. runInterval: 30
    8. template:
    9. containers:
    10. - env:
    11. valueFrom:
    12. fieldRef:
    13. fieldPath: spec.nodeName
    14. name: k8s
    15. image: kubeprober/probe-k8s:v0.1.5
    16. resources:
    17. requests:
    18. cpu: 10m
    19. memory: 50Mi
    20. restartPolicy: Never
    21. configs:
    22. env:
    23. - name: PRIVATE_DOMAIN
    24. - name: DNS_CHECK_NAMESPACE
    25. value: "kube-system"
    26. - name: DNS_NODE_SELECTOR
    27. value: "k8s-app=kube-dns"
    28. - name: PUBLIC_DOMAIN
    29. 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/2ac2c3fb-d011-48c8-aee4-7321f763f297.png)
    2. ### 关联集群
    3. 通过 kubectl label 关联 Probe Cluster,例如将 K8s Probe 关联至 erda-cloud 集群。
    4. ```shell script
    5. kubectl label cluster erda-cloud probe/k8s=true

    多集群使用 Kuberprober - 图2

    创建 kubectl probe 所需配置文件,若无则 kubectl probe 自动将 ws://probe-master.kubeprober.svc.cluster.local:8088/clusterdialer 作为 Master 地址,其他情况下可自行修改该配置文件。

    ```shell script vi ~/.kubeprober/config

    { “masterAddr”: “ws://probe-master.kubeprober.svc.cluster.local:8088/clusterdialer” }

    除定时诊断外, Kubeprober 同样支持一次性诊断,常用于在系统变更后查看系统各功能是否可正常使用,默认诊断当前集群关联的 Probe,也可指定 Probe 进行诊断。

    ```shell script kubectl probe once -c erda-cloud #诊断已经 attatch 了的 probe kubectl probe once -c erda-cloud -p k8s,host #诊断特定 probe

    1. ![](http://terminus-paas.oss-cn-hangzhou.aliyuncs.com/paas-doc/2021/10/08/51d83f8f-cc53-466d-a6ca-444a8ac63b7d.png)
    2. 一次性诊断的历史记录将保存下来,可通过如下命令查看:
    1. 通过如下命令可查看历史某一次一次性诊断的诊断结果:

    kubectl probe oncestatus -c erda-cloud -i 1630566675 ```