1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG054-Kubernetes DaemonSet与Static Pod实战解析

目录大纲

Part01-基础概念与理论知识

1.1 DaemonSet概念

DaemonSet是Kubernetes中的一种控制器,用于确保集群中的每个节点(或符合条件的节点)都运行一个Pod的副本。当节点加入集群时,DaemonSet会自动在该节点上创建Pod;当节点从集群中移除时,DaemonSet会自动删除该节点上的Pod。

1.2 DaemonSet工作原理

DaemonSet通过监听节点变化事件,确保每个符合条件的节点上都有且只有一个Pod运行。它使用节点选择器(nodeSelector)或节点亲和性(nodeAffinity)来选择要运行Pod的节点。

1.3 Static Pod概念

Static Pod是由kubelet直接管理的Pod,不需要API服务器的介入。它们存储在节点的特定目录中,kubelet会定期扫描这些目录并创建或删除相应的Pod。

1.4 Static Pod工作原理

kubelet在启动时会检查配置的Static Pod目录(默认为/etc/kubernetes/manifests),并为该目录中的每个YAML或JSON文件创建一个Pod。当文件被修改时,kubelet会更新相应的Pod;当文件被删除时,kubelet会删除相应的Pod。,风哥提示:。

,风哥提示:。

Part02-生产环境规划与建议

2.1 DaemonSet应用场景

DaemonSet适用于以下场景:

  • 日志收集:在每个节点上运行日志收集器,如Fluentd、Filebeat
  • 监控:在每个节点上运行监控代理,如Prometheus Node Exporter
  • 网络插件:在每个节点上运行网络插件,如Calico、Flannel
  • 存储插件:在每个节点上运行存储插件,如Rook、Ceph

2.2 Static Pod应用场景

Static Pod适用于以下场景:

  • 控制平面组件:在主节点上运行etcd、kube-apiserver、kube-controller-manager、kube-scheduler等控制平面组件
  • 节点级服务:在节点上运行需要在kubelet启动前就运行的服务
  • 测试和调试:用于快速测试Pod配置,无需通过API服务器

2.3 资源规划

在规划DaemonSet和Static Pod时,需要考虑以下资源因素:

  • CPU和内存:确保每个节点有足够的资源运行DaemonSet或Static Pod
  • 存储:对于需要持久化的DaemonSet或Static Pod,需要规划存储资源
  • 网络:确保网络配置能够支持DaemonSet或Static Pod的网络需求

Part03-生产环境项目实施方案

3.1 DaemonSet部署方案

部署DaemonSet的步骤如下。

3.1.1 创建DaemonSet YAML文件

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fluentd,学习交流加群风哥微信: itpux-com。
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluentd:v1.14
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

3.1.2 部署DaemonSet

# kubectl apply -f fluentd-daemonset.yaml

执行 →

daemonset.apps/fluentd created

3.2 Static Pod部署方案

部署Static Pod的步骤如下。。。

3.2.1 创建Static Pod YAML文件

apiVersion: v1
kind: Pod
metadata:
  name: static-nginx,学习交流加群风哥QQ113257174。
  labels:
    app: static-nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80
    resources:
      limits:
        memory: 256Mi
      requests:
        cpu: 100m
        memory: 256Mi

3.2.2 将YAML文件复制到Static Pod目录

# cp static-nginx.yaml /etc/kubernetes/manifests/

Part04-生产案例与实战讲解

4.1 DaemonSet实战案例:部署Prometheus Node Exporter

4.1.1 创建Node Exporter DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: prometheus-node-exporter
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus-node-exporter
  template:
    metadata:
      labels:
        app: prometheus-node-exporter
    spec:
      containers:
      - name: prometheus-node-exporter
        image: prom/node-exporter:v1.3.1,更多视频教程www.fgedu.net.cn。
        ports:
        - containerPort: 9100
          hostPort: 9100
        resources:
          limits:
            memory: 100Mi
          requests:
            cpu: 100m
            memory: 100Mi

4.1.2 部署Node Exporter

# kubectl create namespace monitoring
# kubectl apply -f node-exporter-daemonset.yaml

执行 →

namespace/monitoring created
daemonset.apps/prometheus-node-exporter created

4.1.3 验证Node Exporter部署

# kubectl get daemonset -n monitoring

执行 →

NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
prometheus-node-exporter   3         3         3       3            3                     1m

4.2 Static Pod实战案例:部署etcd

4.2.1 创建etcd Static Pod YAML文件

apiVersion: v1
kind: Pod
metadata:
  name: etcd
  namespace: kube-system
spec:
  containers:
  - name: etcd
    image: k8s.gcr.io/etcd:3.5.0
    command:
    - etcd
    - --advertise-client-urls=https://192.168.1.10:2379
    - --listen-client-urls=https://192.168.1.10:2379,更多学习教程公众号风哥教程itpux_com。
    - --listen-peer-urls=https://192.168.1.10:2380
    - --initial-advertise-peer-urls=https://192.168.1.10:2380
    - --initial-cluster=etcd=https://192.168.1.10:2380
    - --initial-cluster-token=etcd-cluster-01
    - --initial-cluster-state=new
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --data-dir=/var/lib/etcd
    volumeMounts:
    - name: etcd-certs
      mountPath: /etc/kubernetes/pki/etcd
      readOnly: true
    - name: etcd-data
      mountPath: /var/lib/etcd
  volumes:
  - name: etcd-certs
    hostPath:
      path: /etc/kubernetes/pki/etcd
  - name: etcd-data
    hostPath:
      path: /var/lib/etcd

4.2.2 将YAML文件复制到Static Pod目录

# cp etcd-static-pod.yaml /etc/kubernetes/manifests/

4.2.3 验证etcd Static Pod状态

# kubectl get pods -n kube-system | grep etcd

执行 →

etcd-fgedu-master   1/1     Running   0          5m

Part05-风哥经验总结与分享

5.1 DaemonSet最佳实践

    ,from K8S+DB视频:www.itpux.com。

  • 合理设置资源限制:为DaemonSet设置适当的CPU和内存限制,避免占用过多节点资源
  • 使用节点选择器:通过nodeSelector或nodeAffinity选择适合运行DaemonSet的节点
  • 配置滚动更新:使用rollingUpdate策略,确保DaemonSet更新时不影响集群运行
  • 监控DaemonSet:定期检查DaemonSet的运行状态,确保所有节点都有Pod运行

5.2 Static Pod最佳实践

  • 仅用于必要场景:Static Pod应仅用于控制平面组件或节点级服务
  • 注意文件权限:确保Static Pod YAML文件权限正确,避免未授权修改
  • 定期备份:定期备份Static Pod配置文件,以防止配置丢失
  • 监控Static Pod:定期检查Static Pod的运行状态,确保其正常运行

5.3 常见问题与解决方案

  • DaemonSet Pod无法在某些节点上运行:检查节点选择器是否正确,节点是否有足够的资源
  • Static Pod未创建:检查YAML文件格式是否正确,文件是否在正确的目录中
  • DaemonSet更新失败:检查更新策略是否正确,Pod是否能够正常启动
  • Static Pod配置更新不生效:检查kubelet是否重新加载了配置文件,可能需要重启kubelet

5.4 性能优化建议

  • 减少DaemonSet数量:只部署必要的DaemonSet,避免过多占用节点资源
  • 优化Static Pod配置:确保Static Pod配置合理,避免不必要的资源消耗
  • 使用本地存储:对于需要存储的DaemonSet或Static Pod,使用本地存储以提高性能
  • 定期清理:定期清理不需要的DaemonSet和Static Pod,保持集群整洁

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息