k8s支持自定义field-selector spec.hostNetwork过滤
好久没写博客啦,年前写一个博客就算混过去啦😂
写一个小功能,对于 Pod,在没有 label 的情况下,支持 --field-selector spec.hostNetwork 查询 Pod 是否为 hostNetwork 类型,只为了熟悉 APIServer 是如何构建索引向 Etcd 查询过程。
Kubernetes 版本1.17.4的,需要重新编译 APIServer。不要怪太老了😅,高版本代码这块儿没怎么变过,下载代码:
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes
git branch v1.17.4 v1.17.4 && git checkout v1.17.4
一、修改代码:
1. 修改 pkg/registry/core/pod/strategy.go:PodToSelectableFields
此处修改相当于是让 APIServer 建立了索引,可以查询到 etcd 中的资源
2. 修改 staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go:
addConversionFuncs
此处是为了让 APIServer 识别 spec.hostNetwork 字段
3. 增加两处校验,不加也没啥影响
修改 pkg/apis/core/validation/validation.go:validEnvDownwardAPIFieldPathExpressions
pkg/apis/core/pods/helpers.go:ConvertDownwardAPIFieldLabel(kubelet也会用到这个函数,不影响)
经过这个过程也是走读了大量代码。
二、重新编译 APIServer,这个可以搜一堆文章出来:
1. 修改 build/common.sh:
修改 KUBE_DOCKER_REGISTRY 的默认值 k8s.gcr.io 为可用镜像仓库,因为要下载
k8s.gcr.io/build-image/kube-cross:v1.13.8-1
k8s.gcr.io/build-image/debian-base:v2.0.0
k8s.gcr.io/build-image/debian-iptables:v12.0.1
可以去dockerhub找下,pull到本地也行
我只需要构建 APIServer 镜像,删除红框的几个,只保留"kube-apiserver"
执行编译指令:
WHAT=cmd/kube-apiserver KUBE_BUILD_PLATFORMS=linux/amd64 KUBE_BUILD_CONFORMANCE=n KUBE_BUILD_HYPERKUBE=n make quick-release
为了加快构建:
KUBE_BUILD_CONFORMANCE=n,不需要一致性测试(Conformance Tests)
KUBE_BUILD_HYPERKUBE=n,不构建Hyperkube镜像
如果不需要一直 pull 镜像,可以添加 KUBE_BUILD_PULL_LATEST_IMAGES=n 选项
...
+++ [0123 16:06:46] Syncing out of container
+++ [0123 16:06:56] Building tarball: src
+++ [0123 16:06:56] Building tarball: manifests
+++ [0123 16:06:56] Starting tarball: client linux-amd64
+++ [0123 16:06:56] Waiting on tarballs
+++ [0123 16:07:02] Building tarball: node linux-amd64
+++ [0123 16:07:02] Building images: linux-amd64
+++ [0123 16:07:02] Starting docker build for image: kube-apiserver-amd64
+++ [0123 16:07:21] Tagging docker image k8s.gcr.io/kube-apiserver-amd64:v1.17.4-dirty as xxx.io/kube-apiserver-amd64:v1.17.4-dirty
Untagged: xxx.io/kube-apiserver-amd64:v1.17.4-dirty
Deleted: sha256:7e2e82289173553722f6fde7696130114fbf6e1e7674d01a1d075895a1d936b5
+++ [0123 16:07:26] Deleting docker image k8s.gcr.io/kube-apiserver-amd64:v1.17.4-dirty
+++ [0123 16:07:26] Docker builds done
+++ [0123 16:07:26] Building tarball: server linux-amd64
+++ [0123 16:08:15] Building tarball: final
+++ [0123 16:08:16] Starting tarball: test linux-amd64
+++ [0123 16:08:16] Waiting on test tarballs
+++ [0123 16:09:04] Building tarball: test portable
本地会生成一个镜像压缩包:_output/release-images/amd64/kube-apiserver.tar,上传到 master 节点,或者镜像仓库。
三、部署 APIServer
如果使用 containerd 导入镜像:
sudo ctr -n=k8s.io images import kube-apiserver.tar# 查询
sudo ctr images list
如果使用 docker 导入镜像:
sudo docker load -i kube-apiserver.tar# 查询是否有
sudo docker images | grep kube-apiserver
编辑 /etc/kubernetes/manifests/kube-apiserver.yaml 修改镜像名和tag,过十多秒就自动重启了。
四、检查 spec.hostNetwork 是否生效:
kubectl get po --field-selector spec.hostNetwork=false -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-776bdc8757-gmr2l 1/1 Running 0 63d 11.0.0.22 node1 <none> <none>
完成。
实际上只需要给 pod 或者其他资源打上相应的 label,使用 label-selector 查询即可,搞这些就是为了了解代码的细节和编译流程😁
该文章只是针对 Pod 字段支持自定义field-selector,当然其他类型的资源也可以按照对应的去修改
看都看了,点个赞再走吧😎
相关文章:

k8s支持自定义field-selector spec.hostNetwork过滤
好久没写博客啦,年前写一个博客就算混过去啦😂 写一个小功能,对于 Pod,在没有 label 的情况下,支持 --field-selector spec.hostNetwork 查询 Pod 是否为 hostNetwork 类型,只为了熟悉 APIServer 是如何构…...

ICSE‘25 LLM Assistance for Memory Safety
不知道从什么时候开始,各大技术社区,技术群聊流行着 “用Rust重写!” ,放一张图(笑死… 这不, 随着大模型技术的流行,大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构,代码变换(Refactor&…...

《十七》浏览器基础
浏览器:是安装在电脑里面的一个软件,能够将页面内容渲染出来呈现给用户查看,并让用户与网页进行交互。 常见的主流浏览器: 常见的主流浏览器有:Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL,浏览…...

TikTok 推出了一款 IDE,用于快速构建 AI 应用
字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…...
阅读springboot源码 记录
关于 :: 双冒号 用stream的map简洁提取id,类似代码1 // 代码1 List<String> Ids list.stream().map(Student::getId).collect(Collectors.toList())// 代码2 List<String> Ids list.stream().map(use->{return use.getId(); }).collect(Collector…...

Linux之内存管理前世今生(一)
一个程序(如王者荣耀)平常是存储在硬盘上的,运行时才把这个程序载入内存,CPU才能执行。 问题: 这个程序载入内存的哪个位置呢?载入内核所在的空间吗?系统直接挂了。 一、虚拟内存 1.1 内存分…...
Beautiful Soup 入门指南:从零开始掌握网页解析
Beautiful Soup 入门指南:从零开始掌握网页解析 前言 在数据驱动的时代,网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据,进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库,可以帮助我们轻松地解析和提…...

网络通信---MCU移植LWIP
使用的MCU型号为STM32F429IGT6,PHY为LAN7820A 目标是通过MCU的ETH给LWIP提供输入输出从而实现基本的Ping应答 OK废话不多说我们直接开始 下载源码 LWIP包源码:lwip源码 -在这里下载 ST官方支持的ETH包:ST-ETH支持包 这里下载 创建工程 …...
Go-并行编程新手指南
Go 并行编程新手指南 在Go语言中,并行编程是充分利用多核CPU资源、提升程序性能的重要手段。它的核心概念包括goroutine和channel,这些特性使得Go在处理并发任务时表现出色。 goroutine:轻量级的并发执行单元 goroutine是Go并行编程的基础…...

基于Django的个人博客系统的设计与实现
【Django】基于Django的个人博客系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言,结合Django框架构建后端逻辑,并运用J…...
Python爬虫获取custom-1688自定义API操作接口
一、引言 在电子商务领域,1688作为国内领先的B2B平台,提供了丰富的API接口,允许开发者获取商品信息、店铺信息等。其中,custom接口允许开发者进行自定义操作,获取特定的数据。本文将详细介绍如何使用Python调用1688的…...
kaggle-ISIC 2024 - 使用 3D-TBP 检测皮肤癌-学习笔记
问题描述: 通过从 3D 全身照片 (TBP) 中裁剪出单个病变来识别经组织学确诊的皮肤癌病例 数据集描述: 图像临床文本信息 评价指标: pAUC,用于保证敏感性高于指定阈值下的AUC 主流方法分析(文本) 基于CatBoo…...
滤波电路汇总
0、前言 1. 引言 滤波电路是电子系统中不可或缺的组成部分,其主要功能是选择性地通过或衰减特定频率范围内的信号。在现代电子技术中,滤波电路广泛应用于信号处理、通信系统、音频设备、电源设计等多个领域。通过滤波,可以去除信号中的噪声和干扰,提高信号的质量和稳定性…...

1.Template Method 模式
模式定义 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method 使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特…...

MySQL分表自动化创建的实现方案(存储过程、事件调度器)
《MySQL 新年度自动分表创建项目方案》 一、项目目的 在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低。分表是一种有效的优化策略,它将数据分散存储在多…...

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪,使用光强和温度作为影响因素,电压作为输出进行建模。…...
计算机毕业设计【任务书】怎么写?
1. 什么是毕业设计任务书 毕业设计任务书是学生在毕业设计初期向指导教师提交的文档,主要用于说明毕业设计的选题、研究内容、目标、方法、进度安排等。 2. 撰写任务书的步骤 2.1 确定选题 选题是撰写任务书的第一步。选题应结合自身兴趣、专业方向和实际应用需…...
GRAPHARG——学习
20250106 项目git地址:https://github.com/microsoft/graphrag.git 版本:1.2.0 ### This config file contains required core defaults that must be set, along with a handful of common optional settings. ### For a full list of available setti…...

【Rust自学】15.6. RefCell与内部可变性:“摆脱”安全性限制
题外话,这篇文章一共4050字,是截止到目前为止最长的文章,如果你能坚持读完并理解,那真的很强! 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以…...
14.模型,纹理,着色器
模型、纹理和着色器是计算机图形学中的三个核心概念,用通俗易懂的方式来解释: 1. 模型:3D物体的骨架 通俗解释: 模型就像3D物体的骨架,定义了物体的形状和结构。 比如,一个房子的模型包括墙、屋顶、窗户等…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
大数据驱动企业决策智能化的路径与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...