在Kubernetes中运行没有调度程序的pod

w8ntj3qf  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(6)|浏览(142)

我搜索了文档,但无法找到是否可以在没有调度程序的情况下在Kubernetes中运行pod。如果有人能提供任何指针,那将会很有帮助
更新:我可以在节点上贴一个标签,让pod贴在那个标签上,但是这会涉及到调度程序。有没有没有没有daemonset和不使用调度程序的方法?

dgtucam1

dgtucam11#

调度程序只设置pod上的spec.nodeName字段,如果您知道要运行pod的节点,则可以自己将其设置为节点名,不过您需要负责确保节点有足够的资源来运行pod(足够的内存、空闲主机端口等......所有这些通常都是调度程序在为节点分配pod之前负责检查的事项)

sulc1iza

sulc1iza2#

你想要static pods
静态pod由特定节点上的kubelet守护进程直接管理,API服务器不会观察它。它没有关联的任何复制控制器,kubelet守护进程本身会观察它,并在它崩溃时重新启动它。

fgw7neuy

fgw7neuy3#

您可以简单地将nodeName属性添加到pod定义中,该属性通常由调度程序字段化,因此它不是强制字段。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  -  image: nginx
     name: nginx
  nodeName: node01

如果pod已经创建并且处于挂起状态,您必须使用新字段重新创建它,则不允许使用nodeName属性进行编辑。

bq3bfh9z

bq3bfh9z4#

这里给出的所有答案都需要运行调度程序。
我认为您要做的是创建pod的清单文件,并将其放在所讨论的节点的默认清单目录中。
默认目录为/etc/kubernetes/manifests/
pod将自动创建,如果您希望删除它,只需删除清单文件即可。

wvmv3b1j

wvmv3b1j5#

您只需将nodeName属性添加到pod定义

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  nodeName: controlplane
  containers:
  -  image: nginx
     name: nginx

现在重要的一点-使用下面的命令检查列出的节点,然后分配给其中之一:

kubectl get nodes
zqdjd7g9

zqdjd7g96#

你可以在实验室里很容易地证明这点

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正在运行,而您没有调度程序,因此静态pod确实不使用调度程序。

相关问题