📜 引言:
- 磨刀不误砍柴工
- 工欲善其事必先利其器
从 Docker Compose 到 Kubernetes 的转换工具
Kompose 是 dockercompose 到 Kubernetes (或 OpenShift) 等容器编排器的转换工具。
为什么开发者喜欢它?
docker-compose.yaml
需要一个简单的命令 kompose convert
docker-compose.yaml
文件;kompose convert
kubectl apply
并检查您的 k8s 集群为您新部署的容器!$ wget https://raw.githubusercontent.com/kubernetes/kompose/master/examples/docker-compose-v3.yaml -O docker-compose.yaml$ kompose convert$ kubectl apply -f .$ kubectl get po
NAME READY STATUS RESTARTS AGE
frontend-591253677-5t038 1/1 Running 0 10s
redis-master-2410703502-9hshf 1/1 Running 0 10s
redis-slave-4049176185-hr1lr 1/1 Running 0 10s
比如我要在 K8S 上安装 RssHub,这是官方提供的 docker-compose.yml
:
version: '3'
services:rsshub:image: diygod/rsshubrestart: alwaysports:- '1200:1200'environment:NODE_ENV: productionCACHE_TYPE: redisREDIS_URL: 'redis://redis:6379/'PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'depends_on:- redis- browserlessbrowserless:# See issue 6680image: browserless/chrome:1.43-chrome-stablerestart: alwaysulimits:core:hard: 0soft: 0redis:image: redis:alpinerestart: alwaysvolumes:- redis-data:/data
volumes:redis-data:
执行 kompose convert
后,从 docker-compose.yml
生成以下文件:
$ ll
.rw-r--r-- 711 casey 1 Dec 21:20 browserless-deployment.yaml
.rw-r--r-- 715 casey 1 Dec 21:20 docker-compose.yml
.rw-r--r-- 243 casey 1 Dec 21:20 redis-data-persistentvolumeclaim.yaml
.rw-r--r-- 867 casey 1 Dec 21:20 redis-deployment.yaml
.rw-r--r-- 1.0k casey 1 Dec 21:20 rsshub-deployment.yaml
.rw-r--r-- 352 casey 1 Dec 21:20 rsshub-service.yaml
每个 docker-compose 容器,会生成为一个 deployment,并为你自动转换好 label 和 env 等字段,以 rsshub-deployment.yaml
为例:
apiVersion: apps/v1
kind: Deployment
metadata:annotations:kompose.cmd: kompose convertkompose.version: 1.26.0 (40646f47)creationTimestamp: nulllabels:io.kompose.service: rsshubname: rsshub
spec:replicas: 1selector:matchLabels:io.kompose.service: rsshubstrategy: {}template:metadata:annotations:kompose.cmd: kompose convertkompose.version: 1.26.0 (40646f47)creationTimestamp: nulllabels:io.kompose.service: rsshubspec:containers:- env:- name: CACHE_TYPEvalue: redis- name: NODE_ENVvalue: production- name: PUPPETEER_WS_ENDPOINTvalue: ws://browserless:3000- name: REDIS_URLvalue: redis://redis:6379/image: diygod/rsshubname: rsshubports:- containerPort: 1200resources: {}restartPolicy: Always
status: {}
Docker compose 的 ports
部分,会转换为 SVC,以 rsshub-service.yaml
为例:
apiVersion: v1
kind: Service
metadata:annotations:kompose.cmd: kompose convertkompose.version: 1.26.0 (40646f47)creationTimestamp: nulllabels:io.kompose.service: rsshubname: rsshub
spec:ports:- name: "1200"port: 1200targetPort: 1200selector:io.kompose.service: rsshub
status:loadBalancer: {}
Docker compose 的 volumes
字段,会转换为 PVC,以 redis-data-persistentvolumeclaim.yaml
为例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:creationTimestamp: nulllabels:io.kompose.service: redis-dataname: redis-data
spec:accessModes:- ReadWriteOnceresources:requests:storage: 100Mi
status: {}
安逸!
# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-linux-amd64 -o kompose# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-darwin-amd64 -o komposechmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose
🎉🎉🎉
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.