使用kubectl创建Daemonset?

时间:2018-09-04 08:25:23

标签: kubernetes kubectl daemonset

我参加了CKA考试,并且在那里需要与Daemonsets合作一段时间。由于用kubectl进行所有操作要比为k8s资源创建yaml清单要快得多,所以我想知道是否可以使用kubectl创建Daemonset资源。

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

我现在能做的最好的事情就是先创建kubectl create deployment之类的Deployment,然后编辑它的输出清单。这里有什么选择吗?

9 个答案:

答案 0 :(得分:0)

没有使用kubectl创建DaemonSet的选项。但是,您仍然可以为DaemonSet准备具有基本配置的Yaml文件,例如daemon-set-basic.yaml,然后使用kubectl create -f daemon-set-basic.yaml

创建

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

这是一个简单的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

答案 1 :(得分:0)

CKA允许访问K8S documentation。因此,应该有可能从那里获得针对不同资源的样本YAML。 Here是K8S文档中用于Daemonset的版本。

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

  

kubectl获取daemonsets kube-flannel-ds-amd64 -o yaml -n = kube-system> daemonset.yaml

答案 2 :(得分:0)

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

答案 3 :(得分:0)

最快的黑客是使用

创建部署文件
kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml

现在用 nginx-ds.yaml 中的kind: Deployment替换行kind: DaemonSet,并删除行replicas: 1

您拥有nginx DaemonSet。

答案 4 :(得分:0)

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

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

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

  1. 您将不得不认真清理!
  2. 您必须将apiVersion从extensions/v1beta1更改为apps/v1

答案 5 :(得分:0)

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

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 }'

答案 6 :(得分:0)

我通过以下命令使用它:

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

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

  1. 编辑种类并替换DaemonSet,将副本和策略字段删除。

  2. kubectl apply -f file.txt

答案 7 :(得分:0)

最快的创建方式

kubectl创建部署nginx --image = nginx --dry-run -o yaml> nginx-ds.yaml

现在替换行类型:nginx-ds.yaml中的行部署:DaemonSet并删除行副本:1 strategy {} 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

答案 8 :(得分:0)

在 CKA 考试期间,您可以访问 Kubernetes Documentation for DaemonSets。您可以使用该链接并获取 DaemonSet yaml 文件的示例。但是,您可以使用您提到的方式,将部署规范更改为 DaemonSet 规范。您需要将 kind 更改为 Daemonset,删除 strategy、replicas 和 status 字段。那就行了。