web-dev-qa-db-ja.com

KubernetesはDocker Composeのように使用できますか?

Kubernetesのドキュメントを何時間も掘り下げてきました。コアデザイン、およびサービス、コントローラー、ポッドなどの概念を理解しています。

しかし、私が理解していないのは、クラスターを宣言的に構成できるプロセスです。つまり、構成ファイル(またはそのセット)を作成して、クラウド展開の構成とスケーリングオプションを定義する方法です。大量のcliコマンドを実行せずに、どのポッドにどのコンテナーが必要か、どのように通信するか、どのようにスケーリングするかなどを宣言できるようにしたいと思います。

あります docker-compose Kubernetesの機能?

手動のcli対話に依存せずに、バージョン管理されたgitでアプリケーションを定義する必要があります。

これを簡潔に行うことは可能ですか?公式文書よりも明確な参照はありますか?

57
Don Scott

Dockerは、kubernetesクラスターのdocker-compose機能を正式に発表しました。そのため、今後は、kubernetesリソースをファイルに構成し、その単一のファイルを使用してそれらを適用できます。

まず、KubernetesコントローラーにComposeをKubernetesクラスターにインストールする必要があります。このコントローラーは、標準のKubernetes拡張ポイントを使用して、StackをKubernetes APIに導入します。完全なドキュメントを確認して、docker composeコントローラーをインストールします。

https://github.com/docker/compose-on-kubernetes

簡単なyamlファイルを作成してみましょう。

version: "3.7"
services:
  web:
    image: dockerdemos/lab-web
    ports:
     - "33000:80"
  words:
    image: dockerdemos/lab-words
    deploy:
      replicas: 3
      endpoint_mode: dnsrr
  db:
    image: dockerdemos/lab-db

次に、ドッカークライアントを使用して、コントローラーを実行しているKubernetesクラスターにこれをデプロイします。

$ docker stack deploy --orchestrator=kubernetes -c docker-compose.yml words
Waiting for the stack to be stable and running...
db: Ready       [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
web: Ready      [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
words: Ready    [pod status: 1/3 ready, 2/3 pending, 0/3 failed]
Stack words is stable and running

その後、Kubernetes APIを介してこれらのオブジェクトと対話できます。ここで、Services、Pod、Deployments、ReplicaSetsなどの下位レベルのオブジェクトが自動的に作成されていることがわかります。

$ kubectl get deployments
NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/db      1         1         1            1           57s
deployment.apps/web     1         1         1            1           57s
deployment.apps/words   3         3         3            3           57s    

これは1回限りのコンバージョンではないことに注意してください。 Kubernetes APIサーバーでの構成では、Kubernetes APIにStackリソースが導入されています。したがって、アプリケーションを構築するのと同じ抽象化レベルですべてをクエリおよび管理できます。これにより、上記の詳細を掘り下げて、物事の仕組みを理解したり、問題をデバッグしたりできますが、ほとんどの場合は必要ありません。

$ kubectl get stack
NAME      STATUS      PUBLISHED PORTS   PODS     AGE      
words     Running     33000             5/5      4m
8
Prafull Ladha

まだ探しているなら、このツールが役立つかもしれません: https://github.com/kelseyhightower/compose2kube

作成ファイルを作成できます。

# sample compose file with 3 services
web:
  image: nginx
  ports:
    - "80"
    - "443"
database:
  image: postgres
  ports:
    - "5432"
cache:
  image: memcached
  ports:
    - "11211"

次に、ツールを使用してkubernetesオブジェクトに変換します。

compose2kube -compose-file docker-compose.yml -output-dir output

これらはこれらのファイルを作成します:

output/cache-rc.yaml
output/database-rc.yaml
output/web-rc.yaml

その後、kubectlを使用してそれらをkubernetesに適用できます。

33
Ahmad Aabed

既存のDocker Composerファイルがある場合は、 Komposeプロジェクト をご覧ください。

komposeは、docker-composeに慣れているユーザーがKubernetesに移行するのを支援するツールです。 komposeはDocker Composeファイルを取得し、Kubernetesリソースに変換します。

komposeは、ローカルDocker開発からKubernetesを使用したアプリケーションの管理に移行するための便利なツールです。 Docker Compose形式のKubernetesリソースマニフェストへの変換は正確ではない場合がありますが、Kubernetesにアプリケーションを最初にデプロイするときに非常に役立ちます。

docker-compose.yamlファイルまたは独自のファイルを実行するには、次を実行します。

kompose up

1つの簡単なコマンドでdocker-compose.yamlをKubernetesの展開とサービスに変換するには:

$ kompose convert -f docker-compose.yaml
INFO Kubernetes file "frontend-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

詳細については、以下を確認してください: http://kompose.io/

16
JoaoCC

Kubernetesには独自のyamlがあります(「 Deploying Applications 」に示すとおり)

しかし、「 Docker Clustering Tools Compared:Kubernetes vs Docker Swarm 」のように、(ちょうど)Docker用に書かれておらず、独自のシステムがあります。

vyshane/kid 」に示すように、docker-composeを使用してKubernetesを起動することもできます: kubectlコマンドでスクリプトのCLI (バージョン管理可能)。

7
VonC