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

apphuang2026年06月25日 11:32:195

一、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存储卷。

相关文章

最新阿里云代理返点政策详解

最新阿里云代理返点政策详解

1,阿里云代理返点介绍阿里云是全球领先的云计算服务提供商之一,代理阿里云产品可以获得一定的返点优惠。下面是阿里云代理返点的详细介绍。可以加我们微信:791201210 获取返点一、返点政策阿里云代理返…

如何获取到阿里云代理返点返佣

如何获取到阿里云代理返点返佣

在云计算领域,阿里云代理返点是一个备受关注的话题。很多人想知道如何获取到阿里云代理返点以及阿里云代理返点的比例是多少。本文将从不同角度进行分析,为大家解答这些问题。加我微信:791201210首先,让…

2024年阿里云返点返佣政策详解

2024年阿里云返点返佣政策详解

一,阿里云代理能给到用户多少返点阿里云代理能给到用户的返点数额,因不同的代理商政策、用户消费额以及合作模式等因素而有所不同。一些代理商可能会提供高达20%~30%的返点,但具体的返点比例还需要用户与代…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…