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 پس از انجام این کار، هنگام ایجاد پاد/کانتینر در کلاستر کوبرنتیز، دسترسی‌های صحیح برای استفاده از حجم برقرار خواهد بود. توجه داشته باشید که فایل 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) گردآوری شد podman-kube-generate(1)