使用Kubernetes两年来的经验教训 (使用kubeadm部署K8S集群实验截图)

教程大全 2025-07-12 01:12:11 浏览

使用Kubernetes两年来的经验教训

2020-06-30 16:01:39Kubernetes并不是很多人所说的那种可全套交付的解决方案,但是通过一些精心的工程设计和非凡的社区生态系统,它可以成为一个无与伦比的平台。花点时间学习每个底层组件,你将会在通往容器幸福的道路上走得很好,希望你在此过程中能避免我的一些错误。

在Ridecell公司管理基础设施团队几年后,我想在停下来休息时记录下我的一些想法和经验教训。

Kubernetes不仅仅是炒作

我在Kubernetes领域里活跃了很久,所以这并不出乎我的意料,但当某件事情被大肆宣传的时候,仔细检查一下总是好的。在两年多的时间里,我的团队完成了从Ansible+Terraform到纯Kubernetes的全面迁移,在这个过程中,我们的部署率增加了三倍多,同时将部署错误减少到“我都不记得上次是什么时候发生的”的水平。我们还提高了操作可见性,大量无趣却很重要的自动化任务,以及基础设施中断时的平均恢复时间。

Kubernetes并不是魔法,但如果被一个懂它的团队使用,那它就是一个非常强大的工具。

Traefik + Cert-Manager + Ext-DNS组合很棒

Traefik作为Ingress控制器,Cert-Manager通过LetsEncrypt生成证书,External-DNS管理边缘DNS记录,这三个组合使得HTTP路由和管理像黄油一样顺畅。我一直对Traefik 2.0中删除了很多1.x注释功能的选择颇有微词,但它们终于在2.2中回归了,尽管以不同的形式。作为一个边缘代理,Traefik是一个可靠的选择,它具有出色的指标集成,是所有Ingress控制器中管理部件最少的,以及有一个反应迅速的开发团队。Cert-Manager配合任意Ingress方案都是一个神奇的工具,如果你在Kubernetes集群中做了TLS,但还没开始使用,那现在就去了解下吧。External-DNS没有其他两个那么受欢迎,但是对于自动化DNS记录和实际匹配的步骤来说,它的重要性不亚于其他两个。

如果有什么不同的话,这些工具实际上可能使得设置新的HTTPS端点变得太容易。多年来,我们最终使用了几十个独特的证书,这在Cert Transparency搜索和LetsEncrypt自己的证书到期警告等方面产生了很多噪音。以后我将会仔细考虑哪些主机名可以作为全局配置的通配符证书的一部分,以减少正在使用的证书总数。

Prometheus很震撼,Thanos并非大材小用

这是我第一次使用Prometheus作为主要的度量系统,它不愧为该领域的首要工具。我们选择Prometheus-Operator来管理它,这不失为一个好的选择,让我们更容易将抓取和规则配置分发到需要它们的应用中。(如果重来的话,)我会在一开始就使用Thanos。我原本以为使用它会过于大材小用,没想到它是那么容易配置,而且在跨区域查询和减少Prometheus资源使用方面起了很大帮助,即使我们没有直接使用主-主互备高可用的设置。

在使用该技术栈时我遇到的最大困扰是Grafana的数据管理,如何存储和组合仪表板。管理仪表板的工具有了巨大的增长,例如YAML文件JSON文件、Kubernetes自定义对象,以及你能想到的其他任何东西。但根源问题还是任何一个工具都很难从头开始编写一个仪表盘,因为Grafana有一百万种不同的配置选项和面板模式等等。我们最终将它作为一个有状态的系统来处理,将所有的仪表板进行分组管理,但我并不喜欢这种解决方案。这里是否有一个更好的工作流程呢?

GitOps才是正道

如果你使用Kubernetes,那么你应该使用GitOps。关于工具选择有很多,最简单的就是在你现有的CI系统中添加运行kubectl apply的作业,一直到使用专用的系统例如ArgoCD和Flux。不过我坚定地站在ArgoCD阵营,它是一个可作为开始的可靠的选择,而且在过去的这些年里它越来越好。就在这周,GitOps-engine的第一个版本已经上线,其将ArgoCD和Flux放在一个共享的底层系统上,所以现在更快更好了。如果你不喜欢这些工具的工作流,你现在甚至可以更容易构建新的。在几个月前我们遇到了一次意外的灾难恢复游戏日,因为有人不小心删除了测试集群中的大部分命名空间,多亏了GitOps,我们的恢复方式是在bootstrap库中执行make apply,然后等待系统自行重建。话说回来,对于一些不能在git中生存的有状态数据的Velero备份也是很重要的(比如cert-manager的证书,它虽然可以重新签发,但你可能会遇到LetsEncrypt的速率限制)。

我们遇到最大的问题就是选择将所有核心基础设施保存在一个存储库中。我依然认为使用一个单一的库是正确的设计,但我将会将不同的事物划分到不同的ArgoCD实例中,而不是像现在将所有都放在一个“infra”的实例中。使用单个实例导致更长的收敛时间和嘈杂的UI,而且如果我们习惯了正确地分割我们的Kustomize定义的话,它就没有多大益处了。

我们应用创建更多的Operator

我从一开始就积极发展自定义Operator,且我们在这方面取得了巨大的成功。我们从一个自定义资源和控制器开始,用于部署我们的主要网络应用,并慢慢扩展到该应用和其他应用所需的所有其他自动化。使用普通的Kustomize和ArgoCD进行简单的基础架构服务效果很好,但是当我们想要控制外部事物时(例如从Kubernetes创建AWS IAM角色,通过kiam来使用),或者当我们需要某种级别的状态机来控制这些事物时(例如带有SQL迁移的Django应用部署),我们都会需要用到Operator。 作为其中的一部分,我们还为我们所有的自定义对象和控制器建立了一个非常彻底的测试套件,这极大地提高了操作的稳定性和我们自己对系统正确工作的确定性。

当前有越来越多的方式来构建Opeator,但我仍然对kubebuilder相当满意(尽管公平地说,我们确实随着时间的推移大幅修改了项目结构,所以说它使用的是controller-runtime和controller-tools比kubebuilder本身更公平)。无论你最喜欢使用哪种语言和框架,都可能有可用的Operator工具包,你绝对应该使用它。

Secret管理仍是难题

Kubernetes有自己的Secret对象,用于在运行时管理秘密数据,与容器或与其他对象一起使用,而且这个系统工作得很好。但是Secret的长期工作流程还是有点乱。把一个原始的Secret提交到Git是很糟糕的,原因有很多,希望我不需要列举,那么我们如何管理这些对象呢?我的解决方案是开发一个自定义的EncryptedSecret类型,它使用AWS KMS对每个值进行加密,同时在Kubernetes中运行的控制器像往常一样将其解密回正常的Secret,还有一个用于解密-编辑-再加密循环的命令行工具。使用 KMS意味着我们可以通过IAM规则限制KMS密钥的使用来做访问控制,并且只加密值,让文件有合理的差异性。现在有一些基于Mozilla Sops的社区Operator提供了大致相同的工作流,尽管Sops在本地编辑工作流程上有点令人沮丧。总的来说,这个领域还需要很多努力,人们应该期待一个可审计、可版本化、可代码审查的工作流,就像在GitOps世界里的所有事情一样。

作为一个相关的问题,Kubernetes的RBAC模型的弱点在Secrets上表现得最为明显。几乎在所有情况下,被用于一个事物的Secret必须和使用它的事物在同一个命名空间中,这往往意味着很多不同事物的Secret最终会在同一个命名空间中(数据库密码、厂商API令牌、TLS证书),如果你想给某人(或某事,同样的问题适用于Operator)访问其中一个,他们就会获得所有的访问权限。让你的命名空间尽可能的小,任何可以放在它自己的命名空间的东西,都去做吧。你的RBAC策略会感谢你现在的做法。

原生CI和日志分析仍是开放性问题

我遇到的两大生态系统坑就是CI和日志分析。有很多部署在Kubernetes的CI系统,例如Jenkins、Concourse、Buildkite等。但感觉完全类原生的解决方案很少。JenkinsX可能是最接近原生体验的,但它是建立在非常大的复杂性上,我觉得非常可惜。Prow本身也是非常原生的,但定制化很多,所以也不是一个容易上手的工具。Tekton Pipelines和Argo Workflows都有原生CI系统的低级管道,但是找到一种方法将其暴露给我的开发团队从来没有超出理论操作人员的范围。Argo-CI似乎已经被放弃了,但Tekton团队似乎正在积极地追踪这个用例,所以我对它的一些改进充满希望。

日志收集基本上是一个已解决的问题,社区集中在Fluent Bit上,将其作为一个DaemonSet发送给一些Fluentd pods,然后再发到你用来存储和分析的任何系统上。在存储方面,我们有ElasticSearch和Loki作为主要的开放竞争者,每个都有自己的分析前端(Kibana和Grafana)。似乎主要还是最后一部分是我的挫败感的来源。Kibana出现的时间更久,分析功能也很丰富,但你必须使用商业版来获得基本的操作,比如用户身份验证和用户权限仍然非常模糊。Loki要新得多,分析工具就更少了(子字符串搜索和每行标签搜索),至今没有任何针对权限的设计。如果你小心翼翼地确保所有的日志输出是安全的,可以让所有的工程师看到,这没问题,但你要准备好在SOC/PCI等审计中遇到一些尖锐的问题。

结语

Kubernetes并不是很多人所说的那种可全套交付的解决方案,但是通过一些精心的工程设计和非凡的社区生态系统,它可以成为一个无与伦比的平台。花点时间学习每个底层组件,你将会在通往容器幸福的道路上走得很好,希望你在此过程中能避免我的一些错误。

使用kubeadm部署K8S集群实验截图

《财富》 500字作文

财富几乎每一个人都期望一帆风顺。 许多人都说:前进的路上,即使没有莺歌燕舞,没有盛开的鲜花,那最好也没有风雨、没有挫折。 其实,这是不可能的。 不过,我在这里不想展开这个话题。 我想谈谈自己对挫折的看法。 我越来越深地感悟到:挫折也是人生的一笔财富。 没有挫折的人生,从某种意义上来说是黯然失色的。 说“挫折是人生的财富”,最主要的一点是挫折会让我们变得聪明,变得坚强,变得成熟,变得完美。 当然,这首先需要我们经得住挫折。 俗话说:“吃一亏,长一智”。 这可是绝对“老人言”,绝对有道理的哲言。 比如小孩子不小心被狗咬了,很痛,哭了。 对孩子来说,这是挫折。 经过这次挫折,孩子知道狗是会咬人的,他必然对狗有了一份戒备。 下一回,他就会想办法避免被狗咬。 这不就变得聪明一点了吗? 但是,在现实生活中,却偏偏被狗咬过的人,又被狗咬了!这又如何理解呢?我分析下来,认为关键在于人们对待挫折的态度。 同样避免被狗咬,有人采取看见狗就大呼小叫、拔腿逃跑的办法,结果适得其反,助长了狗的嚣张气焰,再次被狗咬就在所难免;有人看见狗来了,只是弯了弯腰,装出从地上拾块砖头的样子,狗马上夹着尾巴溜之大吉了。 即使从来没有被狗咬过的人,照样可以用后一种办法对付狗。 因为聪明人不但能够从自己的挫折 中明白一些道理,还善于从别人的失败中总结经验教训。 从这点来看,挫折不更是一笔难得的精神财富吗? 诚然,我们可以借鉴别人的经验教训。 但我总感到人生道路的过分平坦,整个人生也就变得索然无味。 于是,我又想到,我们现在许多做父母、做老师、做长辈或领导的,是不是可以更多地放开手,让孩子们自己去闯荡闯荡,让他们依靠自己的努力去成就一番事业呢? 还有高考落榜的学子,是不是也能从挫折中得到点什么,振作起来,开始新一轮的搏击呢?你比别人多了一番挫折,经受了一番磨难,那么,一旦成功,你也必然比别人更多一份喜悦。 经受了挫折,经受了磨难,你会更加努力,更加珍惜,更加有出息! 越怕狗咬的,老被狗咬。 与其老是被动,不如学点主动进攻。 只要我们经得住挫折,那么,挫折会让我们变得更加聪明的。 垫在人类社会底下,托起现代文明的,不正是人类经历过的种种挫折吗? 挫折,确实也是人生的一笔财富啊!

手提电脑要怎么保养?

笔记本电脑的第一大戒就是摔,笔记本电脑一般都装在便携包中,放置时一定要把包放在稳妥的地方。 注意电脑放在包中时一定要把包的拉链拉上,或拉链打开后就一定要将电脑取出来。 笔者的一台笔记本电脑就是因为拉链打开后没有及时取出来,待处理完其他事后拿电脑时忘了已将拉链打开,结果包被提起来后电脑摔到了地上,这可是用惨痛教训换来的经验啊。 忌摔笔记本电脑的第一大戒就是摔,笔记本电脑一般都装在便携包中,放置时一定要把包放在稳妥的地方。 注意电脑放在包中时一定要把包的拉链拉上,或拉链打开后就一定要将电脑取出来。 笔者的一台笔记本电脑就是因为拉链打开后没有及时取出来,待处理完其他事后拿电脑时忘了已将拉链打开,结果包被提起来后电脑摔到了地上,这可是用惨痛教训换来的经验啊。 另外,由于笔记本电脑是要经常带着走的,所以免不了会磕磕碰碰,而笔记本电脑又确实经不起磕碰,因此要格外小心。 怕脏一方面,笔记本电脑经常会被带到不同的环境中去使用,比台式机更容易被弄脏;另一方面,由于笔记本电脑非常精密,因此比台式机更不耐脏,所以需要你精心呵护。 此外,大部分笔记本电脑的便携包是不防水的,所以如果你经常背着笔记本电脑外出,就得有一些防雨措施。 禁拆如果是台式机,即使你不懂电脑,拆开了可能也不会产生严重后果,而笔记本电脑则不同了,拧下个螺钉都可能带来麻烦。 用了多年笔记本电脑,我都未敢完全拆开过它。 不仅稍不留神就可能将它拆坏,而且自行拆卸过的电脑,厂家还未必接受保修。 所以平时有硬件方面的问题,最好还是去找厂家处理。 在此还补充一点体会,买笔记本电脑一定要买名牌大厂的。 由于笔记本电脑各种配件的通用性并不都是很好,很多不容易在配件市场上买得到,过了三两年,不是名牌厂家的话,连代理机构都找不着了,还怎么谈得了服务呢。 少用光驱光驱是目前电脑中最易衰老的部件,笔记本电脑光驱大多也不例外。 笔记本电脑的光驱多是专用产品,损坏后更换是比较麻烦的,因此要爱惜着用。 用笔记本电脑看VCD或听音乐不是个好习惯,更换笔记本电脑光驱的钱足够你买一台高级VCD机或CD随身听的了,何必要在笔记本电脑上看光碟呢?再说笔记本电脑上的画面和音响效果恐怕也都很是平平。 慎装软件笔记本电脑主要是为移动办公服务,在笔记本电脑上应该只安装你很了解的没有问题的软件,不要拿笔记本电脑试一些你没有把握的软件。 笔记本电脑上的软件不要装得太杂,系统太杂了免不了要引起一些冲突或这样那样的问题、隐患。 另外,笔记本电脑更应该谨防病毒,因为你很可能遇到一些人或场合,要用你的电脑看一下软盘或光盘。 保存驱动程序笔记本电脑的硬件驱动都有一些非常具有针对性的驱动程序,因此要做好备份和注意保存。 如果是公用微机,交接时更应注意,笔记本电脑的驱动丢失后要找齐可是比较麻烦的。 注意使用环境笔记本电脑上面有电路和元器件,注意不要在过强的磁场附近使用。 当然在乘飞机时也不能用,这一点空姐会提醒你的。 不要将笔记本电脑长期摆放在阳光直射的窗户下,经常处于阳光直射下容易加速外壳的老化。 散热的问题散热问题可能是笔记本电脑设计中的难题之一。 由于空间和能源的限制,在笔记本电脑中你不可能安装像台式机中使用的那种大风扇。 我拆开我的一台奔腾级笔记本电脑看过,其CPU上仅有一块单层的薄金属片,余下的热量可能就要靠机壳底板来散发了。 因此,使用时要注意给你的机器的散热位置保持良好的通风条件,不要阻挡住散热孔,而如果机器是通过底板散热的话,就不要把机器长期摆放在热的不良导体上使用

引导师个人工作总结

工作总结的写法(一)基本情况。 1.总结必须有情况的概述和叙述,有的比较简单,有的比较详细。 这部分内容主要是对工作的主客观条件、有利和不利条件以及工作的环境和基础等进行分析。 2.经验和教训。 做过一件事,总会有经验和教训。 为便于今后的工作,须对以往工作的经验和教训进行分析、研究、概括、集中,并上升到理论的高度来认识。 3.今后的打算。 根据今后的工作任务和要求,吸取前一时期工作的经验和教训,明确努力方向,提出改进措施等。 (二)写好总结需要注意的问题1.总结前要充分占有材料。 最好通过不同的形式,听取各方面的意见,了解有关情况,或者把总结的想法、意图提出来,同各方面的主管、同事商量。 一定要避免上司出观点,到同事中找事实的写法。 2.一定要实事求是,成绩不夸大,缺点不缩小,更不能弄虚作假。 这是分析、得出教训的基础。 3.条理要清楚。 总结是写给人看的,条理不清,人们就看不下去,即使看了也不知其所以然,这样就达不到总结的目的。 4.要剪裁得体,详略适宜。 材料有本质的,有现象的;有重要的,有次要的,写作时要去芜存精。 总结中的问题要有主次、详略之分,该详的要详,该略的要略。 5.总结的具体写作,可先议论,然后由专人写出初稿,再行讨论、修改。 最好由主要负责人执笔,或亲自主持讨论、起草、修改

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐