前置知识: 运维与中间件

Azure AKS Kubernetes 命令

3 min入门

AKS 命令实战:集群创建、凭证访问、节点池、升级维护、自动伸缩与网络/安全配置。

学习目标

本文是「云计算」模块的第 50 篇,难度定位为入门。重点内容:AKS 命令实战:集群创建、凭证访问、节点池、升级维护、自动伸缩与网络/安全配置。

主要章节:

  • 集群创建
  • 凭证与访问
  • 节点池管理
  • 集群升级与维护
  • 缩放与自动伸缩
  • 网络配置
  • ……共 11 个章节

集群创建

基本写法:创建 AKS 集群 az aks create --name <集群名> --resource-group <组> --node-count <节点数> --generate-ssh-keys

# 创建 3 节点 AKS 集群
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --node-count 3 \
  --node-vm-size Standard_DS2_v2 \
  --generate-ssh-keys

基本写法:创建带系统池的集群 az aks create --name <集群名> --resource-group <组> --nodepool-name <池名> --node-count <数量>

# 创建系统节点池
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --nodepool-name systempool \
  --node-count 3 \
  --mode System

基本写法:使用托管 AAD 集成 az aks create --name <集群名> --resource-group <组> --enable-aad --aad-admin-group-object-ids <组ID>

# 启用 Azure AD 集成与 RBAC
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --enable-aad \
  --aad-admin-group-object-ids 00000000-0000-0000-0000-000000000000 \
  --enable-azure-rbac

基本写法:创建带网络插件集群 az aks create --name <集群名> --network-plugin <插件> --network-plugin-mode <模式>

# 创建 Azure CNI Overlay 网络的集群
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --pod-cidr 10.244.0.0/16

基本写法:使用可用区 az aks create --name <集群名> --resource-group <组> --zones 1 2 3

# 跨三个可用区部署节点
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --zones 1 2 3 \
  --node-count 3

凭证与访问

基本写法:获取集群凭证 az aks get-credentials --name <集群名> --resource-group <组>

# 将 AKS 凭证合并到 kubeconfig
az aks get-credentials \
  --name my-aks \
  --resource-group my-rg

基本写法:覆盖现有凭证 az aks get-credentials --name <集群名> --resource-group <组> --overwrite-existing

# 覆盖已有的同名上下文
az aks get-credentials \
  --name my-aks \
  --resource-group my-rg \
  --overwrite-existing

基本写法:使用管理员凭证 az aks get-credentials --name <集群名> --resource-group <组> --admin

# 获取 cluster-admin 凭证(应急使用)
az aks get-credentials \
  --name my-aks \
  --resource-group my-rg \
  --admin

基本写法:查看集群信息 az aks show --name <集群名> --resource-group <组>

# 查看集群详细配置
az aks show --name my-aks --resource-group my-rg

基本写法:列出所有集群 az aks list --resource-group <组>

# 列出资源组下所有 AKS 集群
az aks list --resource-group my-rg --output table

节点池管理

基本写法:添加节点池 az aks nodepool add --cluster-name <集群> --name <池名> --resource-group <组> --node-count <数量>

# 添加用户节点池
az aks nodepool add \
  --cluster-name my-aks \
  --name userpool \
  --resource-group my-rg \
  --node-count 5 \
  --node-vm-size Standard_DS3_v2 \
  --mode User

基本写法:列出节点池 az aks nodepool list --cluster-name <集群> --resource-group <组>

# 查看集群所有节点池
az aks nodepool list \
  --cluster-name my-aks \
  --resource-group my-rg \
  --output table

基本写法:缩放节点池 az aks nodepool scale --cluster-name <集群> --name <池名> --resource-group <组> --node-count <数量>

# 将节点池缩放到 8 个节点
az aks nodepool scale \
  --cluster-name my-aks \
  --name userpool \
  --resource-group my-rg \
  --node-count 8

基本写法:删除节点池 az aks nodepool delete --cluster-name <集群> --name <池名> --resource-group <组>

# 删除指定节点池
az aks nodepool delete \
  --cluster-name my-aks \
  --name userpool \
  --resource-group my-rg

基本写法:升级节点池 az aks nodepool upgrade --cluster-name <集群> --name <池名> --resource-group <组> --kubernetes-version <版本>

# 升级节点池到指定 K8s 版本
az aks nodepool upgrade \
  --cluster-name my-aks \
  --name userpool \
  --resource-group my-rg \
  --kubernetes-version 1.30.0

集群升级与维护

基本写法:查看可用升级版本 az aks get-upgrades --name <集群名> --resource-group <组>

# 列出集群可升级的版本
az aks get-upgrades \
  --name my-aks \
  --resource-group my-rg

基本写法:升级集群 az aks upgrade --name <集群名> --resource-group <组> --kubernetes-version <版本>

# 升级集群控制面到 1.30.0
az aks upgrade \
  --name my-aks \
  --resource-group my-rg \
  --kubernetes-version 1.30.0

基本写法:仅升级控制面 az aks upgrade --name <集群名> --resource-group <组> --kubernetes-version <版本> --control-plane-only

# 仅升级控制面不升级节点
az aks upgrade \
  --name my-aks \
  --resource-group my-rg \
  --kubernetes-version 1.30.0 \
  --control-plane-only

基本写法:配置维护窗口 az aks maintenanceconfiguration add --cluster-name <集群> --resource-group <组> --name <配置名> --config-file <文件>

# 配置每周六维护窗口
az aks maintenanceconfiguration add \
  --cluster-name my-aks \
  --resource-group my-rg \
  --name default \
  --config-file maintenance.json

基本写法:自动升级配置 az aks update --name <集群名> --resource-group <组> --auto-upgrade-channel <通道>

# 启用 stable 自动升级通道
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --auto-upgrade-channel stable

缩放与自动伸缩

基本写法:手动缩放集群 az aks scale --name <集群名> --resource-group <组> --node-count <数量>

# 调整节点数为 5
az aks scale \
  --name my-aks \
  --resource-group my-rg \
  --node-count 5

基本写法:启用集群自动伸缩 az aks update --name <集群名> --resource-group <组> --enable-cluster-autoscaler --min-count <最小> --max-count <最大>

# 启用集群自动伸缩 3-10
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-cluster-autoscaler \
  --min-count 3 \
  --max-count 10

基本写法:节点池自动伸缩 az aks nodepool update --cluster-name <集群> --name <池名> --enable-cluster-autoscaler --min-count <最小> --max-count <最大>

# 为用户节点池启用自动伸缩
az aks nodepool update \
  --cluster-name my-aks \
  --name userpool \
  --resource-group my-rg \
  --enable-cluster-autoscaler \
  --min-count 2 \
  --max-count 20

基本写法:禁用集群自动伸缩 az aks update --name <集群名> --resource-group <组> --disable-cluster-autoscaler

# 关闭集群自动伸缩
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --disable-cluster-autoscaler

基本写法:启用 KEDA 事件驱动伸缩 az aks update --name <集群名> --resource-group <组> --enable-keda

# 启用 KEDA 工作负载伸缩
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-keda

网络配置

基本写法:启用 HTTP 应用路由 az aks update --name <集群名> --resource-group <组> --enable-http-application-routing

# 启用 HTTP 应用路由附加功能
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-http-application-routing

基本写法:启用 Azure 服务网格 az aks update --name <集群名> --resource-group <组> --enable-azure-service-mesh

# 启用 Azure Service Mesh
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-azure-service-mesh

基本写法:配置出口负载均衡器 az aks create --name <集群名> --resource-group <组> --load-balancer-outbound-ips <IP ID>

# 使用指定公网 IP 作为出口
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --load-balancer-outbound-ips /subscriptions/.../providers/Microsoft.Network/publicIPAddresses/my-ip

基本写法:私有集群 az aks create --name <集群名> --resource-group <组> --enable-private-cluster

# 创建私有集群(API 服务器不可公网访问)
az aks create \
  --name my-aks \
  --resource-group my-rg \
  --enable-private-cluster \
  --enable-private-cluster-public-fqdn

安全与身份

基本写法:启用工作负载身份 az aks update --name <集群名> --resource-group <组> --enable-workload-identity --enable-oidc-issuer

# 启用 Workload Identity(替代 AAD Pod Identity)
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-workload-identity \
  --enable-oidc-issuer

基本写法:查看 OIDC 颁发者 URL az aks show --name <集群名> --resource-group <组> --query oidcIssuerProfile.issuerURL

# 获取 OIDC 颁发者 URL
az aks show \
  --name my-aks \
  --resource-group my-rg \
  --query oidcIssuerProfile.issuerURL \
  --output tsv

基本写法:启用 Azure Key Vault 密钥库 az aks update --name <集群名> --resource-group <组> --enable-keyvault-secrets-provider

# 启用 Key Vault Secrets Provider
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-keyvault-secrets-provider \
  --rotate-secret-after 30d

基本写法:分配 Azure 角色 az role assignment create --role <角色> --assignee <对象ID> --scope <范围>

# 为用户授予 AKS 集群用户角色
az role assignment create \
  --role "Azure Kubernetes Service Cluster User Role" \
  --assignee 00000000-0000-0000-0000-000000000000 \
  --scope /subscriptions/.../resourceGroups/my-rg/providers/Microsoft.ContainerService/managedClusters/my-aks

监控与诊断

基本写法:启用 Container Insights az aks update --name <集群名> --resource-group <组> --enable-azure-monitor

# 启用 Container Insights 监控
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-azure-monitor \
  --workspace-resource-id /subscriptions/.../providers/Microsoft.OperationalInsights/workspaces/my-law

基本写法:查看集群健康状态 az aks show --name <集群名> --resource-group <组> --query 'powerState'

# 查看集群电源状态
az aks show \
  --name my-aks \
  --resource-group my-rg \
  --query 'powerState'

基本写法:列出集群活动日志 az monitor activity-log list --resource-id <集群ID>

# 查看 AKS 集群活动日志
az monitor activity-log list \
  --resource-id /subscriptions/.../resourceGroups/my-rg/providers/Microsoft.ContainerService/managedClusters/my-aks \
  --max-events 50

基本写法:运行命令 az aks command invoke --name <集群名> --resource-group <组> --command <命令>

# 远程在集群中执行 kubectl 命令
az aks command invoke \
  --name my-aks \
  --resource-group my-rg \
  --command "kubectl get pods -A"

附加组件与功能

基本写法:启用 ACI 虚拟节点 az aks update --name <集群名> --resource-group <组> --enable-virtual-node

# 启用虚拟节点(Serverless 容器)
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-virtual-node \
  --subnet aci-subnet

基本写法:启用 GitOps az aks update --name <集群名> --resource-group <组> --enable-azure-policy

# 启用 Azure Policy 用于合规管理
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-azure-policy

基本写法:启用 Image Cleaner az aks update --name <集群名> --resource-group <组> --enable-image-cleaner

# 启用 Eraser 清理未使用镜像
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-image-cleaner \
  --image-cleaner-interval-hours 24

基本写法:启用节点快照 az aks update --name <集群名> --resource-group <组> --enable-node-snapshot

# 启用节点配置快照
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --enable-node-snapshot

集群停止与删除

基本写法:停止集群 az aks stop --name <集群名> --resource-group <组>

# 停止集群节省成本(保留状态)
az aks stop \
  --name my-aks \
  --resource-group my-rg

基本写法:启动集群 az aks start --name <集群名> --resource-group <组>

# 启动已停止的集群
az aks start \
  --name my-aks \
  --resource-group my-rg

基本写法:删除集群 az aks delete --name <集群名> --resource-group <组> --yes --no-wait

# 删除 AKS 集群
az aks delete \
  --name my-aks \
  --resource-group my-rg \
  --yes \
  --no-wait

基本写法:仅删除集群但不删除资源组 az aks delete --name <集群名> --resource-group <组>

# 交互式确认删除集群
az aks delete \
  --name my-aks \
  --resource-group my-rg

ACR 容器注册表集成

基本写法:创建 ACR az acr create --name <注册表名> --resource-group <组> --sku <SKU>

# 创建 Premium ACR
az acr create \
  --name myacr123 \
  --resource-group my-rg \
  --sku Premium

基本写法:附加 ACR 到 AKS az aks update --name <集群名> --resource-group <组> --attach-acr <ACR 名>

# 让 AKS 集群有权限拉取 ACR 镜像
az aks update \
  --name my-aks \
  --resource-group my-rg \
  --attach-acr myacr123

基本写法:登录 ACR az acr login --name <注册表名>

# 登录 ACR
az acr login --name myacr123

基本写法:列出仓库 az acr repository list --name <注册表名>

# 列出 ACR 中所有镜像仓库
az acr repository list --name myacr123 --output table