关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

【Kubernetes】 DaemonSet 详解(一)

发布时间:2023-06-28 12:01:07

一、介绍DaemonSet

1.1 为什么需要DaemonSet

在 Kubernetes 集群中,通常需要在每个节点上运行守护进程来监视节点健康状态、收集日志等,这些守护进程通常称为系统级守护进程,如 Kubernetes Cluster Autoscaler 和 Kubernetes DNS。使用 Deployment 或 StatefulSet 可以创建 Pod,这些 Pod 可以被调度到任何节点上运行,但是在某些情况下,需要确保每个节点上都运行着一个 Pod 副本 版本,即需要使用 DaemonSet。

1.2 DaemonSet 简介

DaemonSet 是 Kubernetes 中一种类型的控制器对象,用于在每个节点上运行一个 Pod 副本版本,确保每个节点上都有一个或多个 Pod 副本。DaemonSet 控制器可以保证在新增节点时自动在新增的节点上创建 Pod 副本,同时在节点删除时,自动删除该节点上的 Pod 副本。

1.3 DaemonSet 与其他 Kubernetes 对象的区别

DaemonSet 在运行时,会在集群中的每个节点上创建一个 Pod 副本,而其他的控制器如 Deployment 和 StatefulSet 创建的 Pod,会尽可能地让它们在集群的不同节点上运行。另外,DaemonSet 在节点加入和退出时,会自动处理 Pod 的创建和删除,因此可以保证在整个集群中的每个节点上都运行着一个 Pod 副本,适合用于运行集群服务的 daemon 容器或一些常驻内存的服务。而 Deployment 和 StatefulSet 更适用于部署需要动态扩缩容的应用程序。


对象类型说明控制器Pods数量
Deployment管理多个 ReplicaSets,用于应用程序的版本控制和滚动升级控制器可以控制多个Pods数量
StatefulSet用于有状态应用程序,例如数据库,确保每个实例具有唯一的网络标识符和稳定的存储控制器可以控制多个Pods数量
DaemonSet用于运行守护进程(如日志收集器),它会在每个工作节点上运行一个副本控制器等于节点数量
Job用于批处理任务,例如数据转换或任务调度一次性
CronJob用于定期执行具有固定时间间隔的任务可以控制多个Pods数量

二、创建DaemonSet

1.1 使用 kubectl 命令创建 DaemonSet

使用 kubectl 命令创建 DaemonSet 的步骤如下:

  1. 使用以下命令创建 YAML 文件:
apiVersion: apps/v1 kind: DaemonSet metadata:  name: example-daemonset  labels:  app: example spec:  selector:  matchLabels:  app: example  template:  metadata:  labels:  app: example  spec:  containers:  - name: example-container  image: nginx

   

在此示例中,我们创建了一个名为 "example-daemonset" 的 DaemonSet,并使用 Nginx 容器作为模板。请注意,标签 "app: example" 在这里起到关键作用,因为它将用于选择要运行此 DaemonSet 的节点。

  1. 使用以下命令创建 DaemonSet:
kubectl create -f example-daemonset.yaml

   

这将使用先前创建的 YAML 文件创建 DaemonSet。您可以通过使用以下命令来验证是否已创建 DaemonSet:

kubectl get daemonsets

   

如果您看到 "example-daemonset",则表示 DaemonSet 已成功创建。

1.2 使用 YAML 文件创建DaemonSet

要使用 YAML 文件创建 DaemonSet,请执行以下步骤:

  1. 创建一个 YAML 文件并使用以下内容:
apiVersion: apps/v1 kind: DaemonSet metadata:  name: example-daemonset  labels:  app: example spec:  selector:  matchLabels:  app: example  template:  metadata:  labels:  app: example  spec:  containers:  - name: example-container  image: nginx

   

在此示例中,我们创建了一个名为 "example-daemonset" 的 DaemonSet,并使用 Nginx 容器作为模板。请注意,标签 "app: example" 在这里起到关键作用,因为它将用于选择要运行此 DaemonSet 的节点。

  1. 使用以下命令创建 DaemonSet:
kubectl apply -f example-daemonset.yaml

   

这将使用先前创建的 YAML 文件创建 DaemonSet。您可以通过使用以下命令来验证是否已创建 DaemonSet:

kubectl get daemonsets

   

如果您看到 "example-daemonset",则表示 DaemonSet 已成功创建。

1.3 使用 Terraform 创建 DaemonSet

使用 Terraform 创建 DaemonSet 是一种自动化部署和管理 Kubernetes 应用程序的方法。Terraform 是一种基础设施即代码工具,允许您编写代码来定义和管理基础设施。

要使用 Terraform 创建 DaemonSet,您需要做以下几步:

  1. 安装 Terraform 工具:请根据您的操作系统在 Terraform 官方网站(www.terraform.io/downloads.h…
  2. 创建一个 Terraform 项目:在一个新的目录中,创建一个 main.tf 文件,并添加以下内容。
provider "kubernetes" {  config_context_cluster = "my-k8s-cluster" }  resource "kubernetes_daemonset" "my-daemonset" {  metadata {  name = "my-daemonset"  }   spec {  selector {  match_labels = {  app = "my-daemonset"  }  }   template {  metadata {  labels = {  app = "my-daemonset"  }  }   spec {  containers {  name = "my-container"  image = "nginx:1.19.0-alpine"  ports {  name = "http"  container_port = 80  }  volume_mounts {  name = "html"  mount_path = "/usr/share/nginx/html"  }  }   volumes {  name = "html"  config_map {  name = "my-daemonset-configmap"  items {  key = "index.html"  path = "index.html"  }  }  }  }  }  } }

   

此代码将创建一个名为 my-daemonset 的 DaemonSet,该 DaemonSet 包含一个名为 my-container 的容器,并使用 Nginx 映像。

  1. 初始化 Terraform 项目:使用以下命令初始化 Terraform 项目。
$ terraform init

   

  1. 配置 Terraform 项目:使用以下命令配置 Terraform 项目。
$ terraform apply

   

此命令将使用 Terraform 创建 DaemonSet。


/template/Home/leiyu/PC/Static