Slide 1

Slide 1 text

“Kubernetes クラスター切り替えて ください” のオモテウラ @capsmalt Kazufumi Saito 1 Cloud Native Days Tokyo 2020 #CNDT2020

Slide 2

Slide 2 text

2 2020年, 気がつけば Kubernetes の世界に

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

“Kubernetes クラスター 切り替えてください” 4

Slide 5

Slide 5 text

5 2020年元旦 わずか1⽇ https://twitter .com/capsmalt/status/1213103609677672453?s=21 “切り替えて” ! ! ! ! ! Twitter⺠ ! @capsmalt

Slide 6

Slide 6 text

6 オモテ ウラ K8s めちゃ良い︕便利︕カッコいい︕︕︕ デファクトでしょ︕ え︖無理。 やれるもんならやってみ︖

Slide 7

Slide 7 text

7 何が無理︖根本的な課題は︖ いま Kubernetes 頑張ろうとしている⽅々に向けて Kubernetes の普及にチカラを注ぐ中での実体験をベースに Kubernetes 実践のリアルをお伝えします。

Slide 8

Slide 8 text

Kazufumi Saito (斎藤 和史) Who am I Red Hat K.K. OpenShift / Kubernetes Architect Kubernetes を国内に広げる 商⽤K8sで実戦/本番投⼊を加速 K8s Lover を増やす @capsmalt 8

Slide 9

Slide 9 text

Cloud Native Meetup Tokyo Cloud Native Developer JP OSSコミュニティのかかわり Japan Rook 9 - Japan Container Days (JKD v18.04, v18.12) - CNDF / CNDT / CNDK 2019 - CNDT 2020 <== Now on air !! Speaker Staff Sponsor Community As

Slide 10

Slide 10 text

アジェンダ 1 2 K8s 実践のリアル in 2020 K8s クラスター維持管理の対応策 10

Slide 11

Slide 11 text

11 K8s 実践のリアル in 2020

Slide 12

Slide 12 text

12 オモテ ウラ K8s めちゃ良い︕便利︕カッコいい︕︕︕ デファクトでしょ︕ え︖無理。 やれるもんならやってみ︖

Slide 13

Slide 13 text

13 良さげ︕ 使い始める 良い︕ スキ︕ これに賭ける︕ えっ・・・ 無理。。。 GAP︖

Slide 14

Slide 14 text

INSTALL HARDEN DEPLOY OPERATE ● Templating ● Validation ● OS Setup ● Identity & Security Access ● App Monitoring & Alerts ● Storage & Persistence ● Egress, Ingress & Integration ● Host Container Images ● Build/Deploy Methodology ● Platform Monitoring & Alerts ● Metering & Chargeback ● Platform Security Hardening ● Image Hardening ● Security Certifications ● Network Policy ● Disaster Recovery ● Resource Segmentation ● OS Upgrade & Patch ● Platform Upgrade & Patch ● Image Upgrade & Patch ● App Upgrade & Patch ● Security Patches ● Continuous Security Scanning ● Multi-environment Rollout ● Enterprise Container Registry ● Cluster & App Elasticity ● Monitor, Alert, Remediate ● Log Aggregation 業務ユーザーが,構築,運⽤の複雑さの為に 導⼊が難しいと考えている Source: The New Stack, The State of the Kubernetes Ecosystem, August 2017 75% Kubernetes を 正しく運⽤するのは 難しい 14

Slide 15

Slide 15 text

Kubernetes の保守は難しい Kubernetesは偉⼤な基礎技術ですが,ストレージ,ネットワーキング,セキ ュリティ,アプリケーションフレームワークなどを統合し,それを四半期ご とに更新し続けることは⼤きな負担です - Ashesh Badani, Red Hat https://www.techrepublic.com/article/why-running-your-own-kubernetes-deployment-could-be-a-terrible-idea/ 15

Slide 16

Slide 16 text

16 Kubernetes は 基本的には “4半期ごとにバージョンアップ” します。 なお,“サポートされるのは直近3バージョン” です。 kubernetes.io Kubernetes Support Policy

Slide 17

Slide 17 text

17 ⼀度システム作ったら 5年は変更しません。 つまりバージョンアップは 5年毎です。 うちは 10年 塩漬けでっせ。 In Japan… Kubernetes は 基本的には “4半期ごとにバージョンアップ” します。 なお,“サポートされるのは直近3バージョン” です。 kubernetes.io Kubernetes Support Policy

Slide 18

Slide 18 text

Kubernetes サポート期間の延⻑ 18 2020年どうなったか︖ ※対象: v1.19以降 https://kubernetes.io/blog/2020/08/31/kubernetes-1-19-feature-one-year-support/

Slide 19

Slide 19 text

Kubernetes サポート期間の延⻑ 19 2020年どうなったか︖ ※対象: v1.19以降 https://kubernetes.io/blog/2020/08/31/kubernetes-1-19-feature-one-year-support/ サポート期間が “9ヶ⽉から1年に延⻑” ありがたや︕︕ でも・・。1年じゃ短すぎるよ・・・。 うちは10ねn(ry

Slide 20

Slide 20 text

20 それでも僕らは Kubernetes を使うんだ︕︕(2020) これぞカオス なんて無謀な。。

Slide 21

Slide 21 text

21 ・各種マネージドサービス ・各種 K8s 製品 ・各種プロフェッショナルサービス 救済の⼿⽴てはある ※製品の⻑期サポートや,技術的な⽀援やトラブルシュートの⽀援など

Slide 22

Slide 22 text

22 ・各種マネージドサービス ・各種 K8s 製品 ・各種プロフェッショナルサービス 救済の⼿⽴てはある ※製品の⻑期サポートや,技術的な⽀援やトラブルシュートの⽀援など もちろん必要に応じて 使って頂くのが良い 外部からメスを ⼊れていく

Slide 23

Slide 23 text

23 いまいちど⾒直して欲しいコト

Slide 24

Slide 24 text

24 CNCF TRAIL MAP

Slide 25

Slide 25 text

25 なぜ CI / CD が TRAIL MAP の2番⽬なのか • アプリケーションの更新 • ビルド,テスト,デプロイ • クラスターのバージョンアップ,流れ の早いテクノロジーへの追随 • アプリケーションのCI • インフラのCI • 各環境への安全・確実なデプロイ

Slide 26

Slide 26 text

26 Git Repo Build App(WAR) Code Analysis Unit Test Archive App Build Image Deploy Dev Integration Test Promote Staging Deploy Staging Dev Project Staging Project Container Registry push image git push シンプルな例 コード開発 〜 K8sクラスターへのデプロイ (Pipeline)

Slide 27

Slide 27 text

27 コード開発 〜 K8sクラスターへのデプロイ (Pipeline) 実態はいかに︖ Git Repo Build App(WAR) Code Analysis Unit Test Archive App Build Image Deploy Dev Integration Test Promote Staging Deploy Staging Dev Project Staging Project Container Registry push image git push シンプルな例 ・バージョン管理がされていない ・仕組みが整っていない (開発者PCのファイルシステム依存)

Slide 28

Slide 28 text

28 Git Repo Build App(WAR) Code Analysis Unit Test Archive App Build Image Deploy Dev Integration Test Promote Staging Deploy Staging Dev Project Staging Project Container Registry push image git push シンプルな例 ・ビルドに必要なクラスファイル/ライブラリが管理されていない ・ビルド端末/⼿順に属⼈性がある(AさんのPCじゃないと無理) ・不要なライブラリが多数含まれている コード開発 〜 K8sクラスターへのデプロイ (Pipeline) 実態はいかに︖

Slide 29

Slide 29 text

29 Git Repo Build App(WAR) Code Analysis Unit Test Archive App Build Image Deploy Dev Integration Test Promote Staging Deploy Staging Dev Project Staging Project Container Registry push image git push シンプルな例 ・テストコードが存在しない(テストは⽬検ベース) ・テストの単位が⼤きすぎる/⼩さすぎる ・テストコードが管理されていない コード開発 〜 K8sクラスターへのデプロイ (Pipeline) 実態はいかに︖

Slide 30

Slide 30 text

K8s に苦労している原因の代表例 30 • 継続的な開発スタイル,テストの流れが整備されていない ==> 実は K8s 云々以前 の課題が根本原因 ==> このケースが圧倒的に多い

Slide 31

Slide 31 text

なぜ K8s のバージョンアップに追随できないか︖ 31 • Kubernetes の難しさ • 技術カバレッジの広さ • リリースサイクルの短さ • 蓄積された負債 • 技術的 • 組織的

Slide 32

Slide 32 text

なぜ K8s のバージョンアップに追随できないか︖ 32 • Kubernetes の難しさ • 技術カバレッジの広さ • リリースサイクルの短さ • 蓄積された負債 • 技術的 • 組織的 “幅広く”,”短いサイクル” でテストが必要 (K8s の機能のdeprecated対応,他)

Slide 33

Slide 33 text

なぜ K8s のバージョンアップに追随できないか︖ 33 • Kubernetes の難しさ • 技術カバレッジの広さ • リリースサイクルの短さ • 蓄積された負債 • 技術的 • 組織的 プロプライエタリ 新規開発者の関わりにくさ 個別のセキュリティパッチ対応 属⼈性,ドキュメント不⾜ 陳腐化しやすいコード “幅広く”,”短いサイクル” でテストが必要 (K8s の機能のdeprecated対応,他)

Slide 34

Slide 34 text

なぜ K8s のバージョンアップに追随できないか︖ 34 • Kubernetes の難しさ • 技術カバレッジの広さ • リリースサイクルの短さ • 蓄積された負債 • 技術的 • 組織的 プロプライエタリ 新規開発者の関わりにくさ 個別のセキュリティパッチ対応 属⼈性,ドキュメント不⾜ 陳腐化しやすいコード “幅広く”,”短いサイクル” でテストが必要 (K8s の機能のdeprecated対応,他) ・影響調査に膨⼤な時間がかかる ・テスト負荷が⽇々増していく ・属⼈性が⽇々増していく ・CI/CD頑張っても,スピード感,安定性が出せない 関連するテクノロジーのアップデートに追随できない

Slide 35

Slide 35 text

コード開発 〜 K8sクラスターへのデプロイ (Pipeline) 実態はいかに︖ 35 Git Repo Build App(WAR) Code Analysis Unit Test Archive App Build Image Deploy Dev Integration Test Promote Staging Deploy Staging Dev Project Staging Project Container Registry push image git push シンプルな例 ・いつでも同じ,かつ正常なK8sクラスターを構築できる状態が整っていない ・K8sのConfigの管理ができていない ・K8sのライフサイクル管理ができていない ・K8s⽤のノード群のライフサイクル管理ができていない ・K8s⽤のストレージ群のライフサイクル管理ができていない

Slide 36

Slide 36 text

36 もしいまからサービス作るなら, 誰もがCI/CDなど当たり前に組み込んだものを作るでしょう。 ・テスト⾄上主義 ・疎結合 ・ALL Declarative なシステム(K8sと相性抜群)

Slide 37

Slide 37 text

37 ・数⼗から数百のサービス ・巨⼤かつ複雑なシステム間連携 ・プロプライエタリな作り込み ・⻑年の継ぎ接ぎアップデート,etc. しかし,現実は・・・。 クラウドネイティブ化するタスクがあったらやれますか︖ (※クラウドネイティブがマッチしているか否かの議論もある) やりますか︖

Slide 38

Slide 38 text

38 Kubernetes を始めとする クラウドネイティブ技術 ポジティブな企業・ヒトがいる︕︕ DevOps の効果を⾼めやすい これを機に, チーム・組織での CI / CD や DevOps実現 に踏み出す⼈達がいる

Slide 39

Slide 39 text

39 https://speakerdeck.com/superbrothers/cloud-native-devops-with-kubernetes-devops-cloudnative-and-gitops Kubernetes で実践する クラウドネイティブ DevOps 参考)

Slide 40

Slide 40 text

Kubernetes とうまくつきあっている先駆者の傾向 40 • アップストリームに追従している • アップストリームにコントリビュートしている • コード開発 • 社内啓蒙 • コミュニティ参画

Slide 41

Slide 41 text

Kubernetes とうまくつきあっている先駆者の傾向 41 • アップストリームに追従している • アップストリームにコントリビュートしている • コード開発 • 社内啓蒙 • コミュニティ参画 • そのために必要なスタックを整えている • 技術選定のスキーム • テストコードの徹底,テストの継続的実施 • 社内展開を推進する⽂化・評価 • 積極的なエンジニア育成,採⽤

Slide 42

Slide 42 text

Let’s Try – コミュニティの参画・形成 42 1) 社外コミュニティへの参画 • たくさんいるスーパーなエンジニアとつながる • 情報収集,共有して貢献。本当に活⽤できるものを知る 2) 社内コミュニティの作成 • ⼀緒にやれる仲間をつくる • 組織として取組むべき対象,独⾃開発の範囲を検討する 創る︓ ⾃作ソフトウェアとして開発し,メンテする 活⽤する︓ 便利な仕組み(公開されているOperator)を使う 創る or 活⽤ の⾒極め

Slide 43

Slide 43 text

Let’s Try – アップストリームと共存 43 • “根幹となるテクノロジー” はアップストリームに追従 • 機能追加はアップストリームに対してPR投げる • コミュニティの主要メンバーになる • 得られるメリット • 影響範囲のあたりがつきやすく,テストしやすい • OSSの品質向上の貢献を受けられる,貢献できる • 取り組まない場合のデメリット • 独⾃開発だと未来永劫メンテがつきまとう • アップストリームのバージョンアップ毎に対応が必要 (負荷が増していく)

Slide 44

Slide 44 text

44 Enjoy Opensource Era !!!

Slide 45

Slide 45 text

45 K8s クラスター維持管理の対応策

Slide 46

Slide 46 text

46 https://speakerdeck.com/masayaaoyama/kubefest2020-lt-k8s-native-testbed?slide=12 Operator フル活⽤な Kubernetes-native テストベッド

Slide 47

Slide 47 text

Operator 47

Slide 48

Slide 48 text

48 What’s Operator An Operator is a method of packaging, deploying and managing a Kubernetes application Kubernetes Applications 運⽤の知⾒をコード化し,ステートフルアプリケーションの運⽤を⾃動化する アプリ運⽤における運⽤の知⾒をコード化し, パッケージ化したもの。 アプリケーション運⽤に必要な以下のような 作業を⾃動的に⾏う。 ・インストール ・リソーススケーリング ・バックアップ ・アップデート 運⽤の知⾒をコード化 Operator - Installation - Backup - Monitoring

Slide 49

Slide 49 text

49 Reconciliation Loop Custom Resource Definition & Custom Controller Custom Controller Custom Resource Definition Deploy CRD Watch StatefulSet ConfigMap Pod Pod Service Actions (Operational Knowledge) Custom Controller Custom Resource Definition Operator = + (Resources) Kubernetes Operator

Slide 50

Slide 50 text

50 これ,クラスターの維持管理に活かせないか︖ ! (Operator)

Slide 51

Slide 51 text

51 Kubernetesクラスターの維持管理 o クラスター作成,削除,変更 o バージョンアップ o ノードの拡張・縮退 o ホストOSアップデート o 証明書管理 o 認証認可ユーザー管理 o 障害時のノード復旧 o … o … o etc. 1.16 1.17 1.18

Slide 52

Slide 52 text

52 V1.16 V1.17 V1.18 V1.19 V1.16 V1.19 クラスタA (既存) クラスタB (新規) アプリケーション,yaml群を 新クラスターに適⽤ $ kubectl apply -f xxx.yaml $ kubectl apply -f yyy.yaml $ kubectl apply -f zzz.yaml 単⼀クラスタ ※Velero (Heptio Ark)やResticで,PVやK8sリソースの抽出・バックアップ クラスターアップデート(マイグレーション)

Slide 53

Slide 53 text

53 V1.16 V1.17 V1.18 V1.19 V1.16 V1.19 クラスタA (既存) クラスタB (新規) アプリケーション,yaml群を 新クラスターに適⽤ $ kubectl apply -f xxx.yaml $ kubectl apply -f yyy.yaml $ kubectl apply -f zzz.yaml 単⼀クラスタ ※Velero (Heptio Ark)やResticで,PVやK8sリソースの抽出・バックアップ クラスターアップデート まずは, “Kubernetes + あなたが必要な標準環境” が正常に動作する必要がある

Slide 54

Slide 54 text

54 Kubernetesクラスターの維持管理 o クラスター作成,削除,変更 o バージョンアップ o ノードの拡張・縮退 o ホストOSアップデート o 証明書管理 o 認証認可ユーザー管理 o 障害時のノード復旧 o … o … o etc. 1.16 1.17 1.18 ・各コンポーネントの正常性をどう担保するか 今回考えるケース)クラスターのバージョンを上げるとき ※もちろんサービスの正常性維持の観点では, アプリケーションの正常性確認,永続データもあるが今回は対象としない

Slide 55

Slide 55 text

55 あなたの Kubernetes クラスターに必要なものは︖ サービス,プロジェクトごとに 必要なコンポーネント (各DB,各CI/CD,etc.) • kube-apiserver, kube-controller-manager, kube-scheduler, etc. • ネットワーク • ストレージ • DNS • etcd • ingress • 内部イメージレジストリ • ノードのチューニング • コンソール • クラスタモニタリング • VM(OS)の管理 • 独⾃のapiserver, controller manager, etc.

Slide 56

Slide 56 text

56 あなたの Kubernetes クラスターに必要なものは︖ サービス,プロジェクトごとに 必要なコンポーネント (各DB,各CI/CD,etc.) • kube-apiserver, kube-controller-manager, kube-scheduler, etc. • ネットワーク • ストレージ • DNS • etcd • ingress • 内部イメージレジストリ • ノードのチューニング • コンソール • クラスタモニタリング • VM(OS)の管理 • 独⾃のapiserver, controller manager, etc. xxx Operator (Custom Controller + CRD) ターゲットクラスターに対して ・各コンポーネントを展開 ・設定を変更 ・削除 ・アップデート

Slide 57

Slide 57 text

57 Operator もソフトウェア Operator v1.1.2 Operator v1.1.3 Operator v1.2.0 Operator v1.2.2 Time Version Custom Controller, CRD(CR) Operator アプリケーションと同様に アップデートやテストが必要 (放置していると負債になる)

Slide 58

Slide 58 text

58 Operator Lifecycle Manager CRD (Custom Resource Definition) Custom Controllers Custom Resource Instances Operator Catalog 1. Register 2. Monitor Registration 3. Install/Update 4. Manage Resource Instances Operator Lifecycle Manager(OLM)は,Kubernetes上のOperatorとそのリソースのライフサイクル全体を容易 にするツール。管理者はどのNamespaceでどのOperatorが利⽤できるのか,また,どのOperatorが実⾏可能な Operatorと対話できるのかを制御可能。Operator Framework (OSS) に含まれる。

Slide 59

Slide 59 text

Automated Dependency Resolution My Operator v1.1.2 requires requires Jaeger Operator jaeger .jaegertracing.io/v1 CockroachDB Operator cockroachdb.charts.helm.k8s.io/v1alpha1 resolves to resolves to Operator Framework 依存性グラフ installed by installed by Operator Lifecycle Manager 59

Slide 60

Slide 60 text

https://github.com/operator-framework Build Run Operate Operator Framework 60

Slide 61

Slide 61 text

創る 活⽤する。 or Operator 61 そして,管理する https://speakerdeck.com/capsmalt/operator-101 https://speakerdeck.com/shkitayama/operatorlifecyclemanager-101

Slide 62

Slide 62 text

創る 活⽤する or Kubernetes Platform 動向を知った上で, リーズナブルな選択を。 62

Slide 63

Slide 63 text

まとめ 63

Slide 64

Slide 64 text

64 まとめ Kubernetes に苦労している主な理由は2つ ・K8s の難しさ ・技術,組織的な負債 ==> オープンな世界にどっぷりハマることをオススメ (技術,組織,コミュニティ,全部楽しいはず) Operator (Custom Controller + CRD)活⽤ ==> あなたに必要なコンポーネントを含んだクラスターの⾃律運⽤

Slide 65

Slide 65 text

65 OperatorによってK8s周辺をフルカバー 運⽤プロセスを含めたポータビリティの実現。コンテナ/Kubernetesシステムを,K8sの技術を活⽤した付加価値機能によって⾃律運⽤を⽀援。 AUTOMATED OPERATIONS CLUSTER SERVICES APPLICATION SERVICES DEVELOPER SERVICES Middleware, Service Mesh Functions, ISV Monitoring, Chargeback Registry, Logging Automated Builds, CI/CD, IDE Any Infrastructure どの環境でも,迅速か つ信頼性の⾼いOS どの環境でも,同様の ⼿順でアプリケーショ ンを稼働 どの環境でも,⾃動化 された運⽤プロセスを 実現 Virtual Private cloud Bare metal Public cloud Edge

Slide 66

Slide 66 text

OpenShift.Run Summer 2020 #openshiftjp ・⽇時: 2020年9⽉24⽇(⽊) 14:00-19:00 予定 ・会場: Zoom / Meet などリモート開催 ・主催: Japan OpenShift User Group ・参加者: Kubernetes, OpenShift, 他クラウドネイティブテクノロジー, などに関わるすべての⽅ ・OpenShift Meetupとは: KubernetesやOpenShift,CNCF Projectなどをはじめとするクラウドネイティブ テクノロジーの最新情報や活⽤ノウハウを共有し合うコミュニティです。 https://openshift.connpass.com/event/184350/ ※有事の際など状況によって変更になる場合がございます OpenShift Meetup 拡⼤版として開催します︕

Slide 67

Slide 67 text

67 Speaker Contents ⻘⼭真也 @amsy810 Kubernetesと連携するアプリケーション開発⼿法 川沼⼤輝 @Santea3173 エンプラに Kubernetes を導⼊してみて分かった5つのTips 須⽥⼀輝 @superbrothers Kubernetes で実践するクラウドネイティブ DevOps (オブザーバビリティ編) 惣道哲也 @tetsuyasd Kubernetes クラスタのログ分析と可視化で知っておくべき こと 〜Elastic Stackの特性と注意点〜 脇⽥祥穂 @sachiho0402 OpenShift cluster-monitoringで困ったこと学んだこと @hodagi コンテナレジストリサーバーにコンテナ以外を格納する @_inductor_ CRI-O shallow dive @tetsuyaIsogai Upgrade 4.4 to 4.5 with OTA その裏側 OpenShift.Run Summer 2020

Slide 68

Slide 68 text

Happy Kubernetes Life 68 @capsmalt