.nh .TH podman-kube-generate 1 .SH "نام (NAME)" podman-kube-generate \- تولید فایل YAML کوبرنتیز بر پایه کانتینرها، پادها یا حجم‌ها .SH "خلاصه دستور (SYNOPSIS)" \fBpodman kube generate\fP [\fIگزینه‌ها\fP] \fIکانتینر...\fP | \fIپاد...\fP | \fIحجم...\fP .SH "توضیحات (DESCRIPTION)" دستور \fBpodman kube generate\fP مشخصات YAML کوبرنتیز (مشخصات نسخه v1) را بر پایه کانتینرها، پادها یا حجم‌های پادمن تولید می‌کند. بدون در نظر گرفتن اینکه ورودی برای کانتینرها باشد یا پادها، پادمن به‌طور پیش‌فرض مشخصات را در قالب یک پاد (Pod) تولید می‌کند. ورودی می‌تواند به شکل یک یا چند نام یا شناسه از کانتینرها، پادها یا حجم‌ها باشد. .PP \fBکانتینرها یا پادهای پادمن\fR .PP حجم‌ها در YAML تولیدشده بر اساس دو نوع مختلف حجم ظاهر می‌شوند. حجم‌های متصل‌شده از نوع بایند (Bind-mounted volumes) به نوع حجم \fIhostPath\fP تبدیل می‌شوند و حجم‌های نام‌دار (named volumes) به نوع حجم \fIpersistentVolumeClaim\fP تبدیل می‌گردند. نوع حجم‌های \fIhostPath\fP تولیدشده بسته به وضعیت مسیر روی میزبان یکی از سه زیرنوع خواهند بود: \fIDirectoryOrCreate\fP هنگامی که هیچ فایل یا دایرکتوری روی میزبان وجود ندارد، \fIDirectory\fP هنگامی که مسیر میزبان یک دایرکتوری است، یا \fIFile\fP هنگامی که مسیر میزبان یک فایل است. مقدار \fIclaimName\fP برای یک \fIpersistentVolumeClaim\fP همان نام حجم نام‌دار ثبت‌شده در پادمن است. .PP با استفاده از یک طرح نام‌گذاری استاندارد برای هر نوع حجم، از تداخل بالقوه نام‌ها میان حجم‌ها جلوگیری می‌شود. نوع حجم‌های \fIhostPath\fP بر اساس مسیر روی دستگاه میزبان نام‌گذاری می‌شوند، که در آن اسلش‌ها، بدون در نظر گرفتن اسلش‌های ابتدا و انتها، با خط تیره (hyphen) جایگزین می‌شوند. حالت خاص ریشه فایل‌سیستم، \fB/\fR، به نام \fBroot\fR ترجمه می‌شود. علاوه بر این، برای جلوگیری از تداخل نام با حجم‌های \fIpersistentVolumeClaim\fP، پسوند \fB-host\fR به نام افزوده می‌شود. هر نوع حجم \fIpersistentVolumeClaim\fP از نام حجم نام‌دار مرتبط با خود همراه با پسوند \fB-pvc\fR استفاده می‌کند. .PP توجه داشته باشید که اگر یک کانتینر راه‌انداز (init container) با نوع \fBonce\fR ایجاد شده و پاد شروع به کار کرده باشد، در YAML کوبرنتیز تولیدشده نشان داده نمی‌شود؛ چرا که کانتینرهای راه‌انداز از نوع \fBonce\fR پس از اجرا حذف می‌شوند. اگر پاد تنها ایجاد شده و هنوز راه‌اندازی نشده باشد، در YAML تولیدشده حضور خواهد داشت. کانتینرهای راه‌انداز ایجادشده با نوع \fBalways\fR همواره در YAML کوبرنتیز تولید می‌شوند، زیرا حتی پس از اتمام موفقیت‌آمیز اجرا نیز هرگز حذف نمی‌گردند. .PP \fIنکته\fP: هنگام استفاده از حجم‌ها و تولید یک YAML کوبرنتیز برای کانتینر بدون‌ریشه (rootless) و بدون‌امتیاز پادمن روی \fBسیستمی با SELinux فعال\fP، یکی از اقدامات زیر باید انجام شود: * افزودن گزینه "privileged: true" به مشخصات پاد (pod spec) * افزودن \fBtype: spc_t\fR در زیر \fBsecurityContext\fR \fBseLinuxOptions\fR در مشخصات پاد * برچسب‌گذاری مجدد حجم از طریق دستور خط فرمان \fBchcon -t container_file_t -R \fR .PP پس از انجام این کار، هنگام ایجاد پاد/کانتینر در کلاستر کوبرنتیز، دسترسی‌های صحیح برای استفاده از حجم برقرار خواهد بود. .PP توجه داشته باشید که فایل YAML کوبرنتیز تولیدشده می‌تواند برای اجرای مجدد استقرار از طریق podman-play-kube(1) استفاده شود. .PP توجه داشته باشید که اگر پاد در حال تولید با فلگ \fB--infra-name\fP ایجاد شده باشد، در YAML کوبرنتیز تولیدشده برچسب حاشیه‌ای \fBio.podman.annotations.infra.name\fP تنظیم خواهد شد که مقدار آن همان نام کانتینر زیرساختی تعیین‌شده توسط کاربر است. .PP توجه داشته باشید که هر دو نوع Deployment و DaemonSet فقط می‌توانند دارای \fBrestartPolicy\fR با مقدار \fBAlways\fR باشند. .PP توجه داشته باشید که Job فقط می‌تواند دارای \fBrestartPolicy\fR با مقدار \fBOnFailure\fR یا \fBNever\fR باشد. به‌طور پیش‌فرض، پادمن هنگام تولید YAML کوبرنتیز با دستور \fBkube generate\fR آن را روی \fBNever\fR تنظیم می‌کند. .SH "گزینه‌ها (OPTIONS)" .SS \fB--filename\fP, \fB-f\fP=\fIfilename\fP خروجی را به‌جای خروجی استاندارد (STDOUT) در فایل ارائه‌شده می‌نویسد. اگر فایل از قبل موجود باشد، \fBkube generate\fR از جایگزینی آن خودداری کرده و یک خطا برمی‌گرداند. .SS \fB--podman-only\fP افزودن حاشیه‌نویسی‌های رزروشدهٔ مخصوص پادمن در فایل YAML تولیدشده (توسط کوبرنتیز قابل‌استفاده نیست). .SS \fB--replicas\fP, \fB-r\fP=\fIreplica count\fP مقداری که هنگام تولید نوع \fBDeployment\fP برای \fBreplicas\fR (شمار رونوشت‌ها) تنظیم می‌شود. نکته: این مورد فقط همراه با گزینهٔ \fB--type=deployment\fR قابل تنظیم است. .SS \fB--service\fP, \fB-s\fP تولید یک شیء سرویس کوبرنتیز علاوه بر پادها. برای تولید مشخصات Service برای خروجی Pod متناظر استفاده می‌شود. به‌ویژه اگر شیء دارای نگاشت پورت (portmap bindings) باشد، مشخصات سرویس شامل یک اعلان NodePort برای در دسترس قرار دادن سرویس خواهد بود. پورت تصادفی توسط پادمن در مشخصات اختصاص داده می‌شود. .SS \fB--type\fP, \fB-t\fP=\fIpod\fP | \fIdeployment\fP | \fIdaemonset\fP | \fIjob\fP نوع (kind) کوبرنتیز جهت تولید در فایل YAML. در حال حاضر تنها مشخصات پشتیبانی‌شدهٔ کوبرنتیز شامل \fBPod\fR، \fBDeployment\fR، \fBJob\fR و \fBDaemonSet\fR هستند. به‌طور پیش‌فرض، مشخصات \fBPod\fR تولید می‌شود. .SH "مثال‌ها (EXAMPLES)" تولید YAML پاد کوبرنتیز برای کانتینر مشخص‌شده: .EX $ 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 .EE .PP تولید YAML نوع Deployment کوبرنتیز با ۳ رونوشت برای کانتینر مشخص‌شده: .EX $ 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 .EE .PP تولید YAML پاد کوبرنتیز برای کانتینر مشخص‌شده با دایرکتوری میزبان \fB/home/user/my-data\fR که به‌صورت بایند روی مسیر \fB/volume\fR کانتینر متصل شده است: .EX $ 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 .EE .PP تولید YAML پاد کوبرنتیز برای کانتینر مشخص‌شده با حجم نام‌دار \fBpriceless-data\fR که روی مسیر \fB/volume\fR کانتینر متصل شده است: .EX $ 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 .EE .PP تولید YAML پاد کوبرنتیز برای پاد مشخص‌شده و گنجاندن یک سرویس: .EX $ 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: {} .EE .SH "همچنین ببینید (SEE ALSO)" \fBpodman(1)\fP, \fBpodman-container(1)\fP, \fBpodman-pod(1)\fP, \fBpodman-kube-play(1)\fP, \fBpodman-kube-down(1)\fP .SH "تاریخچه (HISTORY)" دسامبر ۲۰۱۸، در ابتدا توسط Brent Baude (bbaude at redhat dot com) گردآوری شد