原理探究 -- kubeadm init工作流程

kubeadm在初始化Kubernetes集群时,会进行PreflightChecks确保环境兼容性,生成对外服务的证书和配置文件,为Master组件创建Pod配置,生成bootstraptoken,保存Master节点信息,并安装默认插件如kube-proxy和DNS。
摘要由CSDN通过智能技术生成

目录

一、Preflight Checks

二、生成对外提供服务所需的各种证书和对应目录

三、生成访问kube-apiserver所需的配置文件

四、为Master组件生成Pod配置文件

五、为集群生成一个bootstarp token

六、保存Master节点重要信息

七、安装默认插件

八、参考文献


一、Preflight Checks

      在执行kubeadm init指令之后,kubeadm首先需要做一系列的检查工作,以确定此台机器是否能够支持部署kubernetes,这一步的检查被称为Preflight Checks。其主要包括以后方面:

  1. 检查Linux的版本是否是3.10以上?
  2. Linux Cgroups模块是否可用?
  3. 机器的hostname是否标准?在Kubernetes项目中,机器的名字一般存储在etcd中的API对象中,对象必须要拥有标准的DNS命名(RFC 1123);
  4. 安装的kubelet和kubeadm版本是否匹配?
  5. 机器上是否已经安装了Kubernetes二进制文件?
  6. Kubernetes的端口10250/10251/10252是否被占用?
  7. ip、mount等命令是否存在?
  8. Docker是否安装等等?...

二、生成对外提供服务所需的各种证书和对应目录

      通过了Preflight Checks后,kubeadm 就会生成Kubernetes对外提供服务所需的各种证书以及对应的目录文件。Kubernetes项目对外提供服务时,除非开启“非安全模式”,一般情况下,都需要通过HTTPS才能够访问到 kube-apiserver,因此对应的 Kubernetes 项目必须配置好证书文件。

      kubeadm为Kubernetes项目生成的证书文件都存放在Master节点的/etc/kubernetes/pki目录下。其中,最主要的证书是ca.crt和对应私钥ca.key,其他的证书还包括:apiserver-kubelet-client.crt、apiserver-kubelet-client.key等。如果,你不想要kubeadm生成默认的证书,需要将现有的证书放到如下目录:

/etc/kubernetes/pki/ca.{crt,key}

      这样,kubeadm就会自动跳过证书生成的步骤,从而交给用户自己处理。

三、生成访问kube-apiserver所需的配置文件

      证书生成之后,kubeadm会在其他组件生成访问kube-apiserver所需的配置文件,这些文件的目录路径均为:/etc/kubernetes/xxx.conf

ls /etc/kubernetes

admin.conf  controller-manager.conf   kubelet.conf   scheduler.conf

      这些文件记录了当前Master节点的服务器地址、监视端口、证书目录等信息。这样,对应的客户端(如:scheduler和kubelet)对自动加载对应的文件,从而使其中的信息与kube-apiserver进行安全对接。

四、为Master组件生成Pod配置文件

      接下来,kubeadm会为Master组件自动生成Pod配置文件,Kubernetes的基本配置文件有3个:kube-apiserver、kube-controller-manager和kube-scheduler,这些组件都会以Pod方式部署,但此时的使用特殊的Pod启动方式“Static Pod”。

      Static Pod启动方式:允许将要启动部署的Pod的YAML文件放到一个指定的目录中。在kubelet启动时,会自动检测这个该目录,并加载所有的Pod YAML文件并在此机器上启动它们(kubelet不是容器化部署,而是一个具有独立功能的重要组件,直接在宿主机上运行,而其他的Master组件更像是辅助组件)。

      当这些YAML出现在kubelet监视的/etc/kubernetes/manifests目录下,kubelet会自动创建这些Pod,即对应的Master组件容器。Master组件启动完成后,kubeadm通过检查localhost:6443/healthz这个Master组件健康来检查URL,并等待所有的Master容器全部运行起来。

五、为集群生成一个bootstarp token

      之后,kubeadm会为集群生成一个bootstrap token。只要持有这个token,任何安装了kubelet和kubeadm的节点都可以通过kubeadm join加入集群。而这个token1的值以及用法,会在kubeadm init执行结束后被打印。

六、保存Master节点重要信息

      在token生成之后,kubeadm会将ca.crt和ca.key等Master节点重要信息,通过ConfigMap方式保存在etcd中,供后续部署Node节点使用,而这个ConfigMap的名字叫做cluster-info。

七、安装默认插件

      kubeadm init的最后一个步骤是安装默认插件,kubernetes默认必须安装的两个插件为:kube-proxy和DNS,分别用来提供集群的服务发现和DNS功能,且均以容器镜像的方式启动。

八、参考文献

【1】张磊:深入剖析Kebernetes

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值