You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
存储
使用 FSXSet 实现客户端平滑升级
复制全文
下载 pdf
使用 FSXSet 实现客户端平滑升级
FSXSet 是容器服务提供的自定义资源(CRD),用于实现 FSX 客户端的精细化调度与解耦管理。本文介绍如何使用 FSXSet 实现客户端的平滑升级。​
说明​
更多 FSXSet 资源介绍,请参见 FSXSet 资源介绍。​
场景介绍​
在容器服务集群中,FSX 客户端负责承接 FSX 存储卷的挂载和卸载请求,生产环境中的存量业务通常已经稳定运行在老版本的 FSX 客户端之上。同时,随着 FSX 功能持续迭代,FSX 客户端需要通过版本升级获取新的产品能力、修复已知问题,并提升运行稳定性。FSX 客户端支持滚动升级(RollingUpdate)、灰度升级(OnLabel)和轮转升级等策略,详情请参见 FSX 客户端升级。​
直接采用滚动升级(RollingUpdate)策略时,控制器会主动逐台替换存量节点上的 FSX 客户端。替换过程中,同一节点可能短暂同时存在新旧两个 FSX 客户端,需要预留双倍资源。对于集群规模较大、稳定性要求较高但又希望逐步引入新版本能力的场景,通常不建议一次性替换所有存量节点上的 FSX 客户端。​
推荐通过灰度升级(OnLabel)或轮转升级策略,配合节点池扩缩容节奏和scaleDownAfterNoDependency配置,让老版本逐步自然汰换:存量业务继续由老版本保障稳定性,增量业务逐步切换至新版本,最终随新老版本数量自然收敛完成升级。​
​​​
注意​
该场景适用于版本变更敏感、无法接受大规模主动滚动替换、但升级时间窗口相对宽松的生产集群。如果升级目的是修复紧急 CVE 或严重缺陷、需要所有节点尽快收敛,则应该使用滚动升级(RollingUpdate)策略。详情请参见 FSX 客户端升级。​
前提条件​
  • 已安装 csi-fsx 组件,并升级至 v1.0.0 及以上版本。详情请参见 csi-fsx。​
  • (可选)已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群。​
升级步骤​
步骤一:配置变更​
  1. 在左侧导航栏中选择 集群,单击集群名称,进入集群管理页面。​
  1. 在左侧导航栏中选择 工作负载 > 对象浏览器。 在资源列表中单击 fsxset 资源名称,进入资源详情。​
  1. 在资源列表中,选择需要升级的资源,单击 操作 栏中的 编辑 Yaml,更新对应的 FSXSet 配置。关键参数和示例如下:​
  • 将spec.template.parameterTemplate.image配置为新版本。您可以从组件控制台获取版本号,详情请参见 csi-fsx。​
  • 将spec.upgradeStrategy.type配置为OnLabel(灰度升级),避免存量节点上的 FSX 客户端被主动替换。​
  • 将scaleDownAfterNoDependency配置为true,当节点上没有业务依赖 FSX 时,系统会自动回收 FSX 客户端 Pod,提升轮转效率。​
说明​
本文以修改自定义 FSXSet 资源的配置为例。​
  • ​
    apiVersion: csi.vke.volcengine.com/v1alpha1​
    kind: FSXSet​
    metadata:​
    name: doc-demo​
    spec:​
    groupName: doc # 逻辑分组名称,与节点标签 fsx.csi.volcengine.com/group 对应,系统通过该名称选择执行该 FSXSet 配置的节点,实现客户端差异化配置​
    createMode: WaitForFirstConsumer # FSX 客户端创建模式,本例中选择 WaitForFirstConsumer,即节点上首次部署依赖的业务时,才会创建 FSX 客户端​
    scaleDownAfterNoDependency: true # 当前节点上没有业务依赖 FSX 时,是否自动回收 FSX 客户端 Pod。推荐配置为 true ,即自动回收,可以提升轮转效率​
    upgradeStrategy:​
    type: OnLabel # FSX 客户端升级策略,本例中配置为 OnLabel,表示灰度升级​
    maxSurge: 0​
    maxUnavailable: 1​
    template:​
    parameterTemplate:​
    image: vke-cn-beijing.cr.volces.com/vke/fsx-agent:v1.3.4.286 # 修改为目标镜像版本​
    resources:​
    requests:​
    cpu: 100m​
    memory: 128Mi​
    limits:​
    cpu: 2000m​
    memory: 2Gi​
    ​
  1. 单击 确定,保存配置。​
步骤二:客户端升级​
  1. 执行以下命令,查看集群中的存量 FSX 客户端状态。其中,doc-demo为 FSXSet 资源名称。​
  • ​
    kubectl get pod -n kube-system -l addon.vke.volcengine.com/fsxset=doc-demo --show-labels​
    # 关注 label 中 app.kubernetes.io/version=<老版本> 与 <新版本> 的数量占比​
    # 平滑升级期间应呈现「老版本数量单调下降 + 新版本数量随新节点增加」​
    ​
  • 预期结果如下。在 OnLabel 模式下,系统不会自动升级存量客户端,因此存量客户端状态仍然为Running,未被批量重建。​
  • ​
    NAME READY STATUS RESTARTS AGE LABELS​
    fsx-agent-doc-demo-d5*** 1/1 Running 0 2m33s addon.vke.volcengine.com/fsxset-revision=b5e31ff826***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.2.246,app.kubernetes.io/version=v0.10.2,container-image.agent.fsx/tag=v0.10.2​
    fsx-agent-doc-demo-pz*** 1/1 Running 0 6m18s addon.vke.volcengine.com/fsxset-revision=b5e31ff826***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.1.45,app.kubernetes.io/version=v0.10.2,container-image.agent.fsx/tag=v0.10.2​
    fsx-agent-doc-demo-zn*** 1/1 Running 0 4m15s addon.vke.volcengine.com/fsxset-revision=b5e31ff826***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.2.253,app.kubernetes.io/version=v0.10.2,container-image.agent.fsx/tag=v0.10.2​
    ​
  1. 存量 FSX 客户端更新。在 OnLabel 模式下,您可以使用如下方式进行存量客户端更新。​
  • ​
    轮转更新
    手动更新
    ​
    当对应节点池扩容出新节点或存量节点池进行轮转,同时有新业务 Pod 调度到该节点时,系统会根据 FSXSet 配置中的image字段创建新版本的 FSX 客户端。例如:当在对应的节点池扩容 1 台新节点,并部署业务到该节点时:​
    • 新创建的 FSX 客户端fsx-agent-doc-demo-cj***,通过container-image.agent.fsx/tag标签,可以确认其 FSX 客户端为最新版本,即v1.3.4.286。​
    • 其他存量 FSX 客户端,通过container-image.agent.fsx/tag标签,可以确认其 FSX 客户端仍然为老版本,即v0.10.2。​
    • ​
      NAME READY STATUS RESTARTS AGE LABELS​
      fsx-agent-doc-demo-cj*** 1/1 Running 0 76s addon.vke.volcengine.com/fsxset-revision=6c356***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.1.58,app.kubernetes.io/version=v1.3.4.286,container-image.agent.fsx/tag=v1.3.4.286​
      fsx-agent-doc-demo-d5*** 1/1 Running 0 3m43s addon.vke.volcengine.com/fsxset-revision=b5e31***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.2.246,app.kubernetes.io/version=v0.10.2,container-image.agent.fsx/tag=v0.10.2​
      fsx-agent-doc-demo-pz*** 1/1 Running 0 7m28s addon.vke.volcengine.com/fsxset-revision=b5e31***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.1.45,app.kubernetes.io/version=v0.10.2,container-image.agent.fsx/tag=v0.10.2​
      fsx-agent-doc-demo-zg*** 1/1 Running 0 5m25s addon.vke.volcengine.com/fsxset-revision=b5e31***,addon.vke.volcengine.com/fsxset=doc-demo,app.kubernetes.io/instance=fsx-agent,app.kubernetes.io/managed-by=fsxset,app.kubernetes.io/name=agent,app.kubernetes.io/node=192.168.2.253,app.kubernetes.io/version=v0.10.2,container-image.agent.fsx/tag=v0.10.2​
      ​
    ​
    ​
升级结果检查​
  1. 执行以下命令,查看集群中的 FSX 客户端版本是否全量切换完成。​
  • ​
    kubectl get fsxset -o wide​
    ​
  • 预期结果如下,当MATCHED和UPDATED数量一致,且仅剩新版本客户端时,表示集群中的 FSX 客户端已全部升级至新版本。​
  • ​
    NAME GROUP DESIREDREVISION DESIRED CURRENT READY AVAILABLE UPDATED MATCHED AGE​
    default default 3f2d716d885**** 78m​
    doc-demo doc 8dec430c7ed**** 4 4 4 4 4 4 39m​
    ​
  1. 执行以下命令,查看升级到指定版本的 FSX 客户端,其中,v1.3.4.286为查询版本号。​
  • ​
    kubectl get pod -n kube-system -l app.kubernetes.io/instance=fsx-agent,container-image.agent.fsx/tag=v1.3.4.286 -o wide​
    ​
  • 预期结果如下。​
  • ​
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES​
    fsx-agent-doc-demo-cj*** 1/1 Running 0 39s 192.168.1.58 192.168.1.58 <none> <none>​
    fsx-agent-doc-demo-d5*** 1/1 Running 0 39s 192.168.2.246 192.168.2.246 <none> <none>​
    fsx-agent-doc-demo-pz*** 1/1 Running 0 39s 192.168.1.45 192.168.1.45 <none> <none>​
    fsx-agent-doc-demo-zg*** 1/1 Running 0 39s 192.168.2.253 192.168.2.253 <none> <none>​
    ​
  1. 执行以下命令,查看业务 Pod 挂载事件是否无异常。其中${pod-name}为业务 Pod 名称。​
  • ​
    kubectl describe pod ${pod-name}​
    ​
  • 预期结果如下。​
  • ​
    Name: efs-deployment-demo-5459***​
    Namespace: default​
    Priority: 0​
    Service Account: default​
    Node: 192.168.1.58/192.168.1.58​
    Start Time: Fri, 17 Jul 2026 15:52:50 +0800​
    Labels: app=efs-deployment-demo​
    pod-template-hash=5459***​
    Annotations: <none>​
    Status: Running​
    IP: 192.168.1.64​
    IPs:​
    IP: 192.168.1.64​
    Controlled By: ReplicaSet/efs-deployment-demo-4-5459***​
    Containers:​
    nginx:​
    Container ID: containerd://70129417e6251d06232fd6058c45***​
    Image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0​
    Image ID: doc-cn-beijing.cr.volces.com/vke/nginx-demo@sha256:4424e31f2c366108***​
    Port: <none>​
    Host Port: <none>​
    State: Running​
    Started: Fri, 17 Jul 2026 15:53:36 +0800​
    Ready: True​
    Restart Count: 0​
    Environment: <none>​
    Mounts:​
    /tmp from efs-pv (rw)​
    /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kw7v5 (ro)​
    Conditions:​
    Type Status​
    PodReadyToStartContainers True ​
    Initialized True ​
    Ready True ​
    ContainersReady True ​
    PodScheduled True ​
    Volumes:​
    efs-pv:​
    Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)​
    ClaimName: efs-pvc-demo​
    ReadOnly: false​
    kube-api-access-kw7v5:​
    Type: Projected (a volume that contains injected data from multiple sources)​
    TokenExpirationSeconds: 3607​
    ConfigMapName: kube-root-ca.crt​
    Optional: false​
    DownwardAPI: true​
    QoS Class: BestEffort​
    Node-Selectors: <none>​
    Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s​
    node.kubernetes.io/unreachable:NoExecute op=Exists for 300s​
    Events:​
    Type Reason Age From Message​
    ---- ------ ---- ---- -------​
    Normal Pulling 4m24s kubelet spec.containers{nginx}: Pulling image "doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0"​
    Normal Pulled 4m15s kubelet spec.containers{nginx}: Successfully pulled image "doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0" in 8.778s (8.779s including waiting). Image size: 56730696 bytes.​
    Normal Created 4m15s kubelet spec.containers{nginx}: Created container nginx​
    Normal Started 4m15s kubelet spec.containers{nginx}: Started container nginx​
    ​
  1. (可选)集群中的所有 FSX 客户端均升级完成后,您可以将 FSXSet 配置中的upgradeStrategy.type参数,根据实际需求恢复为常规策略。​
升级观测​
升级窗口内建议同时关注挂载耗时、csi-fsx 端错误率、FSX 客户端版本分布等指标,提前发现异常。详情请参见 CSI 存储观测。​
最近更新时间:2026.07.24 14:54:19
这个页面对您有帮助吗?
有用
有用
无用
无用