Kubeadm 启动原理之静态 Pod 技术
Kubeadm 启动原理之静态 Pod 技术
1. 作用
静态 Pod 是一种特殊的 Kubernetes Pod 类型,允许你在不通过 kubectl
命令来创建 Pod 的情况下,通过直接将 Pod 资源清单放置在 Kubelet 可识别的目录中来创建 Pod。Kubelet 会定期检查该目录并自动管理这些 Pod。对于 kubeadm 部署方式来说,静态 Pod 技术尤为重要,它能够在集群中管理系统级别的 Pod(如 kube-apiserver
、etcd
、kube-controller-manager
、kube-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
你会看到类似的输出,其中包含如 etcd
、kube-apiserver
、kube-controller-manager
和 kube-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 集群的基础设施组件(如 etcd
、kube-apiserver
等)。这种方式不仅简化了 Pod 的创建和管理,而且为 Kubernetes 集群的稳定性提供了保障。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)