Slide 1

Slide 1 text

Cassandra on Kubernetes k8ssandraの紹介

Slide 2

Slide 2 text

森下 雄貴 ソリューションアーキテクト / DataStax • Apache Cassandra™ コミッター • Google Cloud Professional Cloud Architect 2 @yukim https://zenn.dev/yukim

Slide 3

Slide 3 text

3 クラウドネイティブでスケーラブルなデータストア + 管理ツールと簡単なデータアクセス

Slide 4

Slide 4 text

+ =

Slide 5

Slide 5 text

k8ssandra.io

Slide 6

Slide 6 text

K8ssandraでセットアップされるコンポーネント 6 Helmでのパッケージング cass-operatorで管理されるクラウドネイティブDB Reaper Medusa メトリクス収集と可視化 外部からのアクセスを提供するKubernetes Ingress (必 要に応じて) REST, GraphQL, ドキュメントAPIでのデータアクセス データ同期とバックアップ/復元を担う管理ツール

Slide 7

Slide 7 text

K8ssandraコンポーネントの役割 7 Kubernetesクラスター データゲートウェイ NoSQL DB Web / モバイル アプリ ユーザー Ingress マイクロサービス オペレーター Reaper Medusa オブジェクトストア データ同期 バックアップと復元 デプロイ メトリクスUI メトリクスDB

Slide 8

Slide 8 text

k8ssandraの(基本的な)インストール 8 helm repo add k8ssandra https://helm.k8ssandra.io/stable helm repo update helm install demo k8ssandra/k8ssandra

Slide 9

Slide 9 text

ローカル環境 (開発用) クラウド環境 (本番) 9 ローカル環境およびクラウドへのインストール https://github.com/k8ssandra/k8ssandra-terraform

Slide 10

Slide 10 text

インストールガイド - docs.k8ssandra.io/install

Slide 11

Slide 11 text

Kubernetes上でのスケーラブルなデータ層 アプリケーション データ インフラ マイクロサービス データゲートウェイ NoSQLデータベース コンテナオーケストレーション クラウド Web / モバイル アプリ 11

Slide 12

Slide 12 text

Apache Cassandra™ - NoSQL分散データベース ● 2010年からApacheトップレベルプ ロジェクト ● 最新バージョン: 4.0 ● 分散データベース ● 柔軟なスケーラビリティ ● ハイパフォーマンス ● 高可用性/耐障害性 ● パーティション単位でレコードを保持

Slide 13

Slide 13 text

https://github.com/k8ssandra/cass-operator cass-operatorの機能: ● CassandraDatacenter カスタムリソース定義(CRD)の提供 ○ クラスタートポロジーの設定(DC/ラック) ○ cassandra.yamlやjvm-server.optionsの設定 ○ ローリングリスタート ● ノードのブートストラップ管理 ● シードノードの自動選定 ● クラスターのスケールアウト ● ノードの自動置き換え ● 初期スーパーユーザーの自動作成 ● ノードのヘルスチェック cass-operator: Cassandraクラスターのデプロイを簡単に! 13

Slide 14

Slide 14 text

AZをラックに割り当て

Slide 15

Slide 15 text

Cassandra Management API 15 Cassandra Management API Service CASSANDRA mgmt-api https://github.com/k8ssandra/management-api-for-apache-cassandra

Slide 16

Slide 16 text

モニタリング 16 https://github.com/datastax/metric-collector-for-apache-cassandra

Slide 17

Slide 17 text

K8ssandraとkube-prometheus-stack

Slide 18

Slide 18 text

デモ: K8ssandraセットアップ 1. GKEの3ノードのリージョンクラスターをus-west1に作成(事前に準備済み) > gcloud container clusters create k8ssandra-demo --region us-west1 --machine-type "e2-standard-8" --num-nodes 1 > gcloud container clusters get-credentials k8ssandra-demo --region us-west1 2. Traefikのインストール > helm repo add traefik https://helm.traefik.io/traefik > helm repo update > helm install traefik traefik/traefik

Slide 19

Slide 19 text

デモ: K8ssandraセットアップ 3. k8ssandraの設定ファイルを作成し、デプロイ 1. yamlファイルをダウンロード https://gist.github.com/yukim/85849e261048deea9335d3a427fcd99a#file-k8ssandra-setup-yaml 2. TraefikのExternal IPを取得 kubectl get svc/traefik --template "{{(index .status.loadBalancer.ingress 0).ip}}" 3. yamlファイルを編集し、<>を取得したIPアドレスで置き換え 4. k8ssandraのデプロイ > helm repo add k8ssandra https://helm.k8ssandra.io/stable > helm repo update > helm install demo k8ssandra/k8ssandra -f k8ssandra-setup.yaml

Slide 20

Slide 20 text

デモ: K8ssandraセットアップ 4. GrafanaダッシュボードとReaperをブラウザで確認 (ReaperはCassandraクラスターがデプロイされた後に起動します。) ● Grafana: http://grafana.<>.nip.io ● Reaper: http://reaper.<>.nip.io/webui/

Slide 21

Slide 21 text

デモ: K8ssandraセットアップ 5. CQLSHとnodetoolの利用 1. CQLスーパーユーザーとJMXユーザーの認証情報を取得 $username = $(kubectl get secret demo-superuser --template "{{.data.username}}" | base64 -d) $password = $(kubectl get secret demo-superuser --template "{{.data.password}}" | base64 -d) $jmxuser = $(kubectl get secret demo-reaper-jmx --template "{{.data.username}}" | base64 -d) $jmxpass = $(kubectl get secret demo-reaper-jmx --template "{{.data.password}}" | base64 -d) 2. CQLSH実行 kubectl exec -it demo-dc1-us-west1-a-sts-0 -c cassandra -- cqlsh -u $username -p $password 3. nodetool実行 kubectl exec -it demo-dc1-us-west1-a-sts-0 -c cassandra -- nodetool -u $jmxuser -pw $jmxpass status

Slide 22

Slide 22 text

Apache Cassandra™ リニアスケーラビリティ― 22

Slide 23

Slide 23 text

デモ: クラスターの拡張 1. k8ssandraの設定ファイルを編集し、既存のデプロイをアップグレード 1. yamlファイルをダウンロード https://gist.github.com/yukim/85849e261048deea9335d3a427fcd99a#file-k8ssandra-expand-yaml 2. yamlファイルを編集し、<>を取得したIPアドレスで置き換え 3. k8ssandraの更新 > helm update demo k8ssandra/k8ssandra -f k8ssandra-expand.yaml 2. Grafanaダッシュボードとnodetoolでの確認

Slide 24

Slide 24 text

https://stargate.io

Slide 25

Slide 25 text

なぜStargateなのか カジュアルな開発者 ● 新しいクエリ言語を習得する必要が ある ● データがどのように保存されている か気にしない ● 開発のためにローカルにデータベー スをインストールする必要がある 25 SRE、オペレーター、DBAs ● DBに直接アクセスさせたくない ● アプリのためにポート0-65536を開 けなくてはならない... CIO、アーキテクト ● APIを作成するためにさらに開発者 を雇うべきか...

Slide 26

Slide 26 text

Stargate REST API ● 既存のCQLスキーマへRESTful にアクセス。スキーマの作成も 可能。 ● APIに慣れている開発者向け ● Swaggerを統合 クイックスタート: https://stargate.io/docs/stargate/1.0/quickstart/quick_start-rest.html

Slide 27

Slide 27 text

Stargate GraphQL API ● 既存のCQLスキーマをGraphQL で公開 ● どの項目を取得したいかを細か く制御可能 ● 複数のデータをジョインする機 能(フェデレーション)も開発中 ● GraphQL playgroundの提供 クイックスタート: https://stargate.io/docs/stargate/1.0/quickstart/quick_start-graphql.html

Slide 28

Slide 28 text

Stargate Document API ● スキーマレス! ● JSONドキュメントを直接書 き込み ● Cassandraのテーブルに フィールドごとに細かく格納 クイックスタート: https://stargate.io/docs/stargate/1.0/quickstart/quick_start-document.html

Slide 29

Slide 29 text

Stargate APIs APIの拡張 ストレージの 拡張 Cassandra 3.11 Cassandra 4.0 DataStax Enterprise 6.8 REST GraphQL Document API Cassandra Query Language (CQL) GRPC (incubating) 外部認証との 連携

Slide 30

Slide 30 text

デモ: Stargate Document API 1. Swagger UIの確認 kubectl port-forward svc/demo-dc1-stargate-service 8082:8082 ブラウザでアクセス: http://localhost:8082/swager-ui 2. 認証APIを利用して認証トークンを取得 https://stargate.io/docs/stargate/1.0/quickstart/quick_start-document.html#_generate_an_auth_token 3. JSONドキュメントを格納する名前空間を作成 https://stargate.io/docs/stargate/1.0/quickstart/quick_start-document.html#_creating_a_namespace 4. JSONドキュメントの格納と取得 https://stargate.io/docs/stargate/1.0/quickstart/quick_start-document.html#_writing_documents

Slide 31

Slide 31 text

まとめ ● CassandraはスケーラブルなNoSQLデータベース ○ Kubernetesと組み合わせて、データベースもクラウドネイティブ ● K8ssandraはCassandra運用に必要な機能をパッケージ ○ クラスターのセットアップから自動化 ● 開発者がすぐに使えるデータアクセスAPI、Stargateも提供

Slide 32

Slide 32 text

宣伝 https://astra.datastax.com ● DataStaxが提供するサーバーレスのCassandraデータベース ○ 自前でCassandra運用したくない ○ 今あるCassandraを移行してTCOを下げたい ○ Stargate APIを利用して、サーバーレスで素早くアプリを開発したい ● メールアドレス、GitHubアカウント、Googleアカウントで無料サインアップ ● クレジットカード登録なしで毎月$25分(ストレージ40GB、3000万Readリクエスト、450万Writeリクエ スト相当) 使えます ● Apache Pulsarによるサーバーレスメッセージストリーミングもベータテスト中