| podman-kube-generate(1) | General Commands Manual | podman-kube-generate(1) |
نام (NAME)
podman-kube-generate - تولید فایل YAML کوبرنتیز بر پایه کانتینرها، پادها یا حجمها
خلاصه دستور (SYNOPSIS)
podman kube generate [گزینهها] کانتینر... | پاد... | حجم...
توضیحات (DESCRIPTION)
دستور podman kube generate مشخصات YAML کوبرنتیز (مشخصات نسخه v1) را بر پایه کانتینرها، پادها یا حجمهای پادمن تولید میکند. بدون در نظر گرفتن اینکه ورودی برای کانتینرها باشد یا پادها، پادمن بهطور پیشفرض مشخصات را در قالب یک پاد (Pod) تولید میکند. ورودی میتواند به شکل یک یا چند نام یا شناسه از کانتینرها، پادها یا حجمها باشد.
کانتینرها یا پادهای پادمن
حجمها در YAML تولیدشده بر اساس دو نوع مختلف حجم ظاهر میشوند. حجمهای متصلشده از نوع بایند (Bind-mounted volumes) به نوع حجم hostPath تبدیل میشوند و حجمهای نامدار (named volumes) به نوع حجم persistentVolumeClaim تبدیل میگردند. نوع حجمهای hostPath تولیدشده بسته به وضعیت مسیر روی میزبان یکی از سه زیرنوع خواهند بود: DirectoryOrCreate هنگامی که هیچ فایل یا دایرکتوری روی میزبان وجود ندارد، Directory هنگامی که مسیر میزبان یک دایرکتوری است، یا File هنگامی که مسیر میزبان یک فایل است. مقدار claimName برای یک persistentVolumeClaim همان نام حجم نامدار ثبتشده در پادمن است.
با استفاده از یک طرح نامگذاری استاندارد برای هر نوع حجم، از تداخل بالقوه نامها میان حجمها جلوگیری میشود. نوع حجمهای hostPath بر اساس مسیر روی دستگاه میزبان نامگذاری میشوند، که در آن اسلشها، بدون در نظر گرفتن اسلشهای ابتدا و انتها، با خط تیره (hyphen) جایگزین میشوند. حالت خاص ریشه فایلسیستم، /، به نام root ترجمه میشود. علاوه بر این، برای جلوگیری از تداخل نام با حجمهای persistentVolumeClaim، پسوند -host به نام افزوده میشود. هر نوع حجم persistentVolumeClaim از نام حجم نامدار مرتبط با خود همراه با پسوند -pvc استفاده میکند.
توجه داشته باشید که اگر یک کانتینر راهانداز (init container) با نوع once ایجاد شده و پاد شروع به کار کرده باشد، در YAML کوبرنتیز تولیدشده نشان داده نمیشود؛ چرا که کانتینرهای راهانداز از نوع once پس از اجرا حذف میشوند. اگر پاد تنها ایجاد شده و هنوز راهاندازی نشده باشد، در YAML تولیدشده حضور خواهد داشت. کانتینرهای راهانداز ایجادشده با نوع always همواره در YAML کوبرنتیز تولید میشوند، زیرا حتی پس از اتمام موفقیتآمیز اجرا نیز هرگز حذف نمیگردند.
نکته:
هنگام
استفاده از
حجمها و
تولید یک YAML
کوبرنتیز
برای
کانتینر
بدونریشه
(rootless) و
بدونامتیاز
پادمن روی
سیستمی با SELinux
فعال، یکی
از اقدامات
زیر باید
انجام شود:
* افزودن
گزینه "privileged: true"
به مشخصات
پاد (pod spec)
* افزودن type: spc_t
در زیر securityContext
seLinuxOptions در
مشخصات پاد
*
برچسبگذاری
مجدد حجم از
طریق دستور
خط فرمان chcon -t
container_file_t -R <directory>
پس از انجام این کار، هنگام ایجاد پاد/کانتینر در کلاستر کوبرنتیز، دسترسیهای صحیح برای استفاده از حجم برقرار خواهد بود.
توجه داشته باشید که فایل YAML کوبرنتیز تولیدشده میتواند برای اجرای مجدد استقرار از طریق podman-play-kube(1) استفاده شود.
توجه داشته باشید که اگر پاد در حال تولید با فلگ --infra-name ایجاد شده باشد، در YAML کوبرنتیز تولیدشده برچسب حاشیهای io.podman.annotations.infra.name تنظیم خواهد شد که مقدار آن همان نام کانتینر زیرساختی تعیینشده توسط کاربر است.
توجه داشته باشید که هر دو نوع Deployment و DaemonSet فقط میتوانند دارای restartPolicy با مقدار Always باشند.
توجه داشته باشید که Job فقط میتواند دارای restartPolicy با مقدار OnFailure یا Never باشد. بهطور پیشفرض، پادمن هنگام تولید YAML کوبرنتیز با دستور kube generate آن را روی Never تنظیم میکند.
گزینهها (OPTIONS)
--filename, -f=filename
خروجی را بهجای خروجی استاندارد (STDOUT) در فایل ارائهشده مینویسد. اگر فایل از قبل موجود باشد، kube generate از جایگزینی آن خودداری کرده و یک خطا برمیگرداند.
--podman-only
افزودن حاشیهنویسیهای رزروشدهٔ مخصوص پادمن در فایل YAML تولیدشده (توسط کوبرنتیز قابلاستفاده نیست).
--replicas, -r=replica count
مقداری که هنگام تولید نوع Deployment برای replicas (شمار رونوشتها) تنظیم میشود. نکته: این مورد فقط همراه با گزینهٔ --type=deployment قابل تنظیم است.
--service, -s
تولید یک شیء سرویس کوبرنتیز علاوه بر پادها. برای تولید مشخصات Service برای خروجی Pod متناظر استفاده میشود. بهویژه اگر شیء دارای نگاشت پورت (portmap bindings) باشد، مشخصات سرویس شامل یک اعلان NodePort برای در دسترس قرار دادن سرویس خواهد بود. پورت تصادفی توسط پادمن در مشخصات اختصاص داده میشود.
--type, -t=pod | deployment | daemonset | job
نوع (kind) کوبرنتیز جهت تولید در فایل YAML. در حال حاضر تنها مشخصات پشتیبانیشدهٔ کوبرنتیز شامل Pod، Deployment، Job و DaemonSet هستند. بهطور پیشفرض، مشخصات Pod تولید میشود.
مثالها (EXAMPLES)
تولید YAML پاد کوبرنتیز برای کانتینر مشخصشده:
$ podman kube generate some-mariadb
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-4.8.2
# NOTE: If you generated this yaml from an unprivileged and rootless podman container on an SELinux
# enabled system, check the podman generate kube man page for steps to follow to ensure that your pod/container
# has the right permissions to access the volumes added.
---
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2024-01-09T02:24:55Z"
labels:
app: some-mariadb-pod
name: some-mariadb-pod
spec:
containers:
- args:
- mariadbd
env:
- name: MARIADB_ROOT_PASSWORD
value: x
image: docker.io/library/mariadb:10.11
name: some-mariadb
ports:
- containerPort: 3306
hostPort: 34891
volumeMounts:
- mountPath: /var/lib/mysql
name: mariadb_data-pvc
volumes:
- name: mariadb_data-pvc
persistentVolumeClaim:
claimName: mariadb_data
تولید YAML نوع Deployment کوبرنتیز با ۳ رونوشت برای کانتینر مشخصشده:
$ podman kube generate --type deployment --replicas 3 dep-ctr
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-4.5.0-dev
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: "2023-03-27T20:45:08Z"
labels:
app: dep-ctr-pod
name: dep-ctr-pod-deployment
spec:
replicas: 3
selector:
matchLabels:
app: dep-ctr-pod
template:
metadata:
annotations:
io.podman.annotations.ulimit: nofile=524288:524288,nproc=127332:127332
creationTimestamp: "2023-03-27T20:45:08Z"
labels:
app: dep-ctr-pod
name: dep-ctr-pod
spec:
containers:
- command:
- top
image: docker.io/library/alpine:latest
name: dep-ctr
تولید YAML پاد کوبرنتیز برای کانتینر مشخصشده با دایرکتوری میزبان /home/user/my-data که بهصورت بایند روی مسیر /volume کانتینر متصل شده است:
$ podman kube generate my-container-with-bind-mounted-data
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.1.0-dev
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2021-03-18T16:26:08Z"
labels:
app: my-container-with-bind-mounted-data
name: my-container-with-bind-mounted-data
spec:
containers:
- command:
- /bin/sh
image: docker.io/library/alpine:latest
name: test-bind-mount
volumeMounts:
- mountPath: /volume
name: home-user-my-data-host
restartPolicy: Never
volumes:
- hostPath:
path: /home/user/my-data
type: Directory
name: home-user-my-data-host
تولید YAML پاد کوبرنتیز برای کانتینر مشخصشده با حجم نامدار priceless-data که روی مسیر /volume کانتینر متصل شده است:
$ podman kube generate my-container-using-priceless-data
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.1.0-dev
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2021-03-18T16:26:08Z"
labels:
app: my-container-using-priceless-data
name: my-container-using-priceless-data
spec:
containers:
- command:
- /bin/sh
image: docker.io/library/alpine:latest
name: test-bind-mount
volumeMounts:
- mountPath: /volume
name: priceless-data-pvc
restartPolicy: Never
volumes:
- name: priceless-data-pvc
persistentVolumeClaim:
claimName: priceless-data
تولید YAML پاد کوبرنتیز برای پاد مشخصشده و گنجاندن یک سرویس:
$ sudo podman kube generate -s demoweb
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-0.12.2-dev
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: 2018-12-18T15:16:06Z
labels:
app: demoweb
name: demoweb-libpod
spec:
containers:
- command:
- python3
- /root/code/graph.py
image: quay.io/baude/demoweb:latest
name: practicalarchimedes
tty: true
workingDir: /root/code
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2018-12-18T15:16:06Z
labels:
app: demoweb
name: demoweb-libpod
spec:
ports:
- name: "8050"
nodePort: 31269
port: 8050
targetPort: 0
selector:
app: demoweb
type: NodePort
status:
loadBalancer: {}
همچنین ببینید (SEE ALSO)
podman(1), podman-container(1), podman-pod(1), podman-kube-play(1), podman-kube-down(1)
تاریخچه (HISTORY)
دسامبر ۲۰۱۸، در ابتدا توسط Brent Baude (bbaude at redhat dot com) گردآوری شد