我遵循了这个教程https://vmguru.com/2021/04/how-to-install-rancher-on-k3s/
最后我得到了一个有3个节点的k3s集群
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,etcd,master 7d20h v1.23.5+k3s1
master2 Ready control-plane,etcd,master 7d20h v1.23.5+k3s1
master3 Ready control-plane,etcd,master 7d20h v1.23.5+k3s1
集群正在使用嵌入式etcd数据存储
我很困惑,因为我能够将工作负载部署到这个集群。我认为我只能将工作负载部署到角色为Worker
的节点上?
在其他教程中,最终结果是不同节点上的主角色和工作角色,所以我甚至不确定我是如何设法获得这种角色组合的。也许在k3s分布中发生了一些变化。作者用的是1.19我用的是1.23?
节点角色只是一个标签。如果您使用像role=control-plane
这样的标签,则没有规范定义必须发生什么。
虽然有一些众所周知的标签,其中你可以找到node role=control-plane,但Kubernetes发行版(如k3s)不必遵循这些约定。
kube-scheduler
实际上使用了Taints和tolerance来防止工作负载在特定节点上运行。要查看节点是否有污点,运行kubectl describe node <node_name>
并查找污点字段。如果没有,则所有工作负载都将在其上运行。
对于单节点集群,控制平面组件和正常工作负载可以在同一台机器上运行是必要的要求。更重要的是,将集群工作负载放在不同的机器上只是一个最佳实践。k3s或microk8s等Kubernetes发行版是专门为较小的节点集群构建的,默认情况下禁用污点。