Swarm标签名 Swarm标签含义 对应 Kubernetes 配置方案 Swarm 配置示例 Kubernetes 配置示例 如何迁移
name

service 名称

无特殊作用,可忽略

Kubernetes 不支持,迁移忽略 无法迁移
image 容器镜像 image标签 kompose 自动迁移
ports 容器端口映射 containerPort标签若有对外访问诉求,则需要自己配置 NodePort kompose 自动迁移
environment 容器环境变量 env标签 kompose 自动迁移
volumes 挂载宿主机目录或存储卷

volumeMounts标签

volumes标签

nodes nodes

详细参见auth-service-deployment.yaml 配置

kompose 自动迁移
cap_add/cap_drop 增加或移除容器对内核的修改权限 securityContext:capabilities标签 nodes nodes

详细参见 auth-service-deployment.yaml配置

kompose 自动迁移
privileged: true

使用该参数,container内的root拥有真正的root权限。 否则,container内的root只是外部的一个普通用户权限。

privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许您在docker容器中启动docker容器。

securityContext:privileged标签 nodes nodes

详细参见 auth-service-deployment.yaml配置

kompose 自动迁移
mem_limit 指定容器对内存资源限制 resource:request/limits标签 nodes nodes

详细参见config-deployment.yaml 配置

kompose 自动迁移
cpu_shares 指定容器对cpu资源限制 resource:request/limits标签 nodes nodes

详细参见config-deployment.yaml 配置

kompose 自动迁移
kernel_memory docker run 参数 Kubernetes 不支持,迁移忽略 无法迁移
memswap_reservation docker run 参数 Kubernetes 不支持,迁移忽略 无法迁移
memswap_limit docker run 参数 Kubernetes 不支持,迁移忽略 无法迁移
shm_size docker run 参数 Kubernetes 不支持,迁移忽略 无法迁移
oom-kill-disable 设置是否禁止 OOM Killer, 和docker run 命令中的--oom-kill-disable 参数语义一致。 Kubernetes 不支持,迁移忽略 无法迁移
发布类标签列表
restart 容器重启策略 restartPolicy标签 kompose 自动迁移
aliyun.latest_image 是否拉取最新镜像 imagePullPolicy标签 aliyun.latest_image: true nodes

详细参见config-deployment.yaml 配置

手动迁移 :

kompose 转换后,修改该应用对应资源文件*-deployment.yaml,添加 imagePullPolicy 配置。如果不填写,默认策略是always

depends_on 设置服务的依赖关系。 利用init container,liveness/readiness探针等技术实现服务健康检查,依赖检查等功能;详细参见解决服务依赖 依赖业务实现
aliyun.depends 设置服务的依赖关系。 利用init container,liveness/readiness探针等技术实现服务健康检查,依赖检查等功能;详细参见解决服务依赖 依赖业务实现
environment: affinity:service!=db 设置服务的部署约束条件。参见服务部署约束(affinity:service) 在 Kubernetes 中可以通过affinity.nodeAffinity affinity.podAffinity affinity.podAntiAffinity标签做Node 或 Pod 亲和性配置,参见Affinity and anti-affinity 依赖业务实现
environment: constraint:group==1 表示在所有带有group:1标签的节点上部署 在Kubernetes 可以通过nodeSelector来做Node过滤,参见nodeSelector nodes nodes

详细参见auth-mongodb-deployment.yaml 配置

手动迁移:

kompose 转换后,修改该应用对应资源文件*-deployment.yaml,添加 nodeSelector 配置。

aliyun.global 设置该服务为全局服务。 通过DaemonSet 类型应用支持,创建方式,参见DaemonSet nodes nodes

详细参见logtail2-daemonset.yaml 配置

kompose 自动迁移+手动修复

手动修复:

kompose转换后,需要删除资源文件中的 status 章节(用来记录中间状态),才能部署成功。

aliyun.scale 设置该服务的容器数量,横向扩展服务。 replicas标签 aliyun.scale: '10' replicas: 10 kompose 自动迁移
aliyun.rolling_updates 是否开启服务滚动更新。 strategy.type.RollingUpdate标签,参见Strategy nodes nodes

参见config-deployment.yaml 配置

手动迁移:

kompose转换后,需要手动配置滚动更新策略。

aliyun.rolling_updates.parallelism 每次并行更新的容器数量 maxUnavailable标签,参见Strategy

手动迁移:

kompose转换后,需要手动配置滚动更新策略。

aliyun.auto_scaling.* 容器自动伸缩,根据服务的容器资源占用情况自动调整容器数量。参见容器自动伸缩 无法简单做标签映射,阿里云容器服务支持在控制台界面上快速创建支持HPA的应用,实现容器资源的弹性伸缩。参见使用HPA弹性伸缩容器 nodes nodes

手动迁移:

部署Kubernetes 资源文件后,在控制台配置。

aliyun.probe.cmd 健康检查执行的检查 Shell 命令,参见probe livenessProbe 标签 nodes nodes

详细参见config-deployment.yaml 配置

kompose 自动迁移
aliyun.probe.initial_delay_seconds 在容器启动后延迟几秒开始健康检查,参见probe livenessProbe 标签
说明
  • 在 Swarm 里面健康检查只是用来表示容器状态,当并不会影响其对外提供服务。
  • 但在 Kubernetes 中,如果livenessProbe检查失败,则Kubernetes 会强制重启容器,所以延迟该标签的值一定要设置合理,否则会导致 Kubernetes 不断重启容器,导致服务不可用
kompose自动迁移
aliyun.probe.timeout_seconds 健康检查的超时时间,参见probe livenessProbe 标签 kompose 自动迁移
aliyun.probe.url HTTP、TCP 请求的 URL,参见probe livenessProbe 标签 nodes nodes

详细参见gateway-deployment.yaml 配置

kompose 自动迁移
extra_hosts 添加容器 Host 文件绑定配置 对应 Kubernetes 的hostAliases配置,参见Adding Additional Entries with HostAliases nodes nodes

详细参见logtail2-daemonset.yaml 配置

手动迁移:

kompose 转换后,修改该应用对应资源文件*-deployment.yaml,添加 hostAliases 配置。

entrypoint 覆盖默认入口点 command 标签 nodes nodes

详细参见 auth-service-deployment.yaml配置

kompose 自动迁移
command 重写默认命令 args 标签 nodes nodes

详细参见 auth-service-deployment.yaml配置

kompose 自动迁移
网络配置类标签
net V1 版compose 文件格式,设置网络模式,同 docker 命令行参数--net;参见net 部分值,可以直接转换;部分值在 Kubernetes 不支持定制。其中:net: "host"可直接转换为hostNetwork: true;其余值在 Kubernetes 里面不支持。参见Host namespaces nodes nodes

详细参见logtail2-daemonset.yaml 配置

手动迁移:

kompose 转换后,手动修改 Kubernetes 资源文件,添加hostNetwork配置。

aliyun.routing.port_
  • Swarm 简单路由,用于设置该服务的访问域名并支持多域名设置,参见routing
  • Swarm 简单路由,当设置了.local后缀域名时,仅用于集群内服务间路由和负载均衡,参见集群内服务间路由和负载均衡
对应Kubernetes ingress,但 kompose 工具支持部分转换,但转换过程只支持转换第一个域名,后续域名规则需人工添加,且针对测试域名需要人工替换。参见Ingress 支持 nodes nodes

详细参见 gateway-ingress.yaml配置

kompose 自动迁移+手动修复

手动修复:
  • 普通域名:kompose转换后,需要手动修改 Kubernetes 资源文件,找到Kubernetes 对应ingress资源文件*-ingress.yaml
    • 将其中的host: your-cluster-id.alicontainer.com修改成对应Kubernetes 集群的测试域名,其中,k8s-piggymetrics-cluster示例的测试域名为*.c7f537c92438f415b943e7c2f8ca30b3b.cn-zhangjiakou.alicontainer.com;将其替换到各个ingress文件的.your-cluster-id.alicontainer.com字符串。
    • 针对分号;后面的第二个域名,需要自己在 ingress文件里面添加rule规则。
  • .local 域名:
    • 部署Kubernetes 文件后完成。
    • 手动到控制台创建 Service。如果是.local域名,在 Swarm 里面只有集群内可以访问且不用带端口;而Kubernetes Service 名只支持小写和中划线-,不支持.local 这类带.字符的服务名,在迁移 Kubernetes 时,只能修改应用代码适配。
aliyun.routing.session_sticky 设置 routing 在做请求路由的时候,是否保持 session sticky,即会话保持。
说明 此标签必须和 routing 配合使用,单独使用无效。
Kubernetes 不支持,迁移忽略 无法迁移
hostname 可用作跨Node容器间访问(基于DNS+LB),常用于跨服务访问。 转换成service的方式,实现跨容器访问;参见创建服务 nodes 通过控制台创建一个同名(标注 1)的 service 用于服务访问,服务端口为容器端口nodes
手动迁移
  1. 先部署Kubernetes 资源文件。
  2. 然后从控制台界面创建Service(cluster IP)。由于在Swarm 编排文件里面不知道容器对应端口,因此无法通过 kompose工具自动转换。
说明 由于 Kubernetes Service 名只支持小写和中划线-,如果 hostname、links、external_links等带有其它字符如.local 这类带.字符的,迁移 Kubernetes 时,只能修改应用代码适配。
links
  1. 通过服务名或别名访问跨主机容器组。
  2. 跟depends on类似,决定启动顺序。
  1. 基于服务名和别名,分别创建service 的方式,实现跨容器访问;参见创建服务
  2. 启动顺序依赖,需要根据业务特点处理。
nodes 通过控制台分别创建一个同名的 service 用于服务访问。nodes
external_links 将两个服务链接起来,使之可以通信;其相对 links 标签来说,支持链接到其它编排文件或其它方式创建的容器。

Kubernetes 只支持通过 service 方式来实现跨容器访问;且 service 对应的后端容器必须由Kubernetes 管理。

迁移方案:
  1. 被external_links链接的容器通过 Kubernetes 集群创建和管理。
  2. 基于服务名和别名,分别创建service 的方式,实现跨容器访问。参见创建服务
nodes 通过控制台创建一个同名的 service 用于服务访问nodes
external:
     host: $RDS_URL
     ports:
       - 3306
设置该服务直接链接到外部地址。
  • host:设置链接的域名。
  • ports:设置链接的端口。
对应Kubernetes 的headless service,参见Headless services nodes nodes

详细参见account-db-service.yaml 配置

手动迁移:
  1. kompose转换前删除配置,避免中断转换流程。
  2. kompose 转换后,手动编写 headless service(ExternalName类型)资源文件。
  3. 跟其它资源文件,一起通过 kubectl部署。
aliyun.lb.port_* 通过自定义阿里云负载均衡 nat 映射的方式来暴露服务端口到公网或者到内网。参见负载均衡路由 通过LoadBalancer(类似于Swarm集群的负载均衡)访问服务。参见通过负载均衡(Server Load Balancer)访问服务 nodes nodes

手动迁移

部署后,通过Kubernetes LoadBalancer(类似于Swarm集群的负载均衡)访问服务。参见通过负载均衡(Server Load Balancer)访问服务
说明
  • 这里仅做示例,需要客户结合业务需要按 Kubernetes 文档操作。
  • 一经挂载到 SLB 就有可能触发生产流量进入,建议先挂载到测试端口完成测试,再挂载到正式端口。
dns 指定容器上游DNS服务器 对应Kubernetes 的Pod级别的 DNS 配置,详细参见Pod’s DNS Config
说明 如果指定了 DNS,则对应的 Service 名称的解析可能会失效。
nodes nodes

详细参见logtail2-daemonset.yaml 配置

手动迁移:

kompose 转换后,修改该应用对应资源文件*-deployment.yaml,添加 dnsConfig 配置。

日志配置类标签
aliyun.log_store_<logstore_name> 将容器日志保存到阿里云日志服务 aliyun_logs 环境变量,参见使用日志服务进行Kubernetes日志采集 nodes nodes

详细参见account-service-deployment.yaml 配置

kompose 自动迁移
aliyun.log_ttl_<logstore_name>

阿里云日志服务定制标签,用来设置日志库初始日志保存时间,单位为天,有效值为 1~365 天,不配置则默认初始化为 2 天。参见集成日志服务

这里设置的是初始配置值,如果后期您需要修改日志保存时间,需要到日志服务控制台进行设置。

没有对应标签支持,需要自己到日志服务控制台进行设置。 aliyun.log_ttl_requestlog: '30' nodes
手动迁移过程:
  1. 先部署 Kubernetes 资源文件,并调试应用通过(这时会在日志服务生成对应的 Logstore)。
  2. 登录日志服务控制台修改 Logstore 配置,将数据保存时间调长。
aliyun.log.timestamp Docker 在收集日志的时候选择是否添加 timestamp,参见集成日志服务 Kubernetes 不支持,迁移忽略

无法迁移

一般输出都带这个默认的time