Upgrade to Pro — share decks privately, control downloads, hide ads and more …

k8sでJavaを見守る新常識

Chihiro Ito
November 21, 2021

 k8sでJavaを見守る新常識

JJUG CCC 2021 Fallの講演資料です。

Kubernetesが発表されて長い時間が経ち、さまざまなシステムで導入されていきました。そのような中で、Java言語で書かれたアプリケーションをKubernetes上で動かす機会が増えています。

本セッションでは、まず、監視とはそもそも何か、また、Javaの監視について簡単に振り返ります。次に、昔の監視方法はどの様なもので、どの様な課題があったかを整理し、今のシステムではどの様な監視が求められているのかを紹介します。

最後に、Red Hatが提供しているエンタープライズグレードのKubernetesであるOpenShift Container Platformを使用することで、今求められている監視の要件をどの様に実現できるのかを紹介します。

注意:
本セッションではJavaを具体的にどの様に監視するのかという話はしません。Javaの監視の知識がなくても、簡単に詳細な情報を取得する機能について紹介します。

Chihiro Ito

November 21, 2021
Tweet

More Decks by Chihiro Ito

Other Decks in Technology

Transcript

  1. どうすれば良いの? • Red Hat OpenShift Container Platformを使ってください ◦ 監視に必要な基盤はOpenShiftに無料で含まれています ◦

    必要十分な監視の基盤が標準で入っています ◦ 監視の基盤が簡単にインストール、自動で運用されます ◦ 標準的な機能を使って必要十分な情報を取得します 9
  2. OpenShiftはKubernetesを補完する付加価値機能を提供 運用プロセスを含めたポータビリティの実現 AUTOMATED OPERATIONS CLUSTER SERVICES APPLICATION SERVICES DEVELOPER SERVICES

    Middleware, Service Mesh Functions, ISV Monitoring, Chargeback Registry, Logging Automated Builds, CI/CD, IDE 11 Any Infrastructure どの環境でも、迅速かつ 信頼性の高いOS どの環境でも、同様の手 順でアプリケーションを稼 働 どの環境でも、自動化さ れた運用プロセスを実現 Virtual Private cloud Bare metal Public cloud Edge
  3. システムの自律運用化 Operatorによる、システム全体の自律運用 正常稼働 障害検知 状態確認 復旧作業 正常確認 正常稼働 障害検知 動的復旧

    不具合修正 or 再構築 正常確認 自己修復 (Self-Healing) 個別対応 (Customize) いままで人が対応してきた障害対応を自律的に回復する 『Operator』 Automated operations Manage with simplicity.
  4. Automated operations Enterprise Linux CoreOS 13 コンテナアプリの本番適用 OpenShift involve Kubernetes

    ecosystem with partner & community Cluster Services クラスタ管理を容易にし、運用業務を自動化するサービス Physical Virtual Private Public Any infrastructure Developer Services 開発者がコンテナアプリケーション開発に集中できる環境を 整えるサービス Cluster services monitoring, showback, registry, logging Application services middleware, functions, ISV Service mesh Developer services dev tools, automated builds, CI/CD, IDE certified Application Services マイクロサービス間の連携やファンクションサービスを実現 を支援するサービス Logging Registry Monitoring ISV Middleware Function Service ServiceMesh IDE CI/CD Developer Tools チームがスピード、アジリティに自信を持ってビルド できる環境を提供。クラウドネイティブな開発を本番 へのコード作成を支援。 Build fast. Ship first.
  5. OpenShift Core Value Container Value Kubernetes Value OpenShift Value 開発スピードと安定性の両立

    Agility & Reliability リソースの抽象化 Declarative Configuration 堅牢化されたコンテナ実行環境 Trust with Red Hat どこでも実行出来るアプリ Application Portability 自己回復性 Self-healing システムの自律運用化 Manage with Simplicity 一貫した環境の維持 Consistent Environment 自動オートスケール Auto-Scaling コンテナアプリの本番適用 Build fast. Ship first コンテナやk8sで得られる共通の価値 OpenShiftの製品価値
  6. https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1 オープンソースリード <2 years v1.0 v1.1 v1.2 v1.3 v1.4 v1.5

    v1.6 v1.7 v1.8 v1.9 v1.10 v1.11 v1.12 v1.13 v1.14 4 years+ 2016 2017 2018 2019 2 years+ ~2 years ~2 years <2 years <2 years 4 years+ ~2 years Kubernetes versions GoogleがKubernetesを オープンソース化した当初から、 Red Hatも開発に大きく貢献 エンタープライズの機能は先に OpenShift に取り込まれ、オープンソース (Kubernetesプロジェクト)に還元されてい る。
  7. どんな情報を監視するべきか • よく取られている情報 ◦ ハードウェアリソースの使用量 • 取られていないことが多い情報 ◦ そもそもシステムが動いているかどうか ◦

    OSの各種リソース ◦ アプリケーションの情報 ◦ フレームワークやミドルウェアの情報 18 OS HW スタック アプリ App
  8. Javaが標準で提供する情報の取り方 • ログ(java.util.logging、Unified Logging、他JVMログ) • MBean / MXBean / Java

    Management Extensions (JMX) • JDKツール群 (jcmd, jstatなど) • JDK Flight Recorder • MicroProfile Health/Metrics 21
  9. OpenShiftが使用するJavaの標準機能 • 標準出力・標準エラー出力 • Unified Logging (Java 9以降) / JVMログ(Java

    8以前) • MBean / MXBean / JMX • JDK Flight Recorder (Java 8 u262以降, Java 11以降) • MicroProfile Metrics/Health 42
  10. OpenShiftが統合するツール群 • どこで問題が起こっているかを確認 ◦ Service Mesh (Istio, Jaeger, Kiali, Grafana)

    • 各コンテナの問題を確認 ◦ Liveness / Rediness / Startup Probe (Kubernetes) ◦ OpenShift Logging (Elasticsearch + Fluentd + Kibana) ◦ Cluster Monitoring (Prometheus) ◦ Cryostat(Grafana) 43
  11. Javaの機能とOpenShiftのツールの対応 44 Service Mesh (OpenTracing、OpenTelemetry) Liveness / Readiness / Startup

    Probe MicroProfile Health OpenShift Logging 標準出力・標準エラー出力 java.util.logging Unified Logging JVMログ Cluster Monitoring MBean / MXBean / JMX MicroProfile Metrics Cryostat JDK Flight Recorder
  12. Service Mesh • メリット ◦ システムのどこに問題が起きているかを確認 ◦ どこの処理に時間が掛かったかを確認 • 監視環境構築

    ◦ オペレータでインスタンスを作るだけ • アプリケーション ◦ OpenTracingを使うように設定 46
  13. Liveness / Readiness / Startup Probe . • メリット ◦

    コンテナの状態を確認 • 監視環境構築 ◦ Kubernetesの標準機能なのでインストール不要 • アプリケーション ◦ コンテナの設定で監視先URLを指定 55
  14. OpenShift Logging . • メリット ◦ 各種ログを可視化 • 監視環境構築 ◦

    Operator をインストール ◦ カスタムリソース定義でインスタンスを作成 • アプリケーション ◦ 標準出力かファイルへログを出力 57
  15. OpenShift Loggingの構築方法2 61 監視基盤のカスタムリソース定義を作成 (複雑なカスタマイズも可能) apiVersion: "logging.openshift.io/v1" kind: "ClusterLogging" metadata:

    name: "instance" namespace: "openshift-logging" spec: managementState : "Managed" logStore: type: "elasticsearch" retentionPolicy : application: maxAge: 1d infra: maxAge: 7d audit: maxAge: 7d elasticsearch : nodeCount: 3 storage: size: 200G resources: requests: memory: "8Gi" proxy: resources: limits: memory: 256Mi requests: memory: 256Mi redundancyPolicy : "SingleRedundancy" visualization : type: "kibana" kibana: replicas: 1 curation: type: "curator" curator: schedule: "30 3 * * *" collection: logs: type: "fluentd" fluentd: {}
  16. Cluster Monitoring • メリット ◦ 各種メトリクスをグラフ化 • 監視環境構築 ◦ 管理者がユーザ領域での監視を有効化

    ◦ ユーザに権限付与 • アプリケーション ◦ カスタムリソース定義でアプリケーションを監視対象に追加 62
  17. Cluster Monitoringの構築方法 管理者側1 66 apiVersion: v1 kind: ConfigMap metadata: name:

    cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true 機能をユーザ領域にも拡張(1度のみ) ユーザ領域用の 監視環境を 自動作成 @openshift-user-workload-monitoring名前空間
  18. Cluster Monitoringの構築方法 管理者側2 67 oc policy add-role-to-user <role> <user> -n

    <monitored_namespace> 名前空間を監視する権限(ロール)を付与 oc -n openshift-user-workload-monitoring adm policy add-role-to-user \ user-workload-monitoring-config-edit <user> \ --role-namespace openshift-user-workload-monitoring ユーザが監視対象を追加できる権限(ロール)を付与
  19. Cluster Monitoringの構築方法 アプリ側 68 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels:

    k8s-app: prometheus-example-monitor name: prometheus-example-monitor namespace: ns1 spec: endpoints: - interval: 30s port: web scheme: http selector: matchLabels: app: prometheus-example-app 監視したい対象を追加
  20. Cryostat . • メリット ◦ JVM内部の情報を取得・可視化 ◦ カスタムイベントを作るとアプリケーションの情報も対応可能 • 監視環境構築

    ◦ Operatorでインストール&自動運用 • アプリケーション ◦ カスタムリソース定義でJFRを起動 69 開発中、製品非サポート
  21. まとめ 簡単 • 設定だけで監視 • 自動構成 • 自律運用 75 安い

    • 無料で使用可能 • 構築コスト低 便利 • 標準仕様 • 必要十分な情報