ハンズオン(課題):課題アプリを
Dockerで実装
ホストVMのIP取得方法
$ ip route
defaultvia 10.146.0.1 dev eth0 proto dhcp metric 100
10.146.0.1 dev eth0 proto dhcp scope link metric 100
10.146.0.49 dev eth0 proto kernel scope link src 10.146.0.49 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
$ export HOST_IP=`ip route | grep docker | awk '{print $9}'`
$ echo $HOST_IP
172.17.0.1
24.
ハンズオン終了・答え合わせ
GCEで作業用サーバを構築する
(事前にやっておくかも)
GCEにSSHする
ホームディレクトリで
$ cd app/mysql/
$view Dockerfile
$ sudo docker build ./ -t mysql:1.0
Sending build context to Docker daemon 8.192 kB
…
Successfully built e34c079ee87a
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 1.0 e34c079ee87a 42 seconds ago 372 MB
docker.io/mysql 5.7 98455b9624a9 2 weeks ago 372 MB
$ sudo docker run --name mysql -itd -p 3306:3306 mysql:1.0
1ce14b24bba7d2328ccbbc3a18f7bb2801c776c396ef17608390f8c282520f0d
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ce14b24bba7 mysql:1.0 "docker-entrypoint..." 8 seconds ago Up 7 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
$ mysql -h127.0.0.1 -uuser -ppassword
Warning: Using a password on the command line interface can be insecure.
…
mysql>
25.
ハンズオン終了・答え合わせ
GCEで作業用サーバを構築する
(事前にやっておくかも)
GCEにSSHする
ホームディレクトリで
$ cd app/backend/
$view Dockerfile
$ sudo docker build ./ -t backend:1.0
Sending build context to Docker daemon 20.48 kB
…
Successfully built 575c86da500c
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
backend 1.0 575c86da500c 18 seconds ago 235 MB
mysql 1.0 e34c079ee87a 4 minutes ago 372 MB
docker.io/alpine latest cdf98d1859c1 2 days ago 5.53 MB
docker.io/mysql 5.7 98455b9624a9 2 weeks ago 372 MB
$ sudo docker run --name backend -itd -e MYSQL_IP=$HOST_IP -p 9200:9200 backend:1.0
c4fcca19bea6227ddd9d6205bfb65d2c3e53591ef58d31629ff77e790513d731
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4fcca19bea6 backend:1.0 "/bin/sh -c 'pytho..." 14 seconds ago Up 13 seconds 0.0.0.0:9200->9200/tcp backend
1ce14b24bba7 mysql:1.0 "docker-entrypoint..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
$ curl localhost:9200/tasks
[]
Kubernetes用語集
• Cluster
• k8s上で実行される一つのサービス環境
•Node
• ワーカーマシン(物理マシン or VM)
• Pod
• Kubernetes上のデプロイ最小単位で
1つ以上のコンテナを持つ
• Pod内のコンテナは同じノードで動作
• PodごとにIPアドレスが振られる
Container α
Container β
Container γ
Pod A Pod B
Node 1
Container α
Container β
Container γ
Pod A Pod B
Node 2
k8s Cluster
29.
Kubernetes用語集
• ReplicaSet
• Podのレプリカのグループ
•指定の数だけPodを起動して、その数を維持
• Deployment
• ReplicaSetの世代管理を行う設計図の役割
• ローリングアップデート、ロールバックが可能
• Service
• Podとの通信に単一の
エンドポイントを提供する
管理概念
通信概念
Deployment
ReplicaSet
Pod A Pod B
Service
Pod A
Pod B
ReplicaSetを管理
Podの数を管理
Podへ振り分け
ServiceのIPで
アクセス
192.0.2.1
ハンズオン(演習):GKEで課題アプリ
を立てる
1.DockerイメージをContainer Registryにpush
GUI:https://console.cloud.google.com/gcr/images/
$ exportNAME=[YOUR_NAME]
$ export PROJCT=[GCP_PROJECT_ID]
$ sudo docker tag mysql:1.0 asia.gcr.io/caas-ho-01-76304299/mysql-$NAME:1.0
$ sudo docker tag backend:1.0 asia.gcr.io/caas-ho-01-76304299/backend-$NAME:1.0
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
asia.gcr.io/caas-project/backend-gossy 1.0 a71a4c162b3d About an hour ago 235 MB
backend 1.0 a71a4c162b3d About an hour ago 235 MB
apache 1.0 d7b1249a1f7a About an hour ago 10.4 MB
asia.gcr.io/ caas-project/mysql-gossy 1.0 ce751d780388 About an hour ago 372 MB
mysql 1.0 ce751d780388 About an hour ago 372 MB
docker.io/alpine latest cdf98d1859c1 2 days ago 5.53 MB
docker.io/mysql 5.7 98455b9624a9 2 weeks ago 372 MB
$ sudo gcloud docker -- push asia.gcr.io/$PROJECT/mysql-$NAME:1.0
WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.
…
1.0: digest: sha256:c8e81dfff7d8a09c0528fd81f704631984edea29ddd901204cda43f834573dd8 size: 2828
$ sudo gcloud docker -- push asia.gcr.io/ $PROJECT/backend-$NAME:1.0
WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.
…
1.0: digest: sha256:03a1435aa95f3521c16bba650f4390902115a4022b6643f80d482568dba96ed0 size: 1367
45.
ハンズオン(演習):GKEで課題アプリ
を立てる
2.kubernetesクラスタ(node)を作成
GUI:https://console.cloud.google.com/kubernetes/list
$ gcloud containerclusters create --num-nodes=1 caas-${NAME} --region asia-northeast1 --machine-type g1-small --enable-autoscaling --min-nodes=1 --
max-nodes=2
WARNING: In June 2019, node auto-upgrade will be enabled by default for newly created clusters and node pools. To disable it, use the `--no-enable-
autoupgrade` flag.
…
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
caas-gossy asia-northeast1 1.11.7-gke.12 35.221.91.90 g1-small 1.11.7-gke.12 3 RUNNING
$ gcloud container clusters list
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
caas-gossy asia-northeast1 1.11.7-gke.12 35.221.91.90 g1-small 1.11.7-gke.12 3 RUNNING
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-caas-gossy-default-pool-1bb7e39c-dg0p Ready <none> 2m v1.11.7-gke.12
gke-caas-gossy-default-pool-4a92f4d4-fqxk Ready <none> 2m v1.11.7-gke.12
gke-caas-gossy-default-pool-644ee183-jt15 Ready <none> 2m v1.11.7-gke.12
46.
ハンズオン(演習):GKEで課題アプリ
を立てる
3.MySQLイメージを使ったpodをデプロイし、
外部に公開(deployment ・service 作成)
$cd app/mysql/
$ envsubst < mysql-deployment.yaml | kubectl create -f -
deployment.extensions/mysql-gossy-deployment created
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
mysql-gossy-deployment 2 2 2 2 26s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-gossy-deployment-56c95f5cc7-k4rqp 1/1 Running 0 47s
mysql-gossy-deployment-56c95f5cc7-scxpc 1/1 Running 0 47s
$ envsubst < mysql-service.yaml | kubectl create -f -
service/mysql-gossy-service created
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.63.240.1 <none> 443/TCP 12m
mysql-gossy-service LoadBalancer 10.63.245.139 <pending> 3306:30555/TCP 42s
47.
ハンズオン(演習):GKEで課題アプリ
を立てる
3.MySQLイメージを使ったpodをデプロイし、
外部に公開(deployment ・service 作成)
IN_MYSQL_IP:cluster内でのみ利用できるローカルIP
EX_MYSQL_IP: cluster外でも利用できるグローバルIP
GUI(deployment):https://console.cloud.google.com/kubernetes/workload
GUI(service):https://console.cloud.google.com/kubernetes/discovery
$ kubectl get services mysql-$NAME-service -o=jsonpath="{.spec.clusterIP}"
10.63.245.139
$ kubectl get services mysql-$NAME-service -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"
35.194.102.226
$ export IN_MYSQL_IP=`kubectl get services mysql-$NAME-service -o=jsonpath="{.spec.clusterIP}"`
$ export EX_MYSQL_IP=`kubectl get services mysql-$NAME-service -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`
$ mysql -h$EX_MYSQL_IP -uuser -ppassword
Warning: Using a password on the command line interface can be insecure.
…
mysql>
48.
ハンズオン(演習):GKEで課題アプリ
を立てる
4.backendイメージを使ったpodをデプロイし、
外部に公開(deployment ・service 作成)
$cd app/backend/
$ envsubst < backend-deployment.yaml | kubectl create -f -
deployment.extensions/backend-gossy-deployment created
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
backend-gossy-deployment 2 2 2 0 10s
mysql-gossy-deployment 2 2 2 2 16m
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
backend-gossy-deployment-5746c85f4b-b84bq 1/1 Running 0 24s
backend-gossy-deployment-5746c85f4b-lg4g4 1/1 Running 0 24s
mysql-gossy-deployment-56c95f5cc7-k4rqp 1/1 Running 0 16m
mysql-gossy-deployment-56c95f5cc7-scxpc 1/1 Running 0 16m
$ envsubst < backend-service.yaml | kubectl create -f -
service/backend-gossy-service created
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
backend-gossy-service LoadBalancer 10.63.254.100 34.85.113.63 9200:30926/TCP 50s
kubernetes ClusterIP 10.63.240.1 <none> 443/TCP 26m
mysql-gossy-service LoadBalancer 10.63.245.139 35.194.102.226 3306:30555/TCP 14m