阿里云容器服务Kubernetes版(ACK)作为阿里云提供的企业级Kubernetes容器服务,凭借其高可用性、弹性伸缩能力和与阿里云生态的深度集成,成为众多企业上云的首选。本文将从阿里云国际账户开户开始,详细介绍ACK集群的创建流程、集群配置优化,以及如何使用Helm Chart进行应用部署和管理。
一、阿里云国际账户开户与准备
1. 开户前准备
在注册阿里云国际账户之前,需要准备以下材料:
- 企业邮箱:推荐使用企业域名邮箱,避免使用个人免费邮箱
- 海外手机号:手机号归属国必须与注册时选择的国家/地区一致
- 企业认证材料:企业营业执照扫描件、法人身份证明文件
- 支付方式:国际信用卡(Visa/Mastercard)、PayPal或银行电汇账户
重要提示:阿里云国际版的国家/地区一旦选定将无法更改,它会直接影响可用区域、计费币种和税务规则,因此请务必根据企业实际业务需求谨慎选择。
2. 账户注册流程
- 访问阿里云国际站官方网站(www.alibabacloud.com)
- 点击右上角的"Sign Up"按钮开始注册
- 选择账户类型:个人(Individual)或企业(Business)
- 输入企业邮箱地址并设置安全密码
- 完成邮箱验证和手机号验证
- 阅读并同意服务条款和隐私政策
- 提交注册信息完成基础账户创建
3. 实名认证与支付配置
- 实名认证:
- 企业账户需要上传营业执照和法人身份证明文件
- 审核时间通常为1-2个工作日
- 完成实名认证后才能使用完整的云服务功能
- 支付方式绑定:
| 支付方式 |
最低充值 |
到账时间 |
适用场景 |
| 信用卡 (Visa/Mastercard) |
$1 |
即时 |
小额测试、自动扣费 |
| PayPal |
$5 |
即时 |
个人用户、便捷支付 |
| 银行电汇 |
$100 |
1-3 工作日 |
大额企业采购 |
- 资源配额申请:
- 新账户默认有较低的资源配额
- 可以通过工单系统申请提高ECS、VPC等资源的配额
- 建议提前申请,避免影响业务部署进度
4. 服务开通与权限配置
- 登录阿里云国际版控制台
- 搜索并进入"容器服务Kubernetes版"(ACK)控制台
- 首次使用时需要开通ACK服务
- 创建RAM用户并分配必要的权限:
- AliyunACKFullAccess:ACK服务完全访问权限
- AliyunVPCFullAccess:VPC网络管理权限
- AliyunSLBFullAccess:负载均衡管理权限
- AliyunECSFullAccess:云服务器管理权限
最佳实践:遵循最小权限原则,为不同角色的用户分配不同的权限,避免使用主账户进行日常操作。
二、ACK集群创建前的规划
1. 集群类型选择
阿里云ACK提供多种集群类型,适用于不同的业务场景:
| 集群类型 |
控制面管理 |
适用场景 |
计费模式 |
| ACK 托管集群 Pro 版 |
阿里云托管 |
生产环境、高可用性要求高 |
收取集群管理费 + 资源费 |
| ACK 托管集群基础版 |
阿里云托管 |
开发测试环境 |
仅收取资源费 |
| ACK 专有集群 |
用户自行管理 |
特殊定制需求 |
仅收取资源费 |
| ACK Serverless 集群 |
阿里云托管 |
突发流量、CI/CD、定时任务 |
按 Pod 资源使用量计费 |
推荐选择:生产环境优先使用ACK托管集群Pro版,它提供99.95%的SLA保障、更高的控制面性能和更丰富的企业级功能。开发测试环境可以使用ACK Serverless集群,无需维护节点,降低成本。
2. 地域与可用区选择
阿里云国际版在全球拥有多个地域和可用区,选择时需要考虑以下因素:
- 业务覆盖范围:选择离用户最近的地域,降低网络延迟
- 合规要求:某些行业有数据本地化的要求
- 服务可用性:选择多可用区部署,提高集群的容灾能力
- 价格因素:不同地域的资源价格可能存在差异
推荐地域:对于面向亚太地区的业务,推荐选择中国香港、新加坡或日本东京地域;对于面向欧洲的业务,推荐选择德国法兰克福或英国伦敦地域;对于面向北美的业务,推荐选择美国弗吉尼亚或硅谷地域。
3. 网络规划
网络规划是ACK集群创建中最重要的环节之一,直接影响集群的性能和可扩展性:
- VPC规划:
- 为每个集群创建独立的VPC,避免与其他业务混用
- VPC网段建议使用10.0.0.0/8、172.16.0.0/12或192.168.0.0/16中的大网段
- 预留足够的IP地址空间,为未来的扩展做准备
- 虚拟交换机规划:
- 在每个可用区创建至少一个虚拟交换机
- 虚拟交换机网段不能重叠
- 建议每个虚拟交换机使用/24网段,可容纳256个IP地址
- 容器网络规划:
- Terway网络插件:阿里云自研的高性能网络插件,支持弹性网卡和ENI Trunking,推荐在生产环境使用
- Flannel网络插件:开源的简单网络插件,适用于对网络性能要求不高的场景
- Pod CIDR:建议使用172.20.0.0/16网段
- Service CIDR:建议使用172.21.0.0/20网段
4. 节点规格与数量规划
- 节点规格选择:
- 通用型:适用于大多数Web应用和微服务
- 计算型:适用于CPU密集型应用
- 内存型:适用于内存密集型应用
- GPU型:适用于AI训练和推理应用
- 节点数量规划:
- 生产环境:至少3个Worker节点,分布在不同的可用区
- 开发测试环境:至少1个Worker节点
- 考虑高可用性和故障转移需求
- 预留一定的资源余量,应对流量波动
三、ACK集群创建详细步骤
1. 进入ACK控制台
- 登录阿里云国际版控制台
- 在顶部导航栏搜索"容器服务Kubernetes版"
- 进入ACK控制台后,在左侧导航栏选择"集群列表"
- 点击右上角的"创建Kubernetes集群"按钮
2. 集群基本配置
在"集群配置"页面,填写以下信息:
- 集群名称:输入一个有意义的名称,如"prod-ack-hk"
- 集群规格:选择"ACK托管集群Pro版"
- Kubernetes版本:选择最新的稳定版本,如1.32.1-aliyun.1
- 地域:选择之前规划的地域,如"中国香港"
- 可用区:选择多个可用区以实现高可用
- 专有网络:选择之前创建的VPC
- 虚拟交换机:为每个可用区选择对应的虚拟交换机
- 网络插件:选择"Terway"并开启"ENI Trunking"功能
- Pod CIDR:输入规划好的Pod网段,如172.20.0.0/16
- Service CIDR:输入规划好的Service网段,如172.21.0.0/20
- SNAT:开启"为专有网络配置SNAT规则",使集群内节点可以访问公网
- API Server公网访问:根据需要开启,建议仅在必要时开启并配置白名单
- 删除保护:开启"集群删除保护",防止误删除集群
- 代理模式:选择"IPVS",提供更高的性能和可扩展性
- 时区:选择"Asia/Shanghai"或业务所在时区
3. 节点池配置
点击"下一步:节点池配置",配置Worker节点:
- 节点池名称:输入节点池名称,如"default-nodepool"
- 节点数量:输入初始节点数量,如3
- 实例规格:选择合适的ECS实例规格,如ecs.g9i.large
- 操作系统:选择"Alibaba Cloud Linux 3",它是阿里云优化的Linux发行版
- 系统盘:选择ESSD云盘,容量建议至少40GB
- 数据盘:根据需要添加数据盘,用于存储容器镜像和应用数据
- 登录方式:选择"密钥对",比密码更安全
- 公网IP:关闭"分配公网IP",通过NAT网关访问公网
- 安全组:选择默认安全组或创建新的安全组
4. 组件配置
点击"下一步:组件配置",配置集群组件:
- 基础组件:保持默认配置,包括CoreDNS、kube-proxy等
- 存储组件:开启"CSI存储插件",支持阿里云云盘、NAS和OSS存储
- 网络组件:开启"Terway网络插件"和"IPVS代理模式"
- 监控组件:开启"容器监控Prometheus版",选择基础版或Pro版
- 日志组件:开启"日志服务SLS",收集集群和应用日志
- Ingress组件:开启"Nginx Ingress Controller",用于外部流量接入
5. 确认配置并创建集群
- 点击"下一步:确认配置"
- 检查所有配置信息是否正确
- 勾选"我已阅读并同意《容器服务Kubernetes版服务条款》"
- 点击"创建集群"按钮
- 等待集群创建完成,通常需要10-15分钟
重要提示:集群创建过程中不要关闭页面或进行其他操作,以免导致创建失败。
四、集群配置与优化
1. 集群连接配置
集群创建完成后,需要配置kubectl工具以连接到集群:
- 在ACK控制台的集群列表页面,点击目标集群名称
- 在集群详情页面,点击右上角的"连接信息"按钮
- 复制"公网访问"或"内网访问"的kubeconfig内容
- 将内容保存到本地的~/.kube/config文件中
- 测试连接:
kubectl get nodes
如果能够看到集群中的节点信息,说明连接成功。
2. 命名空间规划
命名空间是Kubernetes中用于隔离资源的逻辑单元,建议按照以下原则进行规划:
- 按环境划分:dev、test、prod
- 按业务划分:order、payment、user
- 按团队划分:frontend、backend、data
创建命名空间的命令:
kubectl create namespace dev
kubectl create namespace test
kubectl create namespace prod
3. 资源配额与限制
为了防止某个应用占用过多的集群资源,影响其他应用的正常运行,需要为每个命名空间设置资源配额:
创建资源配额文件resource-quota.yaml:
apiVersion: v1
kind: ResourceQuota
metadata:
name: prod-quota
namespace: prod
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
persistentvolumeclaims: "10"
services.loadbalancers: "5"
应用资源配额:
kubectl apply -f resource-quota.yaml
4. 集群安全配置
- RBAC权限控制:
- 为每个用户或服务账户创建角色和角色绑定
- 遵循最小权限原则
- 避免使用cluster-admin权限
- 网络策略:
- 配置网络策略,限制Pod之间的通信
- 只允许必要的网络流量通过
- 镜像安全:
- 使用私有镜像仓库,如阿里云容器镜像服务ACR
- 对镜像进行安全扫描,发现并修复漏洞
- 禁止使用未经验证的公共镜像
5. 弹性伸缩配置
阿里云ACK提供多种弹性伸缩方式,以应对业务流量的波动:
- 节点自动伸缩:
- 开启集群自动伸缩功能
- 设置最小和最大节点数
- 根据CPU和内存使用率自动调整节点数量
- Pod水平自动伸缩(HPA):
- 根据CPU、内存或自定义指标自动调整Pod副本数
- 示例配置:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: prod
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 2
maxReplicas: 10
metrics:
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- AHPA智能伸缩:
- 阿里云提供的智能伸缩组件
- 基于机器学习预测未来的流量变化
- 提前扩容,避免流量高峰时的性能问题
五、Helm Chart应用部署
1. Helm简介
Helm是Kubernetes的包管理工具,它将一组相关的Kubernetes资源打包成一个Chart,简化了应用的部署、升级和管理。Helm的主要概念包括:
- Chart:一个Helm包,包含运行一个应用所需的所有Kubernetes资源定义
- Release:一个Chart在Kubernetes集群中运行的实例
- Repository:存储和分享Chart的仓库
2. Helm安装与配置
# Linux系统
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# macOS系统
brew install helm
# Windows系统
choco install kubernetes-helm
# 添加阿里云官方仓库
helm repo add aliyun https://kubernetes-charts.aliyun.com/
# 添加Bitnami仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 更新仓库
helm repo update
helm version
3. 使用Helm部署应用
以部署Nginx为例,介绍如何使用Helm部署应用:
helm search repo nginx
helm show chart bitnami/nginx
helm show values bitnami/nginx
helm install my-nginx bitnami/nginx --namespace prod --create-namespace
helm list --namespace prod
kubectl get pods --namespace prod
kubectl get services --namespace prod
- 访问应用:
- 获取Service的外部IP地址
- 在浏览器中访问该IP地址,应该能够看到Nginx的欢迎页面
4. 自定义Chart配置
可以通过values.yaml文件自定义Chart的配置:
helm show values bitnami/nginx > values.yaml
replicaCount: 3
service:
type: LoadBalancer
port: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
host: nginx.example.com
paths:
path: /
pathType: ImplementationSpecific
helm install my-nginx bitnami/nginx --namespace prod -f values.yaml
5. 应用升级与回滚
# 升级到最新版本
helm upgrade my-nginx bitnami/nginx --namespace prod
# 使用新的配置文件升级
helm upgrade my-nginx bitnami/nginx --namespace prod -f new-values.yaml
helm history my-nginx --namespace prod
helm rollback my-nginx --namespace prod
# 回滚到指定版本
helm rollback my-nginx 1 --namespace prod
helm uninstall my-nginx --namespace prod
6. 创建自定义Helm Chart
对于企业内部的应用,可以创建自定义的Helm Chart:
helm create my-app
my-app/
├── Chart.yaml # Chart的元数据信息
├── values.yaml # 默认配置值
├── templates/ # Kubernetes资源模板文件
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ └── _helpers.tpl # 模板辅助函数
└── charts/ # 依赖的Chart
- 编辑模板文件:
根据应用的实际需求,编辑templates目录下的YAML文件,使用Go模板语法引用values.yaml中的值。
- 打包Chart:
helm package my-app
将打包好的Chart上传到阿里云ACR企业版或其他私有Chart仓库,供团队内部使用。
六、实战案例:部署WordPress应用
1. 环境准备
- 确保已经创建了ACK集群并配置好了kubectl
- 确保已经安装了Helm客户端
- 创建一个命名空间:
kubectl create namespace wordpress
2. 部署MySQL数据库
WordPress需要使用MySQL数据库存储数据,我们使用Bitnami的MySQL Chart:
auth:
rootPassword: "your-root-password"
database: "wordpress"
username: "wordpress"
password: "your-wordpress-password"
primary:
persistence:
enabled: true
size: 10Gi
storageClass: "alicloud-disk-ssd"
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi
helm install mysql bitnami/mysql --namespace wordpress -f mysql-values.yaml
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=mysql --namespace wordpress --timeout=300s
3. 部署WordPress
- 创建wordpress-values.yaml文件:
wordpressUsername: "admin"
wordpressPassword: "your-admin-password"
wordpressEmail: "admin@example.com"
wordpressBlogName: "My WordPress Blog"
existingDatabase:
host: "mysql.wordpress.svc.cluster.local"
port: 3306
user: "wordpress"
password: "your-wordpress-password"
database: "wordpress"
service:
type: LoadBalancer
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-prod"
hosts:
host: blog.example.com
paths:
path: /
pathType: ImplementationSpecific
tls:
secretName: blog-tls
hosts:
blog.example.com
persistence:
enabled: true
size: 20Gi
storageClass: "alicloud-disk-ssd"
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi
replicaCount: 2
helm install wordpress bitnami/wordpress --namespace wordpress -f wordpress-values.yaml
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=wordpress --namespace wordpress --timeout=300s
4. 访问WordPress
kubectl get ingress --namespace wordpress
- 配置DNS解析,将blog.example.com指向Ingress的外部IP地址
- 在浏览器中访问https://blog.example.com,应该能够看到WordPress的首页
- 使用admin账号登录WordPress后台,开始创建内容
七、常见问题与最佳实践
1. 常见问题
- 集群创建失败:
- 检查账户余额是否充足
- 检查资源配额是否足够
- 检查VPC和虚拟交换机配置是否正确
- 查看集群事件日志获取详细错误信息
- Pod无法调度:
- 检查节点资源是否充足
- 检查是否有节点污点或Pod容忍度不匹配
- 检查是否有节点亲和性或反亲和性配置错误
- 应用无法访问:
- 检查Service和Ingress配置是否正确
- 检查安全组规则是否开放了必要的端口
- 检查Pod是否正常运行
- 检查网络策略是否允许流量通过
- Helm安装失败:
- 检查Chart版本是否与Kubernetes版本兼容
- 检查values.yaml文件中的配置是否正确
- 查看Helm安装日志获取详细错误信息
2. 最佳实践
- 集群管理最佳实践:
- 使用基础设施即代码(IaC)工具如Terraform管理集群和云资源
- 定期升级Kubernetes版本和集群组件
- 开启集群监控和日志收集
- 定期备份集群数据和应用数据
- 制定灾难恢复计划并定期演练
- 应用部署最佳实践:
- 使用Helm管理应用部署
- 将应用配置和敏感信息从镜像中解耦,使用ConfigMap和Secret
- 为每个容器设置合理的资源请求和限制
- 使用健康检查和就绪检查确保应用的可用性
- 采用滚动更新策略,避免服务中断
- 安全最佳实践:
- 开启RBAC权限控制
- 配置网络策略限制Pod之间的通信
- 使用私有镜像仓库并对镜像进行安全扫描
- 定期更新容器镜像和操作系统补丁
- 开启阿里云安全中心,检测和防护安全威胁
- 成本优化最佳实践:
- 开发测试环境使用ACK Serverless集群
- 生产环境使用弹性伸缩功能,根据流量自动调整资源
- 使用预留实例和节省计划降低长期使用成本
- 定期清理未使用的资源
- 使用阿里云成本管理工具监控和优化成本
阿里云ACK作为企业级Kubernetes容器服务,提供了丰富的功能和与阿里云生态的深度集成,能够满足企业各种复杂的容器化需求。结合Helm包管理工具,可以大大简化应用的部署和管理流程,提高开发和运维效率。
相关阅读:
阿里云国际开户后首次配置:VPC搭建 + 安全组规则 + 弹性公网IP绑定
阿里云国际开户权限分配模板:开发、测试、运维角色权限矩阵
阿里云国际开户技术文档查阅:快速定位API文档与故障排查手册
阿里云国际开户后运维托管是否有必要
阿里云国际开户代办与自助开户的区别