- Redis Operator
- HA 構成の Redis
- 何も考えずに HA の Redis が作れる
- 一発でエンドポイントが払い出せる
- クラスタ内アクセスを想定
- Sentinel なので Write はスケールしない
- Redis の HA
- Replication
- master のデータをコピーするだけ
- master が SPoF
- Cluster
- Sharding
- Write がスケール
- Sentinel
- Replication を HA にする
- master が落ちたら slave を master に昇格する
- master/slave の情報は Sentinel から持ってくる
- Replication
- TiKV
- Rust で実装された分散 KVS
- Spanner と HBase に影響を受けている
- TiDB のバックエンドストアとして開発された
- MySQL 互換の分散 DB
- 機能やドキュメントは未熟
- クラスタ内アクセスを想定しているが、改善中
- CNCF Incubating
- コンポーネント
- TiKV
- 分散 KVS
- Raft で管理
- Placement Driver
- TiVK のクラスタ管理
- RocksDB
- TiKV のバックエンド DB ライブラリ
- LSM Tree 採用
- TiKV
- アクセス
- Placement Driver にデータの居場所を聞いて, リクエストを送る
- gRPC でレイテンシを最小限にしている
- Raft
- 分散合意アルゴリズム
- Candidata
- Lader が決まってない人
- Follower
- ログを受け入れる
- 過半数の受け入れでコミット
- Lader
- R/W 全てのリクエストを処理
- TiKV
- データは Region という単位で Sharding (range base)
- Multi-Raft
- Operator
- TiKV のオペレーターはない
- TiDB オペレーターを使って TiDB のレプリカ数を 0 にする
- Loki について
- Log aggregator system
- Grafana Lab が開発
- Prometheus のようにラベルで管理ができる
- Kubernetes との連携
- Grafana loki に対して Promtail がログを収集して送る
- Promtail は log にラベルをつける
- Loki
- ログに付与されたラベルによるフィルタリング
- 結果を grep できる
- テキスト処理はしない
- Cortex のアーキテクチャとほぼ同じ (派生しているため)
- Distributor
- clinet から受けたログを Ingester に
- ヘッダに含まれる ID でユーザを識別
- マルチテナントを想定
- ステートレス
- Ingester
- ログを Chunk Store に
- セミステートフル
- 直近のログを保持している
- Read のために直近のログを cache している
- log をまとめて Chunk Store に
- 頻繁な書き込みの抑制
- Chunk がいっぱいになったら書き込む
- Distributor はコンシステントハッシュで Ingester を決定
- Chunk Store
- loki 自体は DB ではない
- 2 種類の Chunk Store
- Index
- ログ検索のための転置 index
- ラベルなどのメタデータを保持
- KVS
- DynamoDB とか使える
- Chunks
- 実際のログを保存
- オブジェクトストレージ
- S3 とか使える
- Index
- Querier
- ログのクエリを受ける
- 直近のログは Ingester
- それ以外は Chunk Store
- Table Manager
- log の Retention を管理
- 現状 Chunks の Retention は local にのみ実装がある
- 様々なコンポーネントがあるが、全部 1 つの実行ファイルから起動
- シングルプロセスで全てのコンポーネントを動かすこともできる
- コンポーネントを分離して動かすドキュメントは今の所ない
- Promtail
- loki へラベル付きのログを送信するための agent
- Prometheus と似たような設定
- Kubernetes のアプリログの場合 Service Discovery が使える
- DaemonSet で置いたり Sidecar で置いたり
- Config
- relabel_config
- log を読む前の処理
- ラベル付与
- log 収集するコンテナの指定
- log の path 指定
- pipeline_stages
- log を読んだ後の内容に対して処理
- 各 stage で log に対して様々な処理
- log からメトリクスを作成できる
- relabel_config
- Virtual Kubelet の概要
- 任意の API と Kubernetes を連携するためのソフト
- Kubelet を仮想化したかった
- Kubelet
- Pod の作成とかをする
- Node にいる agent
- API Server と非同期/同期で通信して処理
- excc とかは同期でやってる
- Pod の liveness/rediness
- init containers の実行
- Virtual Kubelet
- init containers の実行できない
- Pod の liveness/rediness できない
- 基本的に Pod とは別のネットワークにいる
- プロバイダごとに実装が違う
- DaemonSet は配備されない
- taint が貼られている
- toleration を使う
- スケジュールしたいときは nodeSelector で指定
- 将来的には Affinity に置きかわりそう
- Probe が使えない