Kubernetes官方集群部署工具kubeadm原理解析


根据所处环境的不同,Kubernetes集群的安装部署有多种不同的方式。如果是在公有云上还好,一般都会提供相应的安装方案。如果是自行搭建私有环境,可选的安装方案则不尽相同,有时可能需要从零一步步开始,这个过程很容易出错,这往往使人感觉耗时耗力,望而却步。

kubeadm作为Kubernetes官方提供的集群部署管理工具,采用“一键式”指令进行集群的快速初始化和安装,极大地简化了部署过程,消除了集群安装的痛点。虽然kubeadm目前还不能用于生产,但社区一直在完善kubeadm的功能和稳定性, 刚刚发布的1.10版本中便包含了一系列优化补丁,预计在下一个版本可进入GA,能够用于Kubernetes生产环境的安装部署。本次分享针对kubeadm的基本原理和一些特性进行讲解,和大家一起体会这个安装部署的“最佳实践”设计思想。讲解内容有不足之处,欢迎大家批评指正,共同探讨,谢谢大家!
1. 基本原理


kubeadm做为集群安装的“最佳实践”工具,目标是通过必要的步骤来提供一个最小可用的集群运行环境。它会启动集群的基本组件以及必要的附属组件,至于为集群提供更丰富功能(比如监控,度量)的组件,不在其安装部署的范围。在环境节点符合其基本要求的前提下,kubeadm只需要两条基本命令便可以快捷的将一套集群部署起来。这两条命令分别是:

  • kubeadm init:初始化集群并启动master相关组件,在计划用做master的节点上执行。

  • kubeadm join:将节点加入上述集群,在计划用做node的节点上执行。


下面分别对这两条命令的流程进行详细的说明。在此之前需要特别说明的是,kubeadm并不负责kubectl和kubelet的安装,因此需要事先将kubectl和kubelet安装好。kubeadm、kubectl和kubelet的安装方式请参考:https://kubernetes.io/docs/setup/independent/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl。

1.1 kubeadm init

如果不需要对集群做任何定制化的配置,直接在master节点上执行该命令即可。该命令的内部流程如下图所示:


在上图的第④步完成的时候,正常情况下,Kubernetes的master的各组件便启动起来了。这里会有一个雷区:由于kubeadm是以static pod的方式启动master各组件,这就涉及到组件容器镜像的拉取。kubeadm默认的镜像源是从Google的gcr.io镜像库,因此需要科学合理地去解决如何访问该镜像库的问题,或者为kubeadm指定可用的第三方镜像库(据个人所知,如下镜像库可用,比如要拉取apiserver的1.9.6版本镜像,地址为:registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.9.6)。由于该雷区的存在,可能会使得kubeadm的便捷性大打折扣。

后面的步骤主要是进行master节点的属性设置、为node节点的加入做准备、启动附属组件等。需要注意的是,网络插件的安装也不在kubeadm管理的范围以内,需要根据自己对网络方案的选择来另行安装相应的CNI插件组件。

定制启动配置参数

如果在启动集群的时候希望定制kubeadm本身的参数(比如前文所提到的指定镜像库地址),或者定制master各组件的启动参数,可以通过给kubeadm init命令传入--config来指定本地的配置文件,在该文件中对期望的参数进行设置。这种方式为kubeadm部署集群提供了很大的配置灵活性,但它目前还是一个实验性的功能,后续可能会发生变化。

另外,kubeadm还提供了phase命令,将init过程划分为模块化的各个阶段。如果想对部署过程进行细粒度的控制和干预,达到定制化的目的,则可以考虑使用该命令。phase命令组合起来与init的工作流是一致的,不过目前它也是一个alpha阶段的功能。

1.2 kubeadm join

join的流程就比较简单了,它主要用来启动节点并加入集群。该命令的内部流程如下图所示:


在node节点加入集群时,需要建立双向信任,它分成两部分:discovery(node信任master)和TLS bootstrap(master信任node)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值