Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

makocchi
October 08, 2021

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

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

makocchi

October 08, 2021
Tweet

More Decks by makocchi

Other Decks in Technology

Transcript

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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” のカスタムリソースを定義するだけ!

    View Slide

  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

    View Slide

  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: {}

    View Slide

  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: {}

    View Slide

  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 は必須!
    (個人的なハマリポイント😅)

    View Slide

  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

    View Slide

  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 では時間が足りないので・・💦

    View Slide

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

    View Slide