kubectl run static-pod --image=nginx --dry-run=client -o yaml > static-pod.yaml
sudo mv /etc/kubernetes/manifests/kube-scheduler.yaml /etc/kubernetes/
# make sure scheduler is gone
sudo crictl ps | grep -i sched
sudo cp static-pod.yaml /etc/kubernetes/manifests/
kubectl get pods static-pod-cp1 # my controlpoint is called cp1
# Put the scheduler back
sudo mv /etc/kubernetes/kube-scheduler.yaml /etc/kubernetes/manifests/
6条答案
按热度按时间dgtucam11#
调度程序只设置pod上的spec.nodeName字段,如果您知道要运行pod的节点,则可以自己将其设置为节点名,不过您需要负责确保节点有足够的资源来运行pod(足够的内存、空闲主机端口等......所有这些通常都是调度程序在为节点分配pod之前负责检查的事项)
sulc1iza2#
你想要static pods
静态pod由特定节点上的kubelet守护进程直接管理,API服务器不会观察它。它没有关联的任何复制控制器,kubelet守护进程本身会观察它,并在它崩溃时重新启动它。
fgw7neuy3#
您可以简单地将
nodeName
属性添加到pod定义中,该属性通常由调度程序字段化,因此它不是强制字段。如果pod已经创建并且处于挂起状态,您必须使用新字段重新创建它,则不允许使用nodeName属性进行编辑。
bq3bfh9z4#
这里给出的所有答案都需要运行调度程序。
我认为您要做的是创建pod的清单文件,并将其放在所讨论的节点的默认清单目录中。
默认目录为/etc/kubernetes/manifests/
pod将自动创建,如果您希望删除它,只需删除清单文件即可。
wvmv3b1j5#
您只需将nodeName属性添加到pod定义
现在重要的一点-使用下面的命令检查列出的节点,然后分配给其中之一:
zqdjd7g96#
你可以在实验室里很容易地证明这点
由于pod正在运行,而您没有调度程序,因此静态pod确实不使用调度程序。