Microsoft Corporation
Sr. Cloud Developer Advocate
Java Champion
Yoshio Terada
40 topic of Kubernetes
in 40 minutes
• GlassFish エバンジェリスト at
Sun Microsystems 2001 - 2010
• Sr. Java SE/EE エバンジェリスト
at Oracle Japan 2010 - 2015
• Sr. Java エバンジェリスト
• Sr. Cloud Developer Advocate at
Microsoft Japan 2015 –
• 多くの技術イベントで登壇
自己紹介
コンテナ関連
コンテナ関連の
注意点
17. latest タグを使わないで
latest tag は使用しないでください !!
$ docker build -t myimage/app:latest .
$ docker tag myimage/app:latest 
private-repo.azurecr.io/myimage/app:latest
$ docker push
private-repo.azurecr.io/myimage/app:latest
タグには BuildId 等を付けましょう !!
18. 小さいイメージの作成を心がけましょう
小さなサイズのイメージを作りましょう!
$ docker images|grep openjdk
openjdk 8u171-jre-alpine3.8 ccfb0c 83MB
openjdk 8u171-jre bef23b 443MB
openjdk latest 82f76 977MB
FROM alpine:3.8 as ALPINE
RUN apk add tzdata
RUN echo "JST-9" > /etc/TZ
#####################################################
# Build container image copying from ALPINE artifact
#####################################################
FROM payara/micro:5.183
LABEL MAINTAINER Yoshio Terada
COPY --from=ALPINE /usr/share/zoneinfo/Asia/Tokyo
/etc/localtime
COPY --from=ALPINE /etc/TZ /etc/TZ
COPY ./target/*.war $DEPLOY_DIR/ROOT.war
EXPOSE 80
19. ユーザのパーミッションは設定しましょう
ユーザのパーミッションを設定しましょう
FROM openjdk:8-jre-alpine
LABEL MAINTAINER Yoshio Terada
COPY ./target/front-end-svc-1.0-SNAPSHOT.jar
/tmp/app.jar
RUN addgroup -g 1000 java
RUN adduser -D -u 1000 -G java java
RUN chown java:java /tmp/payara-micro.jar
USER java
EXPOSE 8080
ENTRYPOINT java -jar /tmp/app.jar
20. DockerHub のイメージをむやみに信じないで
Kubernetes 関連の
基本編
21. 今はDeployment の利用を推奨
デプロイメント(Replication)方法の推移
Replication Controller
Replica Set
Deployment
22. CPU とメモリのリソースは設定しましょう
リソース使用量の制限
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
account-service-74b64648b7-2bqgs 3m 842Mi
account-service-74b64648b7-48kf8 3m 826Mi
For CPU entry:
The above 0.5(500m) is guaranteed to use the half CPU in
1 CPU. The expression 0.1 is equivalent to the expression
100m, which can be read as “one hundred millicpu”. CPU is
always requested as an absolute quantity, never as a
relative quantity.
For Memory entry:
You can express memory as a plain integer or as a fixed-
point integer using one of these suffixes: E, P, T, G, M, K.
You can also use the power-of-two equivalents: Ei, Pi, Ti,
Gi, Mi, Ki. For example, the following represent roughly
the same value:
23. Selector と Label の理解は重要です
Service
V1 Pod
Account
Service
V1 Pod
Account
Service
V2 Pod
Account
Service
V2 Pod
Account
Service
Account
Service
“Label & Selector” の理解は重要!!
24. Service で LoadBalancer は極力
使用しない
外部に公開するサービスは基本的に
Ingress Controller 経由で公開
プライベート・ネットワーク接続で
サービスを内部ロードバランサで
内部公開などに限定して利用
25. k8s ではまったときはコレ !!
1. kubectl describe pod
2. kubectl logs POD_NAME
3. kubectl exec -it POD_NAME /bin/sh
4. kubectl get events –w
5. Deploy Ubuntu pod in same NameSpace
問題が発生した時に何をする?
Kubernetes 運用の
アドバイス
26. すべての k8s の機能を利用する
必要はない !!
Please Remember J2EE !!
27.複雑な構成を作らない
運用構成を変えればできる事を
無理して k8s でしない
Simple is the Best !!
28. k8s はポータビリティがある?
ある点とない点がある
28. LB も PV も実装依存
29. どのバージョンを利用してますか?
(バージョン毎に設定や機能の差異がある)
30. 大規模 k8s クラスタを構築しない !!
(ノード数を多く作らない)
大規模 k8s クラスタを構築するのは
巨大モノリスを作るのと同じ !!
• メンテナンス性の低下
• クラスタが壊れた際
全サービスへ影響 (影響大)
• k8s の進化は激しく
バージョンアップが必須
• 簡単にクラスタの複製を
素早く構築できるレベルが
最適
31. k8s のバージョン・アップは慎重に !!
ボタン押下、コマンド実行でバージョン・アップ
$ az aks upgrade --name yoshio-java-aks ¥
--resource-group yoshio-java-aks ¥
--kubernetes-version 1.11.3 --yes ¥
--debug
とても簡単!!
Please Wait !!
7. k8s の Version Up には注意しましょう
Azure 以外でも同様
• コマンドの実行に失敗した場合どうしますか?どうなりますか?
• 新しいバージョンにした場合、古い設定は動かない可能性があります -
> YAML 設定ファイル修正
-> 新しいコマンド引数の追加
3rd Party ツールは新しいバージョンで動く?
推奨:新しい k8s クラスタの構築
例:k8s のバージョンアップ
Master VM (node) VM (node)
Version11.2
Master VM (node) VM (node)
Version 12.1
推奨:新規クラスタ構築
32.ボリュームを扱う際には注意しましょう
Persistence Volume
は極力使わないでください !!
Azure だけでなく他の環境でも発生
SDK を使用したファイル
保存・更新機能実装のススメ
33. DB はマネージド・サービスを利用 !!
開発環境は OK !! でも本番は NG !!
VNet 経由でManaged DB の利用のススメ
Azure Kubernetes Service (AKS)
Fully managed Kubernetes orchestration service
Auto patching, auto scaling, auto updates
Use the full Kubernetes ecosystem
34. Azure Kubernetes のインストールは
かんたん
Azure CLI からのインストール
$ az group create --name myAKSCluster --location eastus
$ az aks create
--resource-group myAKSCluster ¥
--name myAKSCluster ¥
--node-count 3 ¥
--enable-addons monitoring ¥
--generate-ssh-keys
35. Kubernetes 上で稼働するアプリの
デバッグ (Azure Dev Spaces)
Azure Dev SpacesPreview : Azure Dev Spaces
36. Azure Managed なモニタリング
Prometheus/Grafana の設定・管理が不要
37. kube-advisor : k8s 診断ツール
現時点ではリソース・リミットの指定がない
ポッド一覧を表示
38. Azure DevOps
ほんの数クリックで k8s の DevOps 環境構築
(Aka :Visual Studio Team Services)
Azure DevOps は無料で利用できます
Azure DevOps Providing
Just only
Few Click !!
無料です!私は営業ではありません!!
39. Kubernetes 以外の選択肢も考える
Azure でのコンテナ化
Web App for Containers
Container
Instance
Azure Kubernetes
Services
Kubernetes はマイクロサービス基盤
Azure Functions for Java
Serverless
Kubernetes の全機能を使わなくて
も良いと思います。
便利な所を便利に使いこなしましょう
Microsoft Java
Microsoft Corporation
Sr. Cloud Developer Advocate
Java Champion
Yoshio Terada
40 topic of Kubernetes
in 40 minutes

Japan Container Day 2018

Editor's Notes