想学会K8S,DaemonSet很重要!值得收藏( 二 )


(2)使用以下命令创建 DaemonSet:
kubectl apply -f example-daemonset.yaml这将使用先前创建的 YAML 文件创建 DaemonSet 。您可以通过使用以下命令来验证是否已创建 DaemonSet:
kubectl get daemonsets如果您看到 "example-daemonset",则表示 DaemonSet 已成功创建 。
3、使用 Terraform 创建 DaemonSet使用 Terraform 创建 DaemonSet 是一种自动化部署和管理 Kubernetes 应用程序的方法 。Terraform 是一种基础设施即代码工具,允许您编写代码来定义和管理基础设施 。
要使用 Terraform 创建 DaemonSet,您需要做以下几步:

  1. 安装 Terraform 工具:请根据您的操作系统在 Terraform 官方网站(https://www.terraform.io/downloads.html)上查找相应的安装指南 。
  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 映像 。
(3)初始化 Terraform 项目:使用以下命令初始化 Terraform 项目 。
$ terraform init(4)配置 Terraform 项目:使用以下命令配置 Terraform 项目 。
$ terraform apply此命令将使用 Terraform 创建 DaemonSet 。
三、DaemonSet的应用场景1、在节点上部署系统级守护进程DaemonSet 最常见的应用场景之一是在节点上部署系统级守护进程 。例如,Kubernetes 官方提供的 kube-proxy 和 kube-dns 组件都是以 DaemonSet 的形式运行在每个节点上的 。这些组件是 Kubernetes 集群中非常重要的系统级进程,需要在每个节点上运行,以确保 Kubernetes 集群的正常运行 。
想学会K8S,DaemonSet很重要!值得收藏

文章插图
以下是部署 kube-proxy DaemonSet 的示例 YAML 文件:
apiVersion: apps/v1kind: DaemonSetmetadata:name: kube-proxynamespace: kube-systemlabels:k8s-app: kube-proxyspec:selector:matchLabels:k8s-app: kube-proxyupdateStrategy:type: RollingUpdatetemplate:metadata:labels:k8s-app: kube-proxyspec:containers:- name: kube-proxyimage: k8s.gcr.io/kube-proxy:v1.22.0securityContext:privileged: truecommand:- /usr/local/bin/kube-proxyargs:- --cnotallow=/var/lib/kube-proxy/config.confvolumeMounts:- name: kube-proxy-configmountPath: /var/lib/kube-proxyvolumes:- name: kube-proxy-configconfigMap:name: kube-proxy在这个 YAML 文件中,我们使用 apps/v1 API 版本创建了一个名为 kube-proxy 的 DaemonSet 。它的 selector 字段指定了需要运行这个 DaemonSet 的 Pod 的标签,updateStrategy 指定了更新策略,这里使用的是滚动更新 。template 字段定义了 Pod 的模板,包括容器、挂载的卷和命令参数等 。
2、在节点上运行普通容器在 Kubernetes 集群中,通常有许多需要在每个节点上运行的容器,例如日志收集代理、监控代理、安全代理等 。使用 DaemonSet 控制器,可以方便地在每个节点上运行这些容器 。
想学会K8S,DaemonSet很重要!值得收藏

文章插图
下面是一个运行 fluentd 日志收集代理的 DaemonSet 的示例 YAML 文件:
apiVersion: apps/v1kind: DaemonSetmetadata:name: fluentdspec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluent/fluentd:v1.7-1volumeMounts:- name: varlogmountPath: /var/logvolumes:- name: varloghostPath:path: /var/log在上面的 YAML 文件中,我们定义了一个名为 fluentd 的 DaemonSet 。该 DaemonSet 会在每个节点上运行一个名为 fluentd 的容器 。
该容器使用 fluent/fluentd:v1.7-1 镜像,并将主机节点上的 /var/log 目录挂载到容器中的 /var/log 目录下 。这样,该容器就可以从节点上的日志文件中收集日志 。
3、维护集群状态另一个常见的 DaemonSet 应用场景是维护集群状态 。在 Kubernetes 集群中,有许多需要在每个节点上运行的控制器,例如网络插件、存储插件、DNS 插件等 。这些控制器通常需要在每个节点上运行,以维护集群状态 。


推荐阅读