Kubernetes を使うはじめのステップとして Compose on Kubernetes を使って試しに動かしてみた。
結果的に「DockerとKubernetesへの理解がまだまだ浅いので、本買ってちゃんと読んだほうがいい」とわかった。
試し終わったあと Docker/Kubernetes 実践コンテナ開発入門 を購入して勉強してます。おすすめ。
ついでに 入門 監視 も買ってしまった。A5サイズ200ページほどで読んでておもしろい。これもおすすめ。
Compose on Kubernetes とは
Docker社がオフィシャルに開発しているツールで Docker Compose ファイル (docker-compose.yml
) を Kubernetes cluster にデプロイしてくれるもの。
Kuberetes でインフラを構築するにはそれ用の設定ファイルを幾つか用意する必要があるが、Compose on Kubernetes を使えば docker-compose.yml
をそのままKuberetes で動かせられるよ、というもの。
すでに Docker Compose を使ってコンテナを動かしていて、これからKubernetesを使ってみようかな、という人におすすめらしい。
公式ページ のドキュメントが少なく日本語情報も少ないので、動かすのがちょっと大変だった。
Mac で動かす方法
環境のセットアップ
当然ながら Docker Desktop for Mac がインストールされている必要がある。 インストールされていると右上のステータスバーにクジラのアイコンがあって、ここからDockerの設定パネルを開く。 Enable Kubernetes にチェックを入れると、Kubernetesのインストールが始まる。しばらく時間がかかる。
インストールが終わるとフッターに Kubernetes is running が表示されステータスがグリーンになり、利用可能となる。
kubectl
コマンドが使えるようになり、動作を確認できる。
% kubectl api-versions | grep compose compose.docker.com/v1beta1 compose.docker.com/v1beta2
デプロイしてみる
デプロイはローカルにインストールされた Kubernetes に docker-compose.yml
を使ってコンテナを起動させるというもの。
サンプルにある内容で docker-compose.yml
を作る。
version: '3.3' services: db: build: db image: dockersamples/k8s-wordsmith-db words: build: words image: dockersamples/k8s-wordsmith-api deploy: replicas: 5 web: build: web image: dockersamples/k8s-wordsmith-web ports: - "33000:80"
改めて見ると deploy: replica: 5
という項目がある。普段 Docker Compose を使うときには指定しない項目。
Kubernetesのための拡張なのか、Docker Composeにもともとあるのか、Docker Swarm の項目なのかわからんので、気が向いたら調べる。
ただ、この実行したらわかるけど、Podとして words
コンテナが5台起動してるので、そういう設定のものらしい。
$ docker stack deploy --orchestrator=kubernetes -c docker-compose.yml hellokube
docker stack
コマンドでデプロイできる。オーケストレーターに kubernetes
を使って hellokube
という STACK名でデプロイする。
公式ドキュメントはここまでで、この後どうしていいかわからないので気をつけましょう。
コマンドを実行するとこうなった。
Ignoring unsupported options: build service "words": build is ignored service "web": build is ignored service "db": build is ignored Waiting for the stack to be stable and running... db: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed] adminer: Failed [pod status: 0/0 ready, 0/0 pending, 0/0 failed] web: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed] words: Ready [pod status: 5/5 ready, 0/5 pending, 0/5 failed]
ブラウザからコンテナにアクセス
docker-compose.yml
にあるように http://localhost:33000
にアクセスできる。
docker stack
コマンド
今回はじめて使ったコマンドなのでなんのコマンドかわからなかったのでヘルプをみる。困ったときのヘルプ。
$ docker stack help Usage: docker stack [OPTIONS] COMMAND Manage Docker stacks Options: --kubeconfig string Kubernetes config file --orchestrator string Orchestrator to use (swarm|kubernetes|all) Commands: deploy Deploy a new stack or update an existing stack ls List stacks ps List the tasks in the stack rm Remove one or more stacks services List the services in the stack Run 'docker stack COMMAND --help' for more information on a command.
rm
で停止できそう。
コマンドで状態をみたり停止したり
コンテナのリストや状態を docker stack
コマンドで確認できます。 別途 kubectl get all
など kubectl
コマンドも使える模様。
$ docker stack ls --orchestrator=kubernetes NAME SERVICES ORCHESTRATOR NAMESPACE hellokube 3 Kubernetes default $ docker stack ps --orchestrator=kubernetes hellokube ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS a02c17eb-60c hellokube_db-79b45689db-p5bsh dockersamples/k8s-wordsmith-db docker-for-desktop Running Running 21 hours ago a026f294-60c hellokube_web-6b56cf97b9-9kpwj dockersamples/k8s-wordsmith-web docker-for-desktop Running Running 21 hours ago *:0->80/tcp a038f9bf-60c hellokube_words-6d654698d5-5dvcl dockersamples/k8s-wordsmith-api docker-for-desktop Running Running 21 hours ago a0393b47-60c hellokube_words-6d654698d5-jbpvc dockersamples/k8s-wordsmith-api docker-for-desktop Running Running 21 hours ago a02f6edf-60c hellokube_words-6d654698d5-k5ffg dockersamples/k8s-wordsmith-api docker-for-desktop Running Running 21 hours ago a0342f61-60c hellokube_words-6d654698d5-kvx2k dockersamples/k8s-wordsmith-api docker-for-desktop Running Running 21 hours ago a0342102-60c hellokube_words-6d654698d5-ssldw dockersamples/k8s-wordsmith-api docker-for-desktop Running Running 21 hours ago $ docker stack services --orchestrator=kubernetes hellokube ID NAME MODE REPLICAS IMAGE PORTS a03132da-60c hellokube_db replicated 0/0 dockersamples/k8s-wordsmith-db a03132da-60c hellokube_db replicated 0/0 mysql:8.0 a041e664-60c hellokube_web replicated 1/1 dockersamples/k8s-wordsmith-web *:33000->80/tcp a04bdfa0-60c hellokube_words replicated 5/5 dockersamples/k8s-wordsmith-api
コンテナの停止方法。これは公式ドキュメントにないので困った。
$ docker stack rm --orchestrator=kubernetes hellokube Removing stack: hellokube
とりあえず止められた。良かった。
参考文献
公式ドキュメントは リポジトリの /docs にあるので読んだらいいことあるかもしれない。
Docker blog でも紹介されていて、日本語訳記事もあるので、概要を理解するのに役立つ。
似たようなものに Kompose というものもあり、同じように docker-compose.yml
を使ってKubernetesにデプロイできる。
感想
やっぱりちゃんと本読んだほうがいいよね!
- 作者: 山田明憲
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る