深入浅出Kubernetes.pdf
《深入浅出Kubernetes.pdf》由会员分享,可在线阅读,更多相关《深入浅出Kubernetes.pdf(128页珍藏版)》请在咨信网上搜索。
1、理论篇4这么理解集群控制器,能行!4集群网络详解13集群伸缩原理21认证与调度28集群服务的三个要点和一种实现45镜像拉取这件小事56实践篇67读懂这一篇,集群节点不下线67节点下线姊妹篇81我们为什么会删除不了集群的命名空间?93阿里云 ACK 产品安全组配置管理104二分之一活的微服务114半夜两点 Ca 证书过期问题处理惨况总结124目录这么理解集群控制器,能行!简介:当我们尝试去理解 K8S 集群工作原理的时候,控制器肯定是一个难点。这是因为控制器有很多,具体实现大相径庭;且控制器的实现用到了一些较为晦涩的机制,不易理解。但是,我们又不能绕过控制器,因为它是集群的“大脑”。当我们尝试去
2、理解 K8S 集群工作原理的时候,控制器肯定是一个难点。这是因为控制器有很多,具体实现大相径庭;且控制器的实现用到了一些较为晦涩的机制,不易理解。但是,我们又不能绕过控制器,因为它是集群的“大脑”。今天这篇文章,我们通过分析一个简易冰箱的设计过程,来深入理解集群控制器的产生,功能以及实现方法。大图下图是 K8S 集群的核心组件,包括数据库 etcd,调度器 scheduler,集群入口APIServer,控制器 Controller,服务代理 kube-proxy 以及直接管理具体业务容器的 kubelet。这些组件逻辑上可以被分为三个部分:核心组件 etc 数据库,对 etcd进行直接操作的
3、入口组件 APIServer,以及其他组件。这里的“其他组件”之所以可以被划分为一类,是因为它们都可以被看做是集群的控制器。理论篇这么理解集群控制器,能行!这么理解集群控制器,能行!统一入口对于上边的冰箱,我们可以简单抽象成两个部分:统一的操作入口和冰箱的所有组件。在这里,用户只有通过入口,才能操作冰箱。这个入口提供给用户两个接口:开关门和调节温控器。用户执行这两个接口的时候,入口会分别调整冰箱门和温控器的状态。这么理解集群控制器,能行!这么理解集群控制器,能行!SharedInformer上边的控制器和控制器管理器,看起来已经相当不错了。但是当冰箱功能增加,势必有很多新的控制器加进来。这些控
4、制器都需要通过冰箱入口,时刻监控自己关心的组件的状态变化。比如照明系统控制器就需要时刻监控冰箱门的状态。当大量控制器不断的和入口通信的时候,就会增加入口的压力。这个时候,我们把监控冰箱组件状态变化这件事情,交给一个新的模块SharedInformer 来实现。SharedInformer 作为控制器的代理,替控制器监控冰箱组件的状态变化,并根据控制器的喜好,把不同组件状态的变化,通知给对应的控制器。通过优化,这样的 SharedInformer 可以极大的缓解冰箱入口的压力。这么理解集群控制器,能行!这么理解集群控制器,能行!假设 SharedInformer 和冰箱入口通过 http 协议通
5、信的话,那么 http 分块编码(chunkedtransferencoding)就是实现 ListWatcher 的一个好的选择。控制器通过ListWatcher 给冰箱入口发送一个查询然后等待,当冰箱组件有变化的时候,入口通过分块的 http 响应通知控制器。控制器看到 chunked 响应,会认为响应数据还没有发送完成,所以会持续等待。举例以上我们从一个简易冰箱的进化过程中,了解了控制器产生的意义,扮演的角色,以及实现的方式。现在我们回到 K8S 集群。K8S 集群实现了大量的控制器,而且在可以预见的未来,新的功能的控制器会不断出现,而一些旧的控制器也会被逐渐淘汰。目前来说,我们比较常用
6、的控制器,如 pod 控制器、deployment 控制器、service 控制器、replicaset 控制器等。这些控制器一部分是由 kubecontrollermanager 这个管理器实现和管理,而像 route 控制器和 service 控制器,则由这么理解集群控制器,能行!这么理解集群控制器,能行!路由控制器在集群网络一章中,我们提到过,当一个节点加入一个 K8S 集群的时候,集群需要在 VPC 路由表里增加一条路由,来搭建这个新加入节点到 pod 网络的主干道。而这件事情,就是路由控制器来做的。路由控制器完成这件事情的流程,与上边服务控制器的处理流程非常类似,这里不再赘述。结束语
7、基本上来说,K8S 集群的控制器,其实扮演着集群大脑的角色。有了控制器,K8S 集群才有机会摆脱机械和被动,变成一个自动、智能、有大用的系统。集群网络详解简介:阿里云 K8S 集群网络目前有两种方案,一种是 flannel 方案,另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似,不同的地方在于,terway 支持 Pod 弹性网卡,以及 NetworkPolicy 功能。阿里云 K8S 集群网络目前有两种方案,一种是 flannel 方案,另外一种是基于calico 和弹性网卡 eni 的 terway 方案。Terway 和 f
8、lannel 类似,不同的地方在于,terway 支持 Pod 弹性网卡,以及 NetworkPolicy 功能。今天这篇文章,我们以 flannel 为例,深入分析阿里云 K8S 集群网络的实现方法。我会从两个角度去分析,一个是网络的搭建过程,另外一个是基于网络的通信。我们的讨论基于当前的 1.12.6 版本。鸟瞰总体上来说,阿里云 K8S 集群网络配置完成之后,如下图,包括集群 CIDR,VPC 路由表,节点网络,节点的 podCIDR,节点上的虚拟网桥 cni0,连接 Pod 和网桥的 veth 等部分。14集群网络详解类似的图,大家可能在很多文章中都看过,但是因为其中相关配置过于复杂,
9、比较难理解。这里我们可以把这些配置,分三种情况来理解:集群配置,节点配置以及 Pod 配置。与这三种情况对应的,其实是对集群网络 IP 段的三次划分:首先是集群 CIDR,接着为每个节点分配 podCIDR(即集群 CIDR 的子网段),最后在podCIDR 里为每个 Pod 分配自己的 IP。集群网络详解集群网络详解集群控制器有了这个参数,在节点 kubelet 注册节点到集群的时候,集群控制器会为每个注册节点,划分一个子网出来,即为每个节点分配 podCIDR。如上图,NodeB 的子网是 172.16.8.1/25,而 NodeA 的子网是 172.16.0.128/25。这个配置会记录
10、到集群 node 的 podCIDR 数据项里。节点阶段经过以上集群阶段,K8S 有了集群 CIDR,以及为每个节点划分的 podCIDR。在此基础上,集群会下发 flanneld 到每个阶段上,进一步搭建节点上,可以给Pod 使用的网络框架。这里主要有两个操作,第一个是集群通过 CloudControllerManager 给 VPC 配置路由表项。路由表项对每个节点有一条。每一条的意思是,如果 VPC 路由收到目的地址是某一个节点 podCIDR 的 IP 地址,那么路由会把这个网络包转发到对应的 ECS 上。第二个是创建虚拟网桥 cni0,以及与 cni0 相关的路由。这些配置的作用是,
11、从阶段外部进来的网络包,如果目的 IP 是 podCIDR,则会被节点转发到 cni0 虚拟局域网里。集群网络详解集群网络详解理解这两者的区别,有助于我们理解 flanneld 和 flannelcni 相关的配置文件的用途。比如/run/flannel/subnet.env,是 flanneld 创建的,为 flannelcni 提供输入的一个环境变量文件;又比如/etc/cni/net.d/10-flannel.conf,也是 flanneldpod(准确的说,是 pod 里的脚本 install-cni)从 pod 里拷贝到节点目录,给 flannelcni使用的子网配置文件。通信以上完
12、成 Pod 网络环境搭建。基于以上的网络环境,Pod 可以完成四种通信:本地通信,同节点 Pod 通信,跨节点 Pod 通信,以及 Pod 和 Pod 网络之外的实体通信。集群网络详解集群网络详解总结以上是阿里云 K8S 集群网络的搭建和通信原理。我们主要通过网络搭建和通信两个角度去分析 K8S 集群网络。其中网络搭建包括初始阶段,集群阶段,节点阶段以及 Pod 阶段,这么分类有助于我们理解这些复杂的配置。而理解了各个配置,集群通信原理就比较容易理解了。集群伸缩原理简介:阿里云 K8S 集群的一个重要特性,是集群的节点可以动态的增加或减少。有了这个特性,集群才能在计算资源不足的情况下扩容新的节
13、点,同时也可以在资源利用率降低的时候,释放节点以节省费用。这篇文章,我们讨论阿里云 K8S 集群扩容与缩容的实现原理。阿里云 K8S 集群的一个重要特性,是集群的节点可以动态的增加或减少。有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,同时也可以在资源利用率降低的时候,释放节点以节省费用。这篇文章,我们讨论阿里云 K8S 集群扩容与缩容的实现原理。理解实现原理,在遇到问题的时候,我们就可以高效地排查并定位原因。我们的讨论基于当前的1.12.6 版本。节点增加原理阿里云 K8S 集群可以给集群增加节点的方式有,添加已有节点,集群扩容,和自动伸缩。其中,添加已有节点又可分为手动添加已有节
14、点和自动添加已有节点。节点的增加涉及到的组件有,节点准备,弹性伸缩(ESS),管控,ClusterAutoscaler以及调度器。22集群伸缩原理手动添加已有节点节点准备,其实就是把一个普通的 ECS 实例,安装配置成为一个 K8S 集群节点的过程。这个过程仅靠一条命令就可以完成。这条命令使用 curl 下载 attach_node.sh 脚本,然后以 openapitoken 为参数,在 ECS 上运行。curlhttp:/public/pkg/run/attach/attach_node.sh|bash-s-opena-pi-token这里 token 是一个对的 key,而 value
15、是当前集群的基本信息。阿里云 K8S集群的管控,在接到手动添加已有节点请求的时候,会生成这个对,并把 key 作为token 返回给用户。这个 token(key)存在的价值,是其可以让 attach_node.sh 脚本,以匿名身份在 ECS 上索引到集群的基本信息(value),而这些基本信息,对节点准备至关重要。总体上来说,节点准备就做两件事情,读和写。读即数据收集,写即节点配置。集群伸缩原理集群伸缩原理自动添加已有节点自动添加已有节点,不需要人为拷贝黏贴脚本到 ECS 命令行来完成节点准备的过程。管控使用了 ECSuserdata 的特性,把类似以上节点准备的脚本,写入ECSuserd
16、ata,然后重启 ECS 并更换系统盘。当 ECS 重启之后,会自动执行Userdata 里边的脚本,来完成节点添加的过程。这部分内容,大家其实可以通过查看节点 userdata 来确认。!/bin/bashmkdir-p/var/log/acscurlhttp:/public/pkg/run/attach/1.12.6-aliyun.1/attach_node.sh|bash-s-docker-version-token-endpoint-cluster-dns/var/log/acs/init.log这里我们看到,attach_node.sh 的参数,与前一节的参数有很大的不同。其实这里的
17、参数,都是前一节 value 的内容,即管控创建并维护的集群基本信息。自动添加已有节点省略了通过 key 获取 value 的过程。集群扩容集群扩容与以上添加已有节点不同,此功能针对需要新购节点的情形。集群扩容的实现,在添加已有节点的基础上,引入了弹性伸缩 ESS 组件。ESS 组件负责从无到有的过程,而剩下的过程与添加已有节点类似,即依靠 ECSuserdata 脚本来完成节点准备。下图是管控通过 ESS 从无到有创建 ECS 的过程。集群伸缩原理集群伸缩原理个用户数据和手动添加已有节点的脚本类似,不同的地方在于,其针对自动伸缩这种场景,增加了一些专门的标记。attach_node.sh 脚
18、本会根据这些标记,来设置节点的属性。!/bin/shcurlhttp:/public/pkg/run/attach/1.12.6-aliyun.1/attach_node.sh|bash-s-openapi-token-esstrue-labelsk8s.io/cluster-auto-scaler=true,workload_type=cpu,=true而第二个过程,是实现自动增加节点的关键。这里引入了一个新的组件Autoscaler,它以 Pod 的形式运行在 K8S 集群中。理论上来说,我们可以把这个组件当做一个控制器。因为它的作用与控制器类似,基本上还是监听 Pod 状态,以便在 Po
19、d 因为节点资源不足而不能被调度的时,去修改 ESS 的伸缩规则来增加新的节点。这里有一个知识点,集群调度器衡量资源是否充足的标准,是“预订率”,而不是“使用率”。这两者的差别,类似酒店房价预订率和实际入住率:完全有可能有人预订了酒店,但是并没有实际入住。在开启自动伸缩功能的时候,我们需要设置缩容阈值,就是“预订率”的下线。之所以不需要设置扩容阈值。是因为 Autoscaler 扩容集群,依靠的是 Pod 的调度状态:当 Pod 因为节点资源“预订率”太高无法被调度的时候,Autoscaler 就会扩容集群。节点减少原理与增加节点不同,集群减少节点的操作只有一个移除节点的入口。但对于用不同方法
20、加入的节点,其各自移除方式略有不同。首先,通过添加已有节点加入的节点,需要三步去移除:管控通过 ECSAPI 清楚 ECSuserdata;管控通过 K8SAPI 从集群中删除节点;管控通过 ECSInvoke-集群伸缩原理27Command 在 ECS 上执行 kubeadmreset 命令清理节点。其次,通过集群扩容加入的节点,则在上边的基础上,增加了断开 ESS 和 ECS关系的操作。此操作由管控调用 ESSAPI 完成。最后,经过 ClusterAutoscaler 动态增加的节点,则在集群 CPU 资源“预订率”降低的时候,由 ClusterAutoscaler 自动移除释放。其触发
21、点是 CPU“预订率”,即上图写 Metrics 的原因。总结总体上来说,K8S 集群节点的增加与减少,主要涉及四个组件,分别是 ClusterAutoscaler,ESS,管控以及节点本身(准备或清理)。根据场景不同,我们需要排查不同的组件。其中 ClusterAutoscaler 是一个普通的 Pod,其日志的获取和其他Pod 无异;ESS 弹性伸缩有其专门的控制台,我们可以在控制台排查其伸缩配置、伸缩规则等相关子实例日志和状态;而管控的日志,可以通过查看日志功能来查看;最后,对于节点的准备与清理,其实就是排查对应的脚本的执行过程。以上讲道理居多,希望对大家排查问题有所帮助。认证与调度简介
22、:不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个集群。通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个集群。通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。集群一般远离用户,坐落在数据中心。为了让这些节点互相协作,对外提供一致且高效的服务,集群需要操
23、作系统。Kubernetes 就是这样的操作系统。比较 Kubernetes 和单机操作系统,Kubernetes 相当于内核,它负责集群软硬件资源管理,并对外提供统一的入口,用户可以通过这个入口来使用集群,和集群沟通。认证与调度认证与调度 w.Write(byte(This is a small app for kubernetes.n)func main()r:=mux.NewRouter()r.HandleFunc(/,about)log.Fatal(http.ListenAndServe(0.0.0.0:2580,r)使用 gobuild 命令编译这个程序,产生 app 可执行文件。这
24、是一个普通的可执行文件,它在操作系统里运行,会依赖系统里的库文件。#ldd applinux-vdso.so.1=(0 x00007ffd1f7a3000)libpthread.so.0=/lib64/libpthread.so.0(0 x00007f554fd4a000)libc.so.6=/lib64/libc.so.6(0 x00007f554f97d000)/lib64/ld-linux-x86-64.so.2(0 x00007f554ff66000)“笼子”为了让这个程序不依赖于操作系统自身的库文件,我们需要制作容器镜像,即隔离的运行环境。Dockerfile 是制作容器镜像的“菜谱
25、”。我们的菜谱就只有两个步骤,下载一个 centos 的基础镜像,把 app 这个可执行文件放到镜像中/usr/local/bin 目录中去。FROM centosADD app/usr/local/bin认证与调度认证与调度这里我们创建一个阿里云 Kubernetes 集群。登录集群管理页面,我们可以看到APIServer 的公网入口。API Server 内网连接端点:https:/xx.xxx.xxx.xxx:6443双向数字证书验证阿里云 Kubernetes 集群 APIServer 组件,使用基于 CA 签名的双向数字证书认证来保证客户端与 apiserver 之间的安全通信。这句
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入浅出 Kubernetes
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【Stan****Shan】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【Stan****Shan】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。