kubebuilder(4)部署&测试
<h2><span/><span>将crd部署到k8s</span><span/><span> </span></h2>make install
<p>日志:</p><blockquote><p>kustomize build config/crd | kubectl apply -f -
customresourcedefinition.apiextensions.k8s.io/demoes.tutorial.demo.com created</p></blockquote><p>查看下</p>[root@paas-m-k8s-master-1 demo-operator]# kubectl api-resources | grep demo
demoes tutorial.demo.com true Demo
<p>确实有了,不错哦。</p><h2><span/><span>编译运行controller</span><span/><span> </span></h2>make run
<p>保持窗口开启</p>。。。日志如下
go run ./main.go
I0314 14:37:11.802311 20314 request.go:665] Waited for 1.037997549s due to client-side throttling, not priority and fairness, request: GET:https://apiserver.cluster.local:6443/apis/rbac.istio.io/v1alpha1?timeout=32s
2024-03-14T14:37:13.055+0800 INFO controller-runtime.metrics metrics server is starting to listen {"addr": ":8080"}
2024-03-14T14:37:13.055+0800 INFO setup starting manager
2024-03-14T14:37:13.055+0800 INFO starting metrics server {"path": "/metrics"}
2024-03-14T14:37:13.055+0800 INFO controller.demo Starting EventSource {"reconciler group": "tutorial.demo.com", "reconciler kind": "Demo", "source": "kind source: /, Kind="}
2024-03-14T14:37:13.055+0800 INFO controller.demo Starting Controller {"reconciler group": "tutorial.demo.com", "reconciler kind": "Demo"}
2024-03-14T14:37:13.258+0800 INFO controller.demo Starting workers {"reconciler group": "tutorial.demo.com", "reconciler kind": "Demo", "worker count": 1}
<h2><span/><span>创建一个crd实例</span><span/><span> </span></h2><p>在samples目录下有一个默认的资源描述文件tutorial_v1_demo.yaml</p><p>我们可以使用进行部署测试</p>apiVersion: tutorial.demo.com/v1
kind: Demo
metadata:
namespace: demo
name: demo-sample
spec:
# TODO(user): Add fields here
image: nginx:1.22
svcName: demo-ng
replicas: 3
<p>现在还没有我们自定义的demo crd实例,demo nameSpace下也没有任何pod</p># kubectl -n demo get demo
No resources found in default namespace.
# kubectl -n demo get pod
No resources found in demo namespace.
<p>我们apply一下这个demo crd</p># kubectl apply -f config/samples/tutorial_v1_demo.yaml
<p>查看自定义资源</p># kubectl get demo -n demo
NAME AGE
demo-sample 12s
<h3><span/><span>controller的日志</span><span/></h3><div class="image-package"><img src="https://img.haomeiwen.com/i5149787/5a97e0b6e2860ae3.jpeg" img-data="{"format":"jpeg","size":71841,"width":1080,"height":234,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div>
<h2><span/><span>查看资源</span><span/><span> </span></h2># kubectl -n demo get pod
NAME READY STATUS RESTARTS AGE
demo-ng-6df8f7c68f-4mg9n 1/1 Running 0 4m33s
demo-ng-6df8f7c68f-699bv 1/1 Running 0 4m33s
demo-ng-6df8f7c68f-n6zkc 1/1 Running 0 4m33s
<p>看到3个pod都创建出来了</p><p>验证通过patch修改podNum,来增减pod的数量</p>kubectl -n demo patch demo demo-sample --type merge --patch '{"spec": {"replicas": 5}}'
<div class="image-package"><img src="https://img.haomeiwen.com/i5149787/3f443d22d0164200.jpeg" img-data="{"format":"jpeg","size":37250,"width":948,"height":161,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div>
<p>自动加到了5个</p><p>减一下</p>kubectl -n demo patch demo demo-sample --type merge --patch '{"spec": {"replicas": 2}}'
<div class="image-package"><img src="https://img.haomeiwen.com/i5149787/81252580c0df2d87.jpeg" img-data="{"format":"jpeg","size":13252,"width":561,"height":77,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div>
<p>controller中也会看到对应的日志</p><div class="image-package"><img src="https://img.haomeiwen.com/i5149787/a317140c355bbc42.jpeg" img-data="{"format":"jpeg","size":39366,"width":808,"height":137,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div>