Save 37% off PRO during our Black Friday Sale! »

Kubernetes で TiDB を使ってみよう / TiDB on Kubernetes

D1b28ca276bee52e56ba11785f70d2d6?s=47 makocchi
October 08, 2021

Kubernetes で TiDB を使ってみよう / TiDB on Kubernetes

Cloud Native Database Meetup #2 の発表資料です
「Kubernetes で TiDB を使ってみよう」

D1b28ca276bee52e56ba11785f70d2d6?s=128

makocchi

October 08, 2021
Tweet

Transcript

  1. Cloud Native Database Meetup #2 LT : Kubernetes で TiDB

    を使ってみよう @makocchi
  2. 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
  3. Cloud Native Database Meetup #2 | LT | @makocchi 3

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

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

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

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

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

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

    tidb-operator の役割 https://github.com/pingcap/tidb-operator/blob/master/static/tidb-operator-overview.png
  10. 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
  11. Cloud Native Database Meetup #2 | LT | @makocchi 11

    tidb-operator の役割 https://docs.pingcap.com/tidb-in-kubernetes/stable/architecture Kubernetes のカスタムリソースとオペレーターの関係
  12. 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” のカスタムリソースを定義するだけ!
  13. 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
  14. 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: {}
  15. 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: {}
  16. 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 は必須! (個人的なハマリポイント😅)
  17. 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
  18. 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 では時間が足りないので・・💦
  19. Cloud Native Database Meetup #2 | LT | @makocchi 19

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