20210312 に行われた CloudNative Days Spring 2021 ONLINE のスライドです
Kubernetesがない世界のCloudNativeジャーニー あさぎ(@_athagi) CloudNative Days Spring 2021 ONLINE (#CNDO2021)
View Slide
古き良き導入 LBAPAPAPDBDBDevgit pushOps
古き良き導入 Devgit pushLBAPAPAPDBDBOps
これからの時代は だ! SaaS クラウド
を使おう!
クラウドネイティブへのアプローチ ● 0からクラウドネイティブに作り直す:夢のある方針 ○ 新規に作り始めるならこっち ○ 既存システムがある場合はビックバンリライトになる ■ 保証されるのはビッグバンだけ(Martin Fowler) ● リフト&シフトして徐々に最適化する:現実的な方針 ○ 長期的な観点で計画を立てる必要がある ○ クラウドリフト後に最適化するためにリファクタリングしないと単なるリホストになってしまう
クラウドネイティブとは クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。 これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。 Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。 CNCF Cloud Native Definition v1.0 : https://github.com/cncf/toc/blob/main/DEFINITION.md
クラウドネイティブとは クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、 スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。 これらの手法により、 回復性、管理力、および可観測性のある疎結合システム が実現します。 これらを 堅牢な自動化と組み合わせることで、エンジニアは インパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うこと ができます。 Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。 CNCF Cloud Native Definition v1.0 : https://github.com/cncf/toc/blob/main/DEFINITION.md
クラウドネイティブのメリット 素早く継続的にユーザに価値を届ける ● スケーラブル ● 堅牢な自動化 ● 回復性 ● 管理のしやすさ ● 可観測性 ● 疎結合 変更を最小限の労力で頻繁かつ予測どおりに行う
じゃないとクラウドネイティブにはなれない?
がある世界とない世界
のある世界
K8s のある世界 CIContainer RegistryDev Ops/SREgit pushimage pushmanifest
特徴 ● コンテナの恩恵 ○ どの環境でも同じように動く ● K8s の恩恵 ○ 宣言的な構成管理 ○ 開発と運用の関心ごとを分離 ○ 自動化されたロールアウト/ロールバック ○ 自己修復 ● 組織としてK8s をキャッチアップしていく必要性
のない世界
K8s のない世界 Golden Imagegit pushArtifactDevOps/SREDeploy scriptCI
K8s のない世界 Golden Imagegit pushArtifactDevDeploy scriptOps/SRECI
特徴 ● 以前の組織構造をそのまま持っていける ○ 組織の役割を大きく変えずにクラウドリフトできる ○ 最終的にはクラウドに適応した組織構造に変える ● 元々の構成をそのままツールに乗せるので理解しやすい ○ 局所的に作業を自動化できる ● K8s の学習コストを払うことを避けられる
クラウドネイティブのメリット 「クラウドネイティブになりました!」という プレスリリース
クラウドネイティブのメリット ではなく
クラウドネイティブのメリット 素早く継続的にユーザに価値を届ける
K8s のある世界とない世界の差分 ● K8s がある世界 ○ 宣言的 ○ コンテナイメージという単一の成果物 ○ インフラ・K8s・アプリを管理 ● K8s がない世界 ○ 命令的 ○ Artifact と Golden Image の組み合わせ ○ インフラ・OS・アプリを管理
共通な部分 ● テストを書いてCICDを頻繁に回すことが必要 ○ CIで仕様と実装のズレを検知 ○ 環境への継続的なデプロイ ● 常にデプロイ可能な成果物 ● IaC は必須 ● 自動化によってレバレッジを効かせていく ● 分散モノリスになる可能性
K8s がない世界の落とし穴
K8s がない世界の落とし穴 Devgit pushLBAPAPAPDBDBOps
AWS CloudK8s がない世界の落とし穴 Golden Imagegit pushArtifactDevDeploy scriptSRE
K8s がない世界の落とし穴 ● 一つのチームで開発のサイクルが回せない ○ 組織間のオーバーヘッドが発生し、素早くサイクルを回せない ● クラウドシフトして局所的な自動化で満足してしまうため、組織の境界が変わる力学が働かない ● アドホックな自動化による業務の硬直化 ● K8s やコンテナが解決している問題を自分たちで実装する必要あり ● チーム間の技術スタックが異なり、組織内で共有可能なナレッジが蓄積されない可能性
対応策 ● プロダクト開発チームがセルフサービスで運用していける状態を目指す ● オプションとして運用のベストプラクティスを導入できるようにするためのある程度の共通化 ● 局所最適にならないためのプロダクト全体のデザイン
対応策 ● Stream-aligned team ○ ユーザに価値を届けることが可能なチーム ● Enabling team ○ Stream-aligned team をサポートして出来るようにする ● Platform team ○ セルフサービスなプラットフォームをStream-aligned team に提供 Team Topologies: Organizing Business and Technology Teams for Fast Flow
クラウドネイティブの時代 Stream-aligned team ● プロダクト開発 ● ビルド・デリバリー・デプロイ ● テスト環境の管理 ● 本番環境の運用 Enabling team(SRE) ● プロダクトチームの補助 ■ 運用やCICDのプラクティスの提供 Platform team ● セルフサービスのプラットフォーム 対応策 古き良き時代 Dev ● プロダクト開発 ● ビルド・デリバリー Ops ● テスト環境の管理 ● 本番環境へのデプロイ ● 運用 ● 監視
対応策 Golden Imagegit pushArtifactDeploy scriptCI
でも、そもそも
でも、そもそも...... ● K8s の学習コストを払わない代わりに、自分たちで作りこまなくてはならない ○ 仕組みに乗ることで落とし穴を避けられる ■ Kubernetes ■ マネージドサービス ● 変化に対応できる組織になる必要がある ○ 組織レベルで古き良き時代から変わる必要がある ● (クラウドリフトも大変だけど)クラウドジャーニーに終わりはないという マインドが必要
まとめ ● クラウドネイティブのメリットを最大化 ○ テストやCICDを整備することの必要性 ○ 独立したチームで開発サイクルをまわす ● K8s がなくてもクラウドネイティブのメリットを受けることは可能 ● K8s があると向かっていくべき方向が見えやすくなる ● クラウドジャーニーに終わりはない