K8s-CRD实战

CRD

CRD的全称是CustomResourceDefinition,是Kubernetes为提高可扩展性,

让开发者去自定义资源(如Deployment,StatefulSet等)的一种方法.

Controller

controller是由controller-manager进行管理,通过API Server提供的接口实时监控整个集群的每一个资源对象的当前状态,

当状态发生变化时,会尝试通过CRUD操作将系统状态修复到"期望状态".

整理架构图

组件解释

Informer即自带缓存和索引机制,可以触发Handler的客户端库.使用了Reflector包,

它是一个可以通过ListAndWatch机制获取并监视API对象变化的客户端封装.

Reflector和Informer之间,用到了一个"增量先进先出队列"进行协同.

而Informer与要编写的控制循环之间,则使用了一个工作队列来进行协同.

在实际应用中,除了控制循环之外的所有代码,实际上都是 Kubernetes 为你自动生成的,

即:pkg/client/{informers, listers, clientset}里的内容。

源码解析

https://jimmysong.io/kubernetes-handbook/develop/client-go-informer-sourcecode-analyse.html

案例参考

https://github.com/kubernetes/sample-controller, 注意go版本需要选用1.22

shell 复制代码
# assumes you have a working kubeconfig, not required if operating in-cluster
go build -o sample-controller .

# run sample-controller
./sample-controller -kubeconfig=$HOME/.kube/config

# create a CustomResourceDefinition
kubectl create -f artifacts/examples/crd-status-subresource.yaml

# create a custom resource of type Foo
kubectl create -f artifacts/examples/example-foo.yaml

# check deployments created through the custom resource
kubectl get deployments

案例效果

使用k edit调整pod实例数量

案例补充

GOPATH, GOROOT, GOBIN的区别

GOPATH: Go第三方库安装路径, go mod推行后,会使用索引查询该路径下的依赖包

GOROOT: Go安装路径

GOBIN: Go可执行二进制文件安装路径

Go Mod管理依赖解释

shell 复制代码
require (
	B vx.x.x
	B1 vx.x.x //indirect
	B2 vx.x.x //indirect
)
shell 复制代码
require (
	B vx.x.x
	B2 vx.x.x //indirect
)
相关推荐
Anarkh_Lee4 小时前
Neo4j在win下安装教程(docker环境)
docker·容器·neo4j
迷路的小绅士5 小时前
防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战
网络安全·云原生·防火墙技术·包过滤防火墙·状态检测防火墙
正经教主5 小时前
【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题
运维·docker·容器·n8n
joker_zsl7 小时前
docker的安装和简单使用(ubuntu环境)
运维·docker·容器
啥都想学的又啥都不会的研究生8 小时前
Kubernetes in action-初相识
java·docker·微服务·容器·kubernetes·etcd·kubelet
Leon-zy8 小时前
【云计算】云计算中IaaS、PaaS、SaaS介绍
云原生·云计算·paas
赵我说的做_life9 小时前
基于Docker的Flask项目部署完整指南
docker·容器·flask
江畔独步10 小时前
docker容器监控&自动恢复
docker·容器·eureka
iangyu10 小时前
centos7部署k8s集群
云原生·容器·kubernetes
时迁24712 小时前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s