1. Daemon Sets

Daemon Sets 确保 pod 的一个副本始终存在于集群的所有节点中,常用于 Monitoring Solution、Logs Viewer、Kube-porxy、Weave-net(networking)。

daemon-set-definition.yaml

apiVersion: apps/v1
kind: DaemonSet ##唯一区别
metadata:
  name: elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: k8s.gcr.io/fluentd-elasticsearch:1.20

在 v1.12 之前,pod 可以设置 nodeName 以放置到想要的 node 上,之后使用 scheduler 和 affinity。

因为没有kubectl create daemonset相关的命令,所以创建DaemonSets时可以先用create deployment 命令生成 yaml 模板,kubectl create deployment ds-name -n=namespace-name --image=image-name --dry-run=client -o yaml > app.yaml,修改后 apply。

2. Static Pods

kubelet 依赖于 kube-apiserver 来获得关于在其 node 上加载哪些 pod 的指令,这是基于存储在 etcd 数据库中的 kube-scheduler 所做的决定。

kubelet 也可以独立运行,可以创建 pod,可以指定用于存储 pod 信息的目录中读取 pod 定义文件。kubelet 会每隔一段时间确认 pod 定义文件的信息,并保持一致。

replicasets、deployment、service无法独立运行。它们都是整个 Kubernetes 架构的概念组成部分,需要复制和部署控制器等其他控制平面组件。

kubelet 在 pod 级别工作,只能理解 pod,这也是为什么它能够创建 static pod。

指定目录可以是任意地址,指定方式为kubelet.service文件中

  • --pod-manifest-path=/etc/Kubernetes/manifests
  • --config=kubeconfig.yaml ps : kubeadmin 也是用这种方式实现的

其中kubeconfig.yaml

staticPodPath: /etc/Kubernetes/manifests

docker ps查看 Static Pod 生成结果,如果没有 Kubernetes cluster。

如果有 Kubernetes cluster,kube-apiserver 会知道 Static Pod 的情况。(kube-apiserver 上会有个 Static Pod 的只读镜像,pod 的 name 会附加 node 的名称)

可以使用 Static Pod 将控制平面组件本身作为 pod 部署在 node 上,这样就可以在本地进行部署,不必下载二进制文件配置服务或担心服务崩溃,这也是 kubeadmin 工具设置 Kubernetes 集群的方式。

Static Pods vs DaemonSets

Static Pods DaemonSets
Created by the Kubelet Created by Kube-API server (DaemonSet Controller)
Deploy Control Plane components as Static Pods Deploy Monitoring Agents, Logging Agents on nodes
Ignored by the Kube-Scheduler Ignored by the Kube-Scheduler

判断是 Static Pod 的几种方式:

  • pod name 结尾带有 node name
  • kubectl get pod pod-name -n=kube-system -o yaml中查看配置文件,ownerReferences 属性下 kind 为 Node,普通的为 ReplicaSet 等

查看 Static Pod 的配置文件位置:

  • 查找config文件的方式 ps -aux | grep kubelet 查看 --config

  • 查看/var/lib/kubelet/config.yaml中的staticPodPath

添加 command 的方式:在 kubectl 命令后加上--command -- sleep 1000,请保证--command放在整条命令之后,所有在--后的都会被视为添加的 command。

创建 Static Pod 的方式就是把 pod 定义文件放到 staticPath

切换 node 的方式ssh node-ip-address

Copyright ©Bota5ky all right reserved,powered by GitbookLast Updated: 2023-11-13 09:41:56

results matching ""

    No results matching ""