从源代码版本运行Kubeadm

问题描述

尝试从Kubernetes存储库的一个分支(发行版本1.19)中使用kubeadm部署k8主节点。在运行kubeadm init {opts...}

之前需要进行哪些配置

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

从本地存储库中,我正在使用“全部制作”方法来编译Kubernetes二进制文件(kubeadm,kubectl和kubelet)。然后使用exec权限将它们剪切到/ usr / local / bin的主节点。

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

然后的问题是,apt安装需要完成哪些其他配置才能初始化kubelet.service? 是否有一个最小的配置和服务模板,可以在kubeadm init之前启动kubelet? kubeadm是否可以替换预先初始化的kubelet使用的证书?

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

解决方法

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

  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 即。对于linux,请build_linux.sh

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

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

  4. 现在kubeadm init可以运行了

简而言之,这在kubeadm初始化之前初始化了kubelet.service系统进程;带有一些默认/最小配置。然后kubeadm init会在执行时修改进程的配置。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...