kubernetes源码解析
针对于kubernetes源码 做自己的理解与分析
来自万古的忧伤
努力,勿让自己继续活在后悔中
展开
-
kubectl插件开发之基础
一 创建环境写个可执行程序(脚本也可) 放到PATH目录下文件名必须是kubectl-xxxxmkdir /Users/qushuaibo/temp/kubectl-pluginsexport PATH=/Users/qushuaibo/temp/kubectl-plugins:$PATH二 简单的测试样例package mainimport "fmt"func main() { fmt.Println("test pods")}go build main.gomv ma原创 2022-03-11 10:12:32 · 441 阅读 · 0 评论 -
kube-Scheduler启动流程源码解读
本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一 Scheduler简介kube-scheduler组件是Kubernetes系统的核心组件之一,主要负责整个集群Pod资源对象的调度,根据内置或扩展的调度算法(预选与优选调度算法),将未调度的Pod资源对象调度到最优的工作节点上,从而更加合理、更加充分地利用集群的资源。二 Sheduler架构kube-scheduler是Kubernetes的默认调度器,其架构设原创 2020-10-21 18:38:16 · 574 阅读 · 1 评论 -
Operator-demo
目录结构 api里面为我们基础结构体controller里面为我们的主体逻辑pkg里面为deploy和svc的一些创建函数github地址https://github.com/strive-after/operator-demo我们来看效果make install 我们部署crdmake run 我们启动controller基础环境#1.yamlapiVersion: ship.example.org/v1beta1kind: Frigatemetadata: name: f.原创 2020-08-31 22:08:07 · 643 阅读 · 0 评论 -
Client-go之tools(EventBroadcaster)
Kubernetes的事件(Event)是一种资源对象(Resource Object),用于展示集群内发生的情况,Kubernetes系统中的各个组件会将运行时发生的各种事件上报给Kubernetes API Server。例如,调度器做了什么决定,某些Pod为什么被从节点中驱逐。可以通过kubectl get event kubectldescribe pod命令显示事件,查看Kubernetes集群中发生了哪些事件。执行这些命令后,默认情况下只会显示最近(1小时内)发生的事件。注意:此处的Event原创 2020-08-27 19:17:28 · 1622 阅读 · 0 评论 -
kubebuilder
官网https://book.kubebuilder.io/中文文档https://cloudnative.to/kubebuilder/参考https://www.operator.org.cn/operatorsdk-jian-jie学习链接operator实战一 简介二 安装linux && macos=$(go env GOOS)arch=$(go env GOARCH)# 下载 kubebuilder 并解压到 tmp 目录中curl -L https://g原创 2020-08-22 18:28:06 · 5469 阅读 · 0 评论 -
Client-go之util(DeltaFIFO补充之Resync机制)
参考https://github.com/cloudnativeto/sig-k8s-source-code/issues/11一 DeltaFIFO队列为什么需要Resync为什么需要 Resync 机制呢?因为在处理 SharedInformer 事件回调时,可能存在处理失败的情况,定时的 Resync 让这些处理失败的事件有了重新 onUpdate 处理的机会。主要的目的是为了不丢数据,处理 resync 机制还有边缘触发与水平获取的设计,一起来保证不丢事件、数据同步并能及时响应事件。图来自原创 2020-08-22 16:15:27 · 630 阅读 · 5 评论 -
Operator-sdk
参考https://www.operator.org.cn/operatorsdk-jian-jie一、简介1.概述该项目是Operator Framework的一个组件,这是一个开源工具包,以有效,自动化和可扩展的方式管理Kubernetes原生应用程序,称为Operators。更多介绍内容,请阅读博客。Operators 可以在Kubernetes之上轻松地管理复杂有状态的应用程序。然而,由于诸如使用低级API,编写样板以及缺乏模块导致重复性工作等挑战,导致目前编写Operator可能很困难。原创 2020-08-22 11:25:01 · 2953 阅读 · 1 评论 -
Client-go之util(workqueue)
一、简介二、FIFO队列三、延迟队列四、限速队列1.令牌桶算法2.排队指数算法3.计数器算法4.混合模式原创 2020-08-20 19:00:59 · 473 阅读 · 0 评论 -
Client-go之tools(informer)
本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一、简介在kubernetes系统中,组件之间通过http协议进行通信,通过informer来做到了消息的实时性、可靠性、顺序性, 通过infromer机制与api-server进行通信二、架构设计Reflector 详细可以看我的这篇总结ReflectorDeltaFIFO详细可以看我的这篇总结DeltaFIFOReflectorDeltaFIFOInde原创 2020-08-16 13:40:27 · 880 阅读 · 0 评论 -
Client-go之tools(Indexer)
本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104参考https://blog.ihypo.net/15763910382218.html我的另一篇文章https://blog.csdn.net/weixin_45413603/article/details/107745576一、简介indexer是client-go用来存储资源对象并自带索引功能的本地存储,Reflector从DeltaFIFO中江晓飞出来的资源对原创 2020-08-16 10:26:50 · 641 阅读 · 0 评论 -
Client-go之tools(DeltaFIFO)
本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一、简介DeltaFIFO可以拆分开来理解 FIFO是一个先进先出的队列。Delta是一个资源对象存储,它可以保存资源对象的操作类型type DeltaFIFO struct { // lock/cond protects access to 'items' and 'queue'. //锁 保护items 和queue的访问和写 lock sync.RWM原创 2020-08-16 00:17:42 · 536 阅读 · 0 评论 -
kube-scheduler命令行参数详解
来自《kubernetes源码剖析》Misc flags 其他参数 --config string 用于设置kube-scheduler配置文件路径 --master --master 用于设置kubernetes api service 地址,该地址会覆盖kubeconfig中的相同参数 --write-config-to string 如果制定该参数,将该参数写入kubeconfig并退出 --bind-address ip 用于设置监控原创 2020-07-22 13:07:38 · 991 阅读 · 0 评论 -
kube-apiserver命令行参数详解
来自《kubernetes源码剖析》1.Generic flags 通用参数 --advertise-address ip 用于设置相机群众其他组件发布api-server的ip地址,该地址必须能够被集群中的其他组件访问。如果该参数为空则使用--bind-address。如果未指定--bind-address则使用主机的默认端口 --cloud-provider-gcc-lb-src-cidrs cidrs 用于设置在Gce防火墙中打开c.原创 2020-07-19 19:33:16 · 2638 阅读 · 0 评论 -
kubernetes命令详解(kubectl)
kubectl是一个最常用的工具之一,是apiserver的客户端,向apiserver发起http请求来操纵这些资源(即对资源的curd)kubectl命令大致分为8各种类命令表格来自于《kubernetes源码剖析》1.Basic Commands(Beginner)基础命令(初级)kubectl create通过yaml/json 文件或者标准输入创建一个资源对象,支持很多子命令 例如namespace pod deployment service等kubectl exp原创 2020-07-10 12:05:14 · 1032 阅读 · 0 评论 -
kube-controller-manager命令行参数
不断更新中引用部分下面有些参数会用到duration的单位是时间单位“ns”、“us”、“µs”、“ms”、“s”、“m”、“h” 控制器列表有All controllers(默认开启): attachdetach, bootstrapsigner,cloud-node-lifecycle, clusterrole-aggregation, cronjob,csrapproving,csrcleaner, csrsigning, daemonset, deployment, disruption原创 2020-08-11 18:48:20 · 1096 阅读 · 0 评论 -
kubelet 命令行参数
参数类型kubelet的参数在加载过程中一种是通过命令行直接加载,一种是通过–config指定一个配置文件 然后去加载,一种是已经弃用 或者是在未来版本中会弃用的参数configxxx \xxxxx \已弃用参数(config可指定)(已弃用:在 --config 指定的配置文件中进行设置。有关更多信息,请参阅 https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/。)参数类型描述默认值原创 2020-08-13 15:20:32 · 1860 阅读 · 2 评论 -
Go默认支持的密码套件
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHATLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHATLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305TLS_ECDHE_ECDSA_WITH_RC原创 2020-08-11 10:23:31 · 708 阅读 · 0 评论 -
kubernetes支持的feature-gates特性
APIListChunking=true|false (BETA - default=true)APIResponseCompression=true|false (BETA - default=true)AllAlpha=true|false (ALPHA - default=false)AppArmor=true|false (BETA - default=true)AttachVolumeLimit=true|false (BETA - default=true)BalanceAttache原创 2020-08-13 17:04:12 · 3617 阅读 · 2 评论 -
kube-proxy命令行参数
本文中所使用的是1.16的kube-proxy参数类型描述默认值–add-dir-headerbool如果为true,则将文件目录添加到标题中–alsologtostderr记录到标准错误以及文件–bind-address 0.0.0.0代理服务器要使用的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)0.0.0.0–cleanupbool如果为 true,清理 iptables 和 ipv原创 2020-08-13 17:08:53 · 1032 阅读 · 0 评论 -
Client-go之tools(Reflector)
一、Reflector简介和初始化1.简介informer可以对kubernetes api server 的资源执行监控(watch)操作 ,类型可以是kubernetes内置资源也可以是crd 自定义资源 ,其中最核心的功能是Reflector,Reflector用于监控指定资源的kubernetes资源,当资源发生变化的时候,例如发生了Added 资源添加等事件 会将其资源对象存放在本地缓存DeltaFIFO中2.初始化通过NewRefector实例化Reflector对象,实例化过程中必须传原创 2020-08-14 23:31:29 · 798 阅读 · 0 评论 -
kube-controller-manager 启动流程
controller manager启动流程一 Run1.首先启动加载command(k8s自定义了cobra的命令行参数),加载完command会执行command.Execute(),执行execute的时候会回调command的run2.在加载command的时候首先会定义一个commandrun是在执行execute回调用的 在这里的run封装了一些东西具体如下(1)根据服务是否安全也就是判断SecureServing 和InsecureServing相同的操作为注册检查相关 gen原创 2020-08-08 18:05:12 · 1121 阅读 · 1 评论 -
kubernetes学到的语法特性(一)
注:笔者自己的思路 有错误欢迎大家指正 互相学习在阅读k8s源码的过程中不断学习不断更新1.一个结构体 实现一个嵌套接口 外部接口负责全局修改 内部接口修改内部package mainimport "fmt"type A struct { name string bbb int}func (a *A) Get() error{ a.bbb = 3 return nil}func (a *A) Delete() { a.bbb = 2 return}func Ne.原创 2020-08-02 16:39:52 · 199 阅读 · 0 评论