AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1088605
Accepted
arjunbnair
arjunbnair
Asked: 2021-12-31 12:08:05 +0800 CST2021-12-31 12:08:05 +0800 CST 2021-12-31 12:08:05 +0800 CST

kubelet 服务未在 Kubernetes 主节点中运行(波动)

  • 772

我试图使用 kubeadm 创建一个 Kubernetes 集群。我启动了一个 Ubuntu 18.04 服务器,安装了 docker(确保 docker.service 正在运行),安装了 kubeadm kubelet 和 kubectl。

以下是我执行的步骤:

sudo apt-get update
sudo apt-get install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectl 
kubeadm version
swapoff –a

sudo hostnamectl set-hostname master-node
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

运行sudo kubeadm init --pod-network-cidr=10.244.0.0/16后,我收到以下错误:

root@ip-172-31-10-50:/home/ubuntu# sudo kubeadm init --pod-network-cidr=192.168.0.0/16
[init] 使用 Kubernetes 版本:v1.23.1
[preflight] 运行 pre-flight检查
[preflight] 拉取设置 Kubernetes 集群所需的图像
[preflight] 这可能需要一两分钟,具体取决于您的 Internet 连接速度
[preflight] 您也可以使用“kubeadm config images pull”预先执行此操作
[certs] 使用 certificateDir 文件夹 "/etc/kubernetes/pki"
[certs] 使用现有的 ca 证书颁发机构
[certs] 使用磁盘上现有的 apiserver 证书和密钥
[certs] 使用磁盘上现有的 apiserver-kubelet-client 证书和密钥
[certs] 使用现有的 front-proxy-ca 证书颁发机构
[certs] 使用磁盘上现有的 front-proxy-client 证书和密钥
[certs] 使用现有的 etcd/ca 证书颁发机构
[certs] 使用磁盘上现有的 etcd/server 证书和密钥
[certs] 使用现有的 etcd/peer 证书和磁盘上的密钥
[certs] 使用现有的 etcd/healthcheck-client 证书和磁盘上的密钥
[certs] 使用现有的 apiserver-etcd-client 证书和磁盘上的密钥
[certs] 使用现有的“ sa" key
[kubeconfig] 使用 kubeconfig 文件夹 "/etc/kubernetes"
[kubeconfig] 使用现有的 kubeconfig 文件:" /etc/kubernetes/admin.conf" [kubeconfig] 使用现有的 kubeconfig 文件:"/etc/kubernetes/
kubelet.conf "
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/controller-manager.conf”
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/scheduler.conf”
[kubelet-start] 编写带有标志的 kubelet 环境文件file "/var/lib/kubelet/kubeadm-> flags.env"
[kubelet-start] 将 kubelet 配置写入文件 "/var/lib/kubelet/config.yaml"
[kubelet-start] 启动 kubelet
[control-plane ] 使用清单文件夹“/etc/kubernetes/manifests”
[control-plane] 为“kube-apiserver”
创建静态 Pod 清单 [control-plane] 为“kube-controller-manager”创建静态 Pod 清单
[control-plane] 创建“kube-scheduler”的静态 Pod 清单
[etcd] 在“/etc/kubernetes/manifests”中为本地 etcd 创建静态 Pod 清单
[wait-control-plane] 等待 kubelet 作为静态 Pod 从目录“/etc/kubernetes/manifests”启动控制平面。这最多可能需要 4m0s
[kubelet-check] 40s 的初始超时已通过。
[kubelet-check] kubelet 似乎没有运行或健康。
[kubelet-check] 等于 'curl -sSL http://localhost:10248/healthz' 的 HTTP 调用失败并出现错误:Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect : 拒绝连接。

我尝试使用Flannel 的 CIDR(10.244.0.0/16)和Calico 的 CIDR(192.168.0.0/16)运行kubectl init --pod-network-cidr。但是,我得到了同样的错误。

另外,我观察到我的 EC2 实例中Kubelet的状态在波动。当我运行systemctl status kubelet.service时,有时它没有运行,有时 Kubelet 正在运行。它自动发生。认为这是kubectl init失败的原因,因为kubelet-check清楚地说:“看起来 kubelet 没有运行或健康”

运行systemctl status kubelet.service后,报错:

root@ip-172-31-10-50:/home/ubuntu# systemctl status kubelet.service
● kubelet.service - kubelet:Kubernetes 节点代理
已加载:已加载(/lib/systemd/system/kubelet.service;已启用;供应商预设:已启用)
Drop-In:/etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
活动:自 2021 年 12 月 29 日星期三以来激活(自动重启)(结果:退出代码)世界标准时间 17:52:35;3 秒前
文档:https
://kubernetes.io/docs/home/ 进程:22901 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 22901 (代码=退出,状态=1/失败)

当我继续运行systemctl status kubelet.service时,几秒钟后,kubectl.service 似乎正在运行,几秒钟后,它又失败了。

...跳过...
● kubelet.service - kubelet:Kubernetes 节点代理
已加载:已加载(/lib/systemd/system/kubelet.service;已启用;供应商预设:已启用)
Drop-In:/etc/systemd/system /kubelet.service.d
└─10-kubeadm.conf
活动:自 2021 年 12 月 30 日星期四 18:50:49 UTC 起活动(运行);125ms 前
Docs: https://kubernetes.io/docs/home/
Main PID: 12895 (kubelet)
Tasks: 9 (limit: 4686)
CGroup: /system.slice/kubelet.service
└─12895 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf > --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/conf

我不确定为什么 kubelet 会以这种方式波动。
有谁知道如何解决这一问题?

ubuntu amazon-web-services docker kubernetes kubeadm
  • 2 2 个回答
  • 2485 Views

2 个回答

  • Voted
  1. AlexD
    2022-01-03T01:01:19+08:002022-01-03T01:01:19+08:00

    错误日志有你的答案:

    Kubelet 运行失败:配置错误:kubelet cgroup 驱动程序:“systemd”与 docker cgroup 驱动程序不同:“cgroupfs””

    有关如何配置cgroup 驱动程序的信息,请参阅 Kubernetes 文档

    • 1
  2. Best Answer
    arjunbnair
    2022-01-03T01:58:54+08:002022-01-03T01:58:54+08:00

    我能够通过编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf来修复 kubelet.service 问题。

    在文件中,我添加了Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"并注释掉Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"。

    /etc/systemd/system/kubelet.service.d/10-kubeadm.conf供参考:

    # 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"
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
    # 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
    ExecStart=
    ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
    

    然后运行:systemctl daemon-reload和systemctl restart kubelet
    这样 kubelet.service 一直在运行。

    谢谢!

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve