NAME¶
Podman-Generate-Kube-基于容器、Pod或卷生成Kubernetes YAML
SYNOPSIS¶
podman generate kube [options] container... | pod... | volume...
DESCRIPTION¶
podman generate kube 将从Podman容器、Pod或卷生成Kubernetes YAML(v1规范)。无论输入是容器还是Pod,Podman都会始终将规范作为Pod生成。输入可以是一个或多个容器、豆荚或卷名或ID的形式。
Podman Containers or Pods
卷根据两种不同的卷类型显示在生成的YAML中。绑定装载的卷将变为 主机路径 卷类型和命名卷变为 持久化卷声明 卷类型。生成 主机路径 卷类型将是三个子类型之一,具体取决于主机路径的状态: DirectoryOrCreate 当主机上不存在文件或目录时, 目录 当主机路径为目录时,或 File 当主机路径为文件时。的值 索赔名称 对于 持久化卷声明 是在Podman中注册的命名卷的名称。
通过对每种卷类型使用标准命名方案,可以避免卷之间潜在的名称冲突。这个 主机路径 卷类型根据主机上的路径命名,将正斜杠替换为连字符减去任何前导和尾随正斜杠。文件系统根目录的特殊情况, /
,翻译成这个名字 root
。此外,该名称后缀为 -host
要避免命名与冲突,请执行以下操作 持久化卷声明 音量。每个 持久化卷声明 卷类型使用其关联命名卷的名称,后缀为 -pvc
。
请注意,如果使用类型创建初始化容器 once
并且Pod已经启动,则init容器不会在生成的Kube YAML中显示为 once
类型初始化容器在运行后被删除。如果Pod仅已创建而未启动,则它将位于生成的Kube YAML中。使用类型创建的初始化容器 always
将始终在Kube YAML中生成,因为它们永远不会被删除,即使在运行到完成后也是如此。
Note :使用卷并为上的非特权和无根Podman容器生成Kubernetes YAML 支持SELinux的系统 ,必须完成以下选项之一:
将“Privileged:True”选项添加到Pod规范
添加
type: spc_t
在securityContext
seLinuxOptions
在Pod规范中通过CLI命令重新标记卷
chcon -t container_file_t -R <directory>
完成后,在Kubernetes集群中创建实例/容器时,将具有访问卷的正确权限。
请注意,生成的Kubernetes YAML文件可用于通过podman-play-Kube(1)重新运行部署。
OPTIONS¶
--filename , -f = 文件名¶
输出到给定文件,而不是STDOUT。如果该文件已经存在, generate kube
将拒绝替换它并返回错误。
--service , -s¶
除了Pods之外,还生成一个Kubernetes服务对象。用于为相应的Pod输出生成服务规范。具体地说,如果对象具有端口映射绑定,则服务规范将包括一个NodePort声明来公开服务。Podman在规范中分配了一个随机端口。
EXAMPLES¶
为名为的容器创建Kubernetes Pod YAML some-mariadb
。
$ sudo podman generate kube some-mariadb
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-0.11.2-dev
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: 2018-12-03T19:07:59Z
labels:
app: some-mariadb
name: some-mariadb-libpod
spec:
containers:
- command:
- docker-entrypoint.sh
- mysqld
env:
- name: HOSTNAME
- name: GOSU_VERSION
value: "1.10"
- name: GPG_KEYS
value: "199369E5404BD5FC7D2FE43BCBCB082A1BB943DB \t177F4010FE56CA3336300305F1656F24C74CD1D8
\t430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A \t4D1BB29D63D98E422B2113B19334A25F8507EFA5"
- name: MARIADB_MAJOR
value: "10.3"
- name: MARIADB_VERSION
value: 1:10.3.10+maria~bionic
- name: MYSQL_ROOT_PASSWORD
value: x
image: quay.io/baude/demodb:latest
name: some-mariadb
ports:
- containerPort: 3306
hostPort: 36533
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
tty: true
status: {}
使用目录为容器创建Kubernetes Pod YAML /home/user/my-data
在绑定装载在容器中的主机上 /volume
。
$ podman generate kube 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
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
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
status: {}
为具有命名卷的容器创建Kubernetes Pod YAML priceless-data
安装在容器中的位置 /volume
。
$ podman generate kube 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
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
volumeMounts:
- mountPath: /volume
name: priceless-data-pvc
restartPolicy: Never
volumes:
- name: priceless-data-pvc
persistentVolumeClaim:
claimName: priceless-data
status: {}
为名为的Pod创建Kubernetes Pod YAML demoweb
并包括一项服务。
$ sudo podman generate kube -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
resources: {}
tty: true
workingDir: /root/code
status: {}
---
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: {}
另请参阅¶
[podman(1)] , [podman-container(1)] , [podman-pod(1)] , [podman-play-kube(1)]
HISTORY¶
2018年12月,最初由布伦特·鲍德(Brent Baude)汇编(在redhat.com网站上bbaude)