如何从运行中的Azure AKS集群导出完整YAML配置文件
首先需要明确两个不同维度的配置差异:
Azure门户「导出模板」得到的是AKS集群作为Azure资源的ARM(Azure Resource Manager)配置,属于Azure云资源层面的定义;而kubectl导出的是AKS集群内部运行的Kubernetes原生资源(Deployment、Service、ConfigMap等)配置,二者覆盖的内容范围完全不同。
一、获取与门户导出模板内容一致的YAML格式配置
这部分能力不属于kubectl的功能范围,kubectl仅负责和Kubernetes集群的API server交互,无法读取Azure资源层面的配置,需要用Azure CLI完成操作:
- 首先完成Azure CLI登录并切换到对应订阅
az login az account set --subscription <你的订阅ID> - 导出指定AKS集群的ARM模板JSON文件
az group export --resource-group <AKS所在资源组名称> --resource-names <AKS集群名称> > aks-arm.json - 用JSON转YAML工具将导出的JSON转换为YAML格式,比如使用yq工具可以直接完成转换:
转换后的YAML文件和门户导出的JSON模板内容完全一致。yq -P aks-arm.json > aks-arm.yaml
二、用kubectl导出AKS集群内部Kubernetes资源的YAML
如果你需要的是集群内部运行的K8s资源配置,可以使用以下kubectl命令:
- 导出指定命名空间下的所有资源
kubectl get all -n <命名空间名称> -o yaml > namespace-resources.yaml - 导出集群全量命名空间的所有资源
kubectl get all -A -o yaml > cluster-all-resources.yaml - 导出单个指定资源的配置
kubectl get <资源类型,如deployment/service/configmap> <资源名称> -n <命名空间> -o yaml > single-resource.yaml - 导出干净可复用的资源配置(自动过滤集群生成的冗余字段)
kubectl get <资源类型> <资源名称> -n <命名空间> -o yaml | yq 'del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid, .status)' > clean-resource.yaml
注意:kubectl默认导出的YAML会包含大量集群运行时生成的状态字段,如果用于重新部署场景,建议过滤掉这类自动生成的冗余字段,避免部署时报错。
内容的提问来源于stack exchange,提问作者emp0001
相关产品推荐
相关产品推荐

