运行 来自源代码构建的 Kubeadm

Running Kubeadm from source build

正在尝试使用 kubeadm 从 Kubernetes 存储库分支 release-1.19 部署 k8 主节点。 运行 kubeadm init {opts...}

之前需要什么配置

kubeadm guide 推荐使用 apt 安装 kubeadm、kubectl 和 kubelet。该指南指出,安装后“kubelet 现在每隔几秒重新启动一次,因为它在崩溃循环中等待 kubeadm 告诉它该做什么。”

我正在使用 'make all' 方法从本地存储库编译 Kubernetes 二进制文件(kubeadm、kubectl 和 kubelet)。然后使用 exec 权限将它们 scp 到 /usr/local/bin 的主节点。

执行 kubeadm init 失败,因为 kubelet 不是 running/configured。但是,从 kubelet 二进制文件初始化所需的 kubelet.service 似乎需要我假设 kubeadm 生成的证书 (ca.pem) 和配置 (kubelet.config.yaml)。所以关于 kubeadm 和 kubelet 的先有鸡还是先有蛋的情况。

那么问题来了,apt安装完成了哪些额外配置来初始化kubelet.service? 是否有一个最小的配置和服务模板 kubelet 可以在 kubeadm init 之前启动? kubeadm 是否替换了预初始化 kubelet 使用的证书?

任何 help/direction 将不胜感激。从源代码构建的在线 docs/threads 很少

对于任何正在搜索的人,找到了解决方案:

  1. 通过apt安装依赖:apt-transport-https、conntrack、socat、ipset
  2. 将 kubelet、kubeadm、kubectl 二进制文件移动到 /usr/local/bin 并给予 exec 权限
  3. 将 systemd kubelet.service 文件写入 /etc/systemd/system
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
  1. 将kubelet配置文件写入/etc/systemd/system/kubelet.service.d
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
ExecStart=
ExecStart=/usr/local/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
  1. 构建cni插件 https://github.com/containernetworking/plugins IE。对于 linux、build_linux.sh

  2. 将 cni 插件二进制文件复制到 /opt/cni

  3. 启动Kubelet systemctl daemon-reload systemctl enable kubelet --now systemctl start kubelet

  4. 现在kubeadm init可以运行

简而言之,这在 kubeadm init 之前初始化了 kubelet.service systemd 进程;有一些 default/minimal 配置。 kubeadm init 然后在执行时修改进程的配置。