如何为 DigitalOcean 静态路由操作员设置故障转移

news2024/9/24 15:25:59

静态路由操作器的主要目的是提供更大的灵活性,并在 Kubernetes 环境中控制网络流量。它使你能够根据应用程序的需求自定义路由配置,从而优化网络性能。该操作器作为 DaemonSet 部署,因此将在你的 DigitalOcean Managed Kubernetes 集群的每个节点上运行。

在本教程中,你将学习如何根据 CRD 规范管理每个工作节点的路由表,并设置故障转移网关。

本教程的主要目标是演示如何根据 CRD 规范管理每个工作节点的路由表,并配置故障转移网关。

准备工作

  • 你可以访问并且正常运行的 DigitalOcean 托管 Kubernetes 集群。
  • 在本地计算机上安装了 Kubectl CLI,并已配置为指向你的 DigitalOcean 托管 Kubernetes 集群。
  • 已配置并运行的 NAT GW Droplet(版本 2 或更高),详情请参见此处。

你需要创建一个系统来检测网关 Droplet 中的故障,该系统应符合你的需求,确保清晰准确的检测,并将误报率降至最低。可以使用 Prometheus 或 Nagios 等监控服务,在 Droplet 上设置健康检查端点,或使用 Alertmanager 等警报工具进行通知。为此,你可以使用我们市场中的监控堆栈。

注意:确保你的 NAT 网关 Droplet 在与你的 Kubernetes 集群相同的 VPC 中创建。

以下是架构图:

部署 Kubernetes 静态路由操作器

使用 kubectl 将最新版本的静态路由操作器部署到你的 DigitalOcean Managed Kubernetes 集群:

kubectl apply -f https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

注意:你可以从 k8s-staticroute-operator GitHub repo 的发布路径中检查最新版本。

检查 Operator Pod 是否已启动并正在运行:

让我们验证一下 Operator Pod 是否已启动并正在运行。

``bash kubectl get staticroutes -o wide -n staticroutes

The output looks similar to the below:

[secondary_label Output]

NAME AGE DESTINATIONS GATEWAY static-route-ifconfig.me 119s ["XX.XX.XX.XX"] XX.XX.XX.XX static-route-ipinfo.io 111s ["XX.XX.XX.XX"] XX.XX.XX.XX

现在我们检查一下操作员日志,应该没有报告任何异常:

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

你应该观察到以下输出:


Output
Found 2 pods, using pod/k8s-staticroute-operator-498vv
[2023-05-15 14:12:32,282] kopf._core.reactor.r [DEBUG   ] Starting Kopf 1.35.6.
[2023-05-15 14:12:32,282] kopf._core.engines.a [INFO    ] Initial authentication has been initiated.
[2023-05-15 14:12:32,283] kopf.activities.auth [DEBUG   ] Activity 'login_via_pykube' is invoked.
[2023-05-15 14:12:32,285] kopf.activities.auth [DEBUG   ] Pykube is configured in cluster with service account.
[2023-05-15 14:12:32,286] kopf.activities.auth [INFO    ] Activity 'login_via_pykube' succeeded.
[2023-05-15 14:12:32,286] kopf.activities.auth [DEBUG   ] Activity 'login_via_client' is invoked.
[2023-05-15 14:12:32,287] kopf.activities.auth [DEBUG   ] Client is configured in cluster with service account.
[2023-05-15 14:12:32,288] kopf.activities.auth [INFO    ] Activity 'login_via_client' succeeded.
[2023-05-15 14:12:32,288] kopf._core.engines.a [INFO    ] Initial authentication has finished.
[2023-05-15 14:12:32,328] kopf._cogs.clients.w [DEBUG   ] Starting the watch-stream for customresourcedefinitions.v1.apiextensions.k8s.io cluster-wide.
[2023-05-15 14:12:32,330] kopf._cogs.clients.w [DEBUG   ] Starting the watch-stream for staticroutes.v1.networking.digitalocean.com cluster-wide.

为了减轻网关故障的影响,建议在需要时准备一个备用网关 Droplet 以进行故障转移。尽管运营商目前不支持真正的高可用性 (HA),但执行故障转移有助于最大限度地缩短服务中断的时间。

注意:考虑到故障转移时所有运营商实例都已启动并正常运行。

假设你有一个指定的目标 IP 地址 34.160.111.145,它代表活动或主网关,其 IP 地址为 10.116.0.4,负责传输流量。这存储在 primary.yaml 文件中。

./primary.yaml

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:name: primary
spec:destinations: 
    - "34.160.111.145"gateway: "10.116.0.4"

此外,你将拥有一个 IP 地址为 10.116.0.12 的备用或辅助网关,随时准备处理同一目标 IP 地址的流量。secondary.yaml 中的 StaticRoute 定义与主网关相同,唯一不同的是网关 IP 地址和对象名称。这个配置存储在 secondary.yaml 文件中。

./secondary.yaml

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:name: secondary
spec:destinations: 
    - "34.160.111.145"gateway: "10.116.0.12"

实际的故障转移过程包括以下步骤:

  • 确定 IP 地址为 10.116.0.5 的活动网关发生故障。
  • 删除当前活动的静态路由。
  • 应用备用静态路由。

删除活动静态路由

现在让我们删除当前活动的静态路由。

kubectl delete -f primary.yaml

等待 30 到 60 秒,让每个操作员实例有足够的时间来处理对象删除;也就是说,通过从所有节点删除路由来做出响应。

应用备用静态路由

让我们使辅助静态路由处于活动状态。

 kubectl apply -f secondary.yaml

操作员应选择新的备用 StaticRoute 并输入相应的路由表条目。此后,故障转移完成。

注意:请避免使用 kubectl edit staticroute primary 等命令直接更新网关 IP 地址来修改现有的 StaticRoute,而仅修改 spec.gateway 字段。此操作目前不受支持,可能会导致失败。

测试设置

每个示例 CRD 都会创建一条静态路由,通向两个报告您的公共 IP 的网站 - ifconfig.me/ip 和 ipinfo.io/ip。典型的静态路由定义如下所示:


apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:name: static-route-ifconfig.me
spec:destinations: 
    - "34.160.111.145"gateway: "10.116.0.5"

要测试设置,请从示例位置下载示例清单:

ifconfig.me 和 ipinfo.io 的示例-

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ifconfig.me.yaml

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ipinfo.io.yaml

最后,测试 curl-test pod 是否针对每个路由回复 NAT 网关公共 IP:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip

你需要在故障转移测试期间使用相同的测试。在主网关 Droplet 出现故障时,测试结果应显示主 Droplet 的 NAT 网关公共 IP,而在辅助网关 Droplet/故障转移期间,测试结果应显示辅助 Droplet 的 NAT 网关公共 IP。

故障排除

  • 你需要检查 StaticRoute 对象:如果出现错误,首先在应用规则的每个节点的静态路由事件中查找错误。

kubectl get StaticRoute <static-route-name> -o yaml

  • 检查日志:为了深入挖掘,你可以检查静态路由操作员日志中的错误。

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

清理

要删除操作员和相关资源,请运行以下 kubectl 命令(确保你使用的发布版本与安装步骤中相同):

kubectl delete -f deploy https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

注意:上述命令还将删除关联的命名空间(静态路由)。请确保先备份你的 CRD,以备日后需要。

输出类似于:

customresourcedefinition.apiextensions.k8s.io "staticroutes.networking.digitalocean.com" deleted
serviceaccount "k8s-staticroute-operator" deleted
clusterrole.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
daemonset.apps "k8s-staticroute-operator" deleted

现在,如果你测试相同的 curl 命令,你将获得工作节点 IP 作为输出:

kubectl exec -it curl-test -- curl ifconfig.me/ip

kubectl exec -it curl-test -- curl ipinfo.io/ip 

现在检查工作节点的公共 IP:


kubectl get nodes -o wide

结论

尽管不完全支持真正的高可用性 (HA),但实施故障转移功能仍然是将网关故障影响降至最低的推荐方法。

通过在需要时准备好备用网关进行故障转移,组织可以显著减少服务中断的持续时间。

准备备用网关 Droplet 并确保在故障转移时实现平稳过渡至关重要。虽然具体实施可能因要求不同而有所变化,但优先考虑故障转移准备有助于保持服务的可靠性和不间断交付。

如果你希望了解更多关于 DigitalOcean Kubernetes 和 Droplet 云主机的相关产品信息,欢迎访问 DigitalOcean 中国区独家战略合作伙伴卓普云官网,与他们交流、咨询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以太坊基金会AMA总结:面对ETH价格疲软,团队的应对策略与展望

2024年9月5日晚&#xff0c;以太坊基金会举行了第12届AMA&#xff08;Ask Me Anything&#xff09;活动。本次活动在Twitter Space上进行&#xff0c;由以太坊联合创始人Vitalik Buterin、基金会成员Justin Drake和Dankrad Feist等核心成员参与&#xff0c;针对社区关心的多个问…

【YashanDB知识库】表数据量不多,lob数据段有大量空间,插入数据报错

问题现象 clob段异常增长&#xff0c;导致磁盘空间满&#xff0c;应用无法使用数据库。 问题风险及影响 lob段空间未复用&#xff0c;lob段空间扩张很大&#xff0c;影响磁盘占用合理分配。 空间不够&#xff0c;插入报错&#xff0c;影响业务。 问题影响的版本 所有版本…

全视通智慧病房系统旧病房改造方案

一、背景介绍 在当今医疗技术日新月异的时代&#xff0c;智慧病房作为医院现代化建设的重要一环&#xff0c;正逐步从概念走向现实&#xff0c;深刻改变着患者的就医体验与医护人员的工作模式。智慧病房的改造背景&#xff0c;根植于医疗需求的日益增长、技术创新的不断推动以及…

自定义事件分发

一、在C中创建可接收事件的接口类EventInterface&#xff0c;继承自UInterface 1、EventInterface.h #pragma once #include "CoreMinimal.h" #include "UObject/Interface.h" #include "EventInterface.generated.h" UINTERFACE(MinimalAPI) c…

页面小组件-搜索栏(二)-未经项目验证,慎重!!!

前言说明 这一版是未经过项目验证的&#xff0c;可能会有地方需要自行调整&#xff0c;如需使用&#xff0c;请慎重、慎重、再慎重&#xff01;&#xff01;&#xff01; 前言追溯 前面分享过的搜索栏组件是一个临时产物&#xff0c;经历了一两个项目之后就被淘汰了。后续在…

Aloudata AIR :国内首个 Data Fabric 逻辑数据平台

AIR 的寓意是“极致轻盈的数据交付”&#xff1a;A - Adaptive 自适应&#xff0c;I - Integration 集成&#xff0c;R - Resilience 弹性 News&#xff1a;Aloudata AIR 发布 作为国内首个 Data Fabric 逻辑数据平台&#xff0c;Aloudata AIR 通过自研的数据虚拟化技术&#…

使用树莓派学习——Linux库编程

树莓派开发——Linux静态动态库 文章目录 树莓派开发——Linux静态动态库一、分文件编程1.1 分文件编程的优点&#xff1a;1.2 分文件编程的步骤&#xff1a; 二、Linux的库2.1 函数库的概念&#xff1a;2.2 静态库和动态库的比较&#xff1a;静态数据库&#xff08;libXXX.a&a…

奖项再+1!通义灵码智能编码助手通过可信 AI 智能编码工具评估,获当前最高等级

阿里云的通义灵码智能编码助手参与中国信通院组织的可信AI智能编码工具首轮评估&#xff0c;最终获得 4 级评级&#xff0c;成为国内首批通过该项评估并获得当前最高评级的企业之一。 此次评估以《智能化软件工程技术和应用要求 第 2 部分&#xff1a;智能开发能力》为依据&…

C/C++的自由落体运动

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 这个题目非常有意思&#xff0c;可以活跃自己的思维&#xff0c;毕竟代码来源于生活&#xff0c;又返回给生活。 2. 正文 2.1 问题 题目描述&#xff1a; …

携手共建云安全未来 |“集美大学服云实习基地”授牌仪式圆满举行

集美大学服云实习基地授牌仪式 9月3日&#xff0c;集美大学服云实习基地授牌仪式在厦门成功举行。集美大学科研处副处长茅剑、计算机工程学院副院长刘晋明&#xff0c;以及安全狗副总裁&CTO陈荣有、副总裁刘春辉共同出席此次的授牌仪式。 01 会上&#xff0c;安全狗副总裁刘…

梨花声音教育退费普通话学习技巧之了解文化背景

在学习普通话的过程中&#xff0c;了解中国的文化背景是不可或缺的一环。语言不仅是交流的工具&#xff0c;更是文化的载体。通过深入了解中国的历史、文化和社会背景&#xff0c;学习者可以更好地理解和掌握普通话&#xff0c;使语言学习变得更加生动有趣。本文将从几个方面详…

监控平台总结之面试常问答案

思路 延伸的面试题总结及答案&#xff1a; 1.说说前端监控平台/监控SDK架构设计和难点亮点&#xff1f; 架构设计 数据采集层: SDK: 在前端集成的 SDK 负责采集数据&#xff0c;包括性能指标、用户行为、错误日志等。 数据收集: 实现高效的数据采集机制&#xff0c;支持实时…

C++_多态详解

多态的概念 概念&#xff1a;需要去完成某个行为时&#xff0c;当 不同的对象去完成 会产生出不同的状态。通俗点说就是 不同类型的对象去做同一个行为&#xff0c;产生的结果不同。 多态的定义及实现 虚函数 定义&#xff1a;即被virtual修饰的类成员函数称为虚函数 虚函…

多门店管理下的高效IT运维策略与实战指南

连锁门店作为直接面向消费者的服务点&#xff0c;是企业与顾客建立联系的关键触点。随着商业竞争的加剧&#xff0c;连锁门店企业纷纷通过扩大实体店面的规模来抢占市场份额。随着门店数量的激增&#xff0c;门店IT运维管理的复杂性和挑战也日益凸显。本文将深入剖析门店IT运维…

828华为云征文|采用Flexus云服务器X实例部署RTSP直播服务器

一、前言 这篇文章讲解&#xff1a; 采用华为云最新推出的Flexus云服务器X实例搭建RTSP服务器&#xff0c;完成视频直播需求。 随着实时视频流传输需求的增长&#xff0c;RTSP&#xff08;实时流协议&#xff09;服务器成为了许多视频监控、直播和多媒体应用的核心组件。在当…

有趣的手机端见缝插针游戏源码

有趣的手机端见缝插针游戏源码下载&#xff0c;注&#xff1a;本地预览请用火狐浏览器模拟移动端&#xff0c;chrome本地预览存在跨域问题。 微信扫码获取源码

vue3 响应式 API:shallowRef()和shallowReactive()

shallowRef() shallowRef()是一个用于创建浅层响应式引用的函数。它创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理。 特点&#xff1a; 只跟踪引用值的变化&#xff0c;不关心值内部的属性变化。 <template><div>{{ shallowRefObj }}</div>…

LLM 模型压缩之三: FoldGPT

0. 资源链接 论文: FoldGPT: Simple and Effective Large Language Model Compression Scheme 项目: to be released. 1. 背景动机 现有的大语言模型推理存在以下问题&#xff1a; LLM 模型因为有大量的参数&#xff0c;以及 next token 的预测方式&#xff0c;导致 LLM 模…

关于vue项目启动报错Error: error:0308010C:digital envelope routines::unsupported

周五啦&#xff0c;总结一下这周遇到的个别问题吧&#xff0c;就是关于启动项目的时候其他的东西都准备好了&#xff0c;执行命令后报错Error: error:0308010C:digital envelope routines::unsupported 这里看一下我标注的地方&#xff0c;然后总结一下就不难发现问题所在 查看…

OBS怎么设置录制配置?3个电脑录屏小技巧妥妥教会你

OBS Studio是一款广受好评的开源录屏和直播软件&#xff0c;它以其强大的功能和用户友好的操作界面而闻名。对于初次接触OBS的用户来说&#xff0c;可能会对软件的众多按钮感到困惑。本文将为你提供一份简洁明了的OBS录屏指南&#xff0c;帮助你快速上手。 演示机型&#xff1a…