任务:在没有调度程序的情况下手动调度 Pod
在此任务中,我们将探索如何通过直接将 pod 分配到集群中的特定节点来绕过 Kubernetes 调度程序。对于需要 pod 在特定节点上运行而无需执行通常的调度过程的特定场景,这可能是一种有用的方法。
先决条件
我们假设您有一个正在运行的 Kubernetes 集群,该集群是使用类似于之前文章中描述的 KIND(Docker 中的 Kubernetes)配置创建的。在这里,我们创建了一个名为 kind-cka-cluster 的集群:
kind create cluster --name kind-cka-cluster --config config.yml
由于我们已经在之前的文章中介绍了使用 KIND 进行集群创建,因此我们不会再次讨论这些细节。
步骤 1:验证集群节点
要查看此新集群中可用的节点,请运行:
kubectl get nodes
您应该看到与此类似的输出:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
对于此任务,我们将在 kind-cka-cluster-control-plane 上调度我们的 pod。
步骤 2:定义 Pod 清单 (node.yml)
现在,让我们创建一个 YAML 格式的 pod 清单。使用 pod 配置中的 nodeName 字段,我们可以为 pod 指定确切的节点,完全绕过 Kubernetes 调度程序。
node.yml:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
在此清单中:
- 我们将 nodeName 设置为 kind-cka-cluster-control-plane,这意味着调度程序将跳过分配节点,而该特定节点上的 Kubelet 将处理放置。
这种方法是一种直接选择节点的方法,重写了其他方法,例如nodeSelector或亲和性规则。
根据 Kubernetes 文档:
“nodeName是比affinity或nodeSelector更直接的节点选择形式。nodeName是Pod规范中的一个字段。如果nodeName字段不为空,则调度程序会忽略该Pod,并且命名节点上的kubelet会尝试放置该节点上的 Pod 会否决使用 nodeSelector 或亲和性和反亲和性规则。”
更多详细信息,请参阅 Kubernetes 节点分配文档。
第 3 步:应用 Pod 清单
准备好清单后,将其应用到集群:
kubectl apply -f node.yml
此命令创建 nginx pod 并将其直接分配给 kind-cka-cluster-control-plane 节点。
第 4 步:验证 Pod 放置位置
最后,检查 pod 是否在指定节点上运行:
kubectl get pods -o wide
输出应确认 nginx pod 确实在 kind-cka-cluster-control-plane 上运行:
kind create cluster --name kind-cka-cluster --config config.yml
这验证了通过设置nodeName字段,我们成功绕过了Kubernetes调度程序并直接将我们的pod调度到控制平面节点上。
任务:登录控制平面节点,进入默认静态 Pod 清单目录,尝试重启控制平面组件。
要访问我们新创建的集群的控制平面节点,请使用以下命令:
kubectl get nodes
导航到包含静态 pod 清单的目录:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
验证当前清单:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
要重新启动 kube-controller-manager,请暂时移动其清单文件:
kubectl apply -f node.yml
确认重启后,将manifest文件恢复到原来的位置:
kubectl get pods -o wide
通过这些步骤,我们成功演示了如何访问控制平面并操作静态 pod 清单来管理控制平面组件的生命周期。
确认 kube-controller-manager 重启
将 kube-controller-manager.yaml 清单文件暂时移动到 /tmp 后,我们可以验证 kube-controller-manager 是否已重新启动。正如之前的文章中提到的,我使用的是 k9s,它确实清楚地显示了重启,但是对于没有 k9s 的读者,请尝试以下命令
检查事件:
要收集更多信息,请使用:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 28s 10.244.0.5 kind-cka-cluster-control-plane <none> <none> </none></none>
在输出末尾查找事件。成功重启将显示类似以下内容的事件:
docker exec -it kind-cka-cluster-control-plane bash
出现“Killing”、“Created”和“Started”事件表明 kube-controller-manager 已停止并重新启动成功。
清理
完成任务并确认 pod 的行为后,清理不再需要的所有资源非常重要。这有助于维护整洁的环境并释放集群中的资源。
列出 Pod:
首先,您可以检查集群中当前运行的 Pod:
cd /etc/kubernetes/manifests
您可能会看到如下输出:
ls
描述 Pod:
要获取有关特定 pod 的更多信息,请使用描述命令:
mv kube-controller-manager.yaml /tmp
这将为您提供有关 pod 的详细信息,例如其名称、命名空间、节点和其他配置:
mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/
删除 Pod:
如果您发现不再需要该 pod,可以使用以下命令安全地将其删除:
kubectl describe pod kube-controller-manager-kind-cka-cluster-control-plane -n kube-system
验证删除:
执行删除命令后,您可以通过再次列出 pod 来验证 pod 是否已被删除:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Killing 4m12s (x2 over 8m32s) kubelet Stopping container kube-controller-manager Normal Pulled 3m6s (x2 over 7m36s) kubelet Container image "registry.k8s.io/kube-controller-manager:v1.31.0" already present on machine Normal Created 3m6s (x2 over 7m36s) kubelet Created container kube-controller-manager Normal Started 3m6s (x2 over 7m36s) kubelet Started container kube-controller-manager
确保 nginx pod 不再出现在列表中。
通过执行这些清理步骤,您可以帮助确保 Kubernetes 集群保持组织有序且高效。
创建具有特定标签的多个 Pod
在本节中,我们将基于 nginx 镜像创建三个 pod,每个 pod 都有唯一的名称和指示不同环境的特定标签:env:test、env:dev 和 env:prod。
第 1 步:创建脚本
首先,我们将创建一个脚本,其中包含生成 pod 的命令。使用以下命令创建脚本文件:
kind create cluster --name kind-cka-cluster --config config.yml
接下来,将以下代码粘贴到文件中:
kubectl get nodes
第 2 步:使脚本可执行
保存文件后,使用以下命令使脚本可执行:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
第 3 步:执行脚本
运行脚本来创建 Pod:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
您应该看到指示 Pod 创建的输出:
kubectl apply -f node.yml
第 4 步:验证创建的 Pod
然后脚本将显示创建的 Pod 的状态:
kubectl get pods -o wide
此时,您可以根据 pod 的标签来过滤它们。例如,要查找带有 env=dev 标签的 pod,请使用以下命令:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 28s 10.244.0.5 kind-cka-cluster-control-plane <none> <none> </none></none>
您应该看到确认 pod 正在运行的输出:
docker exec -it kind-cka-cluster-control-plane bash
标签和提及
- @piyushsachdeva
- 第 13 天:视频教程
以上是CKA 全日课程 Kubernetes 中的静态 Pod、手动调度、标签和选择器的详细内容。更多信息请关注PHP中文网其他相关文章!

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Dreamweaver Mac版
视觉化网页开发工具