用户指南
目录
Kompose 转换示例
Kompose 支持两个提供程序:OpenShift 和 Kubernetes。你可以使用全局选项 --provider
选择一个目标提供程序。如果没有指定提供程序,则默认设置为 Kubernetes。
Kubernetes
$ kompose --file compose.yaml convert
你也可以同时提供多个编排文件
$ kompose -f compose.yaml -f compose.yaml convert
如果提供了多个编排文件,则将合并配置。任何通用配置都将被后续文件覆盖。
你可以通过以下环境变量提供自己的编排文件
$ COMPOSE_FILE="compose.yaml alternative-compose.yaml" kompose convert
OpenShift
$ kompose --provider openshift --file compose.yaml convert
CLI 修改
在命令行中,你可以修改生成的 YAML 的输出。例如,使用替代控制器,如 副本控制器 对象、守护程序集 或 有状态集。
守护程序集示例
$ kompose convert --controller daemonSet
可以在 kompose convert --help
中找到这些选项的完整列表。
标签
kompose
支持 compose.yaml
文件中的 Kompose 特定标签,以便为你提供剩余的内容。
标签是一个重要的 kompose 概念,因为它允许你在不需要随后编辑 YAML 的情况下添加 Kubernetes 修改。例如,添加一个初始化容器或自定义就绪检查。
kompose.controller.port.expose
services:
web:
image: wordpress:latest
ports:
- '80:80'
labels:
kompose.controller.expose.port: true
kompose.controller.type
services:
web:
image: wordpress:latest
ports:
- '80:80'
labels:
kompose.controller.type: deployment
kompose.cronjob.backoff_limit
services:
cron-job:
image: busybox
labels:
kompose.cronjob.backoff_limit: 3
kompose.cronjob.concurrency_policy
services:
periodic-task:
image: busybox
labels:
kompose.cronjob.concurrency_policy: Forbid
kompose.cronjob.schedule
services:
cron-job:
image: busybox
labels:
kompose.cronjob.schedule: "*/5 * * * *"
kompose.hpa.cpu
services:
web:
image: nginx
labels:
kompose.hpa.cpu: 80
kompose.hpa.memory
services:
db:
image: mysql
labels:
kompose.hpa.memory: 512Mi
kompose.hpa.replicas.max
services:
api:
image: custom-api
labels:
kompose.hpa.replicas.max: 10
kompose.hpa.replicas.min
services:
api:
image: custom-api
labels:
kompose.hpa.replicas.min: 2
kompose.image-pull-policy
services:
example-service:
image: example-image
labels:
kompose.image-pull-policy: "IfNotPresent"
kompose.image-pull-secret
services:
private-service:
image: private-repo/image:tag
labels:
kompose.image-pull-secret: "my-private-registry-key"
kompose.init.containers.command
services:
init-service:
image: busybox
labels:
kompose.init.containers.command: ["echo", "Initializing..."]
kompose.init.containers.image
services:
init-service:
image: busybox
labels:
kompose.init.containers.image: busybox
kompose.init.containers.name
services:
init-service:
image: busybox
labels:
kompose.init.containers.name: "initial-setup"
kompose.security-context.fsgroup
services:
secured-service:
image: nginx
labels:
kompose.security-context.fsgroup: 2000
kompose.service.external-traffic-policy
services:
front-end:
image: quay.io/kompose/web
ports:
- 8080:8080
labels:
kompose.service.external-traffic-policy: local
kompose.service.expose
services:
web-app:
image: nginx
ports:
- 80:80
labels:
kompose.service.expose: "example.com"
kompose.service.expose.ingress-class-name
services:
web:
image: nginx
ports:
- 80:80
labels:
kompose.service.expose.ingress-class-name: "nginx"
kompose.service.expose.tls-secret
services:
web:
image: nginx
ports:
- 443:443
labels:
kompose.service.expose.tls-secret: "my-ssl-secret"
kompose.service.group
version: "3"
services:
nginx:
image: nginx
depends_on:
- logs
labels:
- kompose.service.group=sidecar
logs:
image: busybox
command: ["tail -f /var/log/nginx/access.log"]
labels:
- kompose.service.group=sidecar
kompose.service.healthcheck.liveness.http_get_path
services:
web:
image: custom-web
ports:
- "8080:8080"
labels:
kompose.service.healthcheck.liveness.http_get_path: /health
kompose.service.healthcheck.liveness.http_get_port
services:
web:
image: custom-web
ports:
- "8080:8080"
labels:
kompose.service.healthcheck.liveness.http_get_port: 8080
kompose.service.healthcheck.liveness.tcp_port
services:
db:
image: mysql
ports:
- "3306:3306"
labels:
kompose.service.healthcheck.liveness.tcp_port: 3306
kompose.service.healthcheck.readiness.disable
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.disable: true
kompose.service.healthcheck.readiness.http_get_path
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.http_get_path: /ready
kompose.service.healthcheck.readiness.http_get_port
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.http_get_port: 8081
kompose.service.healthcheck.readiness.interval
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.interval: 10s
kompose.service.healthcheck.readiness.retries
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.retries: 3
kompose.service.healthcheck.readiness.start_period
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.start_period: 30s
kompose.service.healthcheck.readiness.tcp_port
services:
db:
image: mysql
labels:
kompose.service.healthcheck.readiness.tcp_port: 3307
kompose.service.healthcheck.readiness.test
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.test: ["CMD", "curl", "-f", "https://127.0.0.1:8081/ready"]
kompose.service.healthcheck.readiness.timeout
services:
web:
image: custom-web
labels:
kompose.service.healthcheck.readiness.timeout: 5s
kompose.service.nodeport.port
services:
web:
image: nginx
ports:
- "30000:80"
labels:
kompose.service.nodeport.port: 30000
kompose.service.type
services:
web:
image: nginx
ports:
- "80:80"
labels:
kompose.service.type: nodeport
kompose.volume.size
services:
db:
image: postgres:10.1
labels:
kompose.volume.size: 1Gi
volumes:
- db-data:/var/lib/postgresql/data
kompose.volume.storage-class-name
services:
db:
image: postgres:10.1
labels:
kompose.volume.storage-class-name: custom-storage-class-name
volumes:
- db-data:/var/lib/postgresql/data
kompose.volume.sub-path
services:
pgadmin:
image: postgres
labels:
kompose.volume.sub-path: pg-data
kompose.volume.type
services:
db:
image: postgres
labels:
kompose.volume.type: persistentVolumeClaim
volumes:
- db-data:/var/lib/postgresql/data
重新启动策略
如果您想创建无控制器的普通 Pod,可以使用 Compose 的 restart
架构来定义它们。遵循下表以查看 restart
值所产生的结果。
compose restart |
创建的对象 | Pod restartPolicy |
---|---|---|
"" |
控制器对象 | Always |
always |
控制器对象 | Always |
unless-stopped |
控制器对象 | Always |
on-failure |
Pod / CronJob | OnFailure |
no |
Pod / CronJob | Never |
注意:控制器对象可以是 deployment
、replicationcontroller
等。
例如,pival
服务将在此处成为 pod。此容器会计算 pi
的值。
version: '2'
services:
pival:
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restart: "on-failure"
例如,pival
服务将在此处成为 Cron 作业。此容器会每分钟计算一次 pi
的值。
version: '2'
services:
pival:
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restart: "no"
labels:
kompose.cronjob.schedule: "* * * * *"
kompose.cronjob.concurrency_policy: "Forbid"
kompose.cronjob.backoff_limit: "0"
关于 Deployment 配置的警告
如果 Compose 文件为某个服务指定了卷,则 Deployment (Kubernetes) 或 DeploymentConfig (OpenShift) 策略将更改为“Recreate”,而不是“RollingUpdate”(默认)。这么做是为了避免多个服务实例同时访问一个卷。
如果 Compose 文件中包含服务名称(例如 web_service
或 web.service
),其中带有 _
或 .
,那么它将被替换为 -
,并且服务名称将相应地进行重命名(例如 web-service
)。Kompose 执行此操作是因为“Kubernetes”不允许对象名称中带有 _
。
请注意,更改服务名称可能会破坏一些 compose
文件。
构建并推送镜像
如果 Compose 文件有 build
或 build:context, build:dockerfile
键,当指定 --build
时,build 将会运行。
当指定 --push-image=true
时,Image 将推送到 docker.io(默认)。
通过指定 --push-image-registry
可以推送到自定义注册表,这将覆盖图像名称中的注册表。
注册表上的身份验证
在 docker login
之后,Kompose 使用文件 $DOCKER_CONFIG/config.json
、$HOME/.docker/config.json
和 $HOME/.dockercfg
中的 docker 身份验证。
这只适用于 Linux,但在使用 "credsStore": "osxkeychain"
时 macOS 将会失败。
然而,可以通过不使用 osxkeychain
作为 credsStore
来成功推送,以实现此目的。若要禁用 osxkeychain
- 从
config.json
文件中删除credsStore
,并再次docker login
。 - 对于某些 docker 桌面版本,有一个名为
安全地将 Docker 登录信息存储在 macOS 钥匙串中
的设置,应该取消对此设置的选中。然后根据需要重新启动 docker 桌面,并再次docker login
。
现在,config.json
应包含 base64 编码的密码,然后推送图像应该会成功。虽然可行,但并不安全!使用需谨慎。
对于 Windows,还有 credsStore
,即 wincred
。从技术上说,它会在认证中失败,如同 macOS 一样,但 你也可以尝试像 macOS 一样采用上述方法。
自定义构建和推送
如果您想自定义构建和推送程序,并使用除 Docker 以外的其他容器解决方案,Kompose 为您提供了这样的可能。您可以使用 --build-command
和 --push-command
标志来实现此目的。
例如:kompose -f convert --build-command 'whatever command --you-use' --push-command 'whatever command --you-use'