如何为 DigitalOcean 静态路由操作员设置故障转移
静态路由操作器的主要目的是提供更大的灵活性,并在 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 中国区独家战略合作伙伴卓普云官网,与他们交流、咨询。
相关文章:

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

Ansible简单部署与使用
目录 环境安装Ansibleapt installmarkupsafe error 配置Ansible创建个人目录ansible.cfghosts 测试Ansibleping批量执行自定义命令 环境 Ubuntu 20.04 安装Ansible apt install sudo apt install ansiblemarkupsafe error 安装成功后,尝试运行ansibleÿ…...

Harmony Next charles 抓包指南
1.选择安装移动证书 代理信息如下 2.设置手机代理 手机与电脑连接同一网络,然后配置步骤 1 的代理 路径:设置-wlan-选择当前网络编辑-代理-保存 注意:手机配置代理后,目前会默认断开连接,需要手动再连接下 wifi 3.鸿…...

【HarmonyOS】Beta最新对外版本IDE下载和环境配置
【HarmonyOS】Beta最新对外版本IDE下载和环境配置 前言 目前华为HarmonyOS的系统版本已经从Develop Beta升级为Beta预览版,全面开放。再也不需要白名单限制,才能下载使用最新的IDE和预览最新的开放文档了。 IDE下载和安装 Beta IDE下载地址 1.根据你…...

2024年9月第2周AI资讯
阅读时间:3-4min 更新时间:2024.9.9-2024.9.13 目录 Groq推出多模态大模型LLaVA v1.5 7B AI通过重读问题可以变得更聪明 美国Weave公司发布Isaac多功能个人机器人 特斯拉机器人出租车将实现无线充电 Adobe视频编辑新时代 无人驾驶汽车超越人类 AI…...

【软件使用-MEGA】构建进化树报错
*_summary.txt报错: MEGA-CC 10.2.6 Molecular Evolutionary Genetics Analysis Build#: 10210527-x86_640% Reading distance matrix MEGA-CC has logged the following error:When 2024年09月13日 下午 01时32分49秒 下午Data …...

面试常见八股
JAVA篇 基础 1、自动拆箱和装箱 装箱:装箱是将值类型(如int、double、struct等)转换为object类型或任何接口类型的过程。由于object是所有类型的基类(在.NET中),并且接口是引用类型,因此装箱…...

第十八章 番外 余弦相似度
余弦相似度(Cosine Similarity)是一种衡量两个非零向量之间角度的度量方式,用于评估它们之间的相似性。它的值范围从 -1 到 1,其中 1 表示完全相同的方向(即向量完全相同),0 表示正交࿰…...

HPA和helm
HPA pod的数量进行扩缩容 针对控制器创建的pod deployment: replica: 静态:edit yaml:apply -f HPA:基于cpu的利用率来实现pod数量的自动伸缩。 Horizontal pod autoscaling yaml文件————主流——————…...

基于人工智能的智能语音助手
语音助手的自然语言处理模块是语音助手系统的关键组成部分。通过这个模块,系统能够识别用户的意图并做出相应的回应。我们可以使用NLP技术来解析文本输入,并将其转换为系统可以理解的命令或指令。在本项目中,我们将结合语音识别、自然语言处理…...

java实际开发——数据库存储金额时用什么数据类型?(MySQL、PostgreSQL)
目录 java开发时金额用的数据类型——BigDecimal MySQL存储金额数据时用的数据类型是——decimal PostgreSQL存储金额数据时用的数据类型是——decimal 或 money java开发时金额用的数据类型——BigDecimal https://blog.csdn.net/Jilit_jilit/article/details/142180903?…...

Java 设计模式-状态模式
目录 一. 概述 二. 主要角色 三. 代码示例 四. 优缺点 优点: 缺点: 五. 常见应用场景 一. 概述 状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式把所有的与一个特定…...

2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
1.编写一个图像二维卷积程序。它应该能够处理任何灰度输入图像,并使用以下内核进行操作: %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy import linalg import random as rm import math import cv2# import and …...

动态IP池的IP都是纯净IP吗?
在当今互联网时代,动态IP池作为一种网络资源管理策略,被广泛应用于数据抓取、市场调研、广告验证等多种场景中。动态IP池能够提供大量可轮换的IP地址,以帮助用户避免因频繁访问同一网站而被封禁IP的情况。然而,一个关键的问题是&a…...

【MySQL】查询表中重复数据、模糊查询列信息、快速copy表数据(1)
一、SQL查询重复的数据: 1、SQL格式: Select * From 数据表 Where 重复记录字段 in ( select 重复记录字段 From 数据表 Group By 重复记录字段 Having Count(重复记录字段)>1) 2、举例: 在这个patient_member_info表中,我们…...

计算机操作系统之并行性与并发性笔记
目录 在计算机操作系统中,并行性与并发性是两个既相似又有区别的重要概念 并行性: 并发性: 可以通过多任务处理和资源共享来具体说明 并发性的例子 并行性的例子 总结 在计算机操作系统中,并行性与并发性是两个既相似又有区别…...

顶级高效的ChatGPT论文润色提示词和使用技巧
在学术研究中,精确和高效地对文本进行润色和修改是一个必不可少的重要环节。随着学术论文篇幅的增长和内容的复杂度上升,找到一种能够有效整理和优化修改内容的方法变得尤为关键。本文将探讨如何利用ChatGPT作为工具,通过具体的指令和策略,来优化文本的修改过程,提高学术写…...

WebAPI (一)DOM树、DOM对象,操作元素样式(style className,classList)。表单元素属性。自定义属性。间歇函数定时器
文章目录 Web API基本认知一、 变量声明二、 DOM1. DOM 树2. DOM对象3. 获取DOM对象(1)、选择匹配的第一个元素(2)、选择匹配多个元素 三、 操作元素1. 操作元素内容2. 操作元素属性(1)、常用属性(href之类的)(2)、通过style属性操作CSS(3)、通过类名(cl…...

若依框架开发
若依环境 介绍 若依是一款快速开发平台(低代码),用于快速构建企业级后台管理系统,它提供了许多常用的功能模块和组件,包括权限管理、代码生成、工作流、消息中心等 官方地址: https://www.ruoyi.vip/ 基于Spring Boot和Spring Cloud…...

局域网windows下使用Git
windows下如何使用局域网进行git部署 准备工作第一步 ,ip设置设置远程电脑的ip设置,如果不会设置请点击[这里](https://blog.csdn.net/Black_Friend/article/details/142170705?spm1001.2014.3001.5501)设置本地电脑的ip:验证 第二步&#x…...

Redis访问工具
使用Redis存储缓存数据,如何通过Java去访问Redis? 防止后面看晕,先来张图。 1. Redis的客户端库 Redis的客户端库是Redis官方提供的,用于让Java等编程语言与Redis服务器进行通信的工具包。常见的Redis客户端库有多个,…...

vue3+ant design vue动态实现级联菜单~
1、这里使用的是ant design vue 的TreeSelect 树选择来实现的。 <a-form-item name"staffDept" label"责任部门" labelAlign"left"><a-tree-selectv-model:value"formState.staffDept"show-search//允许在下拉框中添加搜索框…...

软件可维护性因素例题
答案:C 知识点: 系统可维护性因素决定 可理解性 可测试性 可修改性 选项C可移植性错误...

git的一些操作
参考视频: git分支详解(约10分钟掌握分支80%操作),git-branch,git分支管理,git分支操作,git分支基础和操作,2023年git基础使用教程 不同的分支相当于不同的平行世界 合并分支 两个分支是我们项…...

opencv实战项目二十三:基于BEBLID描述符的特征点匹配实现表盘校正
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、特征点匹配介绍二、特征点检测三、特征描述符计算四,描述符的匹配筛选五,根据匹配结果映射图片六,整体代码:…...

数据库是全表扫描是怎么扫描法?
全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。 在执行全表扫描时,数据库会逐行扫描表中的所有记录,以找到符合查询条件的记录。这种扫描方式适用于没有为查询条件中的字段建立索引的情况。全…...

认准这10款人力资源系统,90%的企业都在用!
本文将为大家推荐十款主流的人力资源系统,为企业选型提供参考! 想象一下,企业在不断发展壮大的过程中,员工数量逐渐增多,人事管理变得越来越复杂。如果没有一个高效的人力资源系统,就如同在大海中航行却没有…...

2024年我的利基出版转型——新战略与重点解析
这篇文章酝酿已久。这是我在网络出版策略上投入数百小时后得出的成果。 像我们这个行业的许多人一样,即网络出版行业,我一直忙于彻底改造整个出版业务。 这是一段漫长的旅程,这是肯定的。 我预感在此过程中还会有更多调整,但我…...

【数据结构】双向链表专题
目录 1.双向链表的结构 2.双向链表的实现 2.1初始化 以参数的形式初始化链表: 以返回值的形式初始化链表: 2.2尾插 2.3打印 2.4头插 2.5尾删 2.6头删 2.7查找 2.8在指定位置之后插入数据编辑 2.9删除pos节点 2.10销毁 3.整理代码 3.1…...

大二上学期计划安排
大二上学期计划安排 学期目标: 加强算法学习,提升算法思维,为以后的算法竞赛做准备学习java知识,学习框架,构建知识体系,深入底层,增强理解增加项目经验,独立完成至少一个项目,并进行交流,优化增强团队凝聚力,营造良好的团队氛围阅读书籍,阅读至少3本以上经典书籍 日常学习安…...