我参加了 CKA 考试,我需要在那里使用 Daemonsets 很长一段时间。由于使用 kubectl 做所有事情而不是为 k8s 资源创建 yaml 清单要快得多,所以我想知道是否可以使用kubectl
.
kubectl create daemonset
我知道至少现在不可能使用常规创建它。并且文档中没有对其的描述。但也许有办法以某种不同的方式做到这一点?
我现在能做的最好的事情是首先创建部署kubectl create deployment
并编辑它的输出清单。这里有什么选择吗?
我参加了 CKA 考试,我需要在那里使用 Daemonsets 很长一段时间。由于使用 kubectl 做所有事情而不是为 k8s 资源创建 yaml 清单要快得多,所以我想知道是否可以使用kubectl
.
kubectl create daemonset
我知道至少现在不可能使用常规创建它。并且文档中没有对其的描述。但也许有办法以某种不同的方式做到这一点?
我现在能做的最好的事情是首先创建部署kubectl create deployment
并编辑它的输出清单。这里有什么选择吗?
最快的 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。
不可能。至少对于 Kubernetes 1.12。唯一的选择是获取一个示例 Daemonset yaml 文件并从那里开始。
最快的创作方式
kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml
现在将行 kind: Deployment 替换为 kind: DaemonSet 在 nginx-ds.yaml 并删除行replicas: 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
在 CKA 考试期间,您可以访问DaemonSets 的 Kubernetes 文档。您可以使用该链接并获取 DaemonSet yaml 文件的示例。但是,您可以使用您提到的方式,将部署规范更改为 DaemonSet 规范。您需要将种类更改为Daemonset,删除策略、副本和状态字段。这样就可以了。
没有这样的选项可以使用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
我通过以下命令使用它:
kubectl 创建部署 <daemonset_name> --image= --dry-run -o yaml > file.txt
编辑 kind 并替换 DaemonSet,将副本和策略字段删除到其中。
kubectl apply -f file.txt
您可以利用 Kubernetes 架构从现有集群中获取DaemonSet的定义。看看kube-proxy
,它是在集群中每个节点上运行的网络组件。部署为DaemonSet,因此您可以使用以下命令提取其定义。
kube-proxy
$ kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.ds.yaml
警告!
通过提取DaemonSet的定义,请kube-proxy
注意:
extensions/v1beta1
为apps/v1
使用命令来部署创建和修改它,可以非常快速地创建守护程序集。下面是创建 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 }'