本文描述如何使用腾讯云容器服务 (TKE) 实现跨可用区的应用高可用部署, 包含如下内容:
1. 高可用部署架构
2. 使用容器服务 (TKE) 进行高可用部署
3. 关于亲和性和反亲和性说明
4. 总结
1. 高可用部署架构
IDC 在全球范围内, 针对多个行业的中小型企业 (员工数小于 1000 名) 的调研显示, 近 80% 的公司预计, 云服务器每小时的停机成本至少在 2 万美元以上, 而超过 20% 的企业估算其云服务器每小时的停机成本至少为 10 万美元.
由此可见, 云服务器停机对于云上企业的损失不容小觑, 云服务商高可用方案越来越成为企业上云最重要的选择标准之一. 在 "上云" 已经成为共识之后, 如何进行高可用部署呢?
传统模式下, 使用云主机实现高可用部署的架构图如下:
云主机实现高可用部署
将云主机分散在不同的可用区, 利用负载均衡 (CLB) 支持跨可用区分发的特性, 实现业务流量跨可用区分发. 当一个可用区 (AZ) 出现故障时, 流量切换到另一个可用区(AZ), 由此实现高可用部署.
使用云主机搭建业务环境, 需要在云主机上部署 web 服务器(Nginx,Tomcat 等), 然后再部署业务代码, 随着业务规模的增大, 发布, 部署的时间会变长.
随着容器的盛行, 越来越多的企业采用 DevOps, 使用容器部署业务. 本文描述了如何使用腾讯云容器服务 (TKE) 进行业务高可用部署. 部署架构如下:
两个 Node 节点分布位于同一个地域的两个可用区, 两个业务的 Pod 分布部署在 2 个 Node 上, 使用 CLB 实现流量负载均衡.
下面我们看看如何使用腾讯云容器快速的实现应用高可用部署.
2. 使用容器服务 (TKE) 进行高可用部署
本示例使用腾讯云容器服务新版控制台, 参考新版控制台说明.
在本文中我们使用一个简单的 swagger 应用作为示例, 实现高可用部署. swagger-ui 的 下载地址
在 docker 的镜像仓库里已经有了制作好的 swaggerui 镜像, 可以直接使用. 也可以自己下载源码制作成镜像. 我们使用 docker 镜像仓库里的镜像.
登陆腾讯云容器控制台, 创建一个容器集群.
容器集群创建成功之后, 创建新的节点:
这里添加 2 个节点, 分别分布到 2 个可用区: 北京二区, 北京三区:
添加成功后如下图:
集群创建成功后下面制作镜像.
2.1 制作镜像
首先我们创建一个镜像仓库, 设置为公有:
腾讯云 registry 使用指引方法如下:
登录腾讯云 docker registry
sudo docker login --username=100002678805 ccr.ccs.tencentyun.com
从 registry 拉取镜像
sudo docker pull ccr.ccs.tencentyun.com/zehua/swaggerui:[tag]
将镜像推送到 registry
- sudo docker login --username=100002678805 ccr.ccs.tencentyun.com
- sudo docker tag [ImageId] ccr.ccs.tencentyun.com/zehua/swaggerui:[tag]
- sudo docker push ccr.ccs.tencentyun.com/zehua/swaggerui:[tag]
下面我们按照上面的方法将 swagger 的镜像推送到刚刚创建的镜像仓库.
SSH 登陆到其中一台容器节点, 拉取 swaggerui 镜像, 执行命令:
docker pull swaggerapi/swagger-ui
登陆到腾讯云镜像仓库:
docker login --username=100002678805 ccr.ccs.tencentyun.com
- kubectl get nodes --show-labels
- kubectl label nodes 10.0.2.12 az=bj2
- kubectl label nodes 10.0.5.17 az=bj3
- spec:affinity:nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
- - matchExpressions:
- - key: kubernetes.io/hostname
- operator: In
- values:
- - 10.0.2.12
- - 10.0.5.17
- spec:affinity:nodeAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - preference:
- matchExpressions:
- - key: failure-domain.beta.kubernetes.io/zone
- operator: In
- values:
- - "800002"
- - "800003"
- weight: 1
- requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
- - matchExpressions:
- - key: az
- operator: In
- values:
- - bj2
- - bj3
来源: https://www.qcloud.com/developer/article/1406155