1 基础概念

  1. DaemonSet
    DaemonSet 保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:
    日志收集,比如 fluentd,logstash 等;
    系统监控,比如 Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond 等;
    系统程序,比如 kube-proxy, kube-dns, glusterd, ceph 等。

  2. Static Pod
    Static Pod 可以让每台机器上运行指定的 Pod,这需要 kubelet 在启动的时候指定 manifest 目录,然后将所需要的 Pod 定义文件放到指定的 manifest 目录中。

2 常见用法

2.1 DaemonSet

  1. 创建 ds

    vim dpl-my-web-ds.yaml 
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        app: my-web-ds
      name: my-web-ds
    spec:
      selector:
        matchLabels:
          app: my-web-ds
      template:
        metadata:
          labels:
            app: my-web-ds
        spec:
          containers:
          - image: nginx:1.19.4
            name: nginx-ds
    $ kubectl apply -f dpl-my-web-ds.yaml 
    daemonset.apps/my-web-ds created
    
    创建 fluentd-elasticsearch DaemonSet
    $ kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml
    部署完整的efk 可以参考链接 cluster/addons/fluentd-elasticsearch
    

    cluster/addons/fluentd-elasticsearch

  2. 查看 ds

    $ kubectl get ds 或 kubectl get daemonset
    NAME        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    my-web-ds   2         2         2       2            2           <none>          83s
    
  3. 删除 ds

    $ kubectl delete daemonsets my-web-ds 
    daemonset.apps "my-web-ds" deleted
    或者
    $ kubectl delete -f dpl-my-web-ds.yaml
    

2.2 Static Pod

  1. 创建static pod
    vim  pod-my-web-sp.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: my-web-sp
      name: my-web-sp
    spec:
      containers:
      - image: nginx:1.19.4
        name: my-web-sp
        ports:
        - containerPort: 80
    拷贝该pod到  /etc/kubernetes/manifests/ 目录,过一会儿指定节点会自动拉起该pod
    cp pod-my-web-sp.yaml /etc/kubernetes/manifests/
    
    如下图,该pod的控制器为Node,而普通的pod控制器为ReplicaSet。
    在这里插入图片描述
  2. 查看static pod
    和查看正常pod一样查看static pod即可
    $ kubectl get pod|grep sp
    my-web-sp-kmaster   1/1     Running   1          4s
    pod 名称为 yaml中pod名称-节点名称
    
  3. 删除static pod
    $ kubectl delete pod my-web-sp-kmaster  
    提示 pod NotFound,因此无法对该pod执行任何操作;
    rm /etc/kubernetes/manifests/pod-my-web-sp.yaml 后,该pod过一会自动删除;
    

3 注意事项

  1. 静态 Pod 不能通过 API Server 来删除,但可以通过删除 manifest 文件来自动删除对应的 Pod。

4 说明

Concepts->Workloads->Workload Resources->DaemonSet
Kubernetes 指南-DaemonSet

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐