kubebuilder实战之八:知识点小记

  1. 本地运行controller时跳过webhook

  2. controller的pod有两个容器

  3. 常用操作命令整理

  • 接下来挨个整理,今天的内容不写代码,咱们来一次轻松愉快的阅读;

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分钟内可以完成镜像上传;

  • 如果您没有阿里云帐号,或者对阿里云的速度也不满意,也可以自己搭建镜像仓库,自己的内网中速度当然没的说了,细节不在此展开,这里有两篇参考文章:

  1. CentOS部署Harbor镜像仓库

  2. 群晖DS218+部署Harbor(1.10.3)

本地运行controller时跳过webhook

  • controller有两种部署方式:部署在kubernetes环境内,或者在kubernetes环境外独立运行

  • 在编码阶段,我们通常选择在自己电脑上运行controller,这样省去了镜像相关的操作,省时又省事儿;

  • 但是,如果使用了webhook,由于其特殊的鉴权方式,需要将kubernetes签发的证书放置在本地(/tmp/k8s-webhook-server/serving-certs/目录),这就让我们两难了:

  1. 选择部署在kubernetes环境,要制作镜像和上传镜像;

  2. 选择运行在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

常用操作命令整理

  • 最后把常用的操作命令整理出来,便于日常使用:
  1. 创建operator项目:

kubebuilder init --domain com.bolingcavalry

  1. 创建API

kubebuilder create api \

–group webapp \

–version v1 \

–kind Guestbook

  1. 创建webhook

kubebuilder create webhook \

–group elasticweb \

–version v1 \

–kind ElasticWeb \

–defaulting \

–programmatic-validation

  1. 构建和部署CRD

make install

  1. 本地运行controller

make run

  1. 构建镜像并推送到仓库

make docker-build docker-push IMG=registry.cn-hangzhou.aliyuncs.com/bolingcavalry/elasticweb:001

  1. controller部署到kubernetes

make deploy IMG=registry.cn-hangzhou.aliyuncs.com/bolingcavalry/elasticweb:001

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-ujkemC3H-1713460277606)]

[外链图片转存中…(img-qDK4a2Ns-1713460277607)]

[外链图片转存中…(img-UNwpkVdT-1713460277608)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值