【问题标题】:In Kubernetes cluster, is kubelet just another pod like kube-proxy, core-dns? I can not find kubelet pods in kube-system namespace?在 Kubernetes 集群中,kubelet 是不是像 kube-proxy、core-dns 这样的另一个 pod?我在 kube-system 命名空间中找不到 kubelet pod?
【发布时间】:2021-12-20 07:20:43
【问题描述】:

当我查看/列出 kube-system 命名空间中的 pod 时,我可以看到 coredns pod、kube-apiserver pod、kube-proxy pod 等,但看不到 kubelet pod。
所以只是想知道为什么我看不到 kubelet。我什至尝试过kubectl.exe get pods -owide --all-namespaces,但仍然没有 kubelet 的踪迹。

我只是想查看由于其他原因传递给 kubelet 的运行时参数,但我一开始就找不到它。关于如何在集群中找到 kubelet 的任何建议。

编辑 - 正如@jabbson 澄清的那样 - kubelet is an agent, a binary/service on your k8s node
有人可以帮我在 Windows 10 上找到此服务/二进制文件/进程。基本上我的安装是带有内置 minikube 集群的 docker 桌面 - 有关我安装版本的更多详细信息,请参见 this 帖子。 注意:我在windows服务或正在运行的进程列表中找不到kubelet。

【问题讨论】:

    标签: kubernetes kubelet


    【解决方案1】:

    Kubernetes 只是一组规则、行为和 API。具体实现方式可以不同的方式实现。

    【讨论】:

      【解决方案2】:

      Kubelet 不是 Pod,而是 kubelet 是一个代理,是您 k8s 节点上的二进制/服务。此二进制文件与 apiserver 对话并确保所需容器在其节点上运行并且它们是健康的。

      从 Kubernetes 1.11 版开始,kubelet 和 kube-proxy 可以作为原生 Windows 服务运行。

      【讨论】:

      • kubelet is an agent, a binary/service on your k8s node - 这澄清了。 ++1。你能帮我在 Windows 10 上找到这个服务吗?基本上我的安装是带有内置 minikube 集群的 docker 桌面 - 在this 帖子上有更多详细信息。
      • 似乎 Q 非常有效,并探索了 k8s 的深度。喜欢的话可以点个赞吗。
      • 我忘了说,我在 Windows 服务列表中找不到 kubelet。
      【解决方案3】:

      KubeletService

      这是每个节点中的一个小服务,负责在控制平面服务之间传递信息。它与etcd store 交互以读取配置详细信息并写入值。这与主组件通信以接收命令和工作。然后 kubelet 进程负责维护工作状态和节点服务器。它管理网络规则、端口转发等。

      kubelet 和 kube-proxy 已配置为作为原生 Windows 服务运行,通过在发生故障(例如进程崩溃)时自动重新启动服务来提供弹性。将这些节点组件配置为服务有两种选择。

      您可以使用 sc.exe 以原生 Windows Services 的身份运行 kubelet 和 kube-proxy。

       # Create the services for kubelet and kube-proxy in two separate commands
          sc.exe create <component_name> binPath= "<path_to_binary> --service <other_args>"
          
          # Please note that if the arguments contain spaces, they must be escaped.
          sc.exe create kubelet binPath= "C:\kubelet.exe --service --hostname-override 'minion' <other_args>"
          
          # Start the services
          Start-Service kubelet
          Start-Service kube-proxy
          
          # Stop the service
          Stop-Service kubelet (-Force)
          Stop-Service kube-proxy (-Force)
          
          # Query the service status
          Get-Service kubelet
          Get-Service kube-proxy
      

      2.- 使用 nssm.exe

      您还可以随时使用nssm.exe 等替代服务管理器在后台为您运行这些进程(flanneld、kubelet 和 kube-proxy)。您可以使用此示例脚本,利用 nssm.exe 注册 kubelet、kube-proxy 和 flanneld.exe 以在后台作为 Windows 服务运行。

      register-svc.ps1 -NetworkMode <Network mode> -ManagementIP <Windows Node IP> -ClusterCIDR <Cluster subnet> -KubeDnsServiceIP <Kube-dns Service IP> -LogDir <Directory to place logs>
      
      # NetworkMode      = The network mode l2bridge (flannel host-gw, also the default value) or overlay (flannel vxlan) chosen as a network solution
      # ManagementIP     = The IP address assigned to the Windows node. You can use ipconfig to find this
      # ClusterCIDR      = The cluster subnet range. (Default value 10.244.0.0/16)
      # KubeDnsServiceIP = The Kubernetes DNS service IP (Default value 10.96.0.10)
      # LogDir           = The directory where kubelet and kube-proxy logs are redirected into their respective output files (Default value C:\k)
      

      如果上面引用的脚本不合适,可以手动配置nssm.exe,使用下面的例子。

      # Register flanneld.exe
      nssm install flanneld C:\flannel\flanneld.exe
      nssm set flanneld AppParameters --kubeconfig-file=c:\k\config --iface=<ManagementIP> --ip-masq=1 --kube-subnet-mgr=1
      nssm set flanneld AppEnvironmentExtra NODE_NAME=<hostname>
      nssm set flanneld AppDirectory C:\flannel
      nssm start flanneld
      
      # Register kubelet.exe
      # Microsoft releases the pause infrastructure container at mcr.microsoft.com/oss/kubernetes/pause:1.4.1
      nssm install kubelet C:\k\kubelet.exe
      nssm set kubelet AppParameters --hostname-override=<hostname> --v=6 --pod-infra-container-image=mcr.microsoft.com/oss/kubernetes/pause:1.4.1 --resolv-conf="" --allow-privileged=true --enable-debugging-handlers --cluster-dns=<DNS-service-IP> --cluster-domain=cluster.local --kubeconfig=c:\k\config --hairpin-mode=promiscuous-bridge --image-pull-progress-deadline=20m --cgroups-per-qos=false  --log-dir=<log directory> --logtostderr=false --enforce-node-allocatable="" --network-plugin=cni --cni-bin-dir=c:\k\cni --cni-conf-dir=c:\k\cni\config
      nssm set kubelet AppDirectory C:\k
      nssm start kubelet
      
      # Register kube-proxy.exe (l2bridge / host-gw)
      nssm install kube-proxy C:\k\kube-proxy.exe
      nssm set kube-proxy AppDirectory c:\k
      nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --hostname-override=<hostname>--kubeconfig=c:\k\config --enable-dsr=false --log-dir=<log directory> --logtostderr=false
      nssm.exe set kube-proxy AppEnvironmentExtra KUBE_NETWORK=cbr0
      nssm set kube-proxy DependOnService kubelet
      nssm start kube-proxy
      
      # Register kube-proxy.exe (overlay / vxlan)
      nssm install kube-proxy C:\k\kube-proxy.exe
      nssm set kube-proxy AppDirectory c:\k
      nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --feature-gates="WinOverlay=true" --hostname-override=<hostname> --kubeconfig=c:\k\config --network-name=vxlan0 --source-vip=<source-vip> --enable-dsr=false --log-dir=<log directory> --logtostderr=false
      nssm set kube-proxy DependOnService kubelet
      nssm start kube-proxy
      

      对于初始故障排除,您可以使用 nssm.exe 中的以下标志将 stdout 和 stderr 重定向到输出文件:

      nssm set <Service Name> AppStdout C:\k\mysvc.log
      nssm set <Service Name> AppStderr C:\k\mysvc.log
      

      【讨论】:

      • 这是非常详细的解释。德克萨斯州。 ++1。 This 是我的设置,我如何在这个设置上找到 kubelet。
      猜你喜欢
      • 2019-04-25
      • 2021-03-17
      • 1970-01-01
      • 2015-12-27
      • 2022-01-25
      • 2017-04-19
      • 2018-12-21
      • 2020-06-16
      • 2020-02-27
      相关资源
      最近更新 更多