前言
Kompose 是什么?它是個轉(zhuǎn)換工具,可將 compose(即 Docker Compose)所組裝的所有內(nèi)容 轉(zhuǎn)換成容器編排器(Kubernetes 或 OpenShift)可識別的形式。
一、 Kompose
其實有很多種方式安裝 Kompose。這里只講解如何從最新的 GitHub 發(fā)布頁面下載二進制文件。
# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose
# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-darwin-amd64 -o kompose
# Windows
curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-windows-amd64.exe -o kompose.exe
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose`在這里插入代碼片`
1.1、Kompose 的使用
首先需要把 Docker Compose 帶到 Kubernetes。 只需要一個現(xiàn)有的 docker-compose.yml 文件。
- 進入
docker-compose.yml
文件所在的目錄。如果沒有,你可以使用下面這個進行測試文件。
version: "2"
services:
redis-master:
image: k8s.gcr.io/redis:e2e
ports:
- "6379"
redis-slave:
image: gcr.io/google_samples/gb-redisslave:v3
ports:
- "6379"
environment:
- GET_HOSTS_FROM=dns
frontend:
image: gcr.io/google-samples/gb-frontend:v4
ports:
- "80:80"
environment:
- GET_HOSTS_FROM=dns
labels:
kompose.service.type: LoadBalancer
- 要將
docker-compose.yml
轉(zhuǎn)換為 kubectl 可用的文件,還需要運行kompose convert
命令進行轉(zhuǎn)換,然后運行kubectl apply -f <output file>
進行創(chuàng)建。
$ kompose convert
運行結(jié)果類似如下:
接著運行命令:
$ kubectl apply -f frontend-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml
運行結(jié)果如下:
現(xiàn)在我們部署的應(yīng)用就在Kubernetes 中運行起來了。
- 訪問應(yīng)用
如果在開發(fā)過程中使用了 minikube,需要執(zhí)行下列命令:
$ minikube service frontend
如果沒有使用的話,我們就需要查當(dāng)前服務(wù)使用的IP,執(zhí)行下面命令:
$ kubectl describe svc frontend
Name: frontend
Namespace: default
Labels: service=frontend
Selector: service=frontend
Type: LoadBalancer
IP: 10.0.0.183
LoadBalancer Ingress: 192.0.2.89
Port: 80 80/TCP
NodePort: 80 31144/TCP
Endpoints: 172.17.0.4:80
Session Affinity: None
No events.
如果使用的是云提供商,你的 IP 將在 LoadBalancer Ingress
字段給出。
$ curl http://192.0.2.89
二、kompose convert 實戰(zhàn)
Kompose 支持兩種驅(qū)動:OpenShift 和 Kubernetes。 你可以通過全局選項 --provider 選擇驅(qū)動。如果沒有指定, 會將 Kubernetes 作為默認驅(qū)動。
2.1、Kubernetes kompose convert實戰(zhàn)
執(zhí)行如下命令,實現(xiàn) docker-compose
轉(zhuǎn)換
$ kompose --file docker-voting.yml convert
WARN Unsupported key networks - ignoring
WARN Unsupported key build - ignoring
INFO Kubernetes file "worker-svc.yaml" created
INFO Kubernetes file "db-svc.yaml" created
INFO Kubernetes file "redis-svc.yaml" created
INFO Kubernetes file "result-svc.yaml" created
INFO Kubernetes file "vote-svc.yaml" created
INFO Kubernetes file "redis-deployment.yaml" created
INFO Kubernetes file "result-deployment.yaml" created
INFO Kubernetes file "vote-deployment.yaml" created
INFO Kubernetes file "worker-deployment.yaml" created
INFO Kubernetes file "db-deployment.yaml" created
查看轉(zhuǎn)換之后的文件:
$ ls
轉(zhuǎn)換結(jié)果:
db-deployment.yaml docker-compose.yml docker-gitlab.yml redis-deployment.yaml result-deployment.yaml vote-deployment.yaml worker-deployment.yaml
db-svc.yaml docker-voting.yml redis-svc.yaml result-svc.yaml vote-svc.yaml worker-svc.yaml
當(dāng)然,你也可以同時提供多個 docker-compose 文件進行轉(zhuǎn)換:
$ kompose -f docker-compose.yml -f docker-guestbook.yml convert
INFO Kubernetes file "frontend-service.yaml" created
INFO Kubernetes file "mlbparks-service.yaml" created
INFO Kubernetes file "mongodb-service.yaml" created
INFO Kubernetes file "redis-master-service.yaml" created
INFO Kubernetes file "redis-slave-service.yaml" created
INFO Kubernetes file "frontend-deployment.yaml" created
INFO Kubernetes file "mlbparks-deployment.yaml" created
INFO Kubernetes file "mongodb-deployment.yaml" created
INFO Kubernetes file "mongodb-claim0-persistentvolumeclaim.yaml" created
INFO Kubernetes file "redis-master-deployment.yaml" created
INFO Kubernetes file "redis-slave-deployment.yaml" created
查看轉(zhuǎn)換之后的文件:
$ ls
轉(zhuǎn)換結(jié)果:
mlbparks-deployment.yaml mongodb-service.yaml redis-slave-service.jsonmlbparks-service.yaml
frontend-deployment.yaml mongodb-claim0-persistentvolumeclaim.yaml redis-master-service.yaml
frontend-service.yaml mongodb-deployment.yaml redis-slave-deployment.yaml
redis-master-deployment.yaml
當(dāng)提供多個 docker-compose 文件時,配置將會合并。任何通用的配置都將被后續(xù)文件覆蓋。
2.2、OpenShift kompose convert 實戰(zhàn)
方式千千萬,唯有命令最簡單:
$ kompose --provider openshift --file docker-voting.yml convert
WARN [worker] Service cannot be created because of missing port.
INFO OpenShift file "vote-service.yaml" created
INFO OpenShift file "db-service.yaml" created
INFO OpenShift file "redis-service.yaml" created
INFO OpenShift file "result-service.yaml" created
INFO OpenShift file "vote-deploymentconfig.yaml" created
INFO OpenShift file "vote-imagestream.yaml" created
INFO OpenShift file "worker-deploymentconfig.yaml" created
INFO OpenShift file "worker-imagestream.yaml" created
INFO OpenShift file "db-deploymentconfig.yaml" created
INFO OpenShift file "db-imagestream.yaml" created
INFO OpenShift file "redis-deploymentconfig.yaml" created
INFO OpenShift file "redis-imagestream.yaml" created
INFO OpenShift file "result-deploymentconfig.yaml" created
INFO OpenShift file "result-imagestream.yaml" created
kompose 還支持為服務(wù)中的構(gòu)建指令創(chuàng)建 buildconfig。 默認情況下,它使用當(dāng)前 git 分支的 remote 倉庫作為源倉庫,使用當(dāng)前分支作為構(gòu)建的源分支。 你可以分別使用 --build-repo 和 --build-branch
選項指定不同的源倉庫和分支。
$ kompose --provider openshift --file buildconfig/docker-compose.yml convert
WARN [foo] Service cannot be created because of missing port.
INFO OpenShift Buildconfig using git@github.com:rtnpro/kompose.git::master as source.
INFO OpenShift file "foo-deploymentconfig.yaml" created
INFO OpenShift file "foo-imagestream.yaml" created
INFO OpenShift file "foo-buildconfig.yaml" created
三、其他轉(zhuǎn)換方式
默認的 kompose 轉(zhuǎn)換會生成 yaml 格式的 Kubernetes Deployment 和 Service 對象。 也可以選擇通過 -j
參數(shù)生成 json 格式的對象。 也可以替換生成 Replication Controllers 對象、 Daemon Sets 或 Helm charts。
$ kompose convert -j
*-deployment.json
文件中包含 Deployment 對象。
$ kompose convert --replication-controller
*-replicationcontroller.yaml
文件包含 Replication Controller 對象。 如果你想指定副本數(shù)(默認為 1),可以使用 --replicas 參數(shù): kompose convert --replication-controller --replicas 3
$ kompose convert --daemon-set
*-daemonset.yaml
文件包含 DaemonSet 對象。
如果你想生成 Helm 可用的 Chart, 只需簡單的執(zhí)行下面的命令:
$ kompose convert -c
$ tree docker-compose/
docker-compose
├── Chart.yaml
├── README.md
└── templates
├── redis-deployment.yaml
├── redis-svc.yaml
├── web-deployment.yaml
└── web-svc.yaml
這個 Chart 結(jié)構(gòu)旨在為構(gòu)建 Helm Chart 提供框架。
四、標(biāo)簽
kompose 支持 docker-compose.yml
文件中用于 Kompose 的標(biāo)簽,以便 在轉(zhuǎn)換時明確定義 Service 的行為。
- kompose.service.type 定義要創(chuàng)建的 Service 類型。
version: "2"
services:
nginx:
image: nginx
dockerfile: foobar
build: ./foobar
cap_add:
- ALL
container_name: foobar
labels:
kompose.service.type: nodeport
- kompose.service.expose 定義是否允許從集群外部訪問 Service。 如果該值被設(shè)置為 “true”,提供程序?qū)⒆詣釉O(shè)置端點, 對于任何其他值,該值將被設(shè)置為主機名。 如果在 Service 中定義了多個端口,則選擇第一個端口作為公開端口。
-
- 如果使用 Kubernetes 驅(qū)動,會有一個 Ingress 資源被創(chuàng)建,并且假定 已經(jīng)配置了相應(yīng)的 Ingress 控制器。
-
- 如果使用 OpenShift 驅(qū)動,則會有一個 route 被創(chuàng)建。
version: "2"
services:
web:
image: tuna/docker-counter23
ports:
- "5000:5000"
links:
- redis
labels:
kompose.service.expose: "counter.example.com"
redis:
image: redis:3.0
ports:
- "6379"
當(dāng)前支持的選項有:
鍵 | 值 |
---|---|
kompose.service.type | nodeport / clusterip / loadbalancer |
kompose.service.expose | true / hostname |
提示
:kompose.service.type 標(biāo)簽應(yīng)該只用 ports 來定義,否則 kompose 會失敗。
總結(jié)
如果 Docker Compose 文件中的服務(wù)名包含 _
(例如 web_service), 那么將會被替換為 -
,服務(wù)也相應(yīng)的會重命名(例如 web-service)。 Kompose 這樣做的原因是 “Kubernetes” 不允許對象名稱中包含 _
。文章來源:http://www.zghlxwxcb.cn/news/detail-410806.html
本篇文章,主要講解了 Kompose,以及 Kompose convert 的兩種使用方式,文中還穿插了一些其他的轉(zhuǎn)換方式,干貨還是比較多的。文章來源地址http://www.zghlxwxcb.cn/news/detail-410806.html
到了這里,關(guān)于【云原生 | Kubernetes 系列】項目實戰(zhàn) 一文吃透 Docker Compose 文件轉(zhuǎn)換成 Kubernetes 資源的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!