01 它是干嘛的
ACK 是阿里云托管的 Kubernetes 服务。Kubernetes 是管理容器集群的标准工具,负责调度、扩缩容、自愈与网络。ACK 把控制面托管起来,用户不必自己搭建和运维这套复杂系统,只需提交应用,剩下的调度与运维交给平台。
02 为什么会有它
服务器上装软件,为什么越装越乱
传统部署方式是把程序直接装在服务器上:装依赖、配环境、改配置。问题是每台机器都变得「独一无二」,谁也不敢轻易动。换一台机器部署,往往因为系统版本或依赖不一致而失败,开发者常抱怨「在我电脑上是好的」。
容器解决了这个问题:把程序和它需要的一切(依赖、配置)打包成一个标准盒子,这个盒子在任何机器上都以完全相同的方式运行。但随之而来一个新问题——盒子多了,谁来决定哪个盒子跑在哪台机器上?机器坏了盒子怎么办?流量涨了怎么多开几个盒子?
这就是「编排」要解决的问题。Kubernetes 是目前的事实标准:它像一个大调度中心,你只描述「我要这个盒子跑三份」,剩下的交给它——它挑机器、看健康、坏了重启、忙了扩容。但它本身安装维护复杂,ACK 的作用就是把这一层难活接过去,让你专注在应用本身。
03 它怎么工作
流程是「描述期望、调度、运行、自愈」:你提交一份声明式配置,说明想要几个副本,Kubernetes 持续对比「期望状态」与「实际状态」,并不断行动让两者一致。
一个应用是怎么被自动安排到集群上运行的
- 1① 打包成容器镜像
把程序和依赖打成镜像并推送到镜像仓库,相当于做好了标准盒子。
- 2② 提交期望配置
你写一份配置,声明「这个应用要跑 3 个副本、需要 1 核 2G 内存、暴露 80 端口」。
- 3③ 调度器分配机器
集群的调度器找到有足够资源的机器,把容器安排上去,并尽量把副本分散到不同机器,防止一起挂掉。
- 4④ 持续检查与自愈
系统定期探活,发现某个副本挂了就自动在新位置拉起一个,始终维持 3 个副本。
- 5⑤ 弹性扩缩容
负载升高时按规则自动增加副本、闲时自动减少;滚动更新时逐个替换旧版本,做到不停机发布。
04 谁在用它
把系统拆成多个小服务,各自打包成容器,由集群统一调度与扩缩容。
大促期间自动扩容、结束后自动缩容,资源随业务起伏,不必长期养着一堆空闲机器。
开发、测试、生产用同一套镜像与配置模板,减少「环境不一致」导致的问题。
Kubernetes 是跨云通用标准,ACK 支持把自建机房与云上集群统一纳管。
在集群里统一管理 GPU 资源,跑 AI 训练或定时批处理任务。
05 怎么用
门槛中等:需要理解容器与 Kubernetes 的基本概念,但无需自己搭建控制面。
- 01开通 ACK 集群,选择托管模式,指定节点规格与数量。
- 02准备容器镜像并推送到镜像仓库,配置好拉取凭证。
- 03编写 Deployment 与 Service 配置,声明副本数、资源与端口。
- 04用 kubectl 或控制台提交配置,观察容器实例是否正常启动。
- 05配置探活、滚动更新与弹性伸缩策略,接入监控与日志。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
spec:
replicas: 3 # 期望运行 3 个副本
selector:
matchLabels: { app: web-demo }
template:
metadata:
labels: { app: web-demo }
spec:
containers:
- name: web
image: registry.cn-hangzhou.aliyuncs.com/demo/web:1.0
ports:
- containerPort: 80
resources:
requests: { cpu: "500m", memory: "512Mi" }避坑提示
- !为容器设置资源请求与上限,否则某个应用可能吃光节点资源,拖垮同机器上的其他应用。
- !探活配置要符合真实业务,探得太严会导致正常启动的实例被反复杀掉。
- !镜像版本不要用 latest 这类浮动标签,用固定版本号,才能保证每次发布跑的是同一个东西。
06 关键概念
- 容器
- 把程序和依赖打包成的标准盒子,在任何机器上都以相同方式运行。
- Kubernetes(K8s)
- 管理容器集群的事实标准,负责调度、扩缩容与自愈。
- 声明式
- 你只说「想要什么结果」,系统持续实现它,而不是一步步下达操作命令。
- Pod
- Kubernetes 调度的最小单位,通常包含一个容器,是「副本」的实际载体。