kubebuilder实战之八:知识点小记
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
系列文章链接
- kubebuilder实战之一:准备工作
- kubebuilder实战之二:初次体验kubebuilder
- kubebuilder实战之三:基础知识速览
- kubebuilder实战之四:operator需求说明和设计
- kubebuilder实战之五:operator编码
- kubebuilder实战之六:构建部署运行
- kubebuilder实战之七:webhook
- kubebuilder实战之八:知识点小记
本篇概览
《kubebuilder实战》系列已经写了七篇,前面曾遇到不少问题,磕磕碰碰解决后,打算在本篇集中小结作为备忘,主要有以下几部分组成:
- CRD的Status字段;
- 选择合适的镜像仓库
- 本地运行controller时跳过webhook
- controller的pod有两个容器
- 常用操作命令整理
- 接下来挨个整理,今天的内容不写代码,咱们来一次轻松愉快的阅读;
CRD的Status字段
- 这个坑算是自己挖的,希望您能提前避开;
- 回顾elasticweb的CRD,其数据结构代码如下图:
该CRD的Status数据结构只有一个字段RealQPS,该字段的Tag(也就是上图红框),里面的omitempty属性非常重要!!!
如果RealQPS的Tag中没有omitempty属性,会发生什么事情呢?
实际上,在开发webhook之前,我一时大意漏掉了RealQPS的omitempty属性,但是整个controller可以正常工作,elasticweb的功能也达到了咱们的预期,也就是说status的字段如果没有omitempty属性,不影响operator的功能;
但是,在启用了webhook之后,创建资源对象时就报错了:
zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl apply -f config/samples/elasticweb_v1_elasticweb.yaml
namespace/dev created
The ElasticWeb "elasticweb-sample" is invalid: status.realQPS: Invalid value: "null": status.realQPS in body must be of type integer: "null"
- 也就是说,Status数据结构的字段中,如果json tag没有omitempty属性,在启用了webhook之后创建资源对象会失败;
选择合适的镜像仓库
- 看过之前文章的您,应该还记得构建镜像的命令:
make docker-build docker-push IMG=bolingcavalry/elasticweb:001
因为我在hub.docker.com上注册的帐号是bolingcavalry,因此上述命令可以将做好的本地镜像推送到hub.docker.com的仓库中(记得提前用docker login命令登录);
只要镜像上传到了hub.docker.com,能访问外网的kubernetes就都可以直接使用这个operator了,非常方便;
但是上传到hub.docker.com的过程是痛苦的,动辄半小时的等待,还伴随着超时退出(镜像加速在下载的时候效果明显,但是上传的时候,我这看似乎没啥效果,可能是我不会用,如果您知道还请指点);
还好,我在阿里云注册过,可以使用上面的镜像仓库,入口如下图:
- 如下图,新建公开类型的镜像仓库,点击红框2,可以看到详细的登录、上传、拉取命令,点击红框3可以修改登录密码:
- 使用了阿里云的镜像服务后,操作命令改成了如下内容:
make docker-build docker-push IMG=registry.cn-hangzhou.aliyuncs.com/bolingcavalry/elasticweb:001
整个上传速度也提升了很多,基本上3分钟内可以完成镜像上传;
如果您没有阿里云帐号,或者对阿里云的速度也不满意,也可以自己搭建镜像仓库,自己的内网中速度当然没的说了,细节不在此展开,这里有两篇参考文章:
本地运行controller时跳过webhook
controller有两种部署方式:部署在kubernetes环境内,或者在kubernetes环境外独立运行
在编码阶段,我们通常选择在自己电脑上运行controller,这样省去了镜像相关的操作,省时又省事儿;
但是,如果使用了webhook,由于其特殊的鉴权方式,需要将kubernetes签发的证书放置在本地(/tmp/k8s-webhook-server/serving-certs/目录),这就让我们两难了:
- 选择部署在kubernetes环境,要制作镜像和上传镜像;
- 选择运行在kubernetes环境之外,要签发证书放置在指定目录;
面对上述两难的纠结,官方给出了一个建议,如果在开发阶段暂时用不上webhook(注意这个前提),那么在本地运行controller时可以用一点小手段屏蔽掉webhook功能,具体操作由以下两步组成:
首先是修改main.go代码,如下图,红框中是新增的代码,其实就是增加了一个判断,如果环境变量ENABLE_WEBHOOKS等于false,就不会执行webhook相关逻辑:
其次,本地启动controller的命令,以前是make run,现在改成如下命令,即增加了一个参数:
make run ENABLE_WEBHOOKS=false
- 现在controller可以正常启动了,功能也正常,只是webhook相关的功能全部都不生效了;
controller的pod有两个容器
如果controller部署在kubernetes环境内,其是以pod的形态存在的,也就是说咱们写的webhook、reconcile代码都是在这个pod中运行的;
上述pod内实际上有两个容器,用kubectl describe命令看看这个pod,如下图,可见名为manager的容器才是controller代码运行的地方:
- 一个pod中有两个容器,对咱们的日常操作略有影响,简单来说就是使用kubectl logs命令查看controller日志的时候,要用-c参数指定容器,完整命令如下:
kubectl logs -f \
elasticweb-controller-manager-58576f4cb-hzchl \
-c manager \
-n elasticweb-system
常用操作命令整理
- 最后把常用的操作命令整理出来,便于日常使用:
- 创建operator项目:
kubebuilder init --domain com.bolingcavalry
- 创建API
kubebuilder create api \
--group webapp \
--version v1 \
--kind Guestbook
- 创建webhook
kubebuilder create webhook \
--group elasticweb \
--version v1 \
--kind ElasticWeb \
--defaulting \
--programmatic-validation
- 构建和部署CRD
make install
- 本地运行controller
make run
- 构建镜像并推送到仓库
make docker-build docker-push IMG=registry.cn-hangzhou.aliyuncs.com/bolingcavalry/elasticweb:001
- controller部署到kubernetes
make deploy IMG=registry.cn-hangzhou.aliyuncs.com/bolingcavalry/elasticweb:001
- 创建elasticweb资源对象
kubectl apply -f config/samples/elasticweb_v1_elasticweb.yaml
- 删除elasticweb资源对象
kubectl delete -f config/samples/elasticweb_v1_elasticweb.yaml
- 删除controller
kustomize build config/default | kubectl delete -f -
- 删除CRD
make uninstall
- 查看日志
kubectl logs -f \
elasticweb-controller-manager-58576f4cb-hzchl \
-c manager \
-n elasticweb-system
- 至此,kubebuilder实战期间的知识点小结就完成了,若您正在学习和开发operator,希望本篇的小结能给您一些参考;
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
kubebuilder实战之八:知识点小记的更多相关文章
- kubebuilder实战之一:准备工作kubebuilder实战之一:准备工作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之二:初次体验kubebuilder
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之三:基础知识速览
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之四:operator需求说明和设计
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之五:operator编码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之六:构建部署运行
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之七:webhook
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [原创].NET 业务框架开发实战之八 业务层Mapping的选择策略
原文:[原创].NET 业务框架开发实战之八 业务层Mapping的选择策略 .NET 业务框架开发实战之八 业务层Mapping的选择策略 前言:在上一篇文章中提到了mapping,感觉很像在重新实 ...
- Sass 主要知识点小记
Sass 主要知识点小记 以前写样式的时候,每个元素的颜色,背景色都需要重新写一遍,然后就想CSS难道没有变量么?最后就查到Sass.但当时没有静下心来好好的看一下,今天正好有时间,就在这里边看边整理 ...
随机推荐
- 基于MD5+RSA算法实现接口调用防扯皮级鉴权
概述 最近项目中需要对第三方开发接口调用,考虑了一下,准备采用MD5+RSA算对请求数据进行签名,来达到请求鉴权,过滤非法请求的目标. 数字签名采用MD5+RSA算法实现.RSA私钥要严格保密并提供安 ...
- JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
检测漏洞 工具 下载地址:https://github.com/joaomatosf/JavaDeserH2HC javac -cp .:commons-collections-3.2.1.jar E ...
- iOS实现常用地图坐标系转换(swift5)
// 桥接后,OC工程也可用 // HTMCoorTransform.swift // HTMapKit // // Created by LongMa on 2021/8/3. // import ...
- Netty 源码分析系列(二)Netty 架构设计
前言 上一篇文章,我们对 Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用. Netty 源码分析系列(一)Netty 概述 本篇文章我们就来说说Netty的架构设计,解密高 ...
- Java基础——运算符(同c语言)
- MySQL 优化特定类型的查询
优化COUNT()查询 COUNT() 是一个特殊的函数,有两种非常不同的作用: 统计某个列值的数量,也可以统计行数.在统计列值时要求列值是非空的(不统计NULL ).如果在COUNT() 的括号中指 ...
- 我快被Framework源码烦死了!
前言 这段时间,忙到没时间学新东西,都有点心有余而力不足,想着抽空补补课,于是重读了Framework源码. 因为Framework源码太重要了,像掉帧监控.函数插装.慢函数检测.ANR 监控.启动监 ...
- 三年Android开发,月薪一万二,不敢跳槽,每天都很焦虑
在我们的身边,存在一个普遍现象:很多人从事Android开发工作多年,走过的弯和坎,不计其数,经历的心酸难与外人道也.可是技术确难以提升.止步不前,薪资也只能看着别人水涨船高,自己却没有什么起色. 虽 ...
- Java8 新特性 Stream Api 之集合遍历
前言 随着java版本的不断更新迭代,java开发也可以变得甜甜的,最新版本都到java11了,但是后面版本也是不在提供商用支持,需要收费,但是java8 依然是持续免费更新使用的,后面版本也更新很快 ...
- 天梯赛 L1-058 6翻了
传送门:https://pintia.cn/problem-sets/994805046380707840/problems/1111914599408664577 这道字符串题,只是天梯赛L1的题, ...