ChaosBlade 1.7.4 双架构部署:Helm 3 在 K8s 集群的 5 步安装与验证

随着云原生技术的普及,混沌工程已成为保障系统稳定性的重要手段。ChaosBlade 作为阿里巴巴开源的混沌实验工具,其 1.7.4 版本对 AMD64 和 ARM 架构的双重支持,为混合架构集群提供了更灵活的故障注入能力。本文将详细介绍如何通过 Helm 3 在 Kubernetes 集群中部署 ChaosBlade 1.7.4,并验证其运行状态。

1. 环境准备

在开始部署之前,需要确保您的环境满足以下要求:

  • Kubernetes 集群 :版本不低于 v1.16,可通过以下命令验证:

    kubectl version --short
    

    预期输出应包含 Server 版本信息,例如:

    Server Version: v1.22.5
    
  • Helm 3 :已安装 Helm 3.x 版本,运行以下命令检查:

    helm version
    

    正常输出类似:

    version.BuildInfo{Version:"v3.8.0", GitCommit:"...", GitTreeState:"clean", GoVersion:"go1.17.5"}
    
  • 网络连通性 :确保集群节点能访问 GitHub 或阿里云 OSS(国内推荐)以下载资源。

注意:如果您的集群同时包含 AMD64 和 ARM 节点,需要确认 Helm 仓库提供的 Chart 包是否包含多架构镜像。ChaosBlade 1.7.4 官方镜像已支持双架构。

2. 添加 Helm 仓库并下载 Chart

ChaosBlade 提供了官方 Helm 仓库,执行以下命令添加仓库:

helm repo add chaosblade-io https://chaosblade-io.github.io/charts
helm repo update

接下来,下载特定版本的 Chart 包。对于 1.7.4 版本:

helm pull chaosblade-io/chaosblade-operator --version 1.7.4

下载完成后,您会得到一个 chaosblade-operator-1.7.4.tgz 文件。可以通过以下命令查看 Chart 内容:

tar -xzvf chaosblade-operator-1.7.4.tgz && tree chaosblade-operator

3. 安装 ChaosBlade Operator

ChaosBlade 通过 Operator 模式管理混沌实验。以下是安装步骤:

  1. 创建专用命名空间

    kubectl create ns chaosblade
    
  2. 安装 Operator

    helm install chaosblade-operator chaosblade-operator-1.7.4.tgz \
      --namespace chaosblade \
      --set webhook.enable=true \
      --set operator.image.repository=chaosbladeio/chaosblade-operator \
      --set operator.image.tag=v1.7.4 \
      --set tool.image.repository=chaosbladeio/chaosblade-tool \
      --set tool.image.tag=v1.7.4
    

    关键参数说明:

    • webhook.enable=true :启用 MutatingWebhook,支持 Pod 文件系统 I/O 故障实验
    • operator.image.repository tool.image.repository :指定镜像仓库
    • operator.image.tag tool.image.tag :固定版本以避免兼容性问题
  3. 验证安装 : 检查 Pod 状态:

    kubectl get pods -n chaosblade -l release=chaosblade-operator
    

    正常输出应包含一个 chaosblade-operator Pod 和每个节点一个 chaosblade-tool Pod:

    NAME                                     READY   STATUS    RESTARTS   AGE
    chaosblade-operator-5f7b98d6d4-2xqhg    1/1     Running   0          2m
    chaosblade-tool-7wq9p                   1/1     Running   0          2m
    chaosblade-tool-d4v6r                   1/1     Running   0          2m
    

4. 双架构支持验证

对于混合架构集群,需要确认不同架构节点的工具 Pod 使用了正确的镜像:

  1. 检查节点架构

    kubectl get nodes -o wide
    

    输出中的 ARCHITECTURE 列会显示各节点的架构类型。

  2. 验证工具 Pod 镜像

    kubectl describe pod -n chaosblade -l app=chaosblade-tool | grep Image:
    

    对于 ARM 节点,应看到类似以下输出:

      Image:         chaosbladeio/chaosblade-tool:v1.7.4-arm64
    

    AMD64 节点则显示:

      Image:         chaosbladeio/chaosblade-tool:v1.7.4
    
  3. 跨架构实验测试 : 创建一个测试 Deployment:

    kubectl create deployment nginx --image=nginx -n chaosblade
    

    对 Pod 注入网络延迟:

    cat <<EOF | kubectl apply -f -
    apiVersion: chaosblade.io/v1alpha1
    kind: ChaosBlade
    metadata:
      name: delay-pod-network
    spec:
      experiments:
      - scope: pod
        target: network
        action: delay
        desc: "delay pod network by 1000ms"
        matchers:
        - name: names
          value: ["nginx-xxxxxxxxxx-xxxxx"]
        - name: namespace
          value: ["chaosblade"]
        - name: time
          value: ["1000"]
        - name: offset
          value: ["100"]
    EOF
    

    替换 nginx-xxxxxxxxxx-xxxxx 为实际的 Pod 名称。

5. 常见问题排查

安装过程中可能会遇到以下问题:

问题1:镜像拉取失败

症状

Failed to pull image "chaosbladeio/chaosblade-tool:v1.7.4": 
no matching manifest for linux/arm64/v8 in the manifest list entries

解决方案

  1. 确认 Chart 的 values.yaml 中已配置多架构镜像:
    image:
      repository: chaosbladeio/chaosblade-tool
      tag: v1.7.4
      platform: 
        linux/amd64: v1.7.4
        linux/arm64: v1.7.4-arm64
    
  2. 或直接指定完整镜像路径:
    helm upgrade chaosblade-operator --set tool.image.repository=chaosbladeio/chaosblade-tool-arm64 --set tool.image.tag=v1.7.4
    

问题2:Webhook 证书错误

症状

Internal error occurred: failed calling webhook "mpodchaosblade.kb.io": 
Post "https://chaosblade-operator-webhook-service.chaosblade.svc:443/mutate-pods?timeout=30s": 
x509: certificate signed by unknown authority

解决方案 : 重新生成 webhook 证书:

helm upgrade chaosblade-operator --set webhook.cert.generate=true

问题3:CRD 已存在冲突

症状

Error: rendered manifests contain a resource that already exists...

解决方案 : 先删除现有 CRD:

kubectl delete crd chaosblades.chaosblade.io

6. 生产环境建议

对于生产环境部署,建议考虑以下优化配置:

  1. 资源限制 : 在 values.yaml 中为 operator 和 tool 容器设置资源限制:

    operator:
      resources:
        limits:
          cpu: 500m
          memory: 512Mi
    tool:
      resources:
        limits:
          cpu: 200m
          memory: 256Mi
    
  2. 节点亲和性 : 如果只需要在特定节点上运行 chaosblade-tool:

    tool:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values: [amd64, arm64]
    
  3. 持久化日志 : 启用日志持久化以便审计:

    operator:
      volumeMounts:
        - name: log-volume
          mountPath: /logs
      volumes:
        - name: log-volume
          persistentVolumeClaim:
            claimName: chaosblade-logs
    

通过以上步骤,您已经成功在 Kubernetes 集群中部署了支持双架构的 ChaosBlade 1.7.4。接下来可以开始设计混沌实验,验证系统的容错能力。

更多推荐