k8s学习记录(三):Pod基础-Node选择

一、前言

在上一篇文章中我们学习了Pod的一些基本的知识,今天我们将继续学习Pod。

二、K8S如何选择节点来运行Pod

我们知道在一个K8S集群中,会有多个工作节点(Worker Node),那么k8s会选择那个node呢?接下来我们将学习一下k8s是如何选择适合的node来运行我们所需要的Pod。

1、NodeName

首先我们可以通过指定Node名称来让k8s将pod调度到指定的Node,目前笔者的环境里有1个Master和2个Worker节点,如下图。

1、不指定NodeName

首先我们先什么都不指定,让k8s自动为我们调度,看看会将Pod分配到那个Node上。我们编写一个yaml

apiVersion: v2
kind: Pod
metadata:name: my-nginxlabels:run: my-nginx
spec:containers:- name: my-nginximage: nginxports:- containerPort: 80

执行命令

 kubectl apply -f nginx.yaml

(这里先不用考虑STATUS 为 ImagePullBackOff 这个是因为笔者的网络出了点小问题,导致拉取镜像失败),可以看到我们的Nginx被k8s调度到了node3 节点,那如果我们想指定pod调度到node2节点呢,接下来我们继续实验。

2、指定NodeName

1、我们先删除之前创建的pod,使用命令

 kubectl delete pod my-nginx

2、修改之前的yaml资源清单

apiVersion: v1
kind: Pod
metadata:name: my-nginxlabels:run: my-nginx
spec:containers:- name: my-nginximage: nginxports:- containerPort: 80nodeName: node2

3、执行命令

 kubectl apply -f nginx.yaml

4、创建完成后我们查看Pod使用命令

kubectl get pods -o wide

可以看到nginx这个pod已经被调度到了node2节点。

3、小结

使用NodeName可以手动指定Pod调度到那个Node上,那么这种操作适用于什么场景呢?

- 部署基础设施Pod,一些k8s的基础设施需要在指定节点运行,例如监控代理或者日志收集器等,这些Pod的部署和调度必须稳定和可靠,不能被k8s自动调度,这种情况下我们可以指定Node
- 管理节点资源:例如我们要维护某个节点,此时我们可以将当前节点的pod部署到其他我们指定的节点上,从而避免k8s自动分配到当前Node

2、nodeSelector

除了使用NameNode我们还可以使用nodeSelector来指定调度的Node。我们下看下NodeSelector的介绍,使用命令

kubectl explain pod.spec.nodeSelector

可以看到nodeSelector是一个Map结构,官网文档地址https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector nodeSelector用于将Pod调度到包含指定label(标签)的Node上

实验步骤:

1、给两个node添加上标签,给node1打上标签 cpu=high (CPU为高性能),给node2打上标签cpu=low(CPU为低性能)

 kubectl label nodes node2 cpu=hgihkubectl label nodes node3 cpu=low

2、查看一下这个标签

kubectl get nodes -L cpu

3、删除刚才的pod

 kubectl delete pod my-nginx

4、编写yaml

apiVersion: v1
kind: Pod
metadata:name: my-nginxlabels:run: my-nginx
spec:containers:- name: my-nginximage: nginxports:- containerPort: 80nodeSelector:cpu: high

5、执行创建命令

我们预期该pod会被创建在node1上,因为我们这里匹配的标签的是cpu high,我们直接运行命令看一下结果。

kubectl apply -f nginx.yaml

但是预期的现象并没有发生,pod一直处于pending状态,仔细看一下yaml和标签,结果发现是单词拼错了。node标签是 cpu=high 而我们清单上写的high导致匹配不到node,此时会一直pending住。直到有能匹配上的node。所以现在有两种方案,改资源清单或者改node上的标签,我们选择后者。

kubectl label nodes node2 cpu=high --overwrite=true

再次查看node上的标签

接着查看pod

至此Pod已经完成了调度

三、总结

今天我们学习了如何手动控制K8S调度Pod,分别可以通过NodeName和NodeSelector来指定,前者通过名称来指定Node而后者是通过标签来指定。接下来的文章我们会继续学习Pod其他知识希望对你有所帮助。

四、未完待续

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

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

相关文章

3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密

活动链接:https://developer.aliyun.com/topic/lingma-aideveloper?spma2c6h.29979852.J_9593490300.2.49b8110eeymlF8 前言 随着人工智能技术的迅猛发展,AI 赋能编程成为了必然趋势。通义灵码应运而生,它是阿里巴巴集团在人工智能与编程领…

【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)

🍺三维数字地球GIS系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GI…

ARM 学习笔记(三)

参考文献:《ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition》《ARM Cortex-A (ARMv7-A) Series Programmer’s Guide》1、内存类型 ARMv7-A 处理器中,将 Memory 定义为几种类型(Memory Type): Strong…

Flask 框架(一):核心特性与基础配置

目录 一、为什么选择 Flask? 二、Flask 核心概念与初始化 2.1 程序实例初始化 2.2 运行配置:app.run () 参数详解 2.3 应用配置:三种参数设置方式 1. 字典直接配置(简单临时场景) 2. 配置文件导入(生…

社交圈子系统开源社交源码 / 小程序+H5+APP 多端互通的底层技术分析

伴随社交产品向“圈子化”、“内容驱动”发展方向演进,打造一套支持小程序、H5、APP 互通的社交圈子系统,已经成为构建垂直社区的基础架构能力要求。本文围绕一套典型的多端社交兴趣平台(即友猫社区平台)的设计实践,对…

gitlab-runner配置问题记录

引言 笔者曾通过2种方式部署过 gitlab-runner,在 gitlab 中使用这个 runner 拉起 ci job 的过程中或多或少遇到些问题,主要都是 job 中无法访问宿主机的docker 等组件。本篇文档主要记录 gitlab-runner 安装及相关配置。 二进制部署 gitlab-runner 部署 …

每日面试题10:令牌桶

令牌桶算法:优雅的流量控制艺术在现代分布式系统中,流量控制如同交通信号灯般重要——它既不能让请求"堵死"系统,也不能放任流量"横冲直撞"。令牌桶算法(Token Bucket Algorithm)正是这样一种精妙…

【java】消息推送

文章目录Java网页消息推送解决方案 短轮询、长轮询、SSE、Websocket

STM32 | 有源蜂鸣器响,无源蜂鸣器播音乐

目录 Overview 有源蜂鸣器 无源蜂鸣器 有源蜂鸣器控制 GPIO配置 控制程序 无源蜂鸣器控制 反转GPIO控制 GPIO配置 控制接口 PWM控制 GPIO配置 控制函数 改变频率播音乐 原理 1. 频率决定音调 2. 占空比决定音量 GPIO初始化 结构体定义和音符频率表 播放接口 …

第十四章 gin基础

文章目录Gin快速搭建一个web服务Gin数据交互JSON串内容规范Gin使用结构体返回数据给前端Gin配置POST类型的路由Gin获取GET请求参数Gin获取POST请求参数-form-data类型Gin获取POST请求参数-JSON类型Gin获取参数绑定至结构体Gin快速搭建一个web服务 下载包 \\新建一个文件&…

Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现PCB的缺陷检测(C#代码,UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现PCB的缺陷检测(C#代码,UI界面版)工业相机使用YoloV8模型实现PCB的缺陷检测工业相机实现YoloV8模型实现PCB的缺陷检测的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图…

【Vivado那些事儿】AMD-XILINX 7系列比特流加密

前提:加密有风险,操作需谨慎前言在许多项目中,经过漫长的等待,我们的 FPGA 设计终于可以投入现场部署了。前期的资金的投入及知识产权的保护,我们需要对现场部署的 FPGA 进行比特流保护以防止逆向工程和未经授权的重复…

RK3588 安卓adb操作

adb(Android Debug Bridge)是一个用于与安卓设备进行通信和控制的工具。adb可以通过USB或无线网络连接安卓设备,执行各种命令,如安装和卸载应用,传输文件,查看日志,运行shell命令等。adb是安卓开…

【华为机试】70. 爬楼梯

文章目录70. 爬楼梯描述示例 1示例 2提示解题思路核心分析问题建模算法实现方法1:动态规划(标准解法)方法2:空间优化动态规划(最优解)方法3:递归 记忆化方法4:数学公式(…

山东大学软件学院面向对象期末复习

面向对象 文章目录面向对象04 类封装接口 抽象类05 消息,实例化,静态变量方法消息动/静态类型语言对象创建类及实例具有下面特征对象数组的创建静态数据成员构造函数06_0 继承继承是向下传递的JAVA为什么不支持多重继承继承的形式特殊化继承替换原则规范…

让 Windows 用上 macOS 的系统下载与保姆级使用教程

模拟苹果桌面软件下载:https://xpan.com.cn/s/8NFAGT 还记得 Windows 11刚发布时,很多人就说“果里果气"的,但界面确实做的漂亮。 不知道现在有多少小伙伴正用着macOS,不过我敢确定,喜欢macOS的人绝对不少&#…

嵌入式硬件篇---继电器

继电器是一种通过小电流控制大电流的电磁开关,广泛应用于自动化控制、电力系统和电子设备中。以下从工作原理、应用场景和电路特点三个方面详细介绍:一、工作原理继电器本质是电磁控制的机械式开关,核心部件包括:线圈(…

鸿蒙网络编程系列58-仓颉版TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的签名验证是网络编程中一个重要的功能,它保证了数字证书是由可信任的签发方签署的,在此基础上,我们才可以信任该证书,进而信任基于该证书建立的安全通道,所以说,数字证书…

【React Native】安装配置 Expo Router

过去开发React Native,所使用的路由都是React Navigation。但是这个东西使用起来非常困难,配置无比繁琐。Expo,为了简化操作,就基于React Navigation开发了Expo Router。 Expo Router用起来就要简单的多了,配置也相对…

美国VPS服务器Linux内核参数调优的实践与验证

美国vps服务器Linux内核参数调优的实践与验证在云计算和虚拟化技术日益普及的今天,美国VPS服务器因其稳定的网络环境和优越的性价比,成为众多企业和开发者的首选。Linux内核参数的默认配置往往无法充分发挥VPS的性能潜力。本文将深入探讨美国VPS服务器上…