Dockerから
Kubernetesへのシフト
Masaki Nakayama
#2
KAGOYA JAPAN
Twitter:
@nakayamam2
Community:
RancherJP, CNCF Kansai
Masaki
Nakayama
コンテナ使ってますか?
コンテナ使ってますか?
● Docker/docker-compose
● Kubernetes
● 実はSwarm
サービス規模や用途と
コンテナ・ホストサーバー構成
1 Service
on
1 Host
● DockerfileによるIaC
● 冪等性・ポータビリティ
web db
80, 443 port
Multi Services
on
1 Host
● DockerfileによるIaC
● 冪等性・ポータビリティ
+ ホストの収容効率UP
web
db
web
db
service-a.com service-b.com
nginx-proxy
Multi Services
on
Multi Host
● DockerfileによるIaC
● 冪等性・ポータビリティ
● ホスト収容効率UP
+ リソースがスケーラブル
+ サービスの自動復旧
+ あらゆるリソース要件のIaC
+ 充実したエコシステム
…and more
Multi Services
on
Multi k8s Cluster
● 今の所はDocker/docker-composeで
大方やりたいことは適っている
● サービスが育ってきた時に柔軟にスケー
ルしていきたい
● 現状、開発者はdocker使いが多い
状況に応じた構成
DockerからKubernetes
へシフトするための手段が
あってもいいんじゃない
の?
Docker
⬇
Kubernetes?
?
● Kubernetesのアーキテクチャやコン
ポーネントの理解
● docker-compose.yamlをKubernetesの
各Kubernetesリソースへの落とし込み
Compose on Kubernetes
Compose
on
Kubernetes
● https://github.com/docker/compose-
on-kubernetes
● Docker社製のOSSの一つ
● 2018年12月のDockerCon EUで発表
● Docker Swarmのdocker stack deploy
でdocker-compose.ymlをもとにk8sへ
デプロイ(k8sリソースの自動作成)を
行ってくれるツール
● 類似のOSSとしてkomposeというのもあ
るが、Docker社製のため、こちらの方が
よりDockerネイティブな使い心地(という
かdocker swarmまんま)
結構活発に動いています
どこで使えるのか 最初からインストール済(Engine 18.09以降)
● Docker for Mac/Windows
● Docker EE
要インストール作業
● Azure AKS
● GKE
● Microk8s
● Minikube
   EKS...
ほら、
あなたの端末でも
https://github.com/docker/compose-on-kubernetes/blob/master/docs/architecture.md
● stack情報管理用のetcdをデプロイ(要
helm)
● cluster-admin ロールの取得
● Compose on Kubernetesをデプロイ
各k8sクラスターへの構築方法は下記参照
https://github.com/docker/compose-on-kub
ernetes#deploying-compose-on-kubernetes
任意の
k8sクラスターで
使うためには
実際にWebアプリケーションを
デプロイしてみる
● GKEにcompose on kubernetesとetcdはデプロイ済
● サンプルアプリとして、knowledgeというOSSをデプロイする
前提
knowledge
● https://information-knowledge.support-project.
org/ja/
● チーム内でナレッジ共有できる(Qiita:Team的なも
の)
● 弊社チーム内では新規投稿をRocket.Chatに
webhook通知で飛ばして社内Qiita的に使っていま
す(どちらもdocker-composeで動かしています)
docker-compose.yml
version: '3.6'
services:
kw-app:
image: koda/docker-knowledge:latest
volumes:
- type: volume
source: app-data
target: /root/.knowledge
ports:
- 8080:8080
kw-db:
image: postgres:9.6.5
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: knowledge_production
PGDATA: /var/lib/postgresql/data/db
volumes:
- type: volume
source: db-data
target: /var/lib/postgresql/data
volumes:
app-data:
db-data:
deploy
Pod, Service
Statefulset, PV, PVC
注意点
● スライド作成時点ではDocker CLIはカスタムビルドしないとgcp対応できてなかった
● kubectlコマンドでリソース削除を試みても、stack情報が専用のetcdに残されているため、それに合わせ
た数で自動復旧してくる。つまり、お掃除の時はあくまでもdocker stack rm
● Docker-composeファイルの文法はdocker swarmに依存しており、depends_onやrestartなどは無視さ
れる
まとめ
● 状況に応じてdockerとKubernetsを使い分ける・シフトする選択肢があっても良い
● 一つの手段としてCompose on Kubernetes便利ですよ!
● ただし、Kubernetesを知らなくていいということではない
● 逆にdockerでこう書いていたものがそうなるのか、といったKubernetes勉強の題材にもいかがでしょう
Thanks!
#2

DockerからKubernetesへのシフト