Kubernetes 库伯内特扮演隐藏主人的角色

Kubernetes 库伯内特扮演隐藏主人的角色,kubernetes,rbac,master,Kubernetes,Rbac,Master,我正在构建一个kubernetes集群,我想知道是否有办法从“kubectl get nodes”中隐藏主节点。与eks、aks等类似,其目的是为用户提供除主节点/组件之外的全面管理控制。 我想k8s RBAC是有办法的,但还找不到任何相关的 我还尝试按此处所述()解除主节点上的kubelet,但节点显示为“未就绪”关键实际上是Kubernetes的kubelet组件。 我怀疑托管Kubernetes版本根本不运行kubelet 你可以在你的DIY集群上做同样的事情来证明 kubelet的主要目

我正在构建一个kubernetes集群,我想知道是否有办法从“kubectl get nodes”中隐藏主节点。与eks、aks等类似,其目的是为用户提供除主节点/组件之外的全面管理控制。 我想k8s RBAC是有办法的,但还找不到任何相关的


我还尝试按此处所述()解除主节点上的kubelet,但节点显示为“未就绪”

关键实际上是Kubernetes的
kubelet
组件。
我怀疑托管Kubernetes版本根本不运行
kubelet

你可以在你的DIY集群上做同样的事情来证明

kubelet
的主要目标是运行吊舱。
如果您不需要在主机上运行Pods,则不需要启动
kubelet

控制平面组件可以作为systemd服务或静态容器运行

有Alpha功能可自行承载控制平面组件(即将其作为吊舱运行):
因此,将来它们可能会开始在主主机上运行
kubelet
,但现在不需要了

kubelet是在每个节点上运行的主要“节点代理”。它可以使用以下之一向apiserver注册节点:主机名;覆盖主机名的标志;或云提供商的特定逻辑

当kubelet flag--register节点为true(默认值)时,kubelet将尝试向API服务器注册自身。这是大多数发行版使用的首选模式


创建集群后,可以运行下面的命令删除主节点

kubectl delete node master-node-name
执行此操作后,您在
kubectl get nodes
中再也看不到主节点,但您应该仍然能够正常与集群交互。此处仅删除ETCD中的节点条目

实现相同功能的另一种方法是配置Kubelet不通过
--register node=false
标志和

我相信这就是管理kubernetes服务提供商在内部所做的

你如何“完全”禁用kubelet?我是说,我安装了我的K8 掌握“kubeadm init”,我不安装并运行“systemctl kubelet” “开始”,但我的节点仍在注册并保持为“未就绪” 节点,所以注册部分仍然在这里

如果您已经使用kubeadm设置了kubernetes集群,则需要在所有节点上安装kubelets,包括主节点,因为它部署了绝大多数关键集群组件,如
kube-apiserver
kube-controller-manager
kube-scheduler
作为
kube-system
命名空间中的
Pods
(您可以通过
kubectl-get-Pods-n kube-system
列出它们)。换句话说:如果没有在主节点上运行
kubelet
,则无法使用
kubeadm
运行集群。没有它,就无法部署构成kubernetes集群的系统
Pods
。另见kubernetes官方文件

至于@Ivan提到的,最好在官方文件中仔细阅读,以了解其实际工作原理:

kubeadm允许您通过实验创建自托管Kubernetes 控制平面。这意味着API服务器等关键组件, 控制器管理器和计划程序作为通过配置的守护程序吊舱运行 Kubernetes API,而不是kubelet中配置的静态POD 通过静态文件

目前,在
主节点
上不需要
kubelet
的任何地方都不会写入该文件。相反,它说,如果在
kubeadm
中使用自托管Kubernetes控制平面(目前正在试验)方法:

诸如
API服务器
控制器管理器
调度程序
等关键组件作为通过Kubernetes配置的
守护程序
吊舱
运行 API而不是静态
Pods
通过静态 档案


同样:在这两种方法中,关键集群组件都作为
Pods
运行,只有
守护程序
是通过Kubernetes API配置的,但它们仍然是
Pods
,是的,静态
Pods
是通过静态文件配置的(这是当前的
kubeadm
方法)仍然需要kubelet,它可以读取主节点上的静态文件,并创建相应的
pod

我认为kubectl会列出包含特定标记的节点。如果删除该标记,当kubectl获取节点时,它们将不会显示。下面是kubectl获取节点的结果——显示标签ip-172-31-1-201 Ready controlplane,etcd 3h8m v1.17.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ip-172-31-1-201,kubernetes.io/os=linux,node role.kubernetes.io/controlplane=true,node role.kubernetes.io/etcd=true不确定我应该删除哪一个:/您可以在云提供程序上提供kubectl-v=8 get nodes的输出,其中您只能获取工作节点。@ArghyaSadhu没有云提供程序,其内部部署(vms)感谢您的响应。你如何“完全”禁用kubelet?我的意思是,我用“kubeadm init”安装我的k8s主机,我不安装并运行“systemctl kubelet start”,但是,我的节点仍在注册并保持为“Not Ready”节点,所以注册部分仍然在这里我还没有测试它,但我想一个选择是跳过像这样的kubelet阶段:
kubeadm init--跳过阶段kubelet开始、引导令牌、kubelet完成和kubeadm加入--跳过阶段kubelet start
或者,您可以通过自定义kubelet部分将配置传递给kubeadm,该自定义kubelet部分将指示kubelet跳过节点注册(类似于--注册kubelet的节点arg),这可能只是