通过ACK快速搭建魔方游戏应用
ACK集群提供高性能的容器化应用管理服务,让您轻松高效地在云端运行容器化应用。本文带您快速体验如何在ACK集群中通过集群控制台页面或kubectl客户端快速部署并公开一个容器化Demo应用,即魔方游戏,并监控应用的运行情况。
教程概览
本教程所使用的示例应用ACK-Cube为一个线上魔方游戏,该游戏通过容器镜像部署到ACK托管集群Pro版中。完成本教程后,您将创建一个魔方游戏应用,流程如下。
开通授权并创建ACK集群:快速完成开通授权并创建ACK集群。
部署魔方游戏应用:从两种部署方式中选择一种来部署游戏,包括控制台界面部署、kubectl部署。
公网访问应用:应用配置完成后,获取ack-cube服务的外部IP地址(External IP),并通过外部IP地址访问魔方游戏。
1. 快速创建集群
当您首次使用ACK时,您需要开通并授权容器服务ACK,然后创建集群,在集群中部署魔方应用。如果您未开通容器服务并授权默认角色,以及未开通相关云产品,则可能无法正常使用容器服务及其关联功能。建议您按照官方文档指引完成相应配置和授权,以确保服务能够顺利运行。详细操作,请参见快速创建ACK托管集群。关于ACK集群及其所使用云资源的收费情况,请参见产品计费。
创建ACK托管集群时,您可以选择开启智能托管模式。开启后,您仅需进行简单的规划配置,即可一键创建符合最佳实践的ACK集群。该集群会默认创建一个智能托管节点池,其中的节点生命周期将由ACK进行托管和运维。更多信息,请参见创建ACK托管集群(智能托管模式)。
如果您需要对集群进行详细自定义配置,可参见创建ACK托管集群的完整流程来完成集群创建。
登录容器服务管理控制台。在集群列表页面,单击创建集群。
在上方选择ACK 托管集群页签,单击开启智能托管,如果您有公网访问集群能力的需求,您可以在个人测试集群勾选使用 EIP 暴露 API server获得该能力,方便您的后续连接和管理集群。然后单击确认配置,检查所选配置后单击创建集群。
2. 部署应用
您可以通过控制台、kubectl工具手动配置应用参数部署魔方游戏。
控制台界面部署:通过控制台部署并公开应用、访问应用。
kubectl部署:通过kubectl工具连接集群(CloudShell、kubectl客户端、Workbench)、部署公开应用、访问应用。
本文中的示例中使用了一个公网镜像,拉取公网镜像需要集群或节点具备公网访问能力:
为集群开启访问公网的能力(推荐):为集群所在的VPC创建公网NAT网关,使集群中的所有资源获得公网访问能力。
为节点分配固定公网IP:拥有公网IP的节点即可拉取公网镜像。但您需要为部署工作负载的每一个节点都分配公网IP。
控制台部署
2.1 部署并公开应用
本步骤指导您如何在新创建的ACK集群中快速部署一个无状态工作负载(Deployment),即魔方游戏,并将该应用向公网公开。关于创建Deployment的详细参数描述,请参见创建无状态工作负载Deployment。
在集群列表页面中,单击目标集群名称(即ACK-Demo)。
在集群管理页左侧导航栏,选择 。
在无状态页面,单击使用镜像创建。
在应用基本信息页签,设置应用名称为ack-cube。
单击下一步,在容器配置页签,配置容器的相关参数。
配置项
说明
示例值
镜像名称
直接输入镜像名称。
输入
registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0
。资源限制
根据需要为该应用指定所能使用的资源上限,防止占用过多资源。
1 Core,内存1024 MiB,Ephemeral Storage为空。
所需资源
根据需要为该应用指定预留的资源额度,防止因资源不足而导致应用不可用。
0.5 Core,内存512 MiB,Ephemeral Storage为空。
端口
设置容器的端口。
名称:ack-cube。
容器端口:80。
协议:TCP。
单击下一步,在高级配置页签,单击服务(Service)创建。在弹出的创建服务对话框中,设置服务的相关参数公开ack-cube应用,服务(Service)配置完成后单击确定即可。
配置项
说明
示例值
名称
输入服务的名称。
ack-cube-svc
类型
选择服务类型,即服务访问的方式。依次选择负载均衡 > 传统型负载均衡CLB > 新建资源,在个人测试环境CLB资源保持默认即可。
使用默认设置。
端口
设置服务端口和容器端口。容器端口需要与后端的Pod中暴露的容器端口一致。
服务端口:80。
容器端口:80。
协议:TCP。
工作负载相关参数配置完成后,单击创建即可。创建成功后,默认进入创建完成页面,会列出应用包含的对象,您可以单击查看应用详情进行查看。
2.2 访问应用
本步骤指导您如何通过服务(Service)来访问新部署的容器化应用。
登录容器服务管理控制台,在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择找到命名空间为default,名称为ack-cube的应用。单击访问方式页签,找到新创建的服务(即ack-cube-svc),单击外部端点列的链接,即可访问魔方游戏。 。
kubectl部署
2.1 连接集群
您可以通过kubectl、Workbench或CloudShell连接集群。
CloudShell
在CloudShell启动时会自动为您分配一台Linux虚拟机供您免费使用。该虚拟机已预装多种常用环境与工具,配合CloudShell提供的Web IDE,辅助您完成日常的云资源管理。本步骤指导您如何通过CloudShell快速连接到ACK集群。更多信息,请参见在Workbench或CloudShell上使用kubectl连接集群。
登录容器服务管理控制台。在控制台左侧导航栏,单击目标集群。在集群信息页面中,选择。
等待数秒启动成功之后,您就可以在CloudShell界面通过kubectl命令来管理集群和应用。
Workbench
您可以使用阿里云提供的浏览器远程连接工具Workbench,使用该工具,您无需额外安装任何软件即可通过浏览器直接访问ACK集群。详细操作,请参见通过Workbench连接实例。
登录容器服务管理控制台。在控制台左侧导航栏,单击目标集群。在集群信息页面中,选择。
等待数秒启动成功之后,根据页面指引您就可以在Workbench界面中,通过kubectl命令来管理集群和应用。
kubectl客户端
如果您需要使用公网机器访问集群,您可以为该机器安装设置kubectl客户端,使用该工具通过公网机器直接访问集群。本步骤指导您如何通过kubectl客户端快速连接到ACK集群。更多信息,请参见获取集群KubeConfig并通过kubectl工具连接集群。
安装和设置 kubectl客户端。有关详细信息请参见安装和设置 kubectl。
登录容器服务管理控制台。在控制台左侧导航栏,单击集群。在集群列表页面中,单击目标集群名称(即ACK-Demo)。在集群信息页面,单击连接信息页签,复制公网访问页签下的内容(即集群的公网访问凭证)。将复制的集群凭证内容粘贴至$HOME/.kube目录下的config文件中,保存并退出。
说明如果客户端机器$HOME/目录下没有.kube目录和config文件,请自行创建。
执行kubectl命令验证集群的连通性。
以查询命名空间为例,执行以下命令。
kubectl get namespace
预期输出:
NAME STATUS AGE arms-prom Active 4h39m default Active 4h39m kube-node-lease Active 4h39m kube-public Active 4h39m kube-system Active 4h39m
2.2 部署并公开应用
本步骤指导您如何通过kubectl在新创建的ACK集群中快速部署一个无状态工作负载(Deployment),并将其通过LoadBalancer类型服务(Service)公开。关于服务公开的详细操作,请参见通过使用自动创建负载均衡的服务公开应用。
使用以下示例应用的YAML内容,创建名为ack-cube.yaml的文件。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: ack-cube #应用名称。 labels: app: ack-cube spec: replicas: 2 #设置副本数量。 selector: matchLabels: app: ack-cube #对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。 template: metadata: labels: app: ack-cube spec: containers: - name: ack-cube image: registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0 #替换为您实际的镜像地址,格式为:<image_name:tags>。 ports: - containerPort: 80 #需要在服务中暴露该端口。 resources: limits: #设置资源限制。 cpu: '1' memory: 1Gi requests: #设置所需资源 cpu: 500m memory: 512Mi
执行以下命令,部署Demo应用ack-cube。
kubectl apply -f ack-cube.yaml
执行以下命令,确认示例应用状态正常。
kubectl get deployment ack-cube
预期输出:
NAME READY UP-TO-DATE AVAILABLE AGE ack-cube 2/2 2 2 96s
使用以下示例服务的YAML内容,创建名为ack-cube-svc.yaml的文件。将
selector
修改为ack-cube.yaml示例应用文件中matchLabels
的值(本示例为app: ack-cube
),从而将该服务关联至后端应用。apiVersion: v1 kind: Service metadata: labels: app: ack-cube name: ack-cube-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: ack-cube # 需要与Deployment YAML文件中的matchLabels的值一致。 type: LoadBalancer
执行以下命令创建名为ack-cube-svc的服务,并通过其公开应用。
ACK会自动创建一个公网SLB,并将其绑定至该服务。
kubectl apply -f ack-cube-svc.yaml
执行以下命令确认LoadBalancer类型的服务创建成功。
示例应用将通过EXTERNAL-IP字段的IP地址向公网公开。
kubectl get svc ack-cube-svc
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ack-cube-svc LoadBalancer 172.16.72.161 47.94.xx.xx 80:31547/TCP 32s
将 EXTERNAL-IP(47.94.xx.xx)地址输入浏览器地址栏,即可访问魔方游戏应用。
3.(可选)释放资源
使用ACK托管集群Pro版所产生的费用包括两部分:集群管理费用(由ACK收取),以及所使用的其他阿里云云产品资源费用(由各云产品收取)。
如果您无需继续使用集群,请登录容器服务管理控制台,在集群列表页面的操作列,单击目标集群对应的更多 > 删除。在删除集群及关联资源页面,您可选择删除集群关联资源,然后单击删除即可。关于删除ACK集群的更多信息,请参见删除集群。
智能托管集群默认启用了删除保护功能。在删除集群前,请先关闭集群删除保护状态。