Slide 1

Slide 1 text

Cloud Native Database Meetup #2 LT : Kubernetes で TiDB を使ってみよう @makocchi

Slide 2

Slide 2 text

2 Makoto Hasegawa Working at // CIU, CyberAgent, Inc Currently // Develop and maintain private OpenStack cloud. Develop and maintain Kubernetes as a Service platform. Kubernetes organization member (sig-docs-ja) CKA / CKAD / CKS Job Title // Technical Lead Infrastructure Engineer WHO am I Twitter // @makocchi Facebook // makocchi0923 Hobby // Playing bass

Slide 3

Slide 3 text

Cloud Native Database Meetup #2 | LT | @makocchi 3 💪 本日のLT💪 TiDB には便利なコマンドラインツールである tiup があります しかし tiup は対象が vm の場合に使われるツールです Kubernetes 上にデプロイしたい時にはどうしたらいいの?

Slide 4

Slide 4 text

Cloud Native Database Meetup #2 | LT | @makocchi 4 tiup とは TiDB をインストール、管理するためのツール TiDB の構成情報を yaml で定義し、tiup に読み込ませる ことで TiDB を構築することが可能 構築するだけではなくて sysctl の設定やチューニング等 もやってくれる 構成ノードに対して ssh を行い操作するので ssh ができ る環境が必要 なにげに TPC-C のベンチマークもかけることが可能 https://github.com/pingcap/tiup

Slide 5

Slide 5 text

Cloud Native Database Meetup #2 | LT | @makocchi 5 tiup とは https://github.com/pingcap/tiup 構成情報の yaml はこんな感じ 👉 この構成情報を元に TiDB のクラスターを自動で作成してくれる!

Slide 6

Slide 6 text

Cloud Native Database Meetup #2 | LT | @makocchi tiup は便利なんだけど Kubernetes には対応していない・・(現時点では) ?

Slide 7

Slide 7 text

Cloud Native Database Meetup #2 | LT | @makocchi 7 tiup が使えなければ tidb-operator を使えばいいじゃない!

Slide 8

Slide 8 text

Cloud Native Database Meetup #2 | LT | @makocchi 8 https://github.com/pingcap/tidb-operator

Slide 9

Slide 9 text

Cloud Native Database Meetup #2 | LT | @makocchi 9 tidb-operator の役割 https://github.com/pingcap/tidb-operator/blob/master/static/tidb-operator-overview.png

Slide 10

Slide 10 text

Cloud Native Database Meetup #2 | LT | @makocchi 10 tidb-operator の役割 TiDB は主に 3 つのコンポーネント(TiDB/TiKV/PD) から構成されています が、tidb-operator では親玉の tidb-controller-manager がそれぞれの controller を内包しています 正確に言うと内包しているのは - tidb cluster controller (これが TiDB/TiKV/PD 等を管理する) - dmcluster controller - backup controller - restore controller - backup schedule controller - tidb initializer controller - tidb monitor controller (Prometheus や Grafana) - periodicity controller (sts に対して annotation を付与している) - autoscaler controller

Slide 11

Slide 11 text

Cloud Native Database Meetup #2 | LT | @makocchi 11 tidb-operator の役割 https://docs.pingcap.com/tidb-in-kubernetes/stable/architecture Kubernetes のカスタムリソースとオペレーターの関係

Slide 12

Slide 12 text

Cloud Native Database Meetup #2 | LT | @makocchi 12 tidb-operator の使い方 tidb-operator の導入方法 • 公式な方法は chart 以外無さそう (Helm 3) • chart には CRD が含まれていないので先に入れておく必要がある • 基本的には docker hub に各種 image が置かれているけども、rate limit があるので Alibaba Cloud にも mirror してくれてます • 中身は https://github.com/pingcap/tidb-operator/tree/master/charts/tidb-operator Helm で tidb-operator を入れると実体として tidb-controller-manager と tidb-scheduler が稼働することになります(※デフォルトの挙動) • HA 構成を検討する場合は replicas の値を増やしておくといいでしょう ここまで来たら “TidbCluster” のカスタムリソースを定義するだけ!

Slide 13

Slide 13 text

Cloud Native Database Meetup #2 | LT | @makocchi 13 TidbCluster の定義の仕方 こんな感じで定義してあげればOK! 詳細な定義の仕方は GitHub にある examples を見るといいでしょう apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: sample spec: version: v5.2.0 pd: baseImage: pingcap/pd replicas: 1 requests: storage: "1Gi" config: {} tikv: baseImage: pingcap/tikv replicas: 1 requests: storage: "1Gi" config: {} tidb: baseImage: pingcap/tidb replicas: 1 config: {} https://github.com/pingcap/tidb-operator/blob/ master/examples/advanced/tidb-cluster.yaml

Slide 14

Slide 14 text

Cloud Native Database Meetup #2 | LT | @makocchi 14 TidbCluster の定義の仕方 👉 の定義は最低限のコンポーネントが 動くだけなので実用的ではないです 👉だと tidb(mysql) に接続するための Service も作られない 👉だとせっかく tidb-scheduler 使える のに使われない apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: sample spec: version: v5.2.0 pd: baseImage: pingcap/pd replicas: 1 requests: storage: "1Gi" config: {} tikv: baseImage: pingcap/tikv replicas: 1 requests: storage: "1Gi" config: {} tidb: baseImage: pingcap/tidb replicas: 1 config: {}

Slide 15

Slide 15 text

Cloud Native Database Meetup #2 | LT | @makocchi 15 TidbCluster の定義の仕方 spec.config は特に設定しなくてもいい から省略しちゃえ 特に問題なく apply できる 💪 でも Pod は立ち上がらない 💦 必須である ConfigMap が作成されてな いことが原因 apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: sample spec: version: v5.2.0 pd: baseImage: pingcap/pd replicas: 1 requests: storage: "1Gi" # config: {} tikv: baseImage: pingcap/tikv replicas: 1 requests: storage: "1Gi" # config: {} tidb: baseImage: pingcap/tidb replicas: 1 # config: {}

Slide 16

Slide 16 text

Cloud Native Database Meetup #2 | LT | @makocchi apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: sample spec: version: v5.2.0 pd: baseImage: pingcap/pd replicas: 1 requests: storage: "1Gi" config: {} tikv: baseImage: pingcap/tikv replicas: 1 requests: storage: "1Gi" config: {} tidb: baseImage: pingcap/tidb replicas: 1 config: {} 16 TidbCluster の定義の仕方 spec.config は特に設定しなくてもいい から省略しちゃえ 特に問題なく apply できる 💪 でも Pod は立ち上がらない 💦 必須である ConfigMap が作成されてな いことが原因 たとえ空っぽの定義だとしても spec.config は必須! (個人的なハマリポイント😅)

Slide 17

Slide 17 text

Cloud Native Database Meetup #2 | LT | @makocchi 17 TidbCluster の定義の仕方 TidbCluster 内の replicas の増減や version の変更は特に問題なく動きます Prometheus や Grafana も TidbMonitor 👉で定義するだけで立ち 上がってくれます apiVersion: pingcap.com/v1alpha1 kind: TidbMonitor metadata: name: basic spec: replicas: 1 clusters: - name: sample prometheus: baseImage: prom/prometheus version: v2.18.1 grafana: baseImage: grafana/grafana version: 7.5.7 initializer: baseImage: pingcap/tidb-monitor-initializer version: v5.2.0 reloader: baseImage: pingcap/tidb-monitor-reloader version: v1.0.1 imagePullPolicy: IfNotPresent https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml

Slide 18

Slide 18 text

Cloud Native Database Meetup #2 | LT | @makocchi 18 まだまだあるぞ tidb-operator tidb-operator では Advanced Stateful Set を使うことができます https://github.com/pingcap/advanced-statefulset tidb-scheduler はいったい何をしているのか? 通常の scheduler との違いは? 今日の LT では時間が足りないので・・💦

Slide 19

Slide 19 text

Cloud Native Database Meetup #2 | LT | @makocchi 19 💪 本日のLTの続き💪 LTでは話きれなかったことは「DB TECH SHOWCASE 2021」でお話しする予定ですのでお楽 しみに! 11/19(金) 16:30〜 「クラウドネイティブな DB を使ってみよう! Kubernetes で TiDB を構築・運用する際のポイント を紹介」