本文来源 | 云+社区专栏文章
作者 | 杨泽华,腾讯云高级解决方案架构师。8年大型互联网公司从业经验,5年云计算行业工作经验。对云计算平台基础架构、网络架构等有深入的理解。专注于互联网行业高可用方案、多活方案、迁移方案设计。
本文描述如何使用腾讯云容器服务(TKE)实现跨可用区的应用高可用部署,包含如下内容:
1.高可用部署架构
2.使用容器服务(TKE)进行高可用部署
3.关于亲和性和反亲和性说明
4.总结
01高可用部署架构
IDC在全球范围内,针对多个行业的中小型企业(员工数小于1000名)的调研显示,近80%的公司预计,云服务器每小时的停机成本至少在2万美元以上,而超过20%的企业估算其云服务器每小时的停机成本至少为10万美元。
由此可见,云服务器停机对于云上企业的损失不容小觑,云服务商高可用方案越来越成为企业上云最重要的选择标准之一。在“上云”已经成为共识之后,如何进行高可用部署呢?
传统模式下,使用云主机实现高可用部署的架构图如下:
云主机实现高可用部署
将云主机分散在不同的可用区,利用负载均衡(CLB)支持跨可用区分发的特性,实现业务流量跨可用区分发。当一个可用区(AZ)出现故障时,流量切换到另一个可用区(AZ),由此实现高可用部署。
使用云主机搭建业务环境,需要在云主机上部署web服务器(Nginx,Tomcat等),然后再部署业务代码,随着业务规模的增大,发布、部署的时间会变长。
随着容器的盛行,越来越多的企业采用DevOps, 使用容器部署业务。本文描述了如何使用腾讯云容器服务(TKE)进行业务高可用部署。部署架构如下:
两个Node节点分布位于同一个地域的两个可用区,两个业务的Pod分布部署在2个Node上,使用CLB实现流量负载均衡。
下面我们看看如何使用腾讯云容器快速的实现应用高可用部署。
02使用容器服务(TKE)进行高可用部署
在本文中我们使用一个简单的swagger应用作为示例,实现高可用部署。swagger-ui的下载地址:https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/installation.md。
在docker的镜像仓库里已经有了制作好的swaggerui镜像,可以直接使用。 也可以自己下载源码制作成镜像。 我们使用docker镜像仓库里的镜像。
登陆腾讯云容器控制台,
https://console.cloud.tencent.com/tke2/cluster?rid=8 创建一个容器集群。
容器集群创建成功之后,创建新的节点:
这里添加2个节点,分别分布到2个可用区:北京二区、北京三区:
添加成功后如下图:
集群创建成功后下面制作镜像。
制作镜像
首先我们创建一个镜像仓库,设置为公有:
腾讯云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
给刚刚拉取的swaggerui镜像打标签:
docker tag swaggerapi/swagger-ui ccr.ccs.tencentyun.com/zehua/swaggerui:1.2
将swaggerui镜像推送到腾讯云镜像仓库:
docker push ccr.ccs.tencentyun.com/zehua/swaggerui:1.2
高可用部署
下面进行高可用部署。首先创建deployment,创建deployment时,选择合适的namespace,如下图:
本示例将swagger部署到zehua-ns这个namespace下:
选择刚刚创建的swaggerui镜像:
注意这里的端口号是8080。
这里为了演示,Pod数量创建2个,将这2个pod分发到不同的可用区中。你可以根据实际情况选择合适的pod数量。
节点调度策略这里有2个选择: 按节点调度,自定义调度规则。可以选择任意一种方式进行调度。
按节点调度,可以选择当前容器集群的节点, TKE会将Pod均匀调度到这些节点上。 本示例中创建2个Pod,TKE会将2个Pod分别调度到这2个节点上。
如果选择按自定义规则调度,需要指定节点的标签。
我们给2个节点打了AZ的标签,分别是bj2,bj3. 打标签方式如下:
分别给2个节点新增标签:
也可以使用命令行的方式打标签。 使用kubectl进行添加。传统模式下,使用云主机实现高可用部署的架构图如下:
kubectl get nodes --show-labels
kubectl label nodes 10.0.2.12 az=bj2
kubectl label nodes 10.0.5.17 az=bj3
设置完高可用部署后,进行访问设置。开启公网访问, 注意端口映射的设置:
完成后点击创建workload。
创建完成后,可以在service里面看到创建的服务:
在Pod管理里可以看到2个Pod被调度到了2个节点上:
访问Service里的负载均衡IP,可以看到部署成功:
至此我们完成了业务高可用部署。
03关于亲和性和反亲和性
通过腾讯云控制台查看swagger应用的YAML文件,可以看到,通过控制台实现Pod调度是通过节点亲和性(nodeAffinity:)来实现的。
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- 10.0.2.12
- 10.0.5.17
节点亲和性通过指定 preferredDuringSchedulingIgnoredDuringExecution和
requiredDuringSchedulingIgnoredDuringExecution 来实现亲和性的软限制和硬限制。节点亲和性的语法支持:In, NotIn, Exists, DoesNotExist, Gt, Lt。 通过这些语法,可以灵活的控制台节点亲和性。本例中使用了http://kubernetes.io/hostname这个默认标签作为调度,调度到hostname为 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
这里的调度策略使用了节点的AZ标签,2个pod会被调度到标签值为bj2,bj3的节点上。 如果有3个pod,某一个节点上会部署2个pod,另一个节点上部署一个pod。
如果希望使用pod affinity的特性,可以通过自己编写YAML的方式实现。 下一篇文章中将会给出Pod Affinity的示例。
04总结
至此,我们完成了通过腾讯云容器平台实现业务跨可用区的高可用部署。通过腾讯云TKE控制台,使用K8S节点亲和性的功能,可以快速实现业务跨可用区的高可用部署。通过节点亲和性的语法规则,可以实现复杂的部署逻辑。腾讯云TKE控制台大大简化了跨可用区部署的复杂性,帮助用户快速实现业务的高可用。
相关推荐
容器演示 腾讯云容器服务提供了托管Kubernetes服务,完全兼容原始API和功能特性,并与腾讯云基础计算,存储,网络产品深度集成,简化了业务容器化流程,提升了...使用容器服务TKE部署WordPress应用 待更新-dehonghao
3. **腾讯云服务**:深入探讨腾讯云的核心服务,如CVM(云服务器)、COS(对象存储)、CDN(内容分发网络)、RDS(关系型数据库)、TKE(容器服务)等,以及它们在企业中的应用案例。 4. **解决方案与最佳实践**:...
腾讯云提供了TKE(Tencent Kubernetes Engine),一个基于Kubernetes的容器服务,帮助企业轻松管理和部署容器化应用。 2. **Kubernetes**:Kubernetes(简称K8s)是目前最流行的容器编排系统,用于自动化容器的部署...
### 《2023腾讯云容器和函数计算技术实践精选集》知识点解析 #### 一、概述 随着云计算技术的飞速发展,容器技术和函数计算已成为推动数字化转型的重要工具。腾讯云作为国内领先的云服务提供商之一,在容器和函数...
本文将详细介绍腾讯云SDK for Python中的TKE模块,即用于操作腾讯云容器服务TKE(Tencent Kubernetes Engine)的接口。 Tencentcloud-sdk-python-tke-3.0.395是腾讯云为Python开发者提供的TKE SDK的一个版本,它...
【腾讯云从业者基础认证考试】是一项针对初入云计算行业的专业人士所设计的认证考试,旨在验证考生对于腾讯云产品和服务的基本理解和应用能力。该考试通常包括但不限于云基础概念、云服务类型、腾讯云产品功能以及...
该服务还提供了多种接入方式,例如云服务器CVM日志分析、容器服务日志(TKE & EKS)和TCHouse-C日志等,帮助企业快速接入Elasticsearch服务。 此外,该服务还提供了自定义Filebeat数据接入、Logstash数据投递等功能...
TKE是腾讯云提供的企业级容器服务,基于Kubernetes,让用户可以轻松部署和管理容器化应用。通过这款SDK,开发者可以在Python环境中编写代码,实现对TKE集群的创建、扩展、监控和管理等操作。 该SDK包含的核心功能有...
核心技术如分布式服务治理框架Dubbo、分布式消息中间件RocketMQ等,为企业构建高可用、高性能的应用提供了支撑。其飞天分布式计算系统是阿里云的一大亮点,具备大规模数据存储和处理能力。在交付模式上,阿里云不仅...
例如,腾讯云的COS对象存储服务,提供了高可用、高安全的云端存储解决方案;TKE容器服务则帮助企业轻松管理和扩展微服务应用;此外,腾讯云的AI开放平台为企业提供了丰富的AI模型和开发工具,降低了人工智能应用的...
**日志采集功能**是腾讯云容器服务TKE为用户提供的集群内日志收集工具。它可以将集群内服务或节点特定路径文件的日志发送至Kafka、Elasticsearch或腾讯云的日志服务(CLS)等平台。 - **采集原理**:通过在集群内部署...
它是腾讯云为TKE提供的Python开发工具包,使得开发者可以方便地在Python环境中调用TKE的相关API,进行集群管理、节点操作、应用部署等一系列Kubernetes相关的任务。SDK遵循Python开发的最佳实践,提供了一套完整的...
2. 业务支撑能力的提升:在腾讯会议和在线教育平台的实际案例中,通过腾讯云的TKE容器服务,快速实现了资源的弹性扩容,保障了特殊时期的业务需求和业务的平稳发展。 3. 客户云原生改造实践总结:文档中提到了1000+...
- 作业帮的案例展示了如何通过腾讯云容器服务TKE(Tencent Kubernetes Engine)进行大规模业务容器化改造,应对在线教育业务的快速增长。面对高并发、低延迟需求,腾讯云提供了内核和Kubernetes的优化,解决了负载...
云原生技术是一种以容器化包装、微服务、持续集成、持续部署和DevOps文化为基础的新兴技术。它实现了软件开发与运维的高度自动化和敏捷化。随着云计算服务的普及,越来越多的企业开始转向使用云原生技术构建和优化其...
对于已创建腾讯云 容器服务 TKE 的用户,您可以在 Prometheus 监控服务控制台 创建 Prometheus 实例并安装 Prometheus 监控插
此外,COS还可以与其他腾讯云服务无缝集成,如与云函数(SCF)、容器服务(TKE)等结合,构建更复杂的应用架构。 总结来说,腾讯云COS是一个强大且灵活的云存储解决方案,其应用场景广泛,源码分析能加深对其工作...
- **阿里云ACK**:提供了高性能、可伸缩的容器应用管理服务,支持全生命周期管理,集成了阿里云的多项服务,如虚拟化、存储、网络和安全,构建了云端的最佳容器运行环境。 - **腾讯云TKE**:基于原生Kubernetes,...
首先,公有云上的K8S产品如阿里云的ACK、腾讯云的TKE和华为云的CCE,都提供了便捷的一站式部署和运维服务,它们深度集成云服务商的各类服务,如存储、网络和安全,使得用户能够快速构建和管理容器应用。然而,这些...
【黑石物理服务器2.0 CPM】是腾讯云推出的一种新型云计算服务,它结合了传统物理服务器的高性能和无虚拟化的特性,以及云服务的灵活性和便捷性。这款服务以包年包月的形式提供,旨在为企业提供云端的、安全隔离的...