10

我参加了 CKA 考试,我需要在那里使用 Daemonsets 很长一段时间。由于使用 kubectl 做所有事情而不是为 k8s 资源创建 yaml 清单要快得多,所以我想知道是否可以使用kubectl.

kubectl create daemonset我知道至少现在不可能使用常规创建它。并且文档中没有对其的描述。但也许有办法以某种不同的方式做到这一点?

我现在能做的最好的事情是首先创建部署kubectl create deployment并编辑它的输出清单。这里有什么选择吗?

4

9 回答 9

16

最快的 hack 是使用

kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml

现在用 nginx-ds.yaml 替换该行kind: Deployment删除kind: DaemonSet该行replicas: 1

但是,考虑到“apps/v1”是集群中用于 DaemonSet 的 api,以下命令将给出一个干净的 daemonset 清单

kubectl create deploy nginx --image=nginx --dry-run -o yaml | \
    sed '/null\|{}\|replicas/d;/status/,$d;s/Deployment/DaemonSet/g' > nginx-ds.yaml

你有你的 nginx DaemonSet。

于 2019-05-12T09:12:24.853 回答
9

CKA 允许访问K8S 文档。因此,应该可以从那里获得不同资源的示例 YAML。是来自 K8S 文档的 Daemonset 的一个。

此外,不确定认证环境是否可以访问 kube-system 命名空间中的资源。如果是,则使用以下命令获取 Daemonset 的示例 yaml。

kubectl 获取守护进程 kube-flannel-ds-amd64 -o yaml -n=kube-system > daemonset.yaml

于 2018-10-15T15:26:45.740 回答
4

不可能。至少对于 Kubernetes 1.12。唯一的选择是获取一个示例 Daemonset yaml 文件并从那里开始。

于 2018-10-17T07:44:08.360 回答
3

最快的创作方式

kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml

现在将行 kind: Deployment 替换为 kind: DaemonSet 在 nginx-ds.yaml 并删除行replicas: 1strategy {}status {}。否则它会显示像这样的一些必填字段的错误

error: error validating "nginx-ds.yaml": error validating data: [ValidationError(DaemonSet.spec): unknown field "strategy" in io.k8s.api.apps.v1.DaemonSetSpec, ValidationError(DaemonSet.status): missing required field "currentNumberScheduled" in io.k8s.api.apps.v1.DaemonSetStatus,ValidationError(DaemonSet.status): missing required field "numberMisscheduled" in io.k8s.api.apps.v1.DaemonSetStatus, ValidationError(DaemonSet.status): missing required field "desiredNumberScheduled" in io.k8s.api.apps.v1.DaemonSetStatus, ValidationError(DaemonSet.status): missing required field "numberReady" in io.k8s.api.apps.v1.DaemonSetStatus]; if you choose to ignore these errors, turn validation off with --validate=false
于 2020-11-21T10:36:36.940 回答
0

在 CKA 考试期间,您可以访问DaemonSets 的 Kubernetes 文档。您可以使用该链接并获取 DaemonSet yaml 文件的示例。但是,您可以使用您提到的方式,将部署规范更改为 DaemonSet 规范。您需要将种类更改为Daemonset,删除策略、副本和状态字段。这样就可以了。

于 2021-05-19T07:56:08.937 回答
0

没有这样的选项可以使用kubectl. 但是,您仍然可以为 DaemonSet 准备一个包含基本配置的 Yaml 文件,例如daemon-set-basic.yaml,并使用kubectl create -f daemon-set-basic.yaml

您可以使用 编辑新的 DaemonSet kubectl edit daemonset <name-of-the-daemon-set>。或者修改 Yaml 文件并通过kubectl apply -f daemon-set-basic.yaml. 注意,如果要更新配置修改文件和使用apply命令,最好apply不要create在创建 DaemonSet 时使用。

下面是一个简单的 DaemonSet 示例:

kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: k8s.gcr.io/fluentd-elasticsearch:1.20
于 2018-09-04T14:07:14.557 回答
0

我通过以下命令使用它:

  1. 从 Kubernetes 命令式命令创建 Replicaset 或部署

kubectl 创建部署 <daemonset_name> --image= --dry-run -o yaml > file.txt

  1. 编辑 kind 并替换 DaemonSet,将副本和策略字段删除到其中。

  2. kubectl apply -f file.txt

于 2020-08-15T12:08:13.547 回答
0

您可以利用 Kubernetes 架构从现有集群中获取DaemonSet的定义。看看kube-proxy,它是在集群中每个节点上运行的网络组件。部署为DaemonSet,因此您可以使用以下命令提取其定义。在此处输入图像描述 kube-proxy

$ kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.ds.yaml

警告! 通过提取DaemonSet的定义,请kube-proxy注意:

  1. 您将不得不顺从地进行清理!
  2. 您必须将 apiVersion 从更改extensions/v1beta1apps/v1
于 2019-11-25T20:53:03.797 回答
-1

使用命令来部署创建和修改它,可以非常快速地创建守护程序集。下面是创建 daemonset 的一行命令

kubectl create deployment elasticsearch --namespace=kube-system  --image=k8s.gcr.io/fluentd-elasticsearch:1.20 --dry-run -o yaml | grep -v "creationTimestamp\|status" | awk '{gsub(/Deployment/, "DaemonSet"); print }'
于 2019-12-14T10:36:05.170 回答