Создать Daemonset с помощью kubectl?
Я сдал экзамен CKA, и мне нужно было там некоторое время поработать с Daemonsets. Так как с kubectl гораздо быстрее делать все, а не создавать манифесты yaml для ресурсов k8s, мне было интересно, возможно ли создавать ресурсы Daemonset, используя kubectl
,
Я знаю, что это невозможно создать с помощью обычного kubectl create daemonset
по крайней мере на данный момент. И нет описания этого в документации. Но, может быть, есть способ сделать это по-другому?
Лучшее, что я могу сделать сейчас, - это сначала создать Deployment, как kubectl create deployment
и отредактируйте его выходной манифест. Есть варианты здесь?
9 ответов
CKA позволяет получить доступ к документации K8S. Таким образом, должна быть возможность получить образец YAML для различных ресурсов оттуда. Вот то, что для Daemonset из документации K8S.
Также не уверен, имеет ли среда сертификации доступ к ресурсам в пространстве имен системы kube. Если да, то используйте приведенную ниже команду, чтобы получить пример yaml для Daemonset.
kubectl get daemonsets kube-flannel-ds-amd64 -o yaml -n = kube-system> daemonset.yaml
Самый быстрый способ взлома - создать файл развертывания с помощью
kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml
Теперь замените строку kind: Deployment
с kind: DaemonSet
в nginx-ds.yaml и удалите строкуreplicas: 1
Однако следующая команда даст чистый манифест набора демонов, учитывая, что "apps/v1" - это 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.
Самый быстрый способ создать
kubectl создать развертывание nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml
Теперь замените строку kind: Deployment на kind: DaemonSet в nginx-ds.yaml и удалите реплики строки : 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
Это невозможно. По крайней мере, для Kubernetes 1.12. Единственный вариант - получить образец yaml-файла Daemonset и перейти оттуда.
Я использовал это с помощью следующих команд:
- Либо создайте Replicaset, либо разверните с помощью императивной команды Kubernetes
kubectl create deployment
Отредактируйте вид и замените DaemonSet, удалив в нем реплики и поля стратегии.
kubectl apply -f file.txt
Во время проверки CKA вам предоставляется доступ к документации Kubernetes для DaemonSets . Вы можете воспользоваться ссылкой и получить примеры yaml-файлов DaemonSet. Однако вы можете использовать то, что вы упомянули, изменить спецификацию развертывания на спецификацию DaemonSet. Вам нужно изменить тип на Daemonset , удалить стратегию, реплики и поля статуса . Это подойдет.
Вы можете воспользоваться архитектурой Kubernetes, чтобы получить определение DaemonSet из существующего кластера. Посмотри наkube-proxy
, который является сетевым компонентом, который запускается на каждом узле вашего кластера.
kube-proxy
развертывается как DaemonSet, поэтому вы можете извлечь его определение с помощью команды ниже.
$ kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.ds.yaml
Предупреждение!
Извлекая определение DaemonSet изkube-proxy
Быть в курсе, что:
- Вам придется аккуратно убирать!
- Вам нужно будет изменить apiVersion с
extensions/v1beta1
кapps/v1
Нет такой возможности для создания DaemonSet с помощью kubectl
, Но, тем не менее, вы можете подготовить файл Yaml с базовой конфигурацией для DaemonSet, например: 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 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 }'