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 流程:

  1. Build:构建镜像(Dockerfile → Image)
  2. Ship:推送到镜像仓库(Image → Registry)
  3. 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
  • 支持类型:ClusterIPNodePortLoadBalancer

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托管版集群

  1. 选择托管版(推荐),配置集群规格
  2. 选择地域和可用区
  3. 配置VPC网络(使用容器网络插件CNI)
  4. 选择Kubernetes版本
  5. 配置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认证核心知识点速查

  1. 容器三特性:轻量级、可移植、自包含
  2. Docker核心:Image(只读模板)、Container(运行实例)、Registry(仓库)
  3. Kubernetes最小调度单位:Pod
  4. Deployment:管理无状态应用,维持Pod副本数,支持滚动更新
  5. Service类型:ClusterIP(内部)、NodePort(节点端口)、LoadBalancer(云负载均衡)
  6. ACK三种形态:专有版(自管Master)、托管版(托管Master)、Serverless(不管节点)
  7. 弹性伸缩:HPA(Pod副本)+ Cluster Autoscaler(节点扩容)
  8. 灰度发布:新旧版本共存,流量比例控制,快速回滚
  9. ACK托管Master优势:多可用区部署,etcd三副本,零运维
  10. kubectl:K8s标准CLI,通过API Server管理集群

典型实验流程(沙箱环境)

创建容器集群 → 部署无状态Deployment → 创建路由Ingress → SLB服务公开应用 → 配置HPA弹性伸缩 → 压测验证弹性 → Prometheus监控

相关推荐