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

TiDB Operatorの紹介

PingCAP-Japan
November 01, 2023

TiDB Operatorの紹介

ウェビナー開催日:2023年11月01日

本スライドでは、TiDBをKubernetes環境でご利用いただくために必要なTiDB Operatorについて紹介します。TiDB Operatorを用いることで、kindなどお手元の環境や、Amazon EKSなどのパブリッククラウドで動作させることが可能です。

TiDB Operatorを利用した環境で、実際にTiDBクラスタのデプロイやアップグレード、フェイルオーバーの動作、スケールアウトの動作について、デモ環境を用いて紹介いたします。

トピック
・TiDB Operatorとは
・TiDB Operatorを利用したTiDBクラスタのデプロイ
・TiDB Operatorを利用したTiDBのアップグレード、フェイルオーバー時の動作

アーカイブ動画
https://youtu.be/Dws-6yRGKn8

PingCAP-Japan

November 01, 2023
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. TiDB Operatorの紹介

    本多康夫
    Technical support engineer at PingCAP Japan

    View full-size slide

  2. これまでのウェビナースケジュール
    https://pingcap.co.jp/event/
    
 

    2023年3月2日(木) 14:00-15:00 ハンズオン TiDB Cloud Serverless TierとChatGPTのSQL生成を試してみ
    よう!
    2023年3月24日(木) 14:00 - 15:00 TiFlashの紹介
    2023年4月13日(木) 14:00 - 15:00 TiDBにおけるSQLチューニング SQL bindingのご紹介
    2023年5月18日(木) 14:00 - 15:00 TiDB 7.0 DMR新機能の紹介
    2023年6月15日(木) 14:00 - 15:00 【TiDB Serverless GA直前】TiDB新章。Serverless + Data API + AIによる新
    たな活用
    2023年7月27日(木) 14:00-15:00 TiDB Cloud最新状況の紹介
    2023年9月14日(木) 14:00-15:00 TiDBとMySQLの互換性改善アップデート
    2023年11月1日(木) 14:00-15:00 TiDB Operatorの紹介
    ※過去開催アーカイブ:https://pingcap.co.jp/event-video/

    View full-size slide

  3. 次回以降のウェビナースケジュール
    https://pingcap.co.jp/event/
    
 

    2023年12月予定 詳細未定

    View full-size slide

  4. アジェンダ
    ● TiDB Operatorとは
    ● TiDB Operatorを利用したTiDBクラスタのデプロイ
    ● TiDB Operatorを利用したTiDBのアップグレード、フェイルオーバー時の動作
    ● Q&A, アンケートのお願い
    ● お知らせ

    View full-size slide

  5. TiDB Operatorとは

    View full-size slide

  6. TiDB Operatorとは
    ● Operatorとは
    ○ https://kubernetes.io/ja/docs/concepts/extend-kubernetes/operator/
    “オペレーターはカスタムリソースを使用する Kubernetesへのソフトウェア拡張です。 オペレーター
    は、特に制御ループのような Kubernetesが持つ仕組みに準拠しています。 ”
    ○ データベースなどステートフルなサービスを提供するために利用されます
    ● TiDB Operatorとは
    ○ TiDBクラスタをKubernetes (K8s) 環境で動作させるために必要なオペレーターです
    ○ https://github.com/pingcap/tidb-operator
    ○ Apache License 2.0
    ○ 現在の最新バージョンは v1.5.1

    View full-size slide

  7. https://docs.pingcap.com/tidb-in-kubernetes/stable/architecture#architecture

    View full-size slide

  8. Custom Resource Definition(CRD)とは
    ● TiDBをK8s環境で動作させるために必要なリソース
    ● TiDB用に作成定義されている主な CRD
    ○ Backup TiDB clusterバックアップ用
    ○ BackupSchedule TiDB clusterの定期的なバックアップ用
    ○ Restore TiDB clusterリストア用
    ○ TidbCluster TIDB clusterのあるべき姿を記述
    ○ TidbInitializer TiDB clusterの初期化用
    ○ TidbMonitor TiDB clusterのモニタリングコンポーネント
    ○ DMCluster, TidbDashboard ,TidbNGMonitoring
    ● https://github.com/pingcap/tidb-operator/blob/master/manifests/crd.yaml

    View full-size slide

  9. TiDB Operatorを利用した
    TiDBクラスタのデプロイ

    View full-size slide

  10. TiDB Operatorを利用可能なK8s環境
    ● 今回利用する環境
    ○ K3s https://k3s.io/
    ● テスト用
    ○ minikube
    ○ kind
    ● 本番運用
    ○ Amazon Elastic Kubernetes Service (EKS)
    ○ Google Kubernetes Engine (GKE)等
    ● Note
    ○ 今回利用する K3s 環境は動作確認用に用いるもので、本番環境での利用対象ではありません
    ○ https://docs.pingcap.com/tidb-in-kubernetes/dev/tidb-operator-overview

    View full-size slide

  11. K3sとは
    ● SUSEから提供されている IoTやEdge computing向きの軽量K8s環境
    ○ https://k3s.io/
    ● K3sはRed Hat Enterprise Linux, Ubuntu, Raspberry PiなどのLinuxで動作
    ○ https://github.com/k3s-io/k3s/issues/55#issuecomment-783667843
    ■ “I've only ever heard @ibuildthecloud (the creator) pronounce it as "kay three ess" :-D”

    View full-size slide

  12. K3sのインストール
    ● K3sはmacOSでは直接動作しないので、Multipassを利用してUbuntuをVMとして利用
    ○ Ubuntuが直接利用可能であればそちらもご利用いただけます
    ● % brew install multipass
    ● cloud-init.yaml の作成: 内部でK3sのインストールとHelm(K8sのパッケージマネージャー)をインストール
    # cloud-init.yaml
    repo_update: true
    repo_upgrade: all
    runcmd:
    - 'curl -sfL https://get.k3s.io | sh -'
    - 'curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash'
    ssh_authorized_keys:
    - ${HOME}/.ssh/id_ed25519.pub

    View full-size slide

  13. K3sのインストール
    ● multipassによるUbuntu Linux 22.04の起動
    ● multipass launch --cpus 8 --memory 8G --disk 20G --name k3s --cloud-init
    cloud-init.yaml
    ○ 発表者の環境(MacBook Pro Intel Core i7 16GBメモリ)約90秒
    ○ 後ほどスケールアウトを行うのでリソースを多めに割り当てています
    ○ スケールアウトを行わない場合、下記のリソース割り当てで動作することを確認しています
    ○ multipass launch --cpus 4 --memory 4G --disk 10G --name k3s
    --cloud-init cloud-init.yaml
    ● Ubuntu Linux 22.04へのログイン
    ● % multipass shell k3s

    View full-size slide

  14. sudo なしで kubectl を実施可能にする(optional)
    ● Non rootユーザー (ubuntu)でkubectlを実施可能にします
    mkdir -p ~/.kube
    sudo kubectl config view --raw >> ~/.kube/config
    chmod 600 ~/.kube/config
    echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
    source ~/.bashrc

    View full-size slide

  15. CRDのインストール
    ● TiDB Operator v1.5.1のCRDが定義されたyamlファイルを(crd.yaml)適用します
    ● コマンド
    ○ kubectl create -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5.
    1/manifests/crd.yaml
    ○ kubectl get crd
    ● 出力結果
    ○ CRDが作成されます

    View full-size slide

  16. helmチャートレポジトリ の追加
    ● TiDB用のhelmチャートレポジトリを追加します
    ○ TiDB Operatorはhelmチャートレポジトリ経由でインストールします
    ● コマンド
    ○ helm repo add pingcap https://charts.pingcap.org/
    ○ helm repo list
    ● 出力結果

    View full-size slide

  17. tidb-adminネームスペースの作成
    ● tidb-adminネームスペースを追加します
    ○ TiDB Operatorそのものをインストールするために利用されます
    ● コマンド
    ○ kubectl create namespace tidb-admin
    ○ kubectl get ns
    ● 出力結果

    View full-size slide

  18. TiDB Operatorのインストール
    ● TiDB Operator v1.5.1をインストールします
    ● コマンド
    ○ helm search repo pingcap
    ○ helm install --namespace tidb-admin tidb-operator pingcap/tidb-operator --version v1.5.1
    ● 出力結果

    View full-size slide

  19. tidb-controllerとtidb-scheduler podの動作確認
    ● tidb-schedulerとtidb-controller-manager podの確認
    ○ tidb-scheduler (K8sのバージョンが1.19以上であればオプション )
    ■ TiDB用のK8sスケジューラー拡張
    ○ tidb-controller-manager
    ■ TiDB用のK8sカスタムコントローラーで、 TidbClusterオブジェクトの「あるべき姿」と現状
    を比較し、あるべき姿に近づける
    ● コマンド
    ○ kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator
    ● 出力結果

    View full-size slide

  20. tidb-clusterネームスペースの作成
    ● tidb-cluster ネームスペースの作成
    ○ TiDB cluster用に個別のネームスペースを作成します
    ● コマンド
    ○ kubectl create namespace tidb-cluster
    ○ kubectl get ns
    ● 出力結果

    View full-size slide

  21. tidb-cluster.yaml ファイルの取得と編集
    ● TiDB cluster (kind: TidbCluster) を作成するyamlファイルをダウンロード
    ○ 後述のバージョンアップのためにv6.5.5を利用するようにyamlファイルを書き換えます
    ○ https://github.com/pingcap/tidb-operator/tree/v1.5.1/examples 配下に多数のyamlファイルの例があります
    ○ 今回のyamlファイルは、本番環境では利用しないでください
    # IT IS NOT SUITABLE FOR PRODUCTION USE.
    # This YAML describes a basic TiDB cluster with minimum resource requirements,
    # which should be able to run in any Kubernetes cluster with storage support.
    ● コマンド
    wget https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5.1/examples/basic/tidb-cluster.yaml
    sed -i 's/v7.1.1/v6.5.5/g' tidb-cluster.yaml
    ● 出力結果

    View full-size slide

  22. TiDB clusterの作成
    ● 編集した tidb-cluster.yaml ファイルを適用し、TiDB clusterをtidb-clusterネームスペースに作成します
    ○ 今回はDashboardとモニタリングの作成は省略します
    ● コマンド
    ○ kubectl get pods -n tidb-cluster --watch
    ○ kubectl -n tidb-cluster apply -f tidb-cluster.yaml
    ● 出力結果

    View full-size slide

  23. TiDB clusterで作成されるpod
    ● TiDBでは以下の順番で対応する podが作成されます
    ○ discoveryサービス
    ○ PDサーバー
    ○ TiKVサーバー
    ○ TiDBサーバー
    ● コマンド
    ○ kubectl get pods -n tidb-cluster

    View full-size slide

  24. StatefulSet
    ● PD,TiKV,TiDBのPodはStatefulSet
    ● https://kubernetes.io/ja/docs/concepts/workloads/controllers/statefulset/
    ○ “StatefulSetはDeploymentとPodのセットのスケーリングを管理し、 それらのPodの順序と一意性
    を保証 します。”
    ● コマンド
    ○ kubectl describe pod basic-pd-0 -n tidb-cluster

    View full-size slide

  25. basic-tidbサービスのClusterIPにポートフォワード
    ● TiDB クラスタの `basic-tidb` サービスに外部から接続するためポートフォワードを設定します
    ● コマンド
    ○ kubectl get svc -n tidb-cluster
    ○ kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-tidb 4000
    ● 出力結果
    ○ note: kubectl port-forwardコマンドはプロンプトを返しません

    View full-size slide

  26. TiDBへの接続
    ● 外部マシン(macOS)のmysqlクライアントから、TiDB データベースに接続します
    ● コマンド(macOS)
    ○ multipass list
    ○ mysql -uroot -h -P 4000
    ○ select version();
    ● 出力結果
    ○ TiDB-v6.5.5 が確認できます

    View full-size slide

  27. TiDB Operatorを利用した
    TiDBのアップグレードの動作

    View full-size slide

  28. TiDBのアップグレード
    ● TiDBのアップグレードは、 cluster.yamlに記載された version を更新し、宣言的に行います
    ● コマンド
    ○ sed -i 's/v6.5.5/v7.1.2/g' tidb-cluster.yaml
    ○ kubectl -n tidb-cluster apply -f tidb-cluster.yaml
    ● 出力結果

    View full-size slide

  29. アップグレードの順序
    ● TiDBでは以下の順番で対応する podがアップグレード(再作成)されます
    ○ PDサーバー
    ○ TiKVサーバー
    ○ TiDBサーバー
    ● コマンド
    ○ kubectl get pods -n tidb-cluster

    View full-size slide

  30. TiDBへの接続
    ● 外部マシン(macOS)のmysqlクライアントから、TiDB データベースに接続します
    ● コマンド(macOS)
    ○ multipass list
    ○ mysql -uroot -h -P 4000
    ● 出力結果
    ○ TiDB-v7.1.2 が確認できます

    View full-size slide

  31. スケールアウト
    ● TiDBのアップグレードは、 cluster.yamlに記載された replicas を更新し、宣言的に行います
    ● コマンド
    ○ sed -i 's/replicas: 1/replicas: 3/g' tidb-cluster.yaml
    ○ kubectl -n tidb-cluster apply -f tidb-cluster.yaml
    ● 出力結果

    View full-size slide

  32. スケールアウトの順序
    ● TiDBでは以下の順番で対応する podが追加されます
    ○ PDサーバー (basic-pd1, basic-pd2)
    ○ TiKVサーバー (basic-tikv-1, basic-tikv-2)
    ○ TiDBサーバー (basic-tidb-1, basic-tidb-2)
    ● コマンド
    ○ kubectl get pods -n tidb-cluster

    View full-size slide

  33. フェイルオーバーの例
    ● basic-tidb-0 podを強制的に削除し、再起動されることを確認します
    ○ 今回の例は物理的なノードを共有しているため、擬似的なものです
    ● コマンド
    ○ kubectl -n tidb-cluster delete pod basic-tidb-0 --force --grace-period=0

    View full-size slide

  34. 環境のクリーンアップ
    ● クラスタの削除 (Ubuntu Linux)
    $ kubectl -n tidb-cluster delete -f tidb-cluster.yaml
    $ tidbcluster.pingcap.com "basic" deleted
    $ kubectl delete namespace tidb-cluster
    $ kubectl delete -f
    https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5.1/manifests/crd.yaml
    $ helm uninstall -n tidb-admin tidb-operator
    $ kubectl delete namespace tidb-admin
    ● K3sの削除 (macOS)
    % multipass stop k3s
    % multipass delete k3s
    % multipass purge
    ● multipassの削除 (macOS)
    % brew uninstall multipass

    View full-size slide

  35. 参照記事
    ● https://qiita.com/bohnen/items/93d67996de17fe1b869b
    ● https://speakerdeck.com/makocchi/tidb-on-kubernetes
    ● https://gihyo.jp/magazine/SD/archive/2023/202308

    View full-size slide

  36. PingCAP定期ウェビナー
    https://pingcap.co.jp/event/
    ※過去開催アーカイブ :  https://pingcap.co.jp/event-video/

    View full-size slide

  37. Thank You!

    https://www.pingcap.com/

    [email protected]

    View full-size slide