準(zhǔn)備開始
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你必須配置 kubectl 命令行工具與你的集群通信。 建議在至少有兩個(gè)不作為控制平面主機(jī)的節(jié)點(diǎn)的集群上運(yùn)行本教程。
安裝 Kompose
我們有很多種方式安裝 Kompose。首選方式是從最新的 GitHub 發(fā)布頁面下載二進(jìn)制文件。
Kompose 通過 GitHub?安裝
# 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
使用 Kompose
只需幾步,我們就把你從 Docker Compose 帶到 Kubernetes。 你只需要一個(gè)現(xiàn)有的?docker-compose.yml
?文件。
-
進(jìn)入?
docker-compose.yml
?文件所在的目錄。如果沒有,請(qǐng)使用下面這個(gè)進(jìn)行測(cè)試。version: "2" services: redis-master: image: registry.k8s.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
?可用的文件,請(qǐng)運(yùn)行?kompose convert
?命令進(jìn)行轉(zhuǎn)換,然后運(yùn)行?kubectl apply -f <output file>
?進(jìn)行創(chuàng)建。kompose convert
輸出類似于:
INFO Kubernetes file "frontend-tcp-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 "redis-master-deployment.yaml" created INFO Kubernetes file "redis-slave-deployment.yaml" created
kubectl apply -f frontend-tcp-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml
輸出類似于:
service/frontend-tcp created service/redis-master created service/redis-slave created deployment.apps/frontend created deployment.apps/redis-master created deployment.apps/redis-slave created
你部署的應(yīng)用在 Kubernetes 中運(yùn)行起來了。
-
訪問你的應(yīng)用。
如果你在開發(fā)過程中使用?
minikube
,請(qǐng)執(zhí)行:minikube service frontend
否則,我們要查看一下你的服務(wù)使用了什么 IP!
kubectl describe svc frontend
Name: frontend-tcp Namespace: default Labels: io.kompose.service=frontend-tcp Annotations: kompose.cmd: kompose convert kompose.service.type: LoadBalancer kompose.version: 1.26.0 (40646f47) Selector: io.kompose.service=frontend Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.43.67.174 IPs: 10.43.67.174 Port: 80 80/TCP TargetPort: 80/TCP NodePort: 80 31254/TCP Endpoints: 10.42.0.25:80 Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 62s service-controller Ensuring load balancer Normal AppliedDaemonSet 62s service-controller Applied LoadBalancer DaemonSet kube-system/svclb-frontend-tcp-9362d276
如果你使用的是云驅(qū)動(dòng),你的 IP 將在?
LoadBalancer Ingress
?字段給出。curl http://192.0.2.89
-
清理。
你完成示例應(yīng)用 Deployment 的測(cè)試之后,只需在 Shell 中運(yùn)行以下命令,就能刪除用過的資源。
kubectl delete -f frontend-tcp-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml
用戶指南
kompose convert
Kompose 支持將 V1、V2 和 V3 版本的 Docker Compose 文件轉(zhuǎn)換為 Kubernetes 和 OpenShift 資源對(duì)象。
Kubernetes?kompose convert?示例
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
ls
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
你也可以同時(shí)提供多個(gè) docker-compose 文件進(jìn)行轉(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
ls
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)提供多個(gè) docker-compose 文件時(shí),配置將會(huì)合并。任何通用的配置都將被后續(xù)文件覆蓋。
OpenShift?kompose convert?示例
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。 默認(rèn)情況下,它使用當(dāng)前 git 分支的 remote 倉(cāng)庫(kù)作為源倉(cāng)庫(kù),使用當(dāng)前分支作為構(gòu)建的源分支。 你可以分別使用?--build-repo
?和?--build-branch
?選項(xiàng)指定不同的源倉(cāng)庫(kù)和分支。
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)換方式
?默認(rèn)的 kompose 轉(zhuǎn)換會(huì)生成 yaml 格式的 Kubernetes Deployment 和 Service 對(duì)象。 你可以選擇通過 -j 參數(shù)生成 json 格式的對(duì)象。 你也可以替換生成 Replication Controllers 對(duì)象、 DaemonSet 或 Helm Chart。 ?
kompose convert -j
INFO Kubernetes file "redis-svc.json" created
INFO Kubernetes file "web-svc.json" created
INFO Kubernetes file "redis-deployment.json" created
INFO Kubernetes file "web-deployment.json" created
*-deployment.json
?文件中包含 Deployment 對(duì)象。
kompose convert --replication-controller
INFO Kubernetes file "redis-svc.yaml" created
INFO Kubernetes file "web-svc.yaml" created
INFO Kubernetes file "redis-replicationcontroller.yaml" created
INFO Kubernetes file "web-replicationcontroller.yaml" created
*-replicationcontroller.yaml
?文件包含 Replication Controller 對(duì)象。 如果你想指定副本數(shù)(默認(rèn)為 1),可以使用?--replicas
?參數(shù):?kompose convert --replication-controller --replicas 3
kompose convert --daemon-set
INFO Kubernetes file "redis-svc.yaml" created
INFO Kubernetes file "web-svc.yaml" created
INFO Kubernetes file "redis-daemonset.yaml" created
INFO Kubernetes file "web-daemonset.yaml" created
*-daemonset.yaml
?文件包含 DaemonSet 對(duì)象。
如果你想生成?Helm?可用的 Chart, 只需簡(jiǎn)單的執(zhí)行下面的命令:
kompose convert -c
INFO Kubernetes file "web-svc.yaml" created
INFO Kubernetes file "redis-svc.yaml" created
INFO Kubernetes file "web-deployment.yaml" created
INFO Kubernetes file "redis-deployment.yaml" created
chart created in "./docker-compose/"
tree docker-compose/
docker-compose
├── Chart.yaml
├── README.md
└── templates
├── redis-deployment.yaml
├── redis-svc.yaml
├── web-deployment.yaml
└── web-svc.yaml
這個(gè) Chart 結(jié)構(gòu)旨在為構(gòu)建 Helm Chart 提供框架。
標(biāo)簽
kompose
?支持?docker-compose.yml
?文件中用于 Kompose 的標(biāo)簽, 以便在轉(zhuǎn)換時(shí)明確定義 Service 的行為。
-
kompose.service.type
?定義要?jiǎng)?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ū)⒆詣?dòng)設(shè)置端點(diǎn), 對(duì)于任何其他值,該值將被設(shè)置為主機(jī)名。 如果在 Service 中定義了多個(gè)端口,則選擇第一個(gè)端口作為公開端口。- 如果使用 Kubernetes 驅(qū)動(dòng),會(huì)有一個(gè) Ingress 資源被創(chuàng)建,并且假定已經(jīng)配置了相應(yīng)的 Ingress 控制器。
- 如果使用 OpenShift 驅(qū)動(dòng),則會(huì)有一個(gè) 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)前支持的選項(xiàng)有:
鍵 | 值 |
---|---|
kompose.service.type | nodeport / clusterip / loadbalancer |
kompose.service.expose | true / hostname |
說明:
kompose.service.type
?標(biāo)簽應(yīng)該只用?ports
?來定義,否則?kompose
?會(huì)失敗。
重啟
如果你想創(chuàng)建沒有控制器的普通 Pod,可以使用 docker-compose 的?restart
?結(jié)構(gòu)來指定這一行為。請(qǐng)參考下表了解?restart
?的不同參數(shù)。
docker-compose ?restart
|
創(chuàng)建的對(duì)象 | Pod?restartPolicy
|
---|---|---|
"" |
控制器對(duì)象 | Always |
always |
控制器對(duì)象 | Always |
on-failure |
Pod | OnFailure |
no |
Pod | Never |
說明:
控制器對(duì)象可以是?deployment
?或?replicationcontroller
。
例如,pival
?Service 將在這里變成 Pod。這個(gè)容器計(jì)算?pi
?的取值。
version: '2'
services:
pival:
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restart: "on-failure"
關(guān)于 Deployment Config 的提醒
如果 Docker Compose 文件中為服務(wù)聲明了卷,Deployment(Kubernetes)或 DeploymentConfig(OpenShift)策略會(huì)從 “RollingUpdate”(默認(rèn))變?yōu)?“Recreate”。 這樣做的目的是為了避免服務(wù)的多個(gè)實(shí)例同時(shí)訪問卷。
如果 Docker Compose 文件中的服務(wù)名包含?_
(例如?web_service
), 那么將會(huì)被替換為?-
,服務(wù)也相應(yīng)的會(huì)重命名(例如?web-service
)。 Kompose 這樣做的原因是 “Kubernetes” 不允許對(duì)象名稱中包含?_
。
請(qǐng)注意,更改服務(wù)名稱可能會(huì)破壞一些?docker-compose
?文件。
Docker Compose 版本
Kompose 支持的 Docker Compose 版本包括:1、2 和 3。 對(duì) 2.1 和 3.2 版本的支持還有限,因?yàn)樗鼈冞€在實(shí)驗(yàn)階段。文章來源:http://www.zghlxwxcb.cn/news/detail-525079.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-525079.html
到了這里,關(guān)于Kubernetes配置 Pods 和容器—將 Docker Compose 文件轉(zhuǎn)換為 Kubernetes 資源的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!