Slide 1

Slide 1 text

TiDB Operatorの紹介
 本多康夫 Technical support engineer at PingCAP Japan

Slide 2

Slide 2 text

これまでのウェビナースケジュール 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/

Slide 3

Slide 3 text

次回以降のウェビナースケジュール https://pingcap.co.jp/event/ 
 
 2023年12月予定 詳細未定

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

TiDB Operatorとは

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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”

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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が作成されます

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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 ● 出力結果

Slide 19

Slide 19 text

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 ● 出力結果

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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 ● 出力結果

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

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 ● 出力結果

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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コマンドはプロンプトを返しません

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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 ● 出力結果

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

スケールアウトの順序 ● 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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

環境のクリーンアップ ● クラスタの削除 (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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Q&A

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

Thank You!
 https://www.pingcap.com/
 info@pingcap.com