阿里云ACK产品评测
概述
阿里云ACK(Alibaba Cloud Container Service for Kubernetes)是阿里云推出的容器服务,基于Kubernetes提供一站式的容器管理解决方案。ACK旨在帮助用户简化容器应用的部署、管理和运维,支持多种场景,包括微服务、DevOps、弹性伸缩等。本文将详细评测阿里云ACK的功能和性能,并通过一个部署WordPress的案例来展示其具体使用方法。
功能评测
1. 易用性
阿里云ACK提供了友好的Web控制台和强大的命令行工具,用户可以轻松创建和管理Kubernetes集群。控制台界面简洁明了,各项功能分布合理,用户可以通过几步简单的操作创建一个Kubernetes集群。
2. 集成性
ACK与阿里云的其他产品无缝集成,例如RDS(关系型数据库服务)、SLB(负载均衡)、OSS(对象存储服务)等。用户可以方便地将这些资源与Kubernetes集群结合使用,构建高可用、高性能的应用。
3. 安全性
ACK提供多种安全特性,包括RBAC(基于角色的访问控制)、网络策略、镜像安全扫描等,帮助用户保障容器应用的安全。此外,ACK还支持VPC(虚拟私有云),用户可以将Kubernetes集群部署在私有网络中,进一步提升安全性。
4. 性能
ACK基于阿里云强大的计算和网络资源,提供高性能的容器运行环境。通过自动伸缩和负载均衡功能,ACK可以根据应用负载动态调整资源,保证应用的高可用和稳定性。
部署WordPress的案例
接下来,我们将通过一个具体的示例,展示如何使用阿里云ACK部署WordPress。使用ALB+ACK服务以及在kubernetes集群内设置ingress规则来完成部署,这个示例将涵盖从创建Kubernetes集群到部署WordPress的全部过程。
1. 创建Kubernetes集群
首先,登录阿里云控制台,进入ACK服务页面,点击“创建集群”。按照向导填写必要的信息,例如集群名称、节点数量、节点规格等。完成后点击“创建”,等待几分钟,Kubernetes集群就会创建完成。
2. 安装kubectl
安装并配置kubectl以管理Kubernetes集群。您可以在本地机器上运行以下命令安装kubectl:
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl
然后,下载阿里云提供的kubeconfig文件并配置kubectl:
mkdir /root/.kube
cd /root/.kube
# 将从ACK下载的配置文件上传到这里并命名为config
3. 创建ALB示例
- 在阿里云控制台左侧导航栏中选择“负载均衡 > 应用型负载均衡ALB”。
- 点击“创建实例”按钮。
- 配置实例基本信息:
- 区域:选择与ACK集群相同的区域。
- 实例规格:选择合适的规格,例如“slb.s1.small”。
- 网络:选择ACK集群所在的VPC和交换机。
- 配置监听器:
- 协议:选择HTTP或HTTPS。
- 端口:例如80或443。
- 完成其他必要配置后,点击“确认创建”。
根据操作可以创建一个ALB示例
4. ALB关联后端服务器组
- 在ALB实例页面,选择你刚刚创建的实例。
- 选择“服务器组”选项卡。
- 点击“创建服务器组”。
- 配置服务器组信息:
- 服务器组类型:选择“常规服务器组”。
- 协议:选择HTTP或HTTPS。
- 健康检查:配置健康检查参数。
- 添加后端服务器:
- 选择ACK集群中的节点IP地址。
- 配置权重和端口。
5. 部署WordPress
5.1 创建命名空间
为了更好地管理资源,首先创建一个命名空间
kubectl create ns wordpress
5.2 部署ALB控制器
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。
- 在组件管理页面,单击网络页签,在网络组件区域,在ALB Ingress Controller组件卡片的右下角单击安装。
- 在安装组件 ALB Ingress Controller对话框,为选择ALB 云原生网关实例来源选择新建,使用已有或暂不创建选项。
5.3 部署MySQL
由于wordpress是需要数据库来支撑的,所以我们需要来部署一个mysql,文件名为mysql-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
namespace: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: password
- name: MYSQL_DATABASE
value: wordpress
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
namespace: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
应用此yaml文件
kubectl apply -f mysql-deploy.yaml
等到数据库正常启动并运行之后我们就可以开始部署wordpress了
5.4 部署wordpress
文件名为wordpress-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: wordpress-deploy
name: wordpress-deploy
namespace: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress-deploy
template:
metadata:
creationTimestamp: null
labels:
app: wordpress-deploy
spec:
containers:
- image: wordpress
name: wordpress
resources: {
}
env:
- name: WORDPRESS_DB_HOST
value: wordpress
- name: WORDPRESS_DB_USER
value: root
- name: WORDPRESS_DB_PASSWORD
value: password
status: {
}
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
type: ClusterIP
然后我们应用此文件
kubectl apply -f wordpress-deploy.yaml
5.5 创建ALBconfigmap
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
name: alb-test
addressType: Internet
zoneMappings:
- vSwitchId: 你的vSwitchID
listeners:
- port: 80
protocol: HTTP
然后应用这个文件
kubectl apply -f ALBconfigmap.yaml
5.6 创建ingressClass
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: alb
应用此文件
kubectl apply -f ingressClass.yaml
5.7 创建ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
namespace: wordpress
spec:
ingressClassName: alb
rules:
- host: wordpress.fushudi.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80
然后应用这个文件
kubectl apply -f ingress.yaml
可能遇到的错误
由于文中所采用的镜像皆为docker的官方镜像,照着我的模板去应用是会报错的。pod会处于镜像拉取失败的一个状态,这个不是咱们的问题,所需要的镜像大家可以在阿里云购买一台香港的ECS然后使用这个机器去拉取镜像,然后搭建一个harbor仓库或者直接上传到阿里云的容器镜像服务内(建议上传到阿里云),最后大家再将我的yaml文件中的所有镜像改为阿里云为你提供的镜像地址即可。
ingress的部署流程均为阿里云官方文档流程
ALB文档地址
部署完成之后如需访问的话必须是基于域名去访问,没有域名的建议将wordpress的类型改为loadbalancer,然后在你本地机器修改hosts文件
结论
由ACK给ALB提供后端服务,所有的流量都会经过ALB来转发,可以达到一个负载均衡的效果,这样也避免了单机流量过大而其他机器负载太低的情况,大大减少了使用者的资源浪费和维护成本。ALB通过智能流量管理和健康检查,确保每个实例的负载在合理范围内,提高了系统的稳定性和可靠性。此外,ALB的自动化功能简化了流量管理的过程,使得应用的运维更加高效,用户能够专注于业务逻辑而非底层基础设施的管理。通过这种方式,用户可以实现更高效的资源利用和更优质的用户体验。