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_tsecurityContext 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)