Kubernetesは怖くない!開発者のためのインフラトラブルシューティング入門
by
aoi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Kubernetesは怖くない! 開発者のための インフラトラブルシューティング 入 門 高 橋あおい
Slide 2
Slide 2 text
自己 紹介 ๏ 高 橋あおい • 大手 メーカーでソフトウェアエンジニアとしてキャリアを積んだ後、前 職はサイボウズ株式会社でSREを、現職では教育系アプリケーションの SREに従事 • 趣味:漫画を描く(まんがではじめるKubernetesなど) • X(旧twitter)アカウント:_a 0 i
Slide 3
Slide 3 text
近々Kubernetesのトラブルシューティング 本を翔泳社から出します!お楽しみに! https://www.amazon.co.jp/dp/ 4 7 9 8 1 8 3 9 6 2 Ϋόωςε 入門 ͭ͘ ͬͯɺ ͯ͠ɺ ͯ͠ Ϳ յ 学 ߴڮ͓͍͋ஶ ޒेཛྷҁम Kubernetes ๛ͳϚϯΨͱ Π ϥε τͰ ͡ΊͯͰ ݟͯΘ͔Δ ʂ ͭ ͘ ỳ ͯ ỏ ɹ ͠ ͯ ỏ ɹ ͠ ͯ ֶ Ϳ ೖ ߴ ڮ ͋ ͓ ͍ ஶ ޒ े ཛྷ ҁ म Kubernetes Ϋόωςε յ ,VCFSOFUFTΫϥελΛͭ͘ ͬͯɺ յ͢ ؆୯ϞχλϦϯά༻γεςϜΛͭ͘ Δ 00.LJMMFEΛൃੜͤͯ͞ɺ ͢ LVCFDUM Ͱσόοά͢Δ...and more! ಈ ͔ ͳ ͘ ͯ ỏ ͏ ා ͘ ͳ ͍ τ ϥ ϒ ϧ γ ỿ ồ ς ỹ ϯ ά Λ ମ ݧ ͠ ͳ ͕ Β ֶ Ϳ ࣮ ફ త ೖ ॻ Ố
Slide 4
Slide 4 text
目 次 ๏怖くなくなるKubernetes • Kubernetesの特徴を知る • Kubernetesのアーキテクチャーを知る • 何が起きているか知る 方 法を知る ๏【デモ】実践!トラブルシューティング
Slide 5
Slide 5 text
今 日 はこういう話はしません ๏Dockerとは何か、コンテナとは何か ๏Kubernetesに関する細かなTips • 安全にアプリケーションを運 用 する 方 法や関連するKubernetesの機能 など
Slide 6
Slide 6 text
このセッションを通して ๏Kubernetesが怖くなくなるといいな • 詳しく理解する必要はないです、なんとなくわかればOK! • トラブルシューティングのやり 方 の参考になれば • インフラだから特別なポイント、アプリケーションのデバッグと変わらないポ イント
Slide 7
Slide 7 text
ා͘ͳ͘ͳΔ ,VCFSOFUFT
Slide 8
Slide 8 text
Kubernetesが怖い? ๏わからなくて怖い ๏ 目 に 見 えないから怖い ๏何が起きてるかわからなくて怖い
Slide 9
Slide 9 text
知ることで怖さを減らす ๏Kubernetesの特徴を知る ๏Kubernetesのアーキテクチャーを知る ๏何が起きているか知る 方 法を知る
Slide 10
Slide 10 text
Kubernetesの特徴を知る
Slide 11
Slide 11 text
Kubernetesとは ๏open-source system for automating deployment, scaling, and management of containerized applications.※ ๏コンテナ化されたアプリケーションのデプロイ、スケーリング、お よび管理を 自 動化するためのオープンソースシステム ※Kubernetes公式サイトより引 用 (https://kubernetes.io/)
Slide 12
Slide 12 text
Kubernetesの特徴 1 . 障害発 生 時に、各コンテナの設定 ・ 復旧を簡単にする 2 . コンテナの仕様の管理を簡単にする 3 . 複数台のサーバを利 用 してコンテナを起動したいとき、最適な起動 先を決定を簡単にする
Slide 13
Slide 13 text
1. 障害発 生 時に、各コンテナの設定 ・ 復旧を簡単にする ๏障害から 自 動復旧するよう試みる Reconciliation Loop といいます
Slide 14
Slide 14 text
2. コンテナの仕様の管理を簡単にする ๏ファイルを利 用 して各設定を管理することができる マニフェストファイルといい YAMLで書くことが多いです
Slide 15
Slide 15 text
3. 複数台のサーバを利 用 してコンテナを起動したいとき、 最適な起動先の決定を簡単にする ๏KubernetesのAPIで抽象化されており、サーバー固有の設定を知る 必要がない ๏コンテナを起動するマシンについての 情報は書く必要がない apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.24.0 ports: - containerPort: 80 resources: requests: memory: 100Mi コンテナイメージを指定する だけ Podというリソースを 使ってコンテナを起動
Slide 16
Slide 16 text
これらの特徴のおかげで ๏開発者でもアプリケーションのデプロイが楽にできるようになっ た! ๏ 一方 、いままで関わってきていない領域の知識も必要に… 大 変なポイント
Slide 17
Slide 17 text
Kubernetesの アーキテクチャーを知る
Slide 18
Slide 18 text
Kubernetesのアーキテクチャ
Slide 19
Slide 19 text
Kubernetesのアーキテクチャ Database API server
Slide 20
Slide 20 text
何が起きているか 知る 方 法を知る
Slide 21
Slide 21 text
何が起きているか把握することで怖くなくなる ๏これまでの「何が起きているか」を把握する難しさ • 「OSやアプリケーションによってログの保存場所が違う」 • systemd?journalctl? • そもそも何が動いているの? • さまざまなコマンドを覚える必要がある • ps, top …
Slide 22
Slide 22 text
何が起きているか把握することで怖くなくなる ๏Kubernetesで 見 る場所/ 見方 が集約される • Kubernetesのログ • KubernetesのEvents
Slide 23
Slide 23 text
Kubernetesのログ ๏Kubernetesのコンテナのログはkubectlというツールを使うことで 見 ることができる • kubectlで全てのコンテナのログが 見 れる ๏ただしkubectlで 見 れるログは永久保存ではない • 永久保存するための転送先は環境それぞれなので、転送先のログの 見方 は覚える必要がある
Slide 24
Slide 24 text
KubernetesのEvents ๏Kubernetesのリソースごとに何が起こったか 見 ることができる
Slide 25
Slide 25 text
kubectlを使えるようになろう ๏kube-apiserverにアクセスするためのコマンドラインインター フェース ๏kubectlでアクセスしたその先に全てがある(といっても過 言 ではな い) ๏公式から提供されているツール • 他にもk 9 sなど便利なツールはたくさんありますが、今回は基礎的な kubectlの使い 方 のみ説明する
Slide 26
Slide 26 text
これだけ覚えて帰ってください ๏kubectl get <リソース名> • リソースの情報を取得するコマンド ๏kubectl describe <リソース名> • リソースの詳細を表 示 するコマンド ๏kubectl logs • ログを取得するコマンド 困ったらchatGPTに聞こう! リソースとは Kubenetesで扱う オブジェクトのこと
Slide 27
Slide 27 text
ʲσϞʳ ࣮ફʂτϥϒϧγϡʔςΟϯά
Slide 28
Slide 28 text
Pod/ReplicaSet/Deployment ๏Pod: コンテナを起動するための最 小 の単位、リソース ๏ReplicaSet: Podを複数管理するためのリソース ๏Deployment: ReplicaSetを複数管理するためのリソース
Slide 29
Slide 29 text
Service ๏Deploymentで作成した複数Podへのアクセスを適切にルーティング してもらうために、Serviceというリソースを利 用
Slide 30
Slide 30 text
トラブルシューティングのコツ1:狭い範囲から調査していく
Slide 31
Slide 31 text
トラブルシューティングのコツ2:仮説検証を繰り返す ๏これはインフラのトラブルシューティングに限った話ではない ๏XXではないか?→確かめる ๏仮説を組み 立 てるために証拠をたくさん集める
Slide 32
Slide 32 text
動かしてみよう Kubernetes
Slide 33
Slide 33 text
リポジトリの紹介 ๏皆様の 手 元で再現させることができます ๏https://github.com/aoi 1 /developers-summit- 2 0 2 4
Slide 34
Slide 34 text
これまでの知識を使ってトラブルシューティング実演
Slide 35
Slide 35 text
๏動画1
Slide 36
Slide 36 text
これまでの知識を使ってトラブルシューティング実演
Slide 37
Slide 37 text
No content
Slide 38
Slide 38 text
実際にはより複雑な問題であるケースの 方 が多い ๏しかも 自 分たちで書いたコードではないことが多い • デバッグ 用 のコードを 入 れ込めない ๏kubectlでできることは限りがあるので、あらかじめ情報を取得して おくことが鍵となる • ログがローテートされてしまう、Eventsがローテートされてしまう etc … ๏「オブザーバビリティ(可観測性)」を向上させよう
Slide 39
Slide 39 text
Kubernetesは怖くない! ๏けれど難しくなっている部分があるのは事実 ๏ 一 緒に旅を楽しみましょう!
Slide 40
Slide 40 text
"QQFOEJY
Slide 41
Slide 41 text
ローカルでKubernetesクラスタをつくろう ๏kindを使おう • https://kind.sigs.k 8 s.io/ • macOS: brew install kind • goがインストールされていれば:go install sigs.k 8 s.io/kind@v 0 . 2 0 . 0
Slide 42
Slide 42 text
ローカルでKubernetesクラスタをつくろう ๏コマンドを 一行 実 行 するだけで良い • kind create cluster
Slide 43
Slide 43 text
τϥϒϧγϡʔςΟϯάΛ ॿ͚ΔΦϒβʔόϏϦςΟ
Slide 44
Slide 44 text
(再)インフラのトラブルシューティングの難しさ • 何が起きているか把握することが難しい • 様々なログディレクトリ、ツール • デバッグ 用 のコードを 入 れられないことがほとんど
Slide 45
Slide 45 text
Kubernetesによって解決されることもあるが… ๏実際は難しくなっていることがほとんど • 昔)サーバーにログインしてログを参照する、psコマンドを実 行 する • Kubernetes)コンテナにログインしてもshellがない、何もできない、 ログはローテートされてクラスタから消えている
Slide 46
Slide 46 text
そこでオブザーバビリティ ๏ 日 本語では「可観測性」 ๏「外部からシステムがどれくらい観測可能か」という指標 • 指標とは…Logs、Metrics、Traces、Pro fi les、Dumps ๏可観測になると… • コンテナがどれくらいリソースを使っているかがわかる • 通信の経路がわかる
Slide 47
Slide 47 text
3つのプライマリシグナル ๏Logs ๏Metrics • メトリクスは測定値の集合です。測定値を利 用 した統計的な処理をした り、傾向を 見 たい場合に活 用 できます ๏Traces • ユーザーないしアプリケーションの通信を追跡するための概念
Slide 48
Slide 48 text
Traces
Slide 49
Slide 49 text
モニタリング ๏ダッシュボード • 収集したメトリクスやログなどを 見 える状態にする ๏アラート • 収集したメトリクスやログなどからシステムの異常を知らせる
Slide 50
Slide 50 text
kubectlでよくハマる罠 ๏--namespaceでnamespaceを指定していない • kubectl get podしても 見 つからない→実は違うnamespaceにありまし た • —namespaceを指定しないとcon fi gで設定されているデフォルトの namespace内のリソースしか探しません