一、前言
- Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。【Kubernetes是容器集群管理工具】
文章内容可以过多,限于文章篇幅,没办法为大家展示全部内容,有感兴趣想要获取学习的朋友,后台 【笔记】,获取免费下载方式。理论篇 第一部分:理解控制器
当我们尝试去理解 Kubernetes 集群工作原理的时候,控制器肯定是一个难点。这是因为控制器有很多,具体实现大相径庭;且控制器的实现用到了一些较为晦涩的机制,不易理解。但是,我们又不能绕过控制器,因为它是集群的“大脑”。
文章图片
文章图片
第二部分:网络详解
阿里云 Kubernetes 集群网络目前有两种方案,一种是 flannel 方案,另外一种是基于calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似,不同的地方在于,terway 支持Pod 弹性网卡,以及 NetworkPolicy 功能。
文章图片
文章图片
第三部分:伸缩原理
阿里云 Kubernetes 集群的一个重要特性,是集群的节点可以动态地增加或减少。有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,同时也可以在资源利用率降低的时候,释放放节点以节省费用。
文章图片
文章图片
第四部分:认证与调度
在这, 我们以一个简单的容器化 web 程序为例,着重分析了客户端怎么样通过 Kubernetes 集群 APIServer 认证,以及容器应用怎么样被分派到合适节点这两件事情。
在分析过程中,我们弃用了一些便利的工具,比如 kubectl,或者控制台。我们用了一些更接近底层的小实验,比如拆解 KubeConfig 文件,再比如分析调度器日志来分析认证和调度算法的运作原理。希望这些能对大家进一步理解 Kubernetes 集群有所帮助。
文章图片
文章图片
第五部分:服务原理
理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解,去排查服务相关问题的时候,会非常不顺利。
这体现在,对于新手来说,ping 不同服务的 IP 地址这样基础的问题,都很难理解;而就算对方经验很丰富的工程师来说,看懂服务相关的 iptables 配置,也是相当的挑战。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
这部分来深入解释一下 Kubernetes 集群服务的原理与实现,便于大家理解。
文章图片
文章图片
第六部分:镜像自动拉取
相比 Kubernetes 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的。而镜像拉取失败,大多数情况下都和权限有关。所以,在处理相关问题的时候,我们往往会轻松地说:这问题很简单,肯定是权限问题。但实际的情况是,我们经常为一个问题,花了多个人的时间却找不到原因。这主要还是我们对镜像拉取,特别是私有镜像自动拉取的原理理解不深。这篇文章,作者将带领大家讨论下相关原理。
文章图片
文章图片
实践篇 第七部分:节点就绪的问题之一
排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战。今天借这篇文章,跟大家分析一例这样的问题。排查过程中,需要理解一些自己完全陌生的组件,比如 systemd 和 dbus。
文章图片
文章图片
第八部分:节点就绪问题之二
之前分享过一例集群节点 NotReady 的问题。在那个问题中,我们的排查路径,从 Kubernetes 集群到容器运行时,再到 sdbus 和 systemd,不可谓不复杂。那个问题目前已经在解决 systemd 中做了修复,所以以前基本上能看到那个问题的几率是越来越低了。
但是,集群节点就绪问题还是有的,然而原因却有所不同。
这部分跟大家分享另外一例集群节点 NotReady 的问题。这个问题和之前那个问题相比,查路径完全不同。作为姊妹篇分享给大家。
文章图片
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upumWIHX-1653730277239)(https://upload-images.jianshu.io/upload_images/25002343-8a3cab364870d293.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
第九部分:命名空间删除问题
阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题。常见的有,网络连接失败,服务器宕机,性能不达标,请求响应慢等情况。但如果要评选,什么问题看起来微不足道事实上却足以让人绞尽脑汁,我相信答案肯定是“删不掉”的问题。比如文件删不掉,进程结束不掉,驱动卸载不了等。这样的问题就像冰山,隐藏在它们背后的复杂逻辑,往往超过我们的预想。
文章图片
文章图片
第十部分:集群安全组配置管理
阿里云容器产品 Kubernetes 版本,即 ACK,基于阿里云 IaaS 层云资源创建。资源包括云服务器 ECS,专有网络 VPC,弹性伸缩 ESS 等。以这些资源为基础,ACK 产品实现了 Kubernetes 集群的节点,网络,自动伸缩等组件和功能。
一般而言,用户对 ACK 产品有很大的管理权限,这包括集群扩容,创建服务等。与此同时,用户可以绕圈过去 ACK 产品,对集群底层资源进行修改。如释放 ECS,删除 SLB。如果不能理清背后的影响,这样的修改会损坏集群功能。
这部分会以 ACK 产品安全组的配置管理为核心,深入讨论安全组在集群中扮演的角色,安全组在网络链路中所处的位置,以及非法修改安全组会产生的各类问题。文章内容适用于专有集群和托管集群。
文章图片
第十一部分:二分之一活的微服务
Istio is the future!基本上,我相信对云原生技术趋势有些微判断的同学,都会有这个感悟。其背后的逻辑其实是比较简单的:当容器集群,特别是 Kubernetes 成为事实上的标准之后,应用必然会不断地复杂化,服务治理肯定会成为强需求
文章图片
文章图片
第十二部分:服务网格证书过期问题
客户某一台 Kubernetes 集群节点重启之后,他再也无法创建 Istio 虚拟服务和 Pod 了。一来对 Istio 还不是那么熟悉,二来时间可能有点晚,脑子还在懵圈中,本来一个应该比较轻松解决掉的问题,花了几十分钟看代码,处理的惨不忍睹。最终还是在某位大神的帮助下,解决了问题。鉴于此问题,以及相关报错,在网上找不到对应的文章,所以这里分享下这个问题,避免后来的同学,在同样的地方踩坑。另外谨以此篇致敬工作中遇到过的大神!
文章图片
文章图片
总结 也许你在学习和实践上也有过这样的难点与困惑:
网上检索大量资料来学习,往往会一头雾水,找不到正确的切入点;而官方文档像工具书一样晦涩难懂,往往学起来不得其法,事倍功半。
大部分图书更为体系化,但重理论多于实践,而实践经验才是帮助你在工作中快速上手,真正落地到自己的项目中的助推剂。
自己“硬啃”Kubernetes源码,但这注定是一条非常非常非常难的路。别问我为什么知道,因为我就是这么死磕代码过来的。
【kubernetes|阿里P8架构师力荐K8s项目实战笔记 图文并茂带你深度解析Kubernetes】如果你对学习Kubernetes存在以上问题或者无从下手,这份手册可以很好地帮助到你,有需要的话麻烦在我主页回复【笔记】即可获取!
推荐阅读
- 网络安全|k8s系列 之 容器安全pod安全 集群安全
- 微服务系列|微服务系列(分布式文件存储之 MinIO 入门指南)
- 微服务系列|微服务系列(分布式文件存储之 Spring Boot 集成 MinIO)
- #|【Spring Cloud】新闻头条微服务项目(FreeMarker模板引擎实现文章静态页面生成)
- #|【Spring Cloud】新闻头条微服务项目(使用JWT+MD5+Salt进行登录验证)
- #|【Spring Cloud】新闻头条微服务项目(环境搭建及框架准备)
- Java|基于SpringCloud Alibaba的微服务项目基础骨架
- 【Java面试】怎么防止缓存击穿的问题()
- Docker|Docker自定义镜像-Dockerfile