阿里云容器服务ACK配置Kubernetes集群与应用部署完全指南

简介: 本文系统讲解阿里云容器服务ACK的集群配置与应用部署全流程。首先解析ACK托管版、专有版与Serverless版的架构差异与选型策略,帮助用户根据业务场景做出合理决策。随后详细讲解通过控制台创建ACK托管集群的完整步骤,涵盖网络规划(Terway与Flannel对比、CIDR配置)、节点池管理等关键环节。在应用部署层面,深入介绍Deployment、StatefulSet等核心工作负载的YAML编排实践,并通过Service与ALB Ingress实现服务暴露与七层负载均衡。存储管理部分系统讲解基于CSI的云盘动态存储卷与ossfs 2.0的使用方法。可观测性方面,详解Logtail日志采集与

一、ACK集群类型解析与选型决策

在开始配置阿里云容器服务Kubernetes版(ACK)之前,首先需要理解ACK提供的不同集群类型及其适用场景。ACK目前主要提供三种集群形态:ACK托管集群、ACK专有集群和ACK Serverless集群。

1.1 ACK托管集群

ACK托管集群的控制面(包括kube-apiserver、kube-controller-manager、kube-scheduler和etcd等核心组件)完全由阿里云托管,用户只需负责Worker节点的创建与运维。托管集群又细分为Pro版和基础版:

  • Pro版:适用于企业生产与测试环境,提供99.95%的区域级SLA保障。单集群默认支持最大5000个Worker节点并可申请提高配额。Pro版收取集群管理费用,但相比自行维护Master节点的专有集群,整体TCO通常更低。
  • 基础版:仅供个人学习与测试,单账号最多创建2个集群,单集群仅支持10个Worker节点且不支持提高配额。基础版不收取集群管理费用。

每一个托管集群的管控面包含至少2个kube-apiserver实例和3个etcd实例,并部署在不同的可用区以提供可用区级别的高可用性。这种设计显著降低了用户的运维负担,让团队可以更专注于业务应用的开发和部署。

1.2 ACK专有集群

ACK专有集群的控制面需要用户自行创建并运维。根据官方公告,ACK专有集群已于2024年8月21日起停止新建(云盒场景除外),官方推荐在生产环境中使用ACK托管集群Pro版。

1.3 ACK Serverless集群

ACK Serverless集群完全基于弹性容器实例(ECI)运行,用户无需管理底层ECS服务器,只需提供打包好的镜像即可运行容器。该集群类型适用于对资源弹性要求极高、希望免于节点运维的场景。

1.4 选型建议

对于大多数企业的生产环境,ACK托管集群Pro版是最佳选择。它具有以下优势:提供了可赔付的SLA保障;具备etcd高频冷热备机制和异地容灾能力;支持从基础版或专有集群热迁移至Pro版。对于测试或个人学习场景,可选择ACK托管集群基础版。对于对资源弹性要求极高、不想管理节点的场景,ACK Serverless集群是理想选择。

需要先登录阿里云控制台,点击:阿里云控制台

二、ACK托管集群创建与初始化配置

选定集群类型后,接下来进入集群创建阶段。ACK托管集群支持通过多种方式创建,包括控制台、API、Terraform、SDK以及CLI等。

2.1 控制台创建流程

在阿里云控制台中进入"容器服务Kubernetes版",点击"创建集群",选择"ACK托管集群"。创建过程中需要配置以下关键参数:

  • 集群名称:自定义命名,创建后仍可修改。
  • 集群规格:选择Pro版或基础版,生产环境务必选择Pro版。
  • 地域和可用区:地域一经创建不可修改。建议选择与用户和业务资源部署地域较近的地域以降低网络延迟,同时配置至少两个不同可用区以保证高可用。
  • Kubernetes版本:仅支持创建最近三个次要版本,建议使用当前最新版本以获得更好的稳定性、性能和安全性更新。
  • 自动升级:开启后可在维护窗口期内自动升级集群控制面和节点池,有效降低版本维护负担。
  • 专有网络(VPC)和交换机:可选择自动创建或使用已有VPC。为保障高可用,建议选择2个及以上不同可用区。

2.2 网络插件选择:Terway与Flannel

ACK支持两种网络插件:Terway和Flannel。

  • Terway:是阿里云自研的网络插件,基于阿里云VPC实现容器网络。Pod直接获取VPC中的IP地址,实现与云上其他服务(如RDS、Redis)的高性能、低延迟互通。Terway在网络性能和功能上更优,推荐在生产环境中使用。
  • Flannel:是社区标准的Overlay网络方案,配置简单但性能相对Terway略低。适用于对网络性能要求不高的场景。

网络配置定义了集群的底层通信架构,部分选项在创建后无法修改,请谨慎规划。

2.3 使用Terraform创建集群

对于基础设施即代码(IaC)实践,ACK支持使用Terraform创建托管集群。以下是一个创建ACK托管集群的Terraform配置示例:

# main.tf
provider "alicloud" {
  region = "cn-hangzhou"
}
resource "alicloud_cs_managed_kubernetes" "default" {
  name               = "my-ack-cluster"
  cluster_spec       = "ack.pro.small"
  kubernetes_version = "1.28"
  vswitch_ids        = ["vsw-xxx1", "vsw-xxx2"]
  
  worker_instance_types = ["ecs.g6.large"]
  worker_number         = 3
  worker_system_disk_size = 40
  
  pod_cidr     = "172.20.0.0/16"
  service_cidr = "172.21.0.0/20"
  
  enable_ssh = false
  
  addons {
    name = "terway"
  }
  addons {
    name = "csi-plugin"
  }
  addons {
    name = "logtail-ds"
  }
}

ACK控制台还可以从集群设置生成Terraform配置片段,无需从头编写配置。

三、节点池管理与配置

节点池是具有相同属性(例如实例规格、操作系统、标签和污点等)的一组节点的逻辑集合。一个集群中可以创建多个不同配置和类型的节点池。

3.1 节点池的核心概念

通过节点池,可实现节点的批量创建、扩容、缩容和升级,简化集群运维。核心应用场景包括:

  • 按业务类型分组:如将运行Web应用的节点归为"Web节点池",运行数据服务的节点归为"数据节点池"。
  • 按资源规格分组:如高性能节点池(用于计算密集型业务)、通用节点池(用于普通业务)。
  • 版本管理:统一升级节点的Kubernetes版本或操作系统版本,避免节点配置不一致。

3.2 节点池配置项

节点池的配置包含节点的属性,例如节点实例规格、计费类型、可用性区域(vSwitch)、操作系统镜像、CPU架构、标签和污点等。创建节点池时需关注以下要点:

  • 实例规格:根据业务负载选择合适的ECS实例规格。对于通用型工作负载,推荐使用ecs.g6或ecs.g7系列。
  • 计费类型:可选择按量付费或包年包月。对于弹性需求较大的场景,推荐使用按量付费+弹性伸缩组合。
  • 操作系统:ACK支持Alibaba Cloud Linux、CentOS、Windows等多种操作系统镜像。
  • 节点标签与污点:通过标签实现Pod调度到指定节点池,通过污点实现节点专用(如GPU节点只调度GPU工作负载)。

3.3 节点池弹性伸缩配置

ACK节点池底层依赖ESS(弹性伸缩服务)弹出节点。配置节点池弹性伸缩的步骤如下:

  1. 在集群维度开启节点自动伸缩功能。
  2. 将指定节点池的扩缩容模式配置为自动模式。
  3. 配置伸缩的上下限、扩容策略等参数。

ACK还提供了ack-autoscaling-placeholder组件,通过少量的资源冗余方式实现容器秒级伸缩。

四、Kubernetes核心工作负载部署

在ACK集群中部署应用,主要通过Kubernetes原生工作负载对象来定义和管理容器化应用。

4.1 Deployment:无状态工作负载

Deployment是最常用的资源对象,适用于无状态应用(如Web服务、API服务)。它提供副本管理、自动恢复和滚动升级能力。以下是一个部署Nginx应用的Deployment YAML示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 512Mi
        livenessProbe:
          httpGet:
            path: /healthz
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
      restartPolicy: Always

4.2 StatefulSet:有状态工作负载

StatefulSet适用于有状态应用(如数据库、分布式缓存),每个Pod有唯一标识(名称、网络标识),支持稳定的存储挂载和有序部署/更新。以下是一个部署MySQL的StatefulSet示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: default
spec:
  serviceName: mysql-service
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: alicloud-disk-ssd
      resources:
        requests:
          storage: 20Gi

4.3 配置管理:ConfigMap与Secret

将应用配置从镜像中解耦是云原生最佳实践。使用ConfigMap存储通用配置,使用Secret存储敏感信息。

ConfigMap示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
  namespace: default
data:
  app.properties: |
    server.port=8080
    log.level=INFO
  database.host: "mysql-service.default.svc.cluster.local"

Secret示例(敏感信息需Base64编码或使用stringData):

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  namespace: default
type: Opaque
data:
  password: Um9vdDEyMzQ1Ng==  # Base64编码的"Root123456"

五、服务暴露与负载均衡

5.1 Service:服务发现与内部负载均衡

Service为一组Pod提供稳定的网络标识和内部负载均衡。通过ClusterIP类型服务实现服务发现。以下是一个Service示例:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: default
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

5.2 Ingress:七层负载均衡与流量管理

Ingress作为服务对外暴露的访问入口,提供七层负载均衡能力。ACK支持多种Ingress实现,包括Nginx Ingress和ALB Ingress。

ALB Ingress基于阿里云应用型负载均衡ALB之上提供更为强大的Ingress流量管理方式,兼容Nginx Ingress,具备处理复杂业务路由和认证自动探索的能力。以下是一个ALB Ingress配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/scheme: internet
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
spec:
  ingressClassName: alb
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

六、存储管理

ACK基于CSI(Container Storage Interface)插件提供多种存储方案。

6.1 云盘动态存储卷

基于动态存储卷机制,可为每个应用副本自动创建并挂载一个独立的云盘,适用于数据库、中间件等对I/O和延迟要求较高的场景。以下是通过StorageClass动态创建云盘存储卷的示例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-ssd
provisioner: diskplugin.csi.alibabacloud.com
parameters:
  type: cloud_ssd
  regionId: cn-hangzhou
  zoneId: cn-hangzhou-g
reclaimPolicy: Delete
volumeBindingMode: Immediate

创建PVC(PersistentVolumeClaim)自动绑定PV:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: disk-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: alicloud-disk-ssd
  resources:
    requests:
      storage: 20Gi

6.2 ossfs 2.0动态存储卷

对于需要在多Pod间共享数据的应用,可通过动态PV将OSS Bucket挂载为ossfs 2.0存储卷。该方式通过StorageClass作为模板自动创建并绑定PV。挂载时支持访问密钥(AccessKey)和RRSA两种鉴权方式。

七、可观测性体系建设

Kubernetes可观测性体系包含监控和日志两部分。阿里云ACK提供了一站式可观测性产品。

7.1 日志采集:Logtail与SLS集成

ACK集群支持将集群控制面组件日志和容器日志收集到SLS Project中。Logtail作为日志采集组件,可采集容器标准输出和文件日志,并投递到SLS进行检索与分析。

在集群创建时或之后,可以一键安装日志服务SLS组件。配置日志采集的典型步骤如下:

  1. 在ACK控制台进入集群详情页。
  2. 点击"日志与监控"页签。
  3. 配置日志采集规则,指定采集的容器或日志文件路径。
  4. 选择目标SLS Project和Logstore。

7.2 监控告警:托管Prometheus

ACK集成了阿里云Prometheus监控服务,提供容器监控指标的采集、存储和展示。通过托管Prometheus,您可以:

  • 查看集群、节点、Pod的多维度监控大盘。
  • 设置告警规则,实现异常自动通知。
  • 对接ARMS实现应用性能链路追踪。

在集群创建时或之后,可以一键安装ack-arms-prometheus组件。

八、安全管理最佳实践

ACK使用两层授权模型:RAM授权和RBAC授权。

8.1 RAM授权

RAM(资源访问管理)控制对ACK API和云资源的访问权限。建议遵循最小权限原则,为不同角色授予不同的系统策略。

  • 集群管理员:授予AliyunCSFullAccess策略。
  • 集群只读用户:授予AliyunCSReadOnlyAccess策略。
  • 应用运维人员:授予特定集群的操作权限,配合RBAC精细化控制。

8.2 RBAC授权

RBAC(基于角色的访问控制)对ACK集群内的Kubernetes资源进行权限控制。可通过创建Role和ClusterRole,并通过RoleBinding和ClusterRoleBinding绑定到用户或ServiceAccount。

以下是一个创建只读权限Role的示例:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

8.3 Worker RAM角色安全

ACK托管集群会自动创建一个所有节点共享的默认Worker RAM角色。当通过默认的Worker RAM角色授权时,权限会共享给集群内所有的节点,可能存在非预期的权限扩散风险。建议在创建节点池时为其指定一个自定义的Worker RAM角色,实现节点池级别的精细化权限控制。

九、弹性伸缩与成本优化

9.1 集群节点弹性伸缩

ACK支持集群自动伸缩(Cluster Autoscaler),根据Pod调度情况自动调整节点数量。配置要点:

  • 在集群层面开启节点自动伸缩功能。
  • 为节点池配置自动扩缩容策略,设置最小和最大节点数。
  • 使用ack-autoscaling-placeholder组件实现容器秒级伸缩。

9.2 Pod水平自动伸缩(HPA)

HPA(Horizontal Pod Autoscaler)根据CPU利用率或自定义指标自动调整Pod副本数。以下是一个HPA配置示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

9.3 成本优化建议

  • 合理设置资源请求与限制:为每个容器设置requests和limits,避免资源浪费和节点雪崩。
  • 使用抢占式实例:对非关键工作负载使用抢占式实例,大幅降低成本。
  • 混合计费模式:核心业务使用包年包月实例,弹性业务使用按量付费+伸缩组。
  • 存储分层:热数据使用SSD云盘,冷数据使用OSS低频存储。
  • 镜像优化:使用多阶段构建减小镜像体积,加快拉取速度。

十、生产环境最佳实践总结

10.1 健康检查配置

必须为每个容器配置健康检查探针:

  • livenessProbe:判断容器是否存活,不存活则重启。
  • readinessProbe:判断容器是否就绪,不就绪则不接收流量。

10.2 滚动更新策略

在Deployment中配置滚动更新策略,实现零宕机发布:

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%

10.3 多可用区部署

将节点池分布到至少两个可用区,实现应用级高可用。结合Pod反亲和性(anti-affinity)确保Pod分散部署在不同可用区的节点上。

10.4 镜像拉取加速

使用阿里云容器镜像服务ACR的企业版,开启镜像加速功能,大幅缩短Pod启动时间。同时配置免密拉取组件,避免在集群中存储镜像仓库凭证。


常见问题解答

问1:ACK托管集群和自建Kubernetes集群有什么区别?

答:ACK托管集群的控制面(API Server、Scheduler、Controller Manager、etcd等)由阿里云全托管,用户无需关心Master节点的高可用、升级和安全补丁。自建集群需要自行运维所有控制面组件,工作量大且不产生业务价值。ACK托管集群Pro版还提供99.95%的SLA保障。

问2:创建ACK集群时,Terway和Flannel网络插件如何选择?

答:Terway是阿里云自研网络插件,Pod直接获取VPC IP,与云上RDS、Redis等服务互通性能更好。Flannel是社区标准Overlay方案,配置简单但性能略低。生产环境推荐使用Terway。

问3:如何将ACK集群中的应用暴露到公网?

答:有两种主要方式:一是创建类型为LoadBalancer的Service,自动创建SLB实例暴露服务;二是创建Ingress资源(Nginx Ingress或ALB Ingress),通过七层负载均衡和域名路由暴露多个服务。生产环境推荐使用ALB Ingress,功能更强大。

问4:ACK中如何实现Pod的自动扩缩容?

答:Pod层面使用HPA(Horizontal Pod Autoscaler)根据CPU利用率或自定义指标自动调整副本数。节点层面使用Cluster Autoscaler根据Pending Pod自动扩缩节点。两者配合使用可实现完整的弹性伸缩能力。

问5:ACK集群如何保障安全性?

答:ACK采用两层安全模型——RAM授权控制云资源访问权限,RBAC授权控制集群内Kubernetes资源访问权限。建议遵循最小权限原则,为不同角色授予最小必要权限。同时为节点池配置自定义Worker RAM角色,避免权限扩散风险。

问6:ACK集群的存储方案有哪些推荐?

答:对于需要高IOPS和低延迟的有状态应用(如数据库),推荐使用云盘动态存储卷(StorageClass + PVC)。对于需要在多Pod间共享数据的场景(如静态文件、日志),推荐使用ossfs 2.0挂载OSS Bucket。对于大容量共享文件存储,可使用NAS存储卷。

相关文章
|
3天前
|
云安全 人工智能 运维
阿里云SecOps Agent,全新安全跨产品执行体验
自然语言驱动 云安全中心/WAF/CFW/ 等多款安全产品联动
1592 2
|
3天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
557 3
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
14天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
15天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
898 11
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
2天前
|
人工智能 监控 前端开发
Electron 监控:让桌面 Agent 监控触手可及
一行代码实现Electron桌面端全景监控,自动还原崩溃现场、预警内存泄漏、全链路追踪、 SSE流式响应与交互埋点,让 AI 助手运行状态清晰可见,助力快速恢复稳定与流畅。
177 125
|
2天前
|
消息中间件 人工智能 Kafka
AI 时代,实时入湖正在告别 ETL:从 Kafka 到 Iceberg 的架构减法
本文围绕“零 ETL”这一趋势,讨论流数据入湖为什么需要做架构减法,并结合 Kafka × Table Bucket 的实践,分析一种将通用入湖能力前移到消息与表存储链路中的方案,如何在降低复杂度的同时,兼顾实时性、一致性、Schema 演进、CDC 语义与开放生态兼容。
182 121
|
7天前
|
缓存 人工智能 运维
GLM 5.2自托管全流程实战:硬件选型、vLLM/SGLang部署与成本盈亏测算
2026年智谱发布GLM 5.2超大混合专家模型,区别于以往仅开放API的闭源大模型,该模型权重以MIT开源协议对外发布,企业与开发者可完整下载、本地审计、私有化部署,实现数据不出环境、自定义微调、自主调度推理资源。GLM 5.2拥有753B总参数,原生支持百万级上下文窗口,在代码生成、长文档推理、数学逻辑等多项基准测试中对标国际顶尖商用模型,是首款可完整自托管的前沿代码向大模型。
611 0
|
15天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
973 8