静态 Pod 在指定的节点上由 kubelet 守护进程直接管理,不需要 API 服务器 监管。 与由控制面管理的 Pod(例如,Deployment) 不同;kubelet 监视每个静态 Pod(在它崩溃之后重新启动)。 静态 Pod 永远都会绑定到一个指定节点上的 Kubelet。 kubelet 会尝试通过 Kubernetes API 服务器为每个静态 Pod 自动创建一个 镜像 Pod。 这意味着节点上运行的静态 Pod 对 API 服务来说是可见的,但是不能通过 API 服务器来控制。 可以通过文件系统上的配置文件 或者 web 网络上的配置文件 来配置静态 Pod ### 文件系统上的静态 Pod 声明文件 文件系统上的静态 Pod 声明文件 声明文件是标准的 Pod 定义文件,以 JSON 或者 YAML 格式存储在指定目录。路径设置在 Kubelet 配置文件 的 staticPodPath: <目录> 字段,kubelet 会定期的扫描这个文件夹下的 YAML/JSON 文件来创建/删除静态 Pod。 注意 kubelet 扫描目录的时候会忽略以点开头的文件。 1、选择一个需要运行静态pod的节点 2、选择一个目录,创建yaml文件。如:/etc/kubelet.d目录,保存静态pod定义文件。定义文件与其他pod文件格式相同 ``` apiVersion: v1 kind: Pod metadata: name: static-web labels: role: myrole spec: containers: - name: web image: nginx ports: - name: web containerPort: 80 protocol: TCP ``` 3、配置这个节点上的 kubelet,使用这个参数执行 --pod-manifest-path=/etc/kubelet.d/: ``` KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/" ``` 或者在kubelet配置文件中加上staticPodPath: <目录>字段 4、重启 kubelet ### Web 网上的静态 Pod 声明文件 Kubelet 根据 --manifest-url= 参数的配置定期的下载指定文件,并且转换成 JSON/YAML 格式的 Pod 定义文件。 与文件系统上的清单文件使用方式类似,kubelet 调度获取清单文件。 如果静态 Pod 的清单文件有改变,kubelet 会应用这些改变 1、创建一个 YAML 文件,并保存在 web 服务上,为 kubelet 生成一个 URL。 ``` apiVersion: v1 kind: Pod metadata: name: static-web labels: role: myrole spec: containers: - name: web image: nginx ports: - name: web containerPort: 80 protocol: TCP ``` 2、通过在选择的节点上使用 --manifest-url= 配置运行 kubelet。 ``` KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --manifest-url=" ``` 3、重启 kubelet