docker stackでk8sを使ってみるメモ
コンテンツ
はじめに
docker stack コマンドで、既存の docker-compose.yml を使ってk8sにアプリをデプロイできると聞いて調べてみたメモ。
オンプレのクラスタ環境に自前アプリをデプロイする状況を想定。
イメージのビルドとローカルregistryへの登録
docker stack というよりk8sはイメージのビルドをサポートしてないので、事前にビルドして、ローカルに立てたレジストリに登録、みたいなことが必要。
-
docker-compose-registry.yml1 2 3 4 5 6 7 8 9version: "3" services: # registry for built images refered from k8s registry: image: registry:2 hostname: registry restart: always ports: - 5000:5000 -
docker-compose-build.yml1 2 3 4 5 6version: "3" services: name-of-service: build: context: directory-name image: image-name必要な分だけビルドする
-
イメージの登録
1 2 3 4 5 6 7 8# Build docker-compose -f docker-compose-build.yml build # Regitry docker-compose -f docker-compose-registry.yml up -d docker image tag image-name localhost:5000/image-name docker push localhost:5000/image-nameregistryは永続化していないので、docker-compose -f docker-compose-registry.yml downで消える。
ビルドしたイメージを参照する
k8sからは localhost:5000 として参照されるよう、ローカルリポジトリを指すようイメージを指定する。
docker-compose.yml1 2 3 4 5version: "3" services: name-of-service: image: localhost:5000/image-name ...
動かしてみる
デプロイ
|
|
サービスごとにpodが作れられる。
ちなみに、以下のオプションはdocker stackでサポートされていない。
- build
- cgroup_parent
- container_name
- devices
- tmpfs
- external_links
- links
- network_mode
- restart
- security_opt
- userns_mode
参考: https://docs.docker.com/compose/compose-file/
Ingress
注意: 結局動いていない。パスでサービスを解決したくなったら調査して追記する。
外部からサービスにアクセスするための口を作る。 参考: https://kubernetes.io/ja/docs/concepts/services-networking/ingress/
ingress-controller
まずingress-controllerを入れる。いろいろあるけど今回はingress-nginxを使う。
- Bare-metalの場合
1kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/baremetal/deploy.yamlなんか色々入った。
ingressを適用する
-
ingress.yml1WIP -
反映する
1 2kubectl apply -f ingress.yml kubectl get ingress -
確認する
1kubectl describe ingress name-of-ingress
ingressを削除するときは kubectl delete ingress name-of-ingress
ボリュームについて
https://docs.docker.com/compose/compose-file/#volumes-for-services-swarms-and-stack-files
トラブルシュート
|
|
作成者 tac0x2a
最終更新時刻 2020-06-08