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