静态POD
前言:虽然学习了一段时间k8s的各种资源,但是静态POD一直停留在概念层面,不知道它有什么用。
kubernetes版本:v1.22.0
操作系统版本:centos7.9
1.静态POD
下面是摘录自《kubernetes权威指南》上关于静态POD的描述信息。
定义:静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。它们不能通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet无法对它们进行健康检查。静态Pod总是由kubelet创建的,并且总在kubelet所在的Node上运行。
kubelet自动尝试为每个静态Pod在Kubernetes API服务器上创建一个镜像Pod。 这意味着在节点上运行的Pod在 API服务器上是可见的,但不可以通过API服务器来控制。
静态 Pod 的 spec 不能引用其他的 API 对象(例如: ServiceAccount、 ConfigMap、 Secret 等)。https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#static-pods
创建静态Pod有两种方式:配置文件方式和HTTP方式。
1)配置文件方式
首先,需要设置kubelet的启动参数“--config”,指定kubelet需要监控的配置文件所在的目录,kubelet会定期扫描该目录,并根据该目录下的.yaml或.json文件进行创建操作。
假设配置目录为/etc/kubelet.d/,配置启动参数为--config=/etc/kubelet.d/,然后重启kubelet服务。
在目录/etc/kubelet.d中放入static-web.yaml文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
name: static-web
spec:
containers:
- name: static-web
image: nginx
ports:
- name: web
containerPort: 80
静态POD创建后,可以通过kubectl查看到它,
PS:看起来和普通POD没有什么不同。
静态Pod无法通过API Server直接管理,所以在Master上尝试删除这个Pod时,会使其变成Pending状态,且不会被删除。
删除该Pod的操作只能是到其所在Node上将其定义文件staticweb.yaml从/etc/kubelet.d目录下删除。
2.HTTP方式
通过设置kubelet的启动参数“--manifest-url”,kubelet将会定期从该URL地址下载Pod的定义文件,并以.yaml或.json文件的格式进行解析,然后创建Pod。其实现方式与配置文件方式是一致的。
PS:这种没有实践过,应该和方式1一样,只是获取yaml文件的位置不同。
2)静态PODd的应用
静态POD不受API Sever管理,总是在kubelet所在的node上运行,因此不会发生漂移。通过kubeadm创建Kuberenetes集群的时候,默认kube-system下所创建的POD都是静态POD。
这些静态POD的定义文件位置:
ll /etc/kubernetes/manifests/
total 16
-rw------- 1 root root 2258 Sep 26 17:31 etcd.yaml
-rw------- 1 root root 3379 Sep 26 17:31 kube-apiserver.yaml
-rw------- 1 root root 2791 Sep 26 17:31 kube-controller-manager.yaml
-rw------- 1 root root 1491 Sep 26 17:31 kube-scheduler.yaml
我们知道kubelet负责POD的创建,它肯定也负责静态POD的创建,在kubelet配置中能够看到所定义的静态POD存放目录:
kubelet配置文件路径“/var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 0s
cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging: {}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests #该目录中定义的就是静态POD的存放之处
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程