私はCKA試験を受けましたが、そこでかなり長い間Daemonsetsを操作する必要がありました。 k8sリソースのyamlマニフェストを作成するよりも、kubectlですべてを実行する方がはるかに高速であるため、kubectl
を使用してDaemonsetリソースを作成できるかどうか疑問に思っていました。
少なくとも今のところ、通常のkubectl create daemonset
を使用して作成することは不可能です。そして、ドキュメントにはそれの説明はありません。しかし、おそらくそれを別の方法で行う方法はありますか?
私が今できる最善のことは、最初にkubectl create deployment
のようにDeploymentを作成し、その出力マニフェストを編集することです。ここにオプションはありますか?
最速のハックは、を使用して展開ファイルを作成することです
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であることを考慮して、クリーンなデーモンセットマニフェストを提供します
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ファイルを取得してそこから移動することです。
コマンドを使用してデプロイメントを作成および変更すると、デーモンセットを非常に迅速に作成できます。以下は、daemonsetを作成するための1行のコマンドです
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アーキテクチャを利用して、既存のクラスターからDaemonSetの定義を取得できます。 kube-proxy
をご覧ください。これは、クラスターの各ノードで実行されるネットワークコンポーネントです。 kube-proxy
はDaemonSetとしてデプロイされるため、以下のコマンドでその定義を抽出できます。
$ kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.ds.yaml
警告!kube-proxy
からDaemonSetの定義を抽出することによってそれに気づく:
extensions/v1beta1
からapps/v1
に変更する必要があります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