Создать 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 и перейти оттуда.

Я использовал это с помощью следующих команд:

  1. Либо создайте Replicaset, либо разверните с помощью императивной команды Kubernetes

kubectl create deployment --image = --dry-run -o yaml> file.txt

  1. Отредактируйте вид и замените DaemonSet, удалив в нем реплики и поля стратегии.

  2. 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 Быть в курсе, что:

  1. Вам придется аккуратно убирать!
  2. Вам нужно будет изменить 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 }'
Другие вопросы по тегам