Kubernetes -2-
饿着肚子写公众号的 yann 同学。
第 1 部分 反省
昨天的内容被熊哥批评了。
熊哥说,「你光想着自己爽,一句我认为如何如何,洋洋洒洒半屏幕结论,完全不考虑别人能不能看得懂。」
yann 一想好像是这么回事,一激动全讲出来了。所以,今天会稍微再细致的给大家解说一下昨天的概念。
第 2 部分 知识
Deployment
昨天提到的 Deployment 其实相当于订单或需求清单。比如说,yann 需要建立一个集群,里面有3个容器副本,就可以用 Deployment 来建立。
当然,这么定义是不严谨的。但是暂时可以这样理解:Deployment 包含了一个任务中的容器数量及所用的镜像,还有的其他一些属性。
yann 觉得先有概念,在逐步完善是一个很好的学习过程。yann 很不喜欢接受新事物的开始,就背负一堆负担。正常的学习路线应该是先搞懂原理,了解主要组件,然后再细化实践。而不是精雕细琢,记住每一个细碎知识点。结果半年以后还停在第1章,那就已经凉凉了。
演示
下面通过视频的方式给大家演示,通过 Deployment 创建一个集群的过程。大家只要有个概念:什么样的操作会产生什么样的结果就好了, 不必深究细节。
视频
微信里的视频拿不出来,麻烦跳转观看.
视频有一分半, 中间电脑有点卡了,所以画面停顿,请多等一下。
看完视频只要体会了以下两个知识点就可以了:
其实视频里面还定义了服务,并检验了容器和服务的可用性。不过这些目前不是很重要, 不了解也罢。
不过要注意,Deployment 并不是一份死板的资源清单,而是对资源动态的保证,例如一个 节点 node 宕机了, Deployment 的控制器只要发现定义数量不满足了,就要在存活节点上重新发起新的需求,以保证满足设定。
CRD
既然搞清楚了 Deployment 的用途,那 CRD 也就很容易说明了。Deployment 是一种资源定义清单, 定义了容器的副本数和数量。而CRD就是用户自己去自定义某些资源清单。
那这样就会有人问了,「我没事自己定义个资源清单干嘛? 」。这个问题问的好,昨天 yann 也说过,光是资源的定义没有任何意义,要配合控制器 controller 来处理这个清单。所以我们自定义了一个清单。自然也要自定义控制器去处理这个清单。而在控制器中,可以附加各种业务逻辑来完成相应的控制,这就是我们的目的。
搞清楚了前因后果,我们再来看一下 CRD 项目的具体的操作方式。昨天 yann 演示了一个 CRD 的一个配置文件,其实这只是第1步。后续还要补充另外一些文件,来构造成一个特定的工程。
然后我们会安装代码生成器,代码生成器检测工程文件的结构,来生成一些通用代码和组件,在此基础上我们再来编写控制器。最后把编译好的二进制控制器文件放到 k8s 服务器上, 再加上权限,指定配置文件就可以使用了。
为什么会这样操作?是因为k8s的处理过程还是相对复杂,厂商为了方便用户会自动生成一部分代码,只有部分比较灵活的代码由用户来完成。
第 3 部分 总结
下一篇,yann 会带领大家理清需要补充的文件和代码,再尝试使用代码生成器,产生相应的代码出来。为编写 controller 做好准备。
把复杂、困难的东西,讲的简洁明了, 确实挺困难的。yann 会尽量放慢速度,并辅以图表和视频。尽量展现出其中的原理。学习不能贪图爽快,一定要搞清楚原理。不然很容易陷入一个脚本跑起来, 各种问题都奇怪的状况。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJlUajya-1576144057057)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
深度科普 (CNCF→) 毕业项目 | 生态 | Ansible | Chef | Puppet | VMware | OpenStack | registry | Harbor| Docker | Containerd | RKT | ROOK | Calico | Flannel | Open vSwitch | Kubernetes | Zookeeper | Consul | Etcd | GRPC | thrift | MySQL | Spark | Storm | RocketMQ | kafka| RabbitMQ | Helm | Docker Composer | Packer | Jenkins | Bamboo | (Prometheus→) 构建 | DBA | 系统 | Grafana | Zabbix | Fluentd | ElasticSearch | Logstash | Jaeger | Go语言 (go web)网站 | Request | Response| 模板| 数据存储 | 处理 JSON (go docker)冒烟| 限制资源| Python 期末总结 | ELK 任务 | 部署ES | 最小模式 | 集群 | Logstash | 中转 | 输出 | kafka | 消息定制 | 过滤 | geoip | grok | kibana | es head | 使用 | CURD | 指引 Redis 集群 | 脚本 |迁移 | 加固 | 持久化 | 性能 | 缓存思考 | Kafka 集群 | 故障排查 | 命令行 | 术语 | 集群原理 | 近期文章 寂寞的时候, Siri在帮我数羊 - 100期纪念
本文由博客一文多发平台 OpenWrite 发布!
发布在平台的文章, 和原文存在格式差异, 阅读不便请见谅
最新内容欢迎关注公众号: