首页 > 其他分享 >【kubernetes】kubernetes二次开发

【kubernetes】kubernetes二次开发

时间:2024-04-29 10:46:53浏览次数:25  
标签:kubectl 插件 kubernetes Kubernetes 二次开发 k8s

Kubernetes源码二次开发
Kubernetes 源码二次开发通常涉及以下步骤:

环境准备:安装和配置 Go 环境,确保 Go 版本与 Kubernetes 项目兼容。

获取源码:从 GitHub 克隆 Kubernetes 仓库到本地。

设置工作环境:通过 make 命令设置编译环境。

修改源码:根据需求修改 Kubernetes 源码。

编译:使用 make all 编译所有组件。

测试:运行测试以确保修改不会破坏现有功能。

构建镜像:如果修改了 Kubernetes 组件的代码,需要重新构建相应的 Docker 镜像。

部署:在本地或者远程集群上部署修改后的 Kubernetes 组件。

以下是一个简单的示例,展示如何修改 Kubernetes Scheduler 的默认行为:

package main
 
import (
    "k8s.io/api/core/v1"
    "k8s.io/klog"
    "k8s.io/kubernetes/cmd/kube-scheduler/app"
)
 
// 修改默认的调度策略
func myDefaultPodDisruptionBudgets() {
    // 实现自定义的策略...
}
 
func main() {
    // 复制 kube-scheduler 的启动逻辑
    command := app.NewSchedulerCommand()
 
    // 在这里插入自定义的调度策略设置逻辑
    myDefaultPodDisruptionBudgets()
 
    // 运行 kube-scheduler
    if err := command.Execute(); err != nil {
        klog.Fatalf("Error running kube-scheduler: %v", err)
    }
}

【kubernetes】kubernetes二次开发

kubernetes本身对很多场景已经能够达到直接使用,但是kubernetes也提供了能够扩展的能力,可以基于kubernetes进行二次开发。

扩展kubernetes

1 kubectl
用插件扩展 kubectl

kubectl作为k8s的客户端,它所展示的信息是固定的,有时候我们可能也需要扩展kubectl,例如,在使用网络双栈的情况下,如果直接使用kubectl只展示ipv6,需要可以同时展示ipv4和ipv6,就需要对kubectl进行扩展。

kubectl扩展的主要规则:

kubectl扩展程序是一个在$PATH中的可执行的二进制,因此,你可以用任何语言开发插件
文件名以kubectl-开头,并且命令的字段之间用-分割,例如,当开发了一个插件kubectl-show展示pod的双栈地址,使用kubectl show pods时,由于没有kubectl show命令,就会去查找kubectl-show命令,找到后,就会将后面的整个字符串都传给插件程序
如果使用golang开发,已经有提供一些现成的库:

cli-runtime:可以用于开发插件,并且kubectl本身也使用了该库
sample-cli-plugin:插件的简单开发示例,可以切换kubeconfig文件中指定的namespace
2 apiserver
client-go:k8s的官方开发库,可以直接调用k8s的接口,常用于开发k8s的管理平台
3 Controller
virtual-kubelet:虚拟kubelet,可以伪装成kubelet,常用于实现Serverless、edge IOT等
cloud-provider(Cloud Controller Manager):云端负载均衡器
4 operator(CRD & Controller)
CRD & Controller:定义用户自己的资源,然后基于client-go开发自己的Controller控制自己资源的运行
5 network(CNI)
Flannel
Calico
6 store(CSI)
PV和PVC是K8S提供的让资源的提供方和资源的使用方分离的一种机制,资源提供方负责创建PV,资源使用方只需要说明申请的资源规格就能够自动创建相应规格的PV,因此,需要有程序负责自动创建PV。为了将自有的资源对接K8S,K8S提供了CSI,能够进行存储的对接。

标签:kubectl,插件,kubernetes,Kubernetes,二次开发,k8s
From: https://www.cnblogs.com/exd1189/p/18165162

相关文章

  • 为什么基于k8s进行二次开发的文章比较少,而更多是运维或者是直接部署项目到k8s集群上?
     为什么基于k8s进行二次开发的文章比较少,而更多是运维或者是直接部署项目到k8s集群上? Kubernetes作为一个容器编排调度工具,不仅仅成为了容器编排调度事实上的标准,而且朝着云原生操作系统演进。混合多云基础设施的差别以及企业内部复杂的需求,Kubernetes是如何......
  • Ubuntu22.04 搭建Kubernetes 1.28版本集群
    依赖安装准备工作需要在所有节点上进行。安装ssh服务安装 openssh-serversudoapt-getinstallopenssh-server修改配置文件vim/etc/ssh/sshd_config找到配置项LoginGraceTime120PermitRootLoginprohibit-passwordStrictModesyes把 prohibit-password ......
  • [转]Git清除贡献者信息和历史提交记录,将开源项目拉取二次开发时可用到
     如果我们用git与github扒了别人的开源代码,想拿来用到自己项目中,但是提交过后,会发现仓库的历史记录又臭又长,贡献者里还有别人的名字,打算把历史记录全部清除并且让目前所有文件全部变成首次commit的状态。可以试试以下这个方法,包你百试百灵!1.Checkout检出新的分支#orphan参......
  • CAD二次开发 自定义纸张
    在实际CAD二次开发种遇到了需要自定义纸张的问题,CAD本身没有自定义纸张的api,需要对pmp文件做一些操作,再次,致敬惊惊大佬的博客,才让我这方面的开发工作量减少了很多,靠我自己也一时半会解决不了,因为我是用CAD2020版本来做这个的我对惊佬的两个重要的类做了一部分更改。publicclass......
  • PyQGIS二次开发指南
    当你的数据处理使用的是Python语言,而你的导师又让你开发界面,那么PyQGIS二次开发指南是你必读的圣经。QGIS支持Python语言进行二次开发,你将学会如何使用QtDesigner进行界面设计、加载栅格数据、加载矢量数据、软件打包、安装包制作等。写在前面随着GIS应用在国内的逐渐增多,越来......
  • kubernetes安装配置使用vGPU
    前言AI落地时,在某些场景下AI模型在训练或者是推理时,其算力要求不需要占用整卡的GPU,比如只需要0.5卡GPU即可满足需求。在这种情况下,可以使用GPU虚拟化技术来解决这个问题,将整卡的GPU虚拟化为两个0.5卡的GPU,这样就可以在一张卡上同时跑两个AI训练或者AI推理应用服......
  • 基于禅道restful接口的二次开发-获取token
    使用禅道的时候,可能会想用禅道的接口来做一些二次开发,比如获取缺陷情况、案例执行情况,做一些统计报表的展示。根据禅道开发文档中相关说明,在禅道开源版16.0+,专业版11.0+,企业版6.0+,旗舰版2.4+新增RESTful风格API,因此可以利用api来获取相关的数据访问地址:http://****/zentao/a......
  • 什么是K8s架构?一文让你全面了解K8s(Kubernetes)
    K8S架构定义K8S是一个开源的容器部署和管理平台。它提供容器编排、容器运行时、以容器为中心的基础设施编排、负载平衡、自我修复机制和服务发现。K8S体系结构,有时也称为K8S应用程序部署体系结构或K8S客户端-服务器体系结构,用于跨主机集群组成、扩展、部署和管理应用程序容器......
  • 【Docker系列】Section 2: Creating Kubernetes Development Clusters, Understandi
    继续上文,【Docker系列】Section2:CreatingKubernetesDevelopmentClusters,Understandingobjects,andExposingServices①引言:在Section2中,我们将转移到Kubernetes集群和对象。本节的第一章将解释如何使用一个流行的工具来创建库集群,称为KinD。我们将解释如何创......
  • 在线版CAD二次开发修改UI配置的方法(纯国产内核网页CAD)
    前言我们根据mxcad开发包开发了一个完整的在线CAD应用,它包括了绘图、编辑、文字样式设置、图层设置、线型设置等功能的实现。我们同时提供了一个插件的开发接口,用户可以在该接口的基础上进行二次开发,这样就能够为用户减少从头开发的工作量,可以快速将一个完整的CAD项目集成到用......