Kubernetes 使用kubectl创建守护程序?

Kubernetes 使用kubectl创建守护程序?,kubernetes,kubectl,daemonset,Kubernetes,Kubectl,Daemonset,我参加了CKA考试,我需要在那里使用守护程序一段时间。由于使用kubectl而不是为k8s资源创建yaml清单要快得多,我想知道是否可以使用kubectl创建守护程序资源 我知道使用常规的kubectl create守护程序创建它是不可能的,至少现在是这样。文档中没有对它的描述。但也许有一种不同的方法可以做到这一点 我现在能做的最好的事情就是先创建部署,比如kubectl create Deployment,然后编辑它的输出清单。这里有任何选项吗?没有使用kubectl创建守护程序的选项。但是,

我参加了CKA考试,我需要在那里使用守护程序一段时间。由于使用kubectl而不是为k8s资源创建yaml清单要快得多,我想知道是否可以使用
kubectl
创建守护程序资源

我知道使用常规的
kubectl create守护程序创建它是不可能的,至少现在是这样。文档中没有对它的描述。但也许有一种不同的方法可以做到这一点


我现在能做的最好的事情就是先创建部署,比如
kubectl create Deployment
,然后编辑它的输出清单。这里有任何选项吗?

没有使用
kubectl
创建守护程序的选项。但是,您仍然可以为守护程序集准备一个带有基本配置的Yaml文件,例如
守护程序集basic.Yaml
,并使用
kubectl create-f daemon set basic.Yaml

您可以使用
kubectl edit DaemonSet
编辑新的守护程序集。或者通过
kubectl apply-f daemon set basic.Yaml
修改Yaml文件并应用更改。注意,如果要更新配置修改文件并使用
apply
命令,则最好在创建守护程序时使用
apply
而不是
create

下面是一个简单守护程序的示例:

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
CKA允许访问。因此,应该可以从那里获得不同资源的YAML示例。是K8S文档中的守护程序

另外,不确定认证环境是否可以访问kube系统命名空间中的资源。如果是,则使用下面的命令获取守护程序的示例yaml

kubectl get守护程序kube-flannel-ds-amd64-o yaml-n=kube system>daemonset.yaml


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

最快的黑客攻击是使用

kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml
现在在nginx ds.yaml中将
kind:Deployment
行替换为
kind:DaemonSet
,并删除该行
副本:1

但是,考虑到“apps/v1”是集群中用于守护程序的api,下面的命令将给出一个干净的守护程序清单

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

您有您的nginx守护程序

您可以利用Kubernetes体系结构从现有集群获得守护程序集的定义。请查看
kube proxy
,它是在集群中的每个节点上运行的网络组件。
kube代理
部署为守护程序集,因此您可以使用下面的命令提取其定义

$kubectl获取ds kube proxy-n kube system-o yaml>kube-proxy.ds.yaml
警告 通过从
kube proxy
提取守护程序集的定义,请注意:

  • 你将不得不顺从地进行清理
  • 您必须将apiVersion从
    extensions/v1beta1
    更改为
    apps/v1

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

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

    我通过以下命令使用此命令:

  • 从Kubernetes命令创建复制集或部署
  • kubectl创建部署--image=--dry run-o yaml>file.txt

  • 编辑种类并替换守护程序,删除其中的副本和策略字段

  • kubectl apply-f file.txt


  • 最快的创建方法

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

    现在将nginx-ds.yaml中的kind:Deployment行替换为kind:DaemonSet,并删除行副本:1策略{}状态{}。 否则,它会显示一些必填字段的错误,如

    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
    

    在CKA考试期间,您可以访问。您可以使用该链接获取守护程序yaml文件的示例。但是,您可以使用前面提到的方法,将部署规范更改为守护程序规范。您需要将种类更改为守护程序,删除策略、副本和状态字段。那就可以了。

    谢谢你的回答。是的,使用yaml创建守护程序是很容易的,我大部分时间都是这样做的。问题是,我应该手动创建该文件,但我太懒了,不能这样做:)。看来我应该创建一个库伯内特斯回购的公关,并尝试实施。感谢您的回答。它还附带了不同的apiversion和一些不需要的字段。将api版本更改为extensions/v1beta1,并将“-validate=false”与kubectl apply一起使用以抑制警告。文档中的示例比需要的更广泛—您还需要删除策略:{}从生成的部署的yamlYou没有删除副本:)此命令可能会生成一个YAML,这有点麻烦,因为它在当前守护程序中有太多的内容,您必须确保检查每个属性,以避免造成任何不希望的重叠。我认为@zamansakib创建一个干运行部署yaml,然后仅仅改变类型的方法()可以提供一个更干净的新yaml