iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么实现Kubernetes跨集群服务应用的高可用
  • 820
分享到

怎么实现Kubernetes跨集群服务应用的高可用

2023-06-05 21:06:44 820人浏览 安东尼
摘要

本篇文章给大家分享的是有关怎么实现kubernetes跨集群服务应用的高可用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Kubernetes 1.3版本,我们希望降低跨集群

本篇文章给大家分享的是有关怎么实现kubernetes集群服务应用的高可用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在Kubernetes 1.3版本,我们希望降低跨集群跨地区服务部署相关的管理和运营难度。

注意:虽然本文示例使用谷歌容器引擎(GKE)来提供Kubernetes集群,您可以在任何的其他环境部署Kubernetes。

我们正式开始。第一步是在谷歌的四个云平台地区通过GKE创建Kubernetes集群。

asia-east1-beurope-west1-bus-east1-bus-central1-b

我们通过下面的创建集群:

GCloud container clusters create gce-asia-east1 \--scopes cloud-platfORM \--zone asia-east1-bgcloud container clusters create gce-europe-west1 \--scopes cloud-platform \--zone=europe-west1-bgcloud container clusters create gce-us-east1 \--scopes cloud-platform \--zone=us-east1-bgcloud container clusters create gce-us-central1 \--scopes cloud-platform \--zone=us-central1-b

验证创建的集群

gcloud container clusters list NAME              ZONE            MASTER_VERSioN  MASTER_IP       NUM_nodeS  STATUS gce-asia-east1    asia-east1-b    1.2.4           104.XXX.XXX.XXX 3          RUNNINGgce-europe-west1  europe-west1-b  1.2.4           130.XXX.XX.XX   3    RUNNINGgce-us-central1   us-central1-b   1.2.4          104.XXX.XXX.XX  3          RUNNING gce-us-east1      us-east1-b      1.2.4           104.XXX.XX.XXX  3          RUNNING

怎么实现Kubernetes跨集群服务应用的高可用

下一步是起动集群并在创建的其中一个集群中部署联邦控制模块(Control Plane)。您可以参考和依照Kelsey Hightower的示例进行这步配置。

联邦服务

从联邦api获取信息,因此您可以通过联邦API制定服务属性。

当服务创建后,联邦服务自动进行如下操作:

在联邦中注册的所有Kubernetes集群中创建服务;

监控服务碎片(以及它们所在集群)的健康状况;

在公NS提供商上面创建 DNS记录(如谷歌Cloud DNS,或者AWS Route 53),以此确定你的服务客户端能够在任何时候无缝的获得相关的健康服务终端,即使当集群,可用区或者地区出现服务中断的情况时。

在注册到联邦的Kubernetes集群中的服务客户端,当联邦服务在本地集群碎片工作正常时,会优先使用本地服务碎片,否则会在最近的其他集群中选取健康的服务碎片。

Kubernetes集群联邦能够联合不同的云供应商(比如GCP、AWS)以及私有云(如OpenStack)。您只需在相应的云供应商和位置创建您的集群,并且将每个集群的API Server地址和证书信息注册到联邦集群中。

在我们的示例中,我们在四个区域创建了集群,并且在其中的一个集群中部署了联邦控制模块,我们会用这个环境来部署我们的服务。具体请参考下图。
怎么实现Kubernetes跨集群服务应用的高可用

创建联邦服务

我们先查看联邦中所有注册好的集群:

kubectl --context=federation-cluster get clustersNAME               STATUS    VERSION   AGEgce-asia-east1     Ready               1mgce-europe-west1   Ready               57sgce-us-central1    Ready               47sgce-us-east1       Ready               34s

创建联邦服务:

kubectl --context=federation-cluster create -f services/Nginx.yaml--context=federation-cluster参数通知kubectl把带相关证书信息的请求提交至联邦API服务器。联邦服务会自动在联邦中所有集群创建相应的Kubernetes服务。

你可以通过检查每一个集群中的服务进行验证,比如:

kubectl --context=gce-asia-east1a get svc nginxNAME      CLUSTER-IP     EXTERNAL-IP      PORT(S)   AGEnginx     10.63.250.98   104.199.136.89   80/tcp    9m

上面的命令假设你有一个名为gce-asia-east1a的kubectl的上下文设置,并且你有集群部署在这个区(zone)。Kubernetes服务的名字和名空间自动与你上面创建的集群服务一致。

联邦服务状态会实时体现Kubernetes对应的服务状态,例如:

kubectl --context=federation-cluster describe services nginxName:                   nginxNamespace:              defaultLabels:                 run=nginxSelector:               run=nginxType:                   LoadBalancerIP:         LoadBalancer Ingress:   104.XXX.XX.XXX, 104.XXX.XX.XXX, 104.XXX.XX.XXX, 104.XXX.XXX.XXPort:                   Http    80/TCPEndpoints:              <none>Session Affinity:       NoneNo events.

联邦服务的LoadBalancer Ingress地址会汇总所有注册的Kubernetes集群服务的LoadBalancer Ingress地址。为了让同一联邦服务在不通集群之间以及不同云供应商之间的网络正确工作,你的服务需要有外部可见的IP地址,比如Loadbalancer是常见的服务类型。

请注意我们还没有部署任何后台Pod来接收指向这些地址的网络流量(比如服务终端),所以此时联邦服务还不会认为这些服务碎片是健康的,所以联邦服务对应的DNS记录也尚未创建。

增加后台Pod

为了渲染底层服务碎片的健康状况,我们需要为服务增加后台Pod。目前需要通过直接操作底层集群的API Server来完成(为节省您的时间,未来我们可以通过一条命令在联邦服务器中创建)。例如我们在底层集群中创建后台Pod:

for CLUSTER in asia-east1-a europe-west1-a us-east1-a us-central1-adokubectl --context=$CLUSTER run nginx --image=nginx:1.11.1-alpine --port=80done

验证公NS记录

一旦Pod开始成功启动并开始监听连接,每个集群(通过健康检查)会汇报服务的健康终端至集群联邦。集群联邦会依次认为这些服务碎片是健康的,并且创建相应的公NS记录。你可以使用你喜欢的DNS供应商的接口来验证。比如,如果你使用谷歌Cloud DNS配置联邦, 你的DNS域为 ‘example.com’:

$ gcloud dns managed-zones describe example-dot-com creationTime: '2016-06-26T18:18:39.229Z'description: Example domain for Kubernetes Cluster FederationdnsName: example.com.id: '3229332181334243121'kind: dns#managedZonename: example-dot-comnameServers:- ns-cloud-a1.Googledomains.com.- ns-cloud-a2.googledomains.com.- ns-cloud-a3.googledomains.com.- ns-cloud-a4.googledomains.com.$ gcloud dns record-sets list --zone example-dot-comNAME                                                                                                 TYPE      TTL     DATAexample.com.                                                                                       NS     21600  ns-cloud-e1.googledomains.com., ns-cloud-e2.googledomains.com.example.com.                                                                                      SOA     21600 ns-cloud-e1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 1209600 300nginx.mynamespace.myfederation.svc.example.com.                            A     180     104.XXX.XXX.XXX, 130.XXX.XX.XXX, 104.XXX.XX.XXX, 104.XXX.XXX.XXnginx.mynamespace.myfederation.svc.us-central1-a.example.com.     A     180     104.XXX.XXX.XXXnginx.mynamespace.myfederation.svc.us-central1.example.com.nginx.mynamespace.myfederation.svc.us-central1.example.com.         A    180     104.XXX.XXX.XXX, 104.XXX.XXX.XXX, 104.XXX.XXX.XXXnginx.mynamespace.myfederation.svc.asia-east1-a.example.com.       A    180     130.XXX.XX.XXXnginx.mynamespace.myfederation.svc.asia-east1.example.com.nginx.mynamespace.myfederation.svc.asia-east1.example.com.           A    180     130.XXX.XX.XXX, 130.XXX.XX.XXXnginx.mynamespace.myfederation.svc.europe-west1.example.com.  CNAME    180   nginx.mynamespace.myfederation.svc.example.com.... etc.

注意:如果您使用AWS Route53来配置联邦,你可以使用相应的AWS工具,例如:

$aws route53 list-hosted-zones$aws route53 list-resource-record-sets --hosted-zone-id Z3ECL0L9QLOVBX

不管您使用什么DNS供应商, 您可以使用DNS查询工具(例如 ‘dig’ 或者 ‘nslookup’)来查看联邦为您创建的DNS记录。

从联邦集群内部的pod发现联邦服务

默认情况下,Kubernetes集群有内置的本地域名服务器(KubeDNS),并且有智能的DNS搜索路径确保针对“myservice”、“myservice.mynamespace”、”bobsservice.othernamespace”等等被您运行在Pod中的的应用软件自动扩展和解析至相应的本地集群中的服务IP。

通过引入联邦服务以及跨集群服务发现,这个概念被扩展至全局,覆盖您联邦中所有的集群。为了利用这个扩展带来的便利性,您只需使用稍微不同的服务名(比如,myservice.mynamespace.myfederation)进行解析。

使用不同的DNS名同时避免了您现有的服务在您没有做明确的配置和选择情况下,意外的被解析到不同区(zone)或地域(region)网络,导致额外的网络费用或延迟。

因此,使用我们上面的NGINX 服务,以及刚刚介绍的联邦服务DNS名,我们构想一个示例:在可用性区域us-central1-a的集群中的pod需要访问我们的NGINX服务。与其使用传统的本地集群DNS名 (“nginx.mynamespace”,自动扩展为“nginx.mynamespace.svc.cluster.local”),现在可以使用联邦服务名“nginx.mynamespace.myfederation”。此名称会被自动扩展和解析至我的Nginx服务最近的健康节点,无论它在世界的哪里。如果本地集群存在健康服务碎片,那么本地集群IP地址(通常是10.x.y.z)会被返回(被集群本地KubeDNS)。这与非联邦服务解析完全一致。

如果服务在本地集群不存在(或者服务存在但本地没有健康的后台pod),DNS查询会自动扩充至`”nginx.mynamespace.myfederation.svc.us-central1-a.example.com”。实际的行为是查找离当前可用性区域最近的服务碎片的外部IP。该扩展被KubeDNS自动触发执行,返回相关的CNAME记录。这会遍历上面示例中的DNS记录,直到找到本地us-central1 区域联邦服务的外部IP。

通过明确指定DNS名,直接指向非本地可用区域(AZ)和地域(region)的服务碎片,而不依赖于自动DNS扩展,是可行的。例如,
“nginx.mynamespace.myfederation.svc.europe-west1.example.com” 会被解析至位于欧洲的所有健康服务碎片,即使通过nslookup解析出的服务位于美国,并无论在美国是否有该服务的健康碎片。这对远程监控和其它类似应用很有用。

从联邦集群外部发现联邦服务

对于外部客户端,前文描述的DNS自动扩展已不适用。外部客户端需要指定联邦服务的全名(FQDN),可以是区域,地域或全局名。为方便起见,最好为您的服务手工创建CNAME记录,比如:

eu.nginx.acme.com        CNAME nginx.mynamespace.myfederation.svc.europe-west1.example.com.us.nginx.acme.com        CNAME nginx.mynamespace.myfederation.svc.us-central1.example.com.nginx.acme.com             CNAME nginx.mynamespace.myfederation.svc.example.com.

这样您的客户端可以一直使用左侧的短名形式,并且会被自动解析到它所在大陆的最近的健康节点上。集群联邦会帮您处理服务的failover。

处理后台Pod和整个集群的失败情况

标准Kubernetes服务集群IP已经确保无响应的Pod会被及时从服务中移除。Kubernetes联邦集群系统自动监控集群以及联邦服务所有碎片对应的终端的健康状况,并按需增加和删除服务碎片。

因为DNS缓存造成的延迟(缓存超时,或者联邦服务DNS记录TTL默认设置为三分钟,但可以调节) 可能需要这么长时间才能在某集群或服务碎片出现问题时,正确将客户端,请求failover到可用集群上。然而,因为每个服务终端可以返回多个ip地址,(如上面的us-central1,有三个选择)很多客户端会返回其中一个可选地址。

以上就是怎么实现Kubernetes跨集群服务应用的高可用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么实现Kubernetes跨集群服务应用的高可用

本文链接: https://www.lsjlt.com/news/244834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么实现Kubernetes跨集群服务应用的高可用
    本篇文章给大家分享的是有关怎么实现Kubernetes跨集群服务应用的高可用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Kubernetes 1.3版本,我们希望降低跨集群...
    99+
    2023-06-05
  • Kubernetes​怎么部署高可用kube-apiserver集群
    这篇文章主要讲解了“Kubernetes怎么部署高可用kube-apiserver集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes怎么部署高可用kube-apiserv...
    99+
    2023-06-29
  • 怎么使用kubeadm安装kubernetes 1.13高可用集群
    小编给大家分享一下怎么使用kubeadm安装kubernetes 1.13高可用集群,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!kubeadm安装kubernetes 1.13高可用集群初始化集群:配置hosts文件vi...
    99+
    2023-06-04
  • 怎么用Keepalived+HAProxy高可用集群K8S实现
    今天小编给大家分享一下怎么用Keepalived+HAProxy高可用集群K8S实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-06-29
  • MySQL中怎么实现集群高可用架构
    今天就跟大家聊聊有关MySQL中怎么实现集群高可用架构,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL+DRDB架构通过DRBD基于bloc...
    99+
    2024-04-02
  • Keepalived+HAProxy高可用集群K8S实现
    本文采用Keepalived+HAProxy的方式构建高可用集群。当你如果你有硬件负载均衡设备当然更好了。 准备环境: 主机ipk8s-master01192.168.10.4k8s...
    99+
    2024-04-02
  • MHA实现MySQL高可用集群架构
    转转连接 https://www.cnblogs.com/tanxiaojun/p/10424699.html MHA简介 MHA(Master HighAvailability)目前在MySQL高可...
    99+
    2024-04-02
  • nginx搭建高可用集群的实现方法
    目录Keepalived+Nginx 高可用集群(主从模式)Keepalived+Nginx 高可用集群(主从模式) 集群架构图 1、准备两台装有Nginx虚拟机 2、都需安装Ke...
    99+
    2023-01-28
    nginx 高可用集群 nginx 高可用
  • CentOS7怎么搭建高可用集群
    这篇文章主要讲解了“CentOS7怎么搭建高可用集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CentOS7怎么搭建高可用集群”吧!一、安装集群软件必须软件pcs,pacemaker,c...
    99+
    2023-06-28
  • CoroSync+Drbd+MySQL如何实现MySQL的高可用集群
    这篇文章主要介绍CoroSync+Drbd+MySQL如何实现MySQL的高可用集群,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!节点规划:node1.huhu.com172.16....
    99+
    2024-04-02
  • Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
    1、组件及实现的功能 Keepalived:实现对Haproxy服务的高可用,并采用双主模型配置; Haproxy:实现对Nginx的负载均衡和读写分离; Nginx:实现对HTTP...
    99+
    2024-04-02
  • Linux上怎么部署高可用的MySQL集群
    在Linux上部署高可用的MySQL集群通常可以通过使用MySQL官方提供的MySQL Group Replication或者Per...
    99+
    2024-05-06
    Linux MySQL
  • Redis5之后版本的高可用集群搭建的实现
    一、安装redis 1、安装gcc yum install gcc 2、下载redis-5.0.8.tar.gz 3、把下载好的redis-5.0.8.tar.gz放在/gyu...
    99+
    2024-04-02
  • 怎么构建Mysql高可用集群系统
    本篇内容主要讲解“怎么构建Mysql高可用集群系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么构建Mysql高可用集群系统”吧!一、 MySQL复制的实现...
    99+
    2024-04-02
  • 怎么在MySQL数据库中实现MMM高可用群集架构
    这篇文章给大家介绍怎么在MySQL数据库中实现MMM高可用群集架构,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MMM高可用架构说明mmm_mond:监控进程,负责所有的监控工作,决定...
    99+
    2024-04-02
  • MySQL中MHA高可用集群是怎样的
    本篇文章为大家展示了MySQL中MHA高可用集群是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、什么是MHA传统的主从复制如果主库宕机,其余从库不会自动的...
    99+
    2024-04-02
  • redis sentinel监控高可用集群实现的配置步骤
    目录一、端口转发二、修改HOST文件三、用第三方代理haproxy四、插曲一、端口转发 如果在一个主机里面,安装了两个redis实例,可以在项目里面配置IP端口,用iptables转...
    99+
    2024-04-02
  • 使用Redis5怎么搭建一个高可用集群
    本篇文章为大家展示了使用Redis5怎么搭建一个高可用集群,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、安装redis安装gccyum install gcc下载redis-...
    99+
    2023-06-14
  • 怎么在CentOS 7下搭建高可用集群
    本篇内容主要讲解“怎么在CentOS 7下搭建高可用集群”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在CentOS 7下搭建高可用集群”吧!一、安装集群软件必须软件pcs,pacemake...
    99+
    2023-06-16
  • mongodb3.4集群搭建实战之高可用的分片+副本集
    前言 最近因为工作的原因,在学习使用mongodb数据库,mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群,分享出来供大...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作