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