Когда кто-то только начинается с Kubernetes, написание файлов манифеста может быть немного сложно. В этом посте я постараюсь дать несколько советов в написании файлов манифеста легко.
Подвигание
Используйте Генератор создавать стручки. Убедитесь, что указанные записи синтаксически правильные, выполняя сухой пробег.
kubectl run --generator=run-pod/v1--image --dry-run
Сохраните определение POD в файл YAML для будущих изменений, а также ссылки
kubectl run --generator=run-pod/v1--image --dry-run -o yaml > pod.yaml
Пример:
slashpai@pai ~ (⎈ |kind-pai:default) kubectl run --generator=run-pod/v1 nginx-pod --image nginx --dry-run pod/nginx-pod created (dry run) slashpai@pai ~ (⎈ |kind-pai:default) kubectl run --generator=run-pod/v1 nginx-pod --image nginx --dry-run -o yaml > pod.yaml slashpai@pai ~ (⎈ |kind-pai:default) cat pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: nginx-pod name: nginx-pod spec: containers: - image: nginx name: nginx-pod resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {} slashpai@pai ~ (⎈ |kind-pai:default)
Развертывание
Генератор для развертывания устарел, так что следующим образом помогает. Проверьте, если заданы записи синтаксически правильные, делая сухой пробег
kubectl create deployment--image --dry-run
Сохраните определение развертывания в файл YAML для будущих изменений, а также ссылки
kubectl create deployment--image --dry-run -o yaml > deployment.yaml
Пример:
slashpai@pai ~ (⎈ |kind-pai:default) kubectl create deployment nginx-deployment --image nginx --dry-run deployment.apps/nginx-deployment created (dry run) slashpai@pai ~ (⎈ |kind-pai:default) kubectl create deployment nginx-deployment --image nginx --dry-run -o yaml > deployment.yaml slashpai@pai ~ (⎈ |kind-pai:default) cat deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx-deployment name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx-deployment strategy: {} template: metadata: creationTimestamp: null labels: app: nginx-deployment spec: containers: - image: nginx name: nginx resources: {} status: {} slashpai@pai ~ (⎈ |kind-pai:default)
Реплизет
Нет прямого способа, который я мог найти, чтобы создать это из Kubectl. Я нашел этот трюк, хотя, пока я не смогу найти лучший путь. Используйте так же, как создать развертывание и модифицировать добрый
Чтобы решить в файле YAML и удалить поля, специфичные для развертывания. Я нашел это с пробным и ошибкой, так что это файл diff.
slashpai@pai ~ (⎈ |kind-pai:default) diff deployment.yaml replicaset.yaml 2c2 < kind: Deployment --- > kind: ReplicaSet 13d12 < strategy: {} 24c23 < status: {} --- >
Я удалил стратегию поля, а также статус из реплизета .yaml. При создании файла репликета так, дайте имя развертывания суффикс, такую как реплиз вместо развертывания. Я не сделал это в этом примере, так как я хотел показать, какие поля я точно нужно изменить.
Configmap.
Даже если в карте конфигурации есть более одной записи, просто добавьте один и затем добавьте остальное в файле Mainest непосредственно, чтобы вы могли сэкономить время в добавлении одного по одному в командной строке. Проверьте первый синтаксис мудрым правильным использованием сухого прогона.
kubectl create configmap--from-literal key=value --dry-run
Сохраните определение развертывания в файл YAML для будущих изменений, а также ссылки
kubectl create configmap--from-literal key=value --dry-run -o yaml > configmap.yaml
Пример:
slashpai@pai ~ (⎈ |kind-pai:default) kubectl create configmap mongo-config --from-literal user_id=mongo --dry-run configmap/mongo created (dry run) slashpai@pai ~ (⎈ |kind-pai:default) kubectl create configmap mongo-config --from-literal user_id=mongo --dry-run -o yaml > configmap.yaml slashpai@pai ~ (⎈ |kind-pai:default) cat configmap.yaml apiVersion: v1 data: user_id: mongo kind: ConfigMap metadata: creationTimestamp: null name: mongo
Возможно, вы захотите переместить раздел данных ниже метаданных, поскольку именно здесь мы размещаем это нормально.
Добавление большего количества записей в файле манифеста
Теперь вы должны иметь представление о том, как создавать файлы манифеста для большинства используемых объектов Kubernetes. Вы можете настроить так, чтобы другие объекты не упомянули. Поля в файле манифеста созданы таким образом, недостаточно, если у вас есть конкретные потребности или необходимость добавления большей поля.
Давайте посмотрим, как мы можем добавить больше полей в файле определения POD. Например, вы хотите ввести переменную среды в контейнер из конфигурации. Поскольку мы знаем, что информация, связанная с контейнерами, находится внутри спецификации POD, мы можем использовать Kubectl объяснить POD.Spec.containers
чтобы получить точное поле. Посмотрите, как это сделано ниже.
slashpai@pai ~ (⎈ |kind-pai:default) kubectl explain pod.spec.containers|grep env container's environment. If a variable cannot be resolved, the reference in are expanded using the container's environment. If a variable cannot be env <[]Object> List of environment variables to set in the container. Cannot be updated. envFrom <[]Object> List of sources to populate environment variables in the container. The
Я связался с ENV, так как я знаю, поле начинается срица. Если вы не знаете поле, вам нужно будет прокрутить вывод объяснения и выяснить это.
От этого я узнал, что это Engram
поле, которое нам нужно использовать configmap И это тип списка (важно отметить тип). Мы можем проверить поля, которые находятся под предсказание
похоже, как выше. Но если нам интересно только узнать поля без его описания, просто добавьте рекурсивный
флаг
slashpai@pai ~ (⎈ |kind-pai:default) kubectl explain pod.spec.containers.envFrom --recursive KIND: Pod VERSION: v1 RESOURCE: envFrom <[]Object> DESCRIPTION: List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated. EnvFromSource represents the source of a set of ConfigMaps FIELDS: configMapRef
Которые просверлили конфигурацию, чтобы использовать, как указано ниже в разделе POD. Обратите внимание на тип для Engram
, который мы поняли, чтобы быть типом списка.
spec: containers: - name: mongo image: mongo envFrom: - configMapRef: name: mongo-config
Конечно, вы можете пойти в документацию по Kubernetes и получить эту информацию. Но я нашел, что это более легче, так как я не люблю оставлять свой терминал так часто.
Я надеюсь, что это поможет вам с легкостью создавать файлы манифеста. Спасибо, за то что прочитали эту статью.
Оригинал: «https://dev.to/slashpai/quickly-creating-kubernetes-manifest-files-using-kubectl-2khj»