静态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
posted @ 2022-11-02 18:13  cosmoswong  阅读(104)  评论(0编辑  收藏  举报