Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Japan Container Day 2018

6,222 views

Published on

This presentation was used for Japan Container Days 2018.
I explained the important point to use the k8s on Production environment for Japanese Audience.

Published in: Technology
  • Be the first to comment

Japan Container Day 2018

  1. 1. Microsoft Corporation Sr. Cloud Developer Advocate Java Champion Yoshio Terada 40 topic of Kubernetes in 40 minutes
  2. 2. • 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 – • 多くの技術イベントで登壇 自己紹介
  3. 3. コンテナ関連
  4. 4. コンテナ関連の 注意点
  5. 5. 17. latest タグを使わないで
  6. 6. 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
  7. 7. タグには BuildId 等を付けましょう !!
  8. 8. 18. 小さいイメージの作成を心がけましょう
  9. 9. 小さなサイズのイメージを作りましょう! $ docker images|grep openjdk openjdk 8u171-jre-alpine3.8 ccfb0c 83MB openjdk 8u171-jre bef23b 443MB openjdk latest 82f76 977MB
  10. 10. 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
  11. 11. 19. ユーザのパーミッションは設定しましょう
  12. 12. ユーザのパーミッションを設定しましょう 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
  13. 13. 20. DockerHub のイメージをむやみに信じないで
  14. 14. Kubernetes 関連の 基本編
  15. 15. 21. 今はDeployment の利用を推奨
  16. 16. デプロイメント(Replication)方法の推移 Replication Controller Replica Set Deployment
  17. 17. 22. CPU とメモリのリソースは設定しましょう
  18. 18. リソース使用量の制限 $ 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:
  19. 19. 23. Selector と Label の理解は重要です
  20. 20. Service V1 Pod Account Service V1 Pod Account Service V2 Pod Account Service V2 Pod Account Service Account Service “Label & Selector” の理解は重要!!
  21. 21. 24. Service で LoadBalancer は極力 使用しない
  22. 22. 外部に公開するサービスは基本的に Ingress Controller 経由で公開 プライベート・ネットワーク接続で サービスを内部ロードバランサで 内部公開などに限定して利用
  23. 23. 25. k8s ではまったときはコレ !!
  24. 24. 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 問題が発生した時に何をする?
  25. 25. Kubernetes 運用の アドバイス
  26. 26. 26. すべての k8s の機能を利用する 必要はない !! Please Remember J2EE !!
  27. 27. 27.複雑な構成を作らない 運用構成を変えればできる事を 無理して k8s でしない Simple is the Best !!
  28. 28. 28. k8s はポータビリティがある? ある点とない点がある
  29. 29. 28. LB も PV も実装依存
  30. 30. 29. どのバージョンを利用してますか? (バージョン毎に設定や機能の差異がある)
  31. 31. 30. 大規模 k8s クラスタを構築しない !! (ノード数を多く作らない)
  32. 32. 大規模 k8s クラスタを構築するのは 巨大モノリスを作るのと同じ !! • メンテナンス性の低下 • クラスタが壊れた際 全サービスへ影響 (影響大) • k8s の進化は激しく バージョンアップが必須 • 簡単にクラスタの複製を 素早く構築できるレベルが 最適
  33. 33. 31. k8s のバージョン・アップは慎重に !!
  34. 34. ボタン押下、コマンド実行でバージョン・アップ $ az aks upgrade --name yoshio-java-aks ¥ --resource-group yoshio-java-aks ¥ --kubernetes-version 1.11.3 --yes ¥ --debug とても簡単!!
  35. 35. Please Wait !!
  36. 36. 7. k8s の Version Up には注意しましょう Azure 以外でも同様 • コマンドの実行に失敗した場合どうしますか?どうなりますか? • 新しいバージョンにした場合、古い設定は動かない可能性があります - > YAML 設定ファイル修正 -> 新しいコマンド引数の追加 3rd Party ツールは新しいバージョンで動く? 推奨:新しい k8s クラスタの構築
  37. 37. 例:k8s のバージョンアップ Master VM (node) VM (node) Version11.2 Master VM (node) VM (node) Version 12.1 推奨:新規クラスタ構築
  38. 38. 32.ボリュームを扱う際には注意しましょう
  39. 39. Persistence Volume は極力使わないでください !!
  40. 40. Azure だけでなく他の環境でも発生
  41. 41. SDK を使用したファイル 保存・更新機能実装のススメ
  42. 42. 33. DB はマネージド・サービスを利用 !! 開発環境は OK !! でも本番は NG !!
  43. 43. VNet 経由でManaged DB の利用のススメ
  44. 44. Azure Kubernetes Service (AKS) Fully managed Kubernetes orchestration service Auto patching, auto scaling, auto updates Use the full Kubernetes ecosystem
  45. 45. 34. Azure Kubernetes のインストールは かんたん
  46. 46. 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
  47. 47. 35. Kubernetes 上で稼働するアプリの デバッグ (Azure Dev Spaces)
  48. 48. Azure Dev SpacesPreview : Azure Dev Spaces
  49. 49. 36. Azure Managed なモニタリング Prometheus/Grafana の設定・管理が不要
  50. 50. 37. kube-advisor : k8s 診断ツール 現時点ではリソース・リミットの指定がない ポッド一覧を表示
  51. 51. 38. Azure DevOps ほんの数クリックで k8s の DevOps 環境構築
  52. 52. (Aka :Visual Studio Team Services) Azure DevOps は無料で利用できます
  53. 53. Azure DevOps Providing
  54. 54. Just only Few Click !!
  55. 55. 無料です!私は営業ではありません!!
  56. 56. 39. Kubernetes 以外の選択肢も考える
  57. 57. Azure でのコンテナ化 Web App for Containers Container Instance Azure Kubernetes Services
  58. 58. Kubernetes はマイクロサービス基盤
  59. 59. Azure Functions for Java Serverless
  60. 60. Kubernetes の全機能を使わなくて も良いと思います。 便利な所を便利に使いこなしましょう
  61. 61. Microsoft Java
  62. 62. Microsoft Corporation Sr. Cloud Developer Advocate Java Champion Yoshio Terada 40 topic of Kubernetes in 40 minutes

×