Day 13:容器服务ACK
本文基于阿里云ACP云计算工程师认证课程内容整理,涵盖容器与Docker技术原理、Kubernetes核心概念、容器服务ACK架构与操作配置,以及企业级DevOps最佳实践。
一、容器与Docker技术原理
云计算应用架构演进
单体应用 → SOA架构 → 微服务架构 → 云原生架构 (垂直竖井) (服务化) (轻量容器) (容器+K8s+DevOps)云原生时代三驾马车:容器、微服务、DevOps
为什么需要容器
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同方式运行:
- 一致性环境:开发、测试、生产环境完全一致
- 超快速启动:秒级启动,告别分钟级虚拟机
- 资源隔离:容器间相互隔离,互不影响
- 高效利用:不需要完整操作系统,容器密度远高于VM
Docker核心特性
| 特性 | 说明 |
|---|---|
| 标准化 | 一次构建,到处运行,环境一致 |
| 高性能 | 容器直接运行在宿主机内核,无需硬件虚拟化 |
| 轻量级 | 共享宿主机内核,秒级启动,资源利用率高 |
| 隔离性 | Linux Namespace实现进程级隔离 |
Docker vs 虚拟机
| 对比项 | Docker容器 | 虚拟机 |
|---|---|---|
| 启动时间 | 秒级 | 分钟级 |
| 资源占用 | 共享宿主机内核,低 | 独立操作系统,高 |
| 隔离级别 | 进程级 | 硬件级 |
| 镜像大小 | MB级 | GB级 |
| 交付内容 | 应用+依赖 | 完整OS+应用 |
Docker核心组件
Docker架构 ├── Docker Client(客户端)← 用户交互界面 ├── Docker Daemon(服务端)← 守护进程 ├── Image(镜像)← 只读模板 ├── Container(容器)← 镜像运行实例 └── Registry(镜像仓库)← 镜像存储分发Build、Ship、Run 流程:
- Build:构建镜像(Dockerfile → Image)
- Ship:推送到镜像仓库(Image → Registry)
- Run:从仓库拉取并运行(Registry → Container)
考试要点:Docker镜像是分层只读结构,容器是在镜像上加上一层可写层。Docker Hub是公共镜像仓库,阿里云ACR提供企业级私有镜像仓库。
二、Kubernetes核心概念与架构
Kubernetes概述
Kubernetes(K8s) 是Google开源的容器编排引擎,是容器编排领域的事实标准,核心功能:
- 服务发现与负载均衡:Service抽象统一入口
- 自动化容器装箱:Pod调度优化
- 存储编排:Volume挂载多种后端存储
- 自动恢复:自愈能力,容器故障自动重启
- 滚动更新与回滚:灰度发布支持
- 配置与密钥管理:ConfigMap、Secret
- 批量执行:Job、CronJob
- 水平伸缩:HPA自动扩缩容
Kubernetes核心对象
Pod
- 最小调度单位:Pod是K8s中能够创建和部署的最小单元
- 包含一个或多个容器:共享网络、存储资源
- 始终部署在同一节点:最小调度及资源单位
- 支持多种容器运行时,Docker是最流行的容器环境
Volume
- Pod中能被多个容器共享的磁盘目录
- 支持多种后端:本地存储、分布式存储(NAS/CPFS)、阿里云云盘/OSS
- Docker Volume与K8s Volume概念类似但更强大
Deployment
- 应用管理的最常见方式,定义一组Pod副本数、版本
- 通过控制器维持Pod数目,自动恢复失败的Pod
- 支持滚动更新、版本回滚
Service
- 为一组具有相同功能的容器应用提供统一入口地址
- 将请求负载分发到后端各个Pod
- 支持类型:ClusterIP、NodePort、LoadBalancer
Namespace
- 集群内部的逻辑隔离,包括鉴权、资源管理
- 每个资源属于一个Namespace,同一NS内资源名唯一
- 不同NS可重名,用于多团队/多环境隔离
Kubernetes集群架构
┌─────────────────────────────────────────────────┐ │ Kubernetes集群 │ │ ┌─────────────┐ ┌─────────────────┐ │ │ │ Master节点 │ │ Node节点 │ │ │ │ (管控面) │ │ (工作面) │ │ │ │ │ │ │ │ │ │ kube-apiserver │◄──────►│ kubelet │ │ │ │ kube-controller│ │ kube-proxy │ │ │ │ kube-scheduler │ │ Container Runtime│ │ │ │ etcd │ │ (Docker) │ │ │ └─────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────┘Master节点组件
| 组件 | 职责 |
|---|---|
| kube-apiserver | 集群HTTP REST API入口,集群控制唯一入口 |
| kube-controller-manager | 所有资源对象的自动化控制中心 |
| kube-scheduler | Pod资源对象的调度服务 |
| etcd | 分布式存储系统,保存集群所有状态 |
Node节点组件
| 组件 | 职责 |
|---|---|
| kubelet | 管理容器创建/删除/启停,与Master通信 |
| kube-proxy | 服务发现和负载均衡 |
| Container Runtime | 容器基础管理(接收kubelet指令) |
Kubernetes三大能力
| 能力 | 说明 |
|---|---|
| 调度 | 根据调度算法将Pod分配到最优节点 |
| 自愈 | 自动重启、重新调度、替换故障节点 |
| 弹性伸缩 | HPA基于CPU/内存自动扩缩Pod数量 |
考试要点:Pod是K8s最小调度单位,始终部署在同一节点。Deployment管理Pod副本,支持滚动更新。Service通过Label Selector将请求分发到后端Pod。
三、容器服务ACK架构与三种形态
ACK产品概述
容器服务ACK(Alibaba Cloud Container Service for Kubernetes) 提供高性能可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,是CNCF认证服务提供商。
| 优势 | 说明 |
|---|---|
| 安全可控 | 端到端安全保障,支持主子账号和企业权限管理 |
| 简单易用 | 一键创建集群,一站式应用生命周期管理 |
| 高效可靠 | 海量容器秒级启动,阿里超大规模实战验证 |
| 认证合规 | 全球首批通过Kubernetes一致性验证 |
ACK三种产品形态
| 形态 | 特点 | 管理成本 | 适用场景 |
|---|---|---|---|
| 专有版Kubernetes | 自行管理Master和Worker节点 | 高 | 需要细粒度控制基础设施 |
| 托管版Kubernetes | Master托管,Worker自管理 | 中 | 免运维Master,高可用需求 |
| Serverless Kubernetes | 无需管理任何节点 | 低 | 直接启动应用,按量付费 |
托管版Kubernetes(推荐):
- 托管Master节点,kube-apiserver多实例部署
- etcd三副本跨可用区部署,Region级高可用
- 托管组件包括kube-apiserver、kube-controller-manager、ack-scheduler和etcd
- ACK管控面持续监控,保障SLA,自动修复安全漏洞
ACK弹性伸缩体系
弹性伸缩分为两层,可分开使用也可结合:
调度层弹性 资源层弹性 (修改调度容量) (弹出ECS/ECI补充容量) ↑ ↑ └────── 容量状态 ──┘| 层次 | 组件 | 说明 |
|---|---|---|
| 调度层 | HPA(Horizontal Pod Autoscaler) | 根据负载自动调整Pod副本数 |
| 资源层 | 集群弹性伸缩(Cluster Autoscaler) | 扩容时自动弹出ECS/ECI |
ACK灰度发布
灰度发布(金丝雀发布):新旧版本同时部署,自定义新版本流量比重,渐进式全量上线,支持快速回滚。
考试要点:托管版ACK的Master节点由ACK托管,免费使用,仅收取Worker节点和其他资源费用。Serverless Kubernetes按容器实例使用量按秒计费。
四、ACK操作配置与企业级最佳实践
ACK使用全流程
创建集群 → 部署应用(Deployment)→ 创建服务(Service)→ 配置路由(Ingress)→ 弹性伸缩配置 → 监控运维创建Kubernetes托管版集群
- 选择托管版(推荐),配置集群规格
- 选择地域和可用区
- 配置VPC网络(使用容器网络插件CNI)
- 选择Kubernetes版本
- 配置Master和Worker节点规格
部署无状态工作负载(Deployment)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
创建路由(Ingress)公开应用
配置路由规则 → 绑定域名 → 配置TLS证书 → 测试访问自动创建SLB公开应用
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: LoadBalancer # 或 ClusterIP / NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
配置容器水平伸缩(HPA)
# 基于CPU使用率自动扩缩容
kubectl autoscale deployment nginx-deployment \
--cpu-percent=50 \
--min=2 \
--max=10
通过kubectl连接集群
# 配置集群凭证
kubectl config use-context <cluster-name>
# 查看集群节点
kubectl get nodes
# 查看Pod
kubectl get pods -n <namespace>
# 查看服务
kubectl get svc -n <namespace>
三大企业级应用场景
场景一:DevOps持续交付
代码提交 → Jenkins自动构建 → Docker镜像构建 → 推送到ACR → ACK自动部署 → 全流程自动化- 环境一致性:容器不可变架构,确保Dev/Test/Prod一致
- 快速反馈:每次集成或交付实时反馈
场景二:微服务架构
- 微服务拆分部署,每个服务独立迭代
- MSE(微服务引擎)提供治理能力
- 搭配:ACK + MSE + RDS + OSS
场景三:混合云架构
- 统一管理云上云下容器资源
- 业务高峰期云端快速扩容
- 云下开发测试,无缝发布到云上
ACK vs 自建Kubernetes
| 功能 | ACK | 自建K8s |
|---|---|---|
| 集群创建 | 控制台一键创建,支持GPU/裸金属 | 手动部署 |
| 集群管理 | 提供容器优化OS镜像 | 自行维护 |
| 网络 | 阿里云VPC/ENI高性能插件 | 社区网络插件 |
| 存储 | 云盘/NAS/CPFS/OSS,CSI/FlexVolume驱动 | 自行集成 |
| 升级 | 一键升级,支持组件生命周期管理 | 手动运维 |
| 监控 | Prometheus内置,大量Dashboard | 自行搭建 |
| SLA | Pro版提供赔付保障 | 无保障 |
ACP认证核心知识点速查
- 容器三特性:轻量级、可移植、自包含
- Docker核心:Image(只读模板)、Container(运行实例)、Registry(仓库)
- Kubernetes最小调度单位:Pod
- Deployment:管理无状态应用,维持Pod副本数,支持滚动更新
- Service类型:ClusterIP(内部)、NodePort(节点端口)、LoadBalancer(云负载均衡)
- ACK三种形态:专有版(自管Master)、托管版(托管Master)、Serverless(不管节点)
- 弹性伸缩:HPA(Pod副本)+ Cluster Autoscaler(节点扩容)
- 灰度发布:新旧版本共存,流量比例控制,快速回滚
- ACK托管Master优势:多可用区部署,etcd三副本,零运维
- kubectl:K8s标准CLI,通过API Server管理集群
典型实验流程(沙箱环境)
创建容器集群 → 部署无状态Deployment → 创建路由Ingress → SLB服务公开应用 → 配置HPA弹性伸缩 → 压测验证弹性 → Prometheus监控相关推荐: