边缘计算技术与服务提供商江航智能获红杉数千万元投资
06-18
使用腾讯云容器服务(TKE)实现应用跨可用区高可用部署之一 本文介绍如何使用腾讯云容器服务(TKE) 实现应用跨可用区的高可用部署,包括以下内容: 1. 高可用部署架构 2. 使用容器服务(TKE)进行高可用部署 3. 亲和性和亲和性说明4. 总结 1. 高可用部署架构 IDC 对全球多个行业中小型企业(员工人数小于 100 人)的调查显示,近 80% 的企业预计云服务器宕机成本至少为 US每小时 20,000 美元,每小时超过 20,000 美元。 20% 的企业估计其云服务器的停机成本至少为每小时 10 万美元。
可见,云服务器宕机给云企业带来的损失不容小觑。云服务商高可用解决方案日益成为企业上云最重要的选择标准之一。
“上云”成为共识后,如何进行高可用部署?传统模式下,利用云主机实现高可用部署的架构图如下: 通过将云主机分散在不同可用区,利用负载均衡(CLB)支持跨可用性,实现云主机高可用部署区域分布,实现业务流量跨可用区分布。当一个可用区(AZ)出现故障时,流量会切换到另一个可用区(AZ),从而实现高可用部署。
使用云主机搭建业务环境,需要在云主机上部署Web服务器(Nginx、Tomcat等),然后部署业务代码。随着业务规模的增大,发布和部署时间会变得更长。
随着容器的普及,越来越多的企业开始采用DevOps,使用容器来部署业务。本文介绍如何使用腾讯云容器服务(TKE)进行高可用业务部署。
部署架构如下:两个Node节点位于同一地域的两个可用区,两个服务的Pod部署在两个Node上,通过CLB实现流量负载均衡。我们来看看如何使用腾讯云容器快速实现应用的高可用部署。
2. 使用容器服务(TKE)进行高可用部署。本示例使用新版腾讯云容器服务控制台。
请参考新版本控制台说明。在本文中,我们以一个简单的swagger应用程序为例来实现高可用部署。
swagger-ui的下载地址,docker镜像仓库中已经有准备好的swaggerui镜像,可以直接使用。您也可以自己下载源码并制作成镜像。
我们使用docker镜像仓库中的镜像。登录腾讯云容器控制台,创建容器集群。
容器集群创建成功后,创建新节点:这里添加2个节点,分布到2个可用区:北京二区和北京三区:添加成功后如下图: 集群创建成功后,创建下面的图像。 2.1 制作镜像 首先我们创建一个镜像仓库,并设置为公共: 腾讯云registry使用说明如下: 登录腾讯云dockerregistry 代码语言:txt copy sudo docker login --username=ccr.ccs.tencentyun。
com pull fromregistry 镜像代码语言:txt copy sudo docker pull ccr.ccs.tencentyun.com/zehua/swaggerui:[tag] 将镜像推送到registry 代码语言:txt copy sudo docker login --username=ccr.ccs.tencentyun .com 代码语言:txt copy sudo docker tag [ImageId] ccr.ccs.tencentyun.com/zehua/swaggerui:[tag] 代码语言:txt copy sudo docker push ccr.ccs.tencentyun.com/zehua/swaggerui:[tag 】 下面我们按照上面的方法将swagger镜像推送到刚刚创建的镜像仓库中。使用 SSH 登录其中一个容器节点,拉取 swaggerui 镜像,执行命令: 代码语言:txt copy docker pull swaggerapi/swagger-ui 登录腾讯云镜像仓库: 代码语言:txt copy docker login - -username=ccr.ccs .tencentyun.com 为刚刚拉取的 swaggerui 镜像打标签: 代码语言:txt 复制 docker tag swaggerapi/swagger-ui ccr.ccs.tencentyun.com/zehua/swaggerui:1.2 将 swaggerui 镜像推送到腾讯云镜像仓库:代码语言:txt copy docker push ccr.ccs.tencentyun.com/zehua/swaggerui:1.22.2 高可用部署 下面进行高可用部署。
首先创建一个部署。创建部署时,选择合适的命名空间,如下图: 本例将swagger部署到命名空间zehua-ns: 选择刚刚创建的swaggerui镜像: 注意这里的端口号是。
这里为了演示,创建了2个Pod,将这2个Pod分布到不同的可用区。您可以根据实际情况选择合适的Pod数量。
节点调度策略有两种选择:按节点调度和自定义调度规则。您可以选择任何安排方法。
对于按节点调度,您可以选择当前容器集群的节点,TKE 会将 Pod 均匀调度到这些节点上。本例中创建了两个 Pod,TKE 会将这两个 Pod 分别调度到这两个节点上。
如果选择按照自定义规则进行调度,则需要指定节点的标签。我们用AZ标记了2个节点,即bj2和bj3。
标注方法如下:分别为2个节点添加新标签:也可以使用命令行进行标注。使用 kubectl 添加它。
kubectl的详细使用说明请参考:Kubectl操作集群。代码语言:txt copy kubectl getnodes --show-labels 代码语言:txt copy kubectl labelnodes 10.0.2.12 az=bj2 代码语言:txt copy kubectl labelnodes 10.0.5.17 az=bj3 设置好高可用部署后,访问设置。
启用公网访问,注意端口映射设置:完成后点击创建工作负载。创建完成后,在service中可以看到创建的服务: 在Pod管理中,可以看到2个Pod被调度到2个节点: 在Service中访问负载均衡IP,可以看到部署成功: 现在我们已完成业务高可用部署。
3.关于亲和力和反亲和力。通过腾讯云控制台查看swagger应用的YAML文件。
可以看到通过控制台的Pod调度是通过节点亲和性(nodeAffinity:)来实现的。代码语言:txt 复制规范: 代码语言:txt 复制亲和力: 代码语言:txt 复制 nodeAffinity: 代码语言:txt 复制 requiredDuringSchedulingIgnoredDuringExecution: 代码语言:txt 复制 nodeSelectorTerms: 代码语言:txt 复制 - matchExpressions: - key:kubernetes.io/ hostnameoperator: Invalues:- 10.0.2.12- 10.0.5.17 节点亲和力通过指定preferredDuringSchedulingIgnoredDuringExecution 和 requiredDuringSchedulingIgnoredDuringExecution 来实现亲和力的软和硬限制。
节点关联性的语法支持:In、NotIn、Exists、DoesNotExist、Gt、Lt。这些语法支持灵活的控制台节点关联性。
本例中使用默认标签 kubernetes.io/hostname 作为调度器,调度到主机名为 10.0.2.12 和 10.0.5.17 的两个节点上。如果节点调度策略选择“自定义调度规则”,affinity的实现大致如下: 代码语言:txt copy spec: 代码语言:txt copyaffinity: 代码语言:txt copy nodeAffinity: 代码语言:txt copy PreferredDuringSchedulingIgnoredDuringExecution :代码语言: txt 复制 - 首选项: matchExpressions: - key: failure-domain.beta.kubernetes.io/zoneoperator: Invalues: - "02" - "03" 权重: 1 requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms: - matchExpressions: - key: azoperator :invalues:- bj2- bj3 这里的调度策略使用节点的AZ标签,两个pod会被调度到标签值为bj2和bj3的节点上。
如果有3个pod,则一个节点上部署2个pod,另一个节点上部署1个pod。如果要使用pod亲和性功能,可以自己编写YAML。
下一篇文章将给出 Pod Affinity 的示例。下一篇:利用腾讯云容器服务(TKE)实现应用跨可用区的高可用部署第二部分 4、综上所述,我们通过腾讯云容器平台完成了服务跨可用区的高可用部署。
通过腾讯云容器服务控制台和K8S节点亲和功能,您可以快速实现服务跨可用区的高可用部署。通过节点亲和性的语法规则可以实现复杂的部署逻辑。
腾讯云容器服务控制台极大简化了跨可用区部署的复杂度,帮助用户快速实现服务高可用。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-17
06-17
06-18
06-17
06-17
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用