我搜索了该文档,但是我无法找到如果没有调度程序,我是否可以在Kubernetes中运行POD。如果有人可以帮助任何指针,那将是有帮助的
更新:我可以将标签附加到节点上,并让Pod贴在该标签上,但这将涉及浏览调度程序。是否没有任何方法,没有Daemonset,并且不使用调度程序。
调度程序刚刚在POD上设置了Spec.NodeName字段。如果您知道要运行POD的节点,则可以将其设置为一个节点名称,尽管然后您负责确保节点具有足够的资源来运行POD(足够的内存,免费的主机端口,等等……所有事物调度程序通常负责在将豆荚分配给节点之前检查)
您想要静态豆荚
静态豆荚是在特定节点上直接通过kubelet守护程序管理的,而无需观察API服务器。它没有关联任何复制控制器,库贝特守护程序本身会观看并在崩溃时重新启动。
您可以简单地将nodeName
属性添加到POD定义中,这些属性通常由调度程序列出,这不是强制性字段。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
nodeName: node01
如果创建了POD,并且处于待处理状态,则必须使用新字段重新创建它,则不允许使用NodeName ATT进行编辑。
此处给出的所有答案都需要调度程序运行。
我认为您想做的是创建POD的清单文件,然后将其放在所讨论节点的默认清单目录中。
默认目录IS/etc/kubernetes/ustests/
将自动创建POD,如果您想删除它,只需删除清单文件。
您可以简单地将 nodeName 属性添加到POD定义
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: controlplane
containers:
- image: nginx
name: nginx
现在重要点 - 检查使用以下命令列出的节点,然后分配给其中之一:
kubectl get nodes
您可以在实验室中非常容易地证明这一点
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/
由于POD正在运行,并且您没有调度程序,因此静态豆荚不使用调度程序。