话不多说,直接部署吧
先说说为什么选择ACK吧: 阿里云容器服务Kubernetes版(ACK)作为业界领先的容器管理和编排服务,凭借其强大的技术实力和丰富的云服务生态,为企业级用户提供了一系列卓越的优势,助力现代化应用的快速构建、部署与运维。
方案介绍:本方案介绍如何快速地在阿里云容器服务Kubernetes版(ACK)上部署应用,使用镜像在ACK中部署应用,使用ALB作为Ingress对外提供服务。 方案中包含两个应用,应用A和应用B,其中应用A依赖应用B,以此来模拟真实场景中应用依赖关系。整体的方案架构如下图所示。
本方案的技术架构包括以下基础设施和云服务:
1个专有网络VPC:为应用型负载均衡ALB、云服务器ECS、阿里云容器服务Kubernetes版ACK集群等云资源形成云上私有网络。
2台交换机:将多可用区的3台云服务器ECS,阿里云容器服务Kubernetes版ACK集群和应用型负载均衡ALB,使它们能够在同一网络上进行通信,并提供基本的网络分段和隔离功能。
1个公网应用型负载均衡ALB:对外提供访问,作为ACK集群的Ingress实现。
1个阿里云容器服务Kubernetes版ACK集群
3台云服务器ECS:用于部署模拟应用服务,为ACK使用。
创建ACK集群
在创建集群的确认配置页面,检查各项配置是否如预期设定。在依赖检查部分,如果遇到未通过状态,跟随说明部分进行处理。例如需要授权角色权限的,跟随引导到新页面完成授权,完成后回到当前页面点击重新检查,直到状态变为通过。
所有配置符合预期,依赖检查全部通过后,阅读并确认服务条款与免责声明后,点击创建集群,开始等待集群创建完成。Kubernetes 集群创建需要约 10 分钟,您可以跳转到集群列表查看状态。
创建无状态工作负载(Deployment)
完成运行前的准备工作后,需要创建多个服务的无状态工作负载(Deployment),用于承载原测试应用中的各个服务。
登录容器服务ACK管理控制台。
在左侧导航栏,选择集群,点击创建的ecs_ack_test集群,点击名称开始操作。
在左侧导航栏,选择节点管理,在展开的菜单中选择节点,查看各个节点是否处于就绪状态,如有节点不是就绪状态,等待1分钟后刷新,直至所有节点处于就绪状态。
在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: ecs-ack-test-service-a
labels:
app: ecs-ack-test-service-a
spec:
replicas: 2
selector:
matchLabels:
app: ecs-ack-test-service-a
template:
metadata:
labels:
app: ecs-ack-test-service-a
spec:
initContainers:
- name: download-jar
image: dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-alinux
command:
- "/bin/sh"
- "-c"
- "curl -o /app/app.jar https://help-static-aliyun-doc.aliyuncs.com/demos/MicroServiceOnAckDemoApp.jar && echo 'Download jar OK!'"
volumeMounts:
- name: app-jar
mountPath: /app
containers:
- args:
- '-DbHost=http://ecs-ack-test-service-b:8080'
- '-jar'
- '/app/app.jar'
command:
- java
name: ecs-ack-test-service-a
image: dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-alinux
ports:
- containerPort: 8080
resources:
limits:
cpu: '2'
ephemeral-storage: 40Gi
memory: 2Gi
requests:
cpu: '1'
ephemeral-storage: 20Gi
memory: 1Gi
volumeMounts:
- name: app-jar
mountPath: /app
volumes:
- name: app-jar
emptyDir: {
}
点击创建ecs-ack-test-service-b。
在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,等待约1分钟点击右上角刷新图标按钮,查看ecs-ack-test-service-b,当容器组数量显示为2/2,并且没有其他错误信息时,可以认为ecs-ack-test-service-a与ecs-ack-test-service-b创建成功。
添加服务(Service)
在左侧导航栏,选择网络,在展开的菜单中选择服务,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:
apiVersion: v1
kind: Service
metadata:
name: ecs-ack-test-service-a
spec:
selector:
app: ecs-ack-test-service-a
ports:
- protocol: TCP
port: 8080
targetPort: 8080
点击创建ecs-ack-test-service-a。
2在左侧导航栏,选择网络,在展开的菜单中选择服务,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:
apiVersion: v1
kind: Service
metadata:
name: ecs-ack-test-service-b
spec:
selector:
app: ecs-ack-test-service-b
ports:
- protocol: TCP
port: 8080
targetPort: 8080
点击创建ecs-ack-test-service-b。
添加路由(Ingress)
1在左侧导航栏,选择网络,在展开的菜单中选择路由,检查ALB组件是否安装。点击右上角创建Ingress,在右侧弹出的创建Ingress面板中,网关类型点击ALB Ingress,如提示ALB组件未安装,则点击开始安装,否则点击面板右上角关闭按钮即可。
2在左侧导航栏,选择网络,在展开的菜单中选择路由,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: ecs-ack-test-alb-config
spec:
config:
name: ecs-ack-test-alb
addressType: Internet
zoneMappings:
- vSwitchId: vsw-bp1******ups
- vSwitchId: vsw-bp1******8xm
listeners:
- port: 80
protocol: HTTP
请注意,其中zoneMappings配置的vSwitchId使用的是创建集群时选择的交换机实例ID,不能使用交换机名称,可以在专有网络VPC控制台查找。
3在左侧导航栏,选择网络,在展开的菜单中选择路由,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: ecs-ack-test-alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: ecs-ack-test-alb-config
此处配置了名为ecs-ack-test-alb的IngressClass配置。
4在左侧导航栏,选择网络,在展开的菜单中选择路由,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ecs-ack-test-alb-ingress
spec:
ingressClassName: ecs-ack-test-alb
rules:
- http:
paths:
- path: /a
pathType: ImplementationSpecific
backend:
service:
name: ecs-ack-test-service-a
port:
number: 8080
- path: /b
pathType: ImplementationSpecific
backend:
service:
name: ecs-ack-test-service-b
port:
number: 8080
点击创建ecs-ack-test-ingress。
5如遇到创建失败,可以考虑如下步骤处理已创建配置并尝试重新配置:
a在左侧导航栏,选择网络,在展开的菜单中选择路由,找到名为ecs-ack-test-alb-ingress的配置,在右侧下拉菜单中点击删除,等待删除成功。
b在左侧导航栏,选择工作负载,在展开的菜单中选择自定义资源,点击资源对象浏览器标签页,在API组下方的输入框中,输入Ingress,在搜索结果中,点击树形结构中v1目录下的Ingress配置,如存在名为ecs-ack-test-alb的配置,点击右侧删除按钮,等待删除成功。
c在搜索结果中,点击树形结构中v1目录下的IngressClass配置,如存在名为ecs-ack-test-alb的配置,点击右侧删除按钮,等待删除成功。
d在API组下方的输入框中,输入AlbConfig,如存在名为AlbConfig的配置,在搜索结果中,点击树形结构中v1目录下的AlbConfig配置,如存在名为ecs-ack-test-alb-config的配置,点击右侧删除按钮,等待删除成功。
验证模拟应用
1.路由(Ingress)创建完成后,等待约1分钟,在左侧导航栏,选择网络,在展开的菜单中选择路由,查看ecs-ack-test-ingress的端点一列,获取端点域名,在浏览器中访问端点域名/a,查看返回值,例如:
{
"serviceName": "a",
"uuid": "f1b99e7a-e731-4a3b-aa22-5e8a3abd577c"
},
{
"serviceName": "b",
"uuid": "d1eee41e-3259-4eb2-a018-43b7df64589b"
}
]
说明模拟应用服务正常运行。
写在最后
1)技术细节的充分性:该解决方案在介绍灵活调度、高效编排和容器化管理云上应用的过程中,提供了较为全面的技术概述,覆盖了容器化的基本概念、Kubernetes(或类似容器编排平台)的核心组件及其工作原理。然而,对于初学者来说,可能仍感觉某些技术环节的深度不够,特别是关于网络策略、存储解决方案和安全实践方面的详细配置与优化策略。增强这部分内容,加入更多实践案例分析,将有助于用户更深入地理解方案的实施细节。
2)引导与文档支持:体验过程中,文档资源丰富度和易用性是决定用户能否顺利实施的关键。大多数情况下,主流云服务商提供了详尽的文档和教程,但偶尔会发现某些高级功能或故障排查指南不够具体,缺乏逐步指导。例如,对于复杂的网络配置或自定义资源管理,可能需要更多实例演示和故障模拟解决步骤。此外,视频教程和交互式实验室的加入能显著提升学习效率。
3)部署过程与代码示例:代码示例通常是非常实用的,能够快速启动部署并作为进一步定制的基础。大多数解决方案提供的示例代码质量较高,易于理解和修改。但在实际操作中,可能会遇到与特定环境兼容性相关的问题,比如版本不匹配导致的配置错误或依赖冲突。遇到的具体报错可能包括服务启动失败、资源限制超限等,解决这些问题通常需要查阅更详细的错误日志或社区讨论。
4)容器化应用托管的优势:容器化应用托管的优势显著,包括但不限于环境一致性、资源利用率提升、快速部署与扩展、易于持续集成与交付(CI/CD)。它允许应用在不同环境间无缝迁移,减少了“在我机器上能运行”的问题。对于企业上云而言,容器化是一个提高运维效率、加速应用迭代的重要手段,因此大多数企业在云转型过程中都会倾向于采用容器化应用托管。
5)云产品体验分享:以主流云服务商的产品为例,如阿里云的容器服务ACK、AWS的Elastic Kubernetes Service (EKS)等,在体验中,这些产品普遍展现出强大的功能性和稳定性。产品界面友好,配置向导清晰,能满足大多数企业的云原生应用部署需求。性能方面,能够根据业务需求动态扩缩容,确保应用的高可用性。产品手册和API文档通常详尽,但对于某些高级特性的说明或最佳实践案例可以进一步丰富。另外,云服务商的技术支持响应速度和服务质量也是评价的重要组成部分,良好的客户支持能够大大提升整体体验。