Когда кто-то только начинается с 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»