随笔 - 378  文章 - 0  评论 - 5  阅读 - 6085

Kubeadm 启动原理之静态 Pod 技术

Kubeadm 启动原理之静态 Pod 技术

1. 作用

静态 Pod 是一种特殊的 Kubernetes Pod 类型,允许你在不通过 kubectl 命令来创建 Pod 的情况下,通过直接将 Pod 资源清单放置在 Kubelet 可识别的目录中来创建 Pod。Kubelet 会定期检查该目录并自动管理这些 Pod。对于 kubeadm 部署方式来说,静态 Pod 技术尤为重要,它能够在集群中管理系统级别的 Pod(如 kube-apiserveretcdkube-controller-managerkube-scheduler 等)。

2. 查看 Kubelet 对应的静态 Pod 存储目录

Kubelet 会监控一个静态 Pod 目录,其中存放的是所有静态 Pod 的资源清单文件。你可以通过查看 Kubelet 的配置文件来确认这个目录的位置。例如,运行以下命令查看静态 Pod 路径:

grep staticPodPath /var/lib/kubelet/config.yaml 

输出会显示类似以下内容:

staticPodPath: /etc/kubernetes/manifests

这表示静态 Pod 的文件会存放在 /etc/kubernetes/manifests 目录中。

3. 查看 kubeadm 使用的静态 Pod 文件

Kubeadm 部署的 Kubernetes 集群会在 /etc/kubernetes/manifests 目录下存放相关的静态 Pod 文件。可以使用 kubectl get pods -n kube-system 来查看正在运行的 Pod,通常这些 Pod 由 kubeadm 创建并作为静态 Pod 启动。

示例输出:

kubectl get pods -n kube-system

你会看到类似的输出,其中包含如 etcdkube-apiserverkube-controller-managerkube-scheduler 等系统级别的 Pod。

查看静态 Pod 目录下的 YAML 文件:

ll /etc/kubernetes/manifests

这会列出所有与静态 Pod 相关的文件,例如:

-rw------- 1 root root 2280 Jul 29 16:38 etcd.yaml
-rw------- 1 root root 4025 Jul 29 16:38 kube-apiserver.yaml
-rw------- 1 root root 3546 Jul 29 16:38 kube-controller-manager.yaml
-rw------- 1 root root 1465 Jul 29 16:38 kube-scheduler.yaml

4. 自定义静态 Pod

你可以创建自己的静态 Pod 资源清单并将其放入静态 Pod 目录中。例如,以下是一个自定义的 Pod 配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: xiuxian-v1
spec:
  nodeName: worker232
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    name: xiuxian

将这个文件保存为 /etc/kubernetes/manifests/01-pods-xiuxian-single.yaml。Kubelet 会自动监控这个目录并启动 Pod。

cp /oldboyedu/manifests/pods/01-pods-xiuxian-single.yaml /etc/kubernetes/manifests/

通过 kubectl get pods -o wide 可以查看到新创建的 Pod。

5. 将静态 Pod 部署到多个节点

你可以将静态 Pod 配置文件复制到多个节点,从而在不同的节点上启动相同的静态 Pod。通过 scp 命令将 YAML 文件复制到不同节点的 /etc/kubernetes/manifests/ 目录:

scp /oldboyedu/manifests/pods/01-pods-xiuxian-single.yaml worker232:/etc/kubernetes/manifests/
scp /oldboyedu/manifests/pods/01-pods-xiuxian-single.yaml worker233:/etc/kubernetes/manifests/

然后通过 kubectl get pods -o wide 可以看到这些 Pod 被分配到不同的节点上。

6. 删除静态 Pod 资源

删除静态 Pod 资源文件时,Kubelet 会停止对应的 Pod。如果删除了 /etc/kubernetes/manifests 中的 YAML 文件,Kubelet 会检测到文件缺失并删除该 Pod。比如:

rm -f /etc/kubernetes/manifests/01-pods-xiuxian-single.yaml

删除后,运行 kubectl get pods -o wide 会显示 Pod 状态为 Completed 或不再存在。

7. Kubelet 启动和自启动

静态 Pod 需要通过 Kubelet 自动加载资源,因此在 Kubelet 配置中要确保其自启动并正确运行。否则,集群会因为静态 Pod 的丢失而出现故障。

例如,查看 kube-apiserver 是否启动失败,如果删除了某个关键静态 Pod 文件,集群将无法正常工作。

8. 修改 NodePort 端口范围

默认情况下,NodePort 的端口范围是 30000 到 32767。如果需要修改,可以在 kube-apiserver 的配置中添加 --service-node-port-range 参数,设置新的端口范围。例如,将端口范围改为 3000 到 50000:

containers:
  - command:
    - kube-apiserver
    - --service-node-port-range=3000-50000

修改后,重新加载 kube-apiserver 配置以使更改生效。

总结

通过静态 Pod 技术,Kubelet 可以方便地管理 Kubernetes 集群的基础设施组件(如 etcdkube-apiserver 等)。这种方式不仅简化了 Pod 的创建和管理,而且为 Kubernetes 集群的稳定性提供了保障。

posted on   Leo-Yide  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示