You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SSH免登录在Azure AKS集群节点执行命令实现批量补丁更新

AKS节点批量补丁更新可行方案

方案1:特权DaemonSet批量执行命令(推荐,无需SSH配置)

该方案利用Kubernetes原生能力实现,不需要开放节点SSH端口,完全规避连接超时问题,适配所有AKS集群。

  • 编写补丁更新DaemonSet配置,使用带apt工具的基础镜像,开启特权模式挂载节点根目录,通过chroot进入节点系统执行更新命令:
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-patch-updater
  namespace: kube-system
spec:
  selector:
    matchLabels:
      job: node-patch
  template:
    metadata:
      labels:
        job: node-patch
    spec:
      tolerations:
      # 容忍所有节点污点,确保覆盖包括主节点在内的所有节点
      - operator: Exists
      hostPID: true
      hostNetwork: true
      containers:
      - name: patch-runner
        image: ubuntu:18.04
        securityContext:
          privileged: true
        command: ["chroot", "/host", "/bin/bash", "-c"]
        args:
        - |
          apt update && apt upgrade -y
          # 若补丁更新后需要重启,可取消注释下方命令,会触发节点按K8s规则排空后重启
          # [ -f /var/run/reboot-required ] && systemctl reboot
        volumeMounts:
        - name: host-root
          mountPath: /host
      volumes:
      - name: host-root
        hostPath:
          path: /
      restartPolicy: OnFailure
  • 批量对接所有AKS集群上下文,循环执行kubectl apply -f node-patch.yaml下发任务
  • 执行kubectl logs -n kube-system -l job=node-patch查看所有节点的更新日志,确认全部完成后删除任务:kubectl delete ds node-patch-updater -n kube-system

方案2:VMSS RunCommand接口批量执行(Azure原生能力,无需SSH)

AKS节点池底层基于Azure虚拟机规模集(VMSS)实现,可直接调用Azure官方接口在节点内执行命令,不需要配置任何SSH相关规则。

  • 先安装Azure CLI并完成账号认证:az login
  • 编写批量执行脚本,遍历所有集群、节点池对应的VMSS资源执行更新命令,示例代码如下:
# 遍历订阅下所有AKS集群
for cluster in $(az aks list --query "[].name" -o tsv); do
  # 获取集群所属资源组
  rg=$(az aks show --name $cluster --query "resourceGroup" -o tsv)
  # 遍历集群下所有节点池对应的VMSS
  for vmss in $(az aks nodepool list --cluster-name $cluster --resource-group $rg --query "[].vmSetName" -o tsv); do
    # 对VMSS所有实例触发补丁更新命令
    az vmss run-command invoke \
      --resource-group $rg \
      --name $vmss \
      --command-id RunShellScript \
      --scripts "apt update && apt upgrade -y" \
      --query "value[].{instanceId:instanceId, status:executionState, output:message}"
  done
done
  • 该方法默认超时时间为90分钟,可通过--timeout-in-seconds参数自定义,执行日志会直接在命令返回结果中展示,无需额外排查。

方案3:修复SSH执行配置

SSH无法直接执行命令、连接超时的问题可通过调整配置解决:

  • 首先确认客户端机器与AKS节点网络已打通(同VNet、VNet对等或VPN连接),90%的2分钟超时问题由网络不通导致
  • 不需要直接访问节点内部IP,可通过kubectl debug命令直接在节点上执行命令,格式如下:
kubectl debug -it node/<节点名称> --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 -- chroot /host bash -c "待执行的命令"
  • 批量执行可先通过kubectl get nodes -o name获取所有节点名称,循环执行上述命令即可。

内容的提问来源于stack exchange,提问作者Salim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:09:04