当前位置: 首页 > news >正文

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过滤

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

ICSE‘25 LLM Assistance for Memory Safety

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

《十七》浏览器基础

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

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…...

阅读springboot源码 记录

关于 :: 双冒号 用stream的map简洁提取id&#xff0c;类似代码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之内存管理前世今生(一)

一个程序&#xff08;如王者荣耀&#xff09;平常是存储在硬盘上的&#xff0c;运行时才把这个程序载入内存&#xff0c;CPU才能执行。 问题&#xff1a; 这个程序载入内存的哪个位置呢&#xff1f;载入内核所在的空间吗&#xff1f;系统直接挂了。 一、虚拟内存 1.1 内存分…...

Beautiful Soup 入门指南:从零开始掌握网页解析

Beautiful Soup 入门指南&#xff1a;从零开始掌握网页解析 前言 在数据驱动的时代&#xff0c;网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据&#xff0c;进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库&#xff0c;可以帮助我们轻松地解析和提…...

网络通信---MCU移植LWIP

使用的MCU型号为STM32F429IGT6&#xff0c;PHY为LAN7820A 目标是通过MCU的ETH给LWIP提供输入输出从而实现基本的Ping应答 OK废话不多说我们直接开始 下载源码 LWIP包源码&#xff1a;lwip源码 -在这里下载 ST官方支持的ETH包&#xff1a;ST-ETH支持包 这里下载 创建工程 …...

Go-并行编程新手指南

Go 并行编程新手指南 在Go语言中&#xff0c;并行编程是充分利用多核CPU资源、提升程序性能的重要手段。它的核心概念包括goroutine和channel&#xff0c;这些特性使得Go在处理并发任务时表现出色。 goroutine&#xff1a;轻量级的并发执行单元 goroutine是Go并行编程的基础…...

基于Django的个人博客系统的设计与实现

【Django】基于Django的个人博客系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言&#xff0c;结合Django框架构建后端逻辑&#xff0c;并运用J…...

Python爬虫获取custom-1688自定义API操作接口

一、引言 在电子商务领域&#xff0c;1688作为国内领先的B2B平台&#xff0c;提供了丰富的API接口&#xff0c;允许开发者获取商品信息、店铺信息等。其中&#xff0c;custom接口允许开发者进行自定义操作&#xff0c;获取特定的数据。本文将详细介绍如何使用Python调用1688的…...

kaggle-ISIC 2024 - 使用 3D-TBP 检测皮肤癌-学习笔记

问题描述&#xff1a; 通过从 3D 全身照片 (TBP) 中裁剪出单个病变来识别经组织学确诊的皮肤癌病例 数据集描述&#xff1a; 图像临床文本信息 评价指标&#xff1a; pAUC&#xff0c;用于保证敏感性高于指定阈值下的AUC 主流方法分析&#xff08;文本&#xff09; 基于CatBoo…...

滤波电路汇总

0、前言 1. 引言 滤波电路是电子系统中不可或缺的组成部分,其主要功能是选择性地通过或衰减特定频率范围内的信号。在现代电子技术中,滤波电路广泛应用于信号处理、通信系统、音频设备、电源设计等多个领域。通过滤波,可以去除信号中的噪声和干扰,提高信号的质量和稳定性…...

1.Template Method 模式

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

MySQL分表自动化创建的实现方案(存储过程、事件调度器)

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

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪&#xff0c;使用光强和温度作为影响因素&#xff0c;电压作为输出进行建模。…...

计算机毕业设计【任务书】怎么写?

1. 什么是毕业设计任务书 毕业设计任务书是学生在毕业设计初期向指导教师提交的文档&#xff0c;主要用于说明毕业设计的选题、研究内容、目标、方法、进度安排等。 2. 撰写任务书的步骤 2.1 确定选题 选题是撰写任务书的第一步。选题应结合自身兴趣、专业方向和实际应用需…...

GRAPHARG——学习

20250106 项目git地址&#xff1a;https://github.com/microsoft/graphrag.git 版本&#xff1a;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与内部可变性:“摆脱”安全性限制

题外话&#xff0c;这篇文章一共4050字&#xff0c;是截止到目前为止最长的文章&#xff0c;如果你能坚持读完并理解&#xff0c;那真的很强&#xff01; 喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以…...

14.模型,纹理,着色器

模型、纹理和着色器是计算机图形学中的三个核心概念&#xff0c;用通俗易懂的方式来解释&#xff1a; 1. 模型&#xff1a;3D物体的骨架 通俗解释&#xff1a; 模型就像3D物体的骨架&#xff0c;定义了物体的形状和结构。 比如&#xff0c;一个房子的模型包括墙、屋顶、窗户等…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...