深入剖析 Kubernetes-2 Kubernetes集群搭建与实践

1 Kubernetes一键部署利器:kubeadm

1.1 kubeadm命令

简单总结可以通过两条命令完成k8s集群的部署:

# 创建一个Master节点
$ kubeadm init

# 将一个Node节点加入到当前集群中
$ kubeadm join <Master节点的IP和端口>

1.2 kubeadm init工作流程

  • 在机器上手动安装 kubeadm、kubelet 和 kubectl这三个二进制文件。

    把 kubelet 直接运行在宿主机上,然后使用容器部署其他的 Kubernetes 组件。(除了跟容器运行时打交道外,kubelet 在配置容器网络、管理容器数据卷时,都需要直接操作宿主机,在容器内实现困难)

  • kubeadm 首先要做的,是一系列的检查工作,以确定这台机器可以用来部署 Kubernetes。这一步检查,我们称为“Preflight Checks”。

  • 在通过了 Preflight Checks 之后,kubeadm 要为你做的,是生成 Kubernetes 对外提供服务所需的各种证书和对应的目录。

    证书目录:

    /etc/kubernetes/pki/ca.{crt,key}
    
  • 证书生成后,kubeadm 接下来会为其他组件生成访问 kube-apiserver 所需的配置文件。

    配置文件路径:

    /etc/kubernetes/xxx.conf
    
  • kubeadm 会为 Master 组件生成 Pod 配置文件。包括kube-apiserver、kube-controller-manager、kube-scheduler,而它们都会被使用 Pod 的方式部署起来。

    这时,Kubernetes 集群尚不存在, kubeadm 不会直接执行docker run来启动这些容器,在Kubernetes 中,有一种特殊的容器启动方法叫做“Static Pod”。它允许你把要部署的Pod 的 YAML 文件放在一个指定的目录里。这样,当这台机器上的 kubelet 启动时,它会自动检查这个目录,加载所有的 Pod YAML 文件,然后在这台机器上启动它们。

​ 在 kubeadm 中,Master 组件的 YAML 文件会被生成在 /etc/kubernetes/manifests 路径下。

  • kubeadm 还会再生成一个 Etcd 的 Pod YAML 文件,用来通过同样的Static Pod 的方式启动 Etcd。

  • kubeadm 会为集群生成一个 bootstrap token,在后面,只要持有这个token,任何一个安装了 kubelet 和 kubadm 的节点,都可以通过 kubeadm join 加入到这个集群当中。

  • kubeadm生成cluster-info(包括ca.crt 等 Master 节点的重要信息)的ConfigMap保存在Etcd中。

  • kubeadm安装默认插件( kube-proxy 和 DNS),它们分别用来提供整个集群的服务发现和 DNS 功能,创建两个对应镜像的Pod即可。

1.3 kubeadm join 的工作流程

kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)。只要有了 cluster-info 里的 kube-apiserver 的地址、端口、证书,kubelet 就可以以“安全模式”连接到 apiserver 上,这样一个新的节点就部署完成了。

1.4 配置 kubeadm 的部署参数

kubeadm init --config kubeadm.yaml
posted @ 2022-10-12 00:06  hunter-w  阅读(54)  评论(0编辑  收藏  举报