https://www.jianshu.com/p/eb222d2cdd59

静态pod

静态pod 是由 kubelet 管理的只在特定node上存在的pod;静态pod总是由kubelet创建的,并且只在kubelet所在的Node上运行。
静态pod 不能通过 api-server来管理,无法和 RC,RS,Deployment或者 DaemonSet进行关联;
并且 kubelet无法对静态pod 进行健康检查。

创建静态 pod 的两种方式

1、本地配置文件方式

kubelet 启动时由 --pod-manifest-path 指定的目录(默认/etc/kubernetes/manifests),kubelet会定期扫描这个目录,并根据这个目录下的 .yaml 或 .json 文件进行创建和更新操作

  • 如果把 pod的yaml描述文件放到 这个目录中,等kubelet扫描到文件,会自动在本机创建出来 pod;
  • 如果把 pod的yaml文件更改了,kubelet也会识别到,会自动更新 pod;
  • 如果把 pod的yaml文件删除了,kubelet会自动删除掉pod;
  • 因为静态pod 不能被 api-server 直接管理,所以它的更新删除操作不能由 kubectl 来执行,只能直接修改或删除文本文件。

1.1、查看本机 kubelet

kubelet 是linux原生service unit,在k8s 的每台机器上包括master都存在。

1.2、查看本机 kubelet 的service unit

1.3、举例,k8s集群中的静态pod

都在 master 机器上

  • etcd
  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler

2、HTTP仓库配置文件方式

--manifest-url,kubelet定期从 url获取 文件,其余操作和 第一种方式一样。

问题

在 yaml里的 pod 和 svc 并没有 label 和 selector,那是如何暴露的?
1、service 的常规操作
通过 selector 找到 pod,然后根据 pod来创建出来 endpoints,然后通过 service就能访问到pod了
2、service 的非常规操作
注意在常规操作里,创建出来的 endpoints 的名字是和 service名字一致的。
有了这个信息,非常规操作:不需要 selector,创建 servcie,创建出来和 service name 一样的 endpoints,就能访问到了。
3、k8s的几个静态pod都是这样暴露的。