首页 > 安全资讯 >

kubeadm工作机制分析

17-04-14

kubeadm工作机制分析,kubeadm是Kubernetes 1 4开始新增的特性,用于快速搭建Kubernetes集群环境,两个命令就能把一个k8s集群搭建起来。之前广为诟病的“k8s环境搭建难”的问题。

kubeadm是Kubernetes 1.4开始新增的特性,用于快速搭建Kubernetes集群环境,两个命令就能把一个k8s集群搭建起来。之前广为诟病的“k8s环境搭建难”的问题,很快得到突破性的解决。本博文基于kubernetes v1.5.0源码对kubeadm工作原理和流程的分析,一窥其内部的工作流。

介绍

kubeadm一共提供了5个子命令:

kubeadm init kubeadm join kubeadm token kubeadm reset kubeadm version

这个可以在k8s v1.5.0 代码中cmd/kubeadm/app/cmd/cmd.go:29看到:

func NewKubeadmCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {
    cmds := &cobra.Command{
        Use:   "kubeadm",
        Short: "kubeadm: easily bootstrap a secure Kubernetes cluster",
        ...
    }
    cmds.ResetFlags()
    cmds.SetGlobalNormalizationFunc(flag.WarnWordSepNormalizeFunc)

    cmds.AddCommand(NewCmdInit(out))
    cmds.AddCommand(NewCmdJoin(out))
    cmds.AddCommand(NewCmdReset(out))
    cmds.AddCommand(NewCmdToken(out))
    cmds.AddCommand(NewCmdVersion(out))

    return cmds
}

其中kubeadm init 和join两个子命令是最为关键的。通过在master上执行kubeadm init,完成master的初始化,然后再在其他node上执行kube join将node加入到cluster,即可完成一套安全集群的搭建。

更多关于kubeadm的介绍和入门知识,请参考一下官方文档:

Installing Kubernetes on Linux with kubeadm kubeadm reference

废话不多说,通过阅读kubernetes v1.5.0源码后,下面分别给出kube init和join两个子命令的工作流程图,据此你就能了解其工作机制。

kubeadm init工作机制

这里写图片描述

kubeadm join工作机制

这里写图片描述

总结

kubeadm init主要工作:

创建集群安全相关的的key、certs和conf文件。 创建kube-apiserver、kube-controller-manager、kube-scheduler、etcd(如果没有配置external etcd)这些static pod的json格式的manifest文件,kubelet负责启动这些master组件。 通过addons方式启动kube-discovery deployment、kube-proxy daemonSet、kube-dns deployment。

kubeadm join主要负责创建kubelet.conf,使kubelet能与API Server建立连接:

访问kube-discovery服务获取cluster info(包含cluster ca证书、API Server endpoint列表和token。 利用定的token,检验cluster info的签名。 检验成功后,再与API Server建立连接,请求API Server为该node创建证书。 根据获取到的证书创建kubelet.conf。
相关文章
最新文章
热点推荐