【问题标题】:Running Kubeadm from source build从源代码构建运行 Kubeadm
【发布时间】:2021-01-17 08:51:22
【问题描述】:

尝试使用来自 Kubernetes 存储库分支版本 1.19 的 kubeadm 部署 k8 主节点。运行kubeadm init {opts...}之前需要什么配置

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

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

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

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

任何帮助/指导将不胜感激。从源代码构建的在线文档/线程很少

【问题讨论】:

  • kubeadm init 失败时看到的确切错误消息是什么?

标签: kubernetes makefile kubeadm kubelet


【解决方案1】:

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

  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 进程;带有一些默认/最小配置。 kubeadm init 然后在执行时修改进程的配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2020-05-20
    • 2013-06-01
    • 2012-12-11
    • 2015-08-20
    • 2011-09-05
    • 2020-06-19
    相关资源
    最近更新 更多