Personal learning records
K8S控制器二(DaemonSet)
K8S控制器二(DaemonSet)

K8S控制器二(DaemonSet)

k8s中经常会在node上安装部署应用,DaemonSet守护进程适用于在所有节点或部分节点运行一个daemon守护进程。这就和之前搭建过的zabbix监控很像,所有节点都必须安装agent以便采集监控数据,之前搭建k8s集群时,用到的calico网络插件就是这样,部署在每一个node上。

DaemonSet的特征如下:

  1. 这个 Pod 运行在 k8s 集群里的每一个节点(Node)上;
  2. 每个节点上只有一个这样的 Pod 实例;
  3. 当有新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来;而当旧节点被删除后,它上面的 Pod 也相应地会被回收掉。

写个yml做个实验:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-nginx
  namespace: kube-system
  labels:
    la-nginx: daemonset-nginx
spec:
  selector:
    matchLabels:
      k2-nginx: daemonset-nginx2
  template:
    metadata:
      labels:
        k2-nginx: daemonset-nginx2
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: c-nginx
        image: nginx:1.25.0
        resources:
          limits:
            cpu: 200m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - name: nginx-volume1
          mountPath: /usr/share/nginx/html
        - name: nginx-volume2
          mountPath: /usr/share/nginx/conf
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: nginx-volume1
        hostPath:
          path: /data/nginx-volume1
      - name: nginx-volume2
        hostPath:
          path: /data/nginx-volume2

这个yml定义了DaemonSet,容器名称为c-nginx,由于主节点上存在污点,pod不会被创建在有污点的node上,tolerations是容忍污点,这样就可以把pod分到主节点上了,并挂载两个卷到/usr/share/nginx/html和/usr/share/nginx/conf,用来放发布项目以及配置文件,conf目录只读,防止不必要的修改发生。apply后,容器创建成功,详细去看看都在哪个node上。

三个容器分别位于三个节点上,符合DaemonSet的规范。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注