在CSDN学Golang云原生(Kubernetes集群管理)

一,Node的隔离与恢复

在 Kubernetes 集群中,Node 的隔离与恢复通常可以通过以下方式实现:

  1. 使用 Taints 和 Tolerations 实现隔离

Taints 和 Tolerations 是 Kubernetes 中用于节点调度的机制。通过给节点添加 taints(污点),可以让节点拒绝某些特定的 Pod 调度。而对于需要运行在这些节点上的 Pod,我们需要在 Pod 的定义中设置 tolerations(容忍度)来允许它们被调度到这些污点节点上。

例如,我们可以使用以下命令将一个污点添加到 Node 上:

kubectl taint nodes <node-name> key=value:taint-effect

其中 key 和 value 用于指定污点的名称和值,taint-effect 用于指定污点对应的效果,包括 NoSchedulePreferNoSchedule 和 NoExecute

然后,在定义 Pod 时,我们需要为它设置 tolerations:

tolerations:
- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"

这样就可以让这个 Pod 能够被调度到带有相应污点的节点上了。

  1. 使用 Node Selector 实现隔离

另一种实现隔离的方式是使用 Node Selector。Node Selector 允许你根据标签选择要运行 Pod 的节点。如果某个节点没有符合条件的标签,那么就不会被选中来运行 Pod。

例如,我们可以使用以下命令为一个节点添加标签:

kubectl label nodes <node-name> key=value

然后,在定义 Pod 时,我们需要为它设置 Node Selector:

nodeSelector:key: value

这样就可以让这个 Pod 只能被调度到带有相应标签的节点上了。

  1. 使用 DaemonSet 实现恢复

在 Kubernetes 中,DaemonSet 是用于在每个节点上运行一个副本的控制器。通过使用 DaemonSet,我们可以确保每个节点都运行了某个特定的 Pod 副本。

如果某个节点出现故障或者被移除了,Kubernetes 会自动将该节点上对应的 Pod 删除,并在其他可用节点上重新创建一个新的 Pod 副本。这样就可以实现对 Node 的快速恢复。

在 Kubernetes 集群中实现 Node 的隔离和恢复通常需要结合多种技术手段进行综合应用。

二,Node的扩容

在 Kubernetes 集群中,可以通过以下步骤实现 Node 的扩容:

  1. 准备新的节点

首先,需要准备一个或多个新的节点用于扩容。这些节点可以是物理机器、虚拟机或者云主机等。

  1. 安装 Kubernetes 软件

在新的节点上安装和配置 Kubernetes 软件。具体来说,需要安装 kubelet、kube-proxy 和 container runtime 等组件,并确保它们能够正常运行。

  1. 加入集群

将新的节点加入到 Kubernetes 集群中。这可以通过执行以下命令实现:

kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

其中 <master-ip> 和 <master-port> 分别为 Kubernetes 主节点的 IP 地址和端口号;<token> 为加入集群所需的令牌;<hash> 为 CA 证书哈希值。这些信息可以通过在主节点上执行 kubeadm token create 和 kubeadm token create --print-join-command 命令获取。

  1. 验证加入状态

检查新的节点是否已经成功加入到集群中。可以使用以下命令列出当前所有的节点:

kubectl get nodes

如果一切顺利,应该能够看到新增加的节点已经出现在列表中。

  1. 手动调度 Pod

如果希望将某些特定的 Pod 调度到新的节点上,可以使用 Node Selector 或 Taints 和 Tolerations 等技术手段来实现。例如,我们可以为新的节点设置标签,然后在 Pod 定义中指定相应的 Node Selector,或者在新的节点上添加污点,并在需要运行该 Pod 的节点上设置 tolerations。

  1. 自动调度 Pod

最后,如果希望 Kubernetes 能够自动将一些未调度的 Pod 调度到新的节点上,可以考虑扩容集群中的其他组件,如 Deployment、StatefulSet 等控制器。这些控制器会自动创建和管理多个副本,并确保它们均匀地分布在不同的节点上。

在 Kubernetes 集群中进行 Node 的扩容通常需要结合多种技术手段进行综合应用

Golang云原生学习路线图、教学视频、文档资料、面试题资料(资料包括C/C++、K8s、golang项目实战、gRPC、Docker、DevOps等)免费分享 有需要的可以加qun:793221798领取

三,Namespace与Context集群环境共享与隔离

Kubernetes 中的 Namespace 和 Context 都是用于实现多租户和多集群环境下资源共享和隔离的关键组件。

Namespace 是 Kubernetes 中用于将一个物理集群划分为多个虚拟集群的机制。通过在不同的 Namespace 中创建和管理 Pod、Service、ReplicationController 等资源对象,可以有效地隔离不同应用或用户之间的资源使用,并提供更细粒度的权限控制。例如,可以为每个团队或部门创建一个独立的 Namespace,并将相应的应用部署到该 Namespace 中。

Context 则是 Kubernetes CLI 工具中用于管理多个 Kubernetes 集群配置信息的机制。通过定义不同的 Context,可以轻松地在不同的 Kubernetes 集群之间进行切换,并且保持相应配置信息(如 API Server 地址、认证信息等)隔离和安全。例如,可以定义两个 Context 分别指向生产环境和测试环境中运行的 Kubernetes 集群,并使用 kubectl config use-context 命令来快速切换。

同时,Namespace 和 Context 也可以结合起来使用,以实现更加复杂的场景下资源共享和隔离。例如,在一个大型企业内部,可能需要同时管理数十个 Kubernetes 集群,并且需要为每个项目或部门创建独立的 Namespace 来实现资源隔离。此时,可以为每个 Kubernetes 集群配置一个独立的 Context,并将相应的 Namespace 对象映射到该 Context 中,从而实现 Namespace 和 Context 的双重隔离和共享。

需要注意的是,在使用 Namespace 和 Context 时,必须确保正确地配置 RBAC(基于角色的访问控制)策略,以限制用户或服务账户对资源对象的访问权限。另外,在多集群环境下还需要考虑网络互通、数据同步等问题,这些都需要根据具体情况进行详细设计和实现。

四,基于节点资源的pod驱逐机制

在 Kubernetes 中,当节点资源(如 CPU、内存等)不足时,会触发 Pod 驱逐机制,即根据一定的策略将某些 Pod 从当前节点中驱逐出去,以释放资源供其他 Pod 使用。Pod 驱逐机制是 Kubernetes 自我保护机制的一部分,旨在避免因资源耗尽导致整个集群崩溃。

Kubernetes 支持多种 Pod 驱逐策略,其中最常用的是基于优先级的策略。具体来说,在每个 Node 上都有一个叫做 kubelet-eviction-manager 的守护进程负责监控该 Node 上所有运行中的 Pod,并根据配置的优先级和条件来判断哪些 Pod 应该被驱逐。

在进行基于优先级的驱逐时,kubelet-eviction-manager 会根据下列原则进行判断:

  1. 优先保留有高优先级别需求的 Pod。
  2. 当同一 Namespace 下存在多个可被替代的 Pod 时,则保留“最少就绪时间”较长的那个。
  3. 如果没有可被替代的低优先级别 Pod,则考虑删除已经执行完成但未被标记为不可删除(非必要性)或者未设置 deadline 的低优先级别 Pod。
  4. 如果仍然无法满足需求,则依次判断同一 Node 上的其他 Pod,直到满足条件或者所有 Pod 都被判断过为止。

需要注意的是,Pod 的优先级别、资源限制和 QoS 等因素都会影响驱逐机制的决策结果。因此,在进行 Pod 调度和管理时,必须合理设置这些参数,并确保在出现资源不足时能够正确地进行 Pod 驱逐。同时,还应该定期监控集群中的资源使用情况,并及时采取措施以避免出现资源耗尽等问题。

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

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

相关文章

【LeetCode】单链表——刷题

你曾经灼热的眼眶&#xff0c;是人生中少数的笨拙又可贵的时刻。 文章目录 1.反转单链表 题目思路及图解 代码中需要注意的问题 2.移除链表元素 题目思路及图解 代码中需要注意的问题 大家好&#xff0c;我是纪宁。 这篇文章分享给大家一些经典的单链表leetcode笔试题的…

Rust- 变量绑定

In Rust, you bind values to a variable name using the let keyword. This is often referred to as “variable binding” because it’s like binding a name to a value. Here’s a simple example: let x 5;In this example, x is bound to the value 5. By default, …

类变量和类方法

类变量和类方法 引入 思考&#xff1a;有一群小孩在玩堆雪人&#xff0c;不时有新的小孩加入&#xff0c;请问如何知道现在有多少小孩在玩&#xff1f; 静态变量内存分析 1、静态变量被对象共享 2、静态变量可能在堆中&#xff0c;也可能在方法区的静态域中&#xff0c;这…

在 Windows 上搭建 NTP 服务器

文章目录 一、基础环境二、适用场景三、操作步骤四、常用的NTP服务器五、参考资料 版权声明&#xff1a;本文为博主原创文章&#xff0c;于2023年7月30日首发于CSDN&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/u011046671 一、基础…

Flutter 的线程模型和异步原理

本文字数&#xff1a;&#xff1a;36130字 预计阅读时间&#xff1a;91分钟 在Android应用中&#xff0c; 用户时常会遇到界面卡顿的情况&#xff0c;非常影响用户的体验。作为Android开发肯定都知道&#xff1a;应用在主线程里做了大量的耗时操作(例如文件读写&#xff0c; 数…

stable diffusion打造自己专属的LORA模型

通过Lora小模型可以控制很多特定场景的内容生成。 但是那些模型是别人训练好的&#xff0c;你肯定很好奇&#xff0c;我也想训练一个自己的专属模型&#xff08;也叫炼丹&#xff5e;_&#xff5e;&#xff09;。 甚至可以训练一个专属家庭版的模型&#xff08;family model&…

RT1052 的周期定时器

文章目录 1 PIT 周期中断定时器2 PIT定时器的使用3 PIT定时器配置3.1 PIT 时钟使能。3.1.1 CLOCK_EnableClock 3.2 初始化 PIT 定时器3.2.1 PIT_Init 3.3 设置 通道 0 的 加载值3.3.1 PIT_SetTimerPeriod 3.4 使能 通道 0 的中断3.4.1 PIT_EnableInterrupts 3.5 开启 PIT 定时器…

PysparkNote006---pycharm加载spark环境

pycharm配置pyspark环境&#xff0c;本地执行pyspark代码 spark安装、添加环境变量不提了 File-Settings-Project-Project Structure-add content root添加如下两个路径 D:\code\spark\python\lib\py4j-0.10.7-src.zipD:\code\spark\python\lib\pyspark.zip 2023-07-26 阴 于…

Redis缓存预热

说明&#xff1a;项目中使用到Redis&#xff0c;正常情况&#xff0c;我们会在用户首次查询数据的同时把该数据按照一定命名规则&#xff0c;存储到Redis中&#xff0c;称为冷启动&#xff08;如下图&#xff09;&#xff0c;这种方式在一些情况下可能会给数据库带来较大的压力…

监听器Listener详解

1、Listener 是由Java编写的WEB组件&#xff0c;主要完成对内置对象状态的变化 &#xff08;创建、销毁&#xff09;和属性的变化 进行监听&#xff0c;做进一步的处理作用&#xff1a;主要对session和application内置对象监听。 2、对application监听 package cn.mldn.lxh.l…

AcWing 算法基础课二 数据结构 链表 栈 队列 并查集 哈希表

单链表. AcWing. 826.单链表 import java.util.Scanner; public class Main{static int[] e new int[100010];//结点i的值static int[] ne new int[100010];//结点i的next指针static int idx,head;//head是头结点&#xff0c;idx存当前已经用到了哪个点public static void i…

【简化程序设计】C++STL“容器适配器“之栈和队列

【STL】容器适配器之栈和队列 stack的介绍和使用stack的介绍stack的使用stack的模拟实现 queue的介绍和使用queue的介绍queue的使用queue的模拟实现 priority_queue的介绍和使用priority_queue的介绍priority_queue的使用priority_queue的模拟实现 容器适配器什么是容器适配器&…

Vision Transformer (ViT):图像分块、图像块嵌入、类别标记、QKV矩阵与自注意力机制的解析

作者:CSDN @ _养乐多_ 本文将介绍Vision Transformers (ViT)中的关键点。包括图像分块(Image Patching)、图像块嵌入(Patch Embedding)、类别标记、(class_token)、QKV矩阵计算过程、余弦相似度(cosine similarity)、Softmax、自注意力机制等概念。主要介绍QKV矩阵…

C# XML 的读写以及和JSON对比

通过我们进行跨平台传输&#xff0c;我们需要把某一个平台特有的数据类型转化为一种通用的数据类型序列化和反序列化 通用形式有两种&#xff1a; 《1》JSON&#xff1a;是一种以键值形式组成 《2》XML&#xff1a;可扩展标记语言 XML文件格式要求&#xff1a; 《1》头部需要有…

基于x-scan扫描线的3D模型渲染算法

基于x-scan算法实现的z-buffer染色。c#语言&#xff0c;.net core framework 3.1运行。 模型是读取3D Max的obj模型。 x-scan算法实现&#xff1a; public List<Vertex3> xscan() {List<Vertex3> results new List<Vertex3>();SurfaceFormula formula g…

NFS、FTP、SMB、WebDav、DLNA协议区别

文章目录 NFSFTP/SFTP/SCPSMB/SambaWebDAVDLNA总结 随着智能化互联时代的来临&#xff0c;家中的智能设备越来越多&#xff1a;电视机、平板、游戏主机、电脑、手机等遍及家中各个角落&#xff0c;同时设备之间共享数据的需求变的越来越强烈。比如同步、备份手机上的照片和视频…

代码随想录Day53动态规划part14|1143.最长公共子序列|1035.不相交的线|53. 最大子序和 动态规划

1143.最长公共子序列 也不考虑顺序&#xff0c;元素之间可以不连续和718很相似&#xff0c;只不过这题要累加不连续的情况 1035.不相交的线 套上一题的程序可以通过&#xff0c;但是实际没有特别理解 53. 最大子序和 动态规划 之前用贪心做的&#xff0c;一旦sum<0&…

springboot log4j2日志 配置路径

一、log4j2 日志由xml配置&#xff0c;如果想改日志路径&#xff0c; 没办法和application.prop 文件读取参数 处理解决办法 二、1、默认解决办法 xml配置死路径&#xff0c;且测试与生产保持一致 <?xml version"1.0" encoding"UTF-8"?> <!…

从使用回溯分割字符串的技巧到前向搜索

题目 131. 分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 答案&#xff1a; class Solution {boolean[][] f;List<List<String>>…

【多线程中的线程安全问题】线程互斥

1 &#x1f351;线程间的互斥相关背景概念&#x1f351; 先来看看一些基本概念&#xff1a; 1️⃣临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源。2️⃣临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区。3️⃣互斥&…