使用 kubectl 创建 Daemonset?
Create Daemonset using kubectl?
我参加了 CKA 考试,在那里我需要使用 Daemonsets 工作一段时间。由于使用 kubectl 做所有事情比为 k8s 资源创建 yaml 清单要快得多,我想知道是否可以使用 kubectl
.
创建 Daemonset 资源
我知道至少目前无法使用常规 kubectl create daemonset
创建它。并且文档中没有对它的描述。但也许有办法以不同的方式做到这一点?
我现在能做的最好的事情就是像 kubectl create deployment
一样先创建 Deployment 并编辑它的输出清单。这里有什么选择吗?
没有使用 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
CKA 允许访问 K8S documentation. So, it should be possible to get a sample YAML for different resources from there. Here 是来自 K8S 文档的 Daemonset。
另外,不确定认证环境是否可以访问 kube-system 命名空间中的资源。如果是,则使用以下命令获取 Daemonset 的示例 yaml。
kubectl get daemonsets kube-flannel-ds-amd64 -o yaml -n=kube-system > daemonset.yaml
这是不可能的。至少对于 Kubernetes 1.12。唯一的选择是获取样本 Daemonset yaml 文件并从那里开始。
最快的技巧是使用
创建部署文件
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 架构从现有集群中获取 DaemonSet 的定义。查看 kube-proxy
,它是在集群中的每个节点上运行的网络组件。
kube-proxy
部署为 DaemonSet,因此您可以使用以下命令提取其定义。
$ kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.ds.yaml
警告!
通过从 kube-proxy
中提取 DaemonSet 的定义,请注意:
- 你将不得不柔顺地清理!
- 您必须将 apiVersion 从
extensions/v1beta1
更改为 apps/v1
使用命令部署创建和修改它,可以非常快速地创建daemonset。
下面是创建 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 }'
我通过以下命令使用它:
- 从 Kubernetes 命令命令创建 Replicaset 或部署
kubectl 创建部署 --image= --dry-run -o yaml > file.txt
修改种类并替换DaemonSet,移除replicas和strategy字段放入其中。
kubectl apply -f file.txt
最快的创建方式
kubectl create deploy nginx --image=nginx --dry-运行 -o yaml > nginx-ds.yaml
现在将 kind: Deployment 行替换为 kind: DaemonSet in nginx-ds.yaml 并删除行 replicas: 1 , strategy {} 和 状态 {} 也是如此。
否则它会显示某些必填字段的错误,例如
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 考试期间,您可以访问 Kubernetes Documentation for DaemonSets。您可以使用 link 并获取 DaemonSet yaml 文件的示例。但是,您可以使用您提到的方式,将部署规范更改为 DaemonSet 规范。您需要将 kind 更改为 Daemonset,移除 strategy、replicas 和 status 字段。这样就可以了。
我参加了 CKA 考试,在那里我需要使用 Daemonsets 工作一段时间。由于使用 kubectl 做所有事情比为 k8s 资源创建 yaml 清单要快得多,我想知道是否可以使用 kubectl
.
我知道至少目前无法使用常规 kubectl create daemonset
创建它。并且文档中没有对它的描述。但也许有办法以不同的方式做到这一点?
我现在能做的最好的事情就是像 kubectl create deployment
一样先创建 Deployment 并编辑它的输出清单。这里有什么选择吗?
没有使用 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
CKA 允许访问 K8S documentation. So, it should be possible to get a sample YAML for different resources from there. Here 是来自 K8S 文档的 Daemonset。
另外,不确定认证环境是否可以访问 kube-system 命名空间中的资源。如果是,则使用以下命令获取 Daemonset 的示例 yaml。
kubectl get daemonsets kube-flannel-ds-amd64 -o yaml -n=kube-system > daemonset.yaml
这是不可能的。至少对于 Kubernetes 1.12。唯一的选择是获取样本 Daemonset yaml 文件并从那里开始。
最快的技巧是使用
创建部署文件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 架构从现有集群中获取 DaemonSet 的定义。查看 kube-proxy
,它是在集群中的每个节点上运行的网络组件。 kube-proxy
部署为 DaemonSet,因此您可以使用以下命令提取其定义。
$ kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.ds.yaml
警告!
通过从 kube-proxy
中提取 DaemonSet 的定义,请注意:
- 你将不得不柔顺地清理!
- 您必须将 apiVersion 从
extensions/v1beta1
更改为apps/v1
使用命令部署创建和修改它,可以非常快速地创建daemonset。 下面是创建 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 }'
我通过以下命令使用它:
- 从 Kubernetes 命令命令创建 Replicaset 或部署
kubectl 创建部署
修改种类并替换DaemonSet,移除replicas和strategy字段放入其中。
kubectl apply -f file.txt
最快的创建方式
kubectl create deploy nginx --image=nginx --dry-运行 -o yaml > nginx-ds.yaml
现在将 kind: Deployment 行替换为 kind: DaemonSet in nginx-ds.yaml 并删除行 replicas: 1 , strategy {} 和 状态 {} 也是如此。 否则它会显示某些必填字段的错误,例如
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 考试期间,您可以访问 Kubernetes Documentation for DaemonSets。您可以使用 link 并获取 DaemonSet yaml 文件的示例。但是,您可以使用您提到的方式,将部署规范更改为 DaemonSet 规范。您需要将 kind 更改为 Daemonset,移除 strategy、replicas 和 status 字段。这样就可以了。