【やってみよう、コンテナ化!~番外編~】Win10/11にminikubeとYugabyteDBを入れてみた!
今回のブログでは、シリーズその1の発展版として、Windows10/11に簡易版Kubernetesであるminikubeと、YugabyteDBを入れて検証環境を構築する方法についてご紹介します。 シリーズその1の記事:【やってみよう、コンテナ化!その1】コンテナとは?仮想マシン (Virtual Machine/VM) との違い、コンテナ利用体験について – TD シネックスブログ (synnex.co.jp)
Windows機器を使って検証環境を構築してみよう
会社の予備資産のPCや、ご家庭にあるWindowsマシンを用いて簡単にKubernetes環境を作ってYugabyteDBの検証をしてみることができます。検証目的であればYugabyteDB ManagedというDBaaSが無料で使える環境が準備されておりクラウドで簡単に構成ができて便利なのですが、以下のような場合においては、YugabyteDBがOSSであることを活かして自前で環境を作りたくなると思います。
- 会社の環境からだとYugabyteDB Managedの接続が制限されてしまう。
- 理解を深めるために自分の環境で動かしたい。
- PCのリソースが空いているのでこちらで動かしたい。
このような場合で、Windows機器が使えるという場合は本記事が役に立つのではないかと思います。
構築手順
Yugabyte社のクイックスタートドキュメントに従っていきます。
https://docs.yugabyte.com/preview/quick-start/kubernetes/
ここではWindows特有の部分についても含めて説明してまいります。
Hyper-Vの有効化
まずお持ちのWindows10/11のHyper-Vを有効化します。
有効化できていない場合は、PowerShellを管理者権限で開き、以下コマンドを実行します。
[PowerShell(管理者)]
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
実行完了したら再起動するか聞かれますので、Yで再起動します。
Hyper-VがサポートされてないWindows10/11もあるかと思いますが、他に仮想マシンが動く機器がないか探してみてご検討ください。
Minikubeインストール
PowerShellを管理者権限で起動して以下実行します。
[PowerShell(管理者)]
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing
これで、minikubeのダウンロードが行われます。
もし管理の都合でminikubeインストール先を変更したい場合はminikubeのパスを適宜変更してください。
引き続きPowershell管理者で以下コマンドでWindowsの環境変数にパスの設定をします。
[PowerShell(管理者)]
$oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine) if ($oldPath.Split(';') -inotcontains 'C:\minikube'){ ` [Environment]::SetEnvironmentVariable('Path', $('{0};C:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine) ` }
これでWindowsの環境変数にパスの設定ができ、minikube.exeコマンドが実行できるようになります。
kubectlのエイリアスを設定するため、下記をc:\minikube\start.batファイルに保存します。
[C:\minikube\start.batへ保存]
doskey kubectl="C:\minikube\minikube.exe" kubectl -- $*
以下コマンドで、エイリアス有効なコマンドプロンプト(cmd. exe)が起動します。
powershell -command start-process cmd .exe ‘/k c:\minikube\start.bat’ -verb runas
Kubernetesを起動
ここからは、YugabyteDBのdocsを参考に進めます。
[Start Kubernetes]
https://docs.yugabyte.com/preview/quick-start/kubernetes/
minikube startの行をメモ帳などにコピーして編集します。
内容はお持ちの環境にあわせて編集ください。
vm-driverをhypervに修正します。
それから、仮想スイッチ指定「–hyperv-virtual-switch=”Default switch”」も追加します。
[cmd. exe]
minikube start --memory=8192 --cpus=4 --disk-size=40g --vm-driver=hyperv --hyperv-virtual-switch="Default switch"
Helm導入
バイナリバージョンをダウンロードします。
以下のhelmインストールドキュメントから、バイナリリリースのWindows版をダウンロードします。
[Helmのインストール]
https://helm.sh/ja/docs/intro/install/
これを書いている時点ではhelm-v3.11.3が最新でしたので、そのzipファイルをダウンロードします。
[PowerShell(管理者)]
Invoke-WebRequest -OutFile 'c:\minikube\helm.zip' -Uri 'https://get.helm.sh/helm-v3.11.3-windows-amd64.zip' -UseBasicParsing
zipファイルがダウンロードできたらしたら解凍して、helm.exeファイルをc:\minikubeの配下にコピーします。
YugabyteDB Helm chartをダウンロード
先ほどのminikube startが終わっているようでしたらいよいよYugabyteDBを入れる準備ができましたので、先ほどのYugabyteDBのdocs手順をすすめていきます。
書いている時点では、2.17.2が最新となっております。作業としてはそのまま打ち込めばよいのでコピーペーストで進めます。
[cmd .exe]
helm repo add yugabytedb https://charts.yugabyte.com helm repo update helm search repo yugabytedb/yugabyte --version 2.17.2
yb-demoというネームスペースを新規につくります。
kubectl create namespace yb-demo
そして、helm installをします。YugabyteのQuickStartドキュメントでバックスラッシュ文字「\」(日本語環境ではバックスラッシュが「¥」で表示される)になっているものをキャレット文字「^」に置き換えて、以下のようなコマンドを実行します。
kubectl create namespace yb-demo helm install yb-demo yugabytedb/yugabyte ^ --version 2.17.2 ^ --set resource.master.requests.cpu=0.5,resource.master.requests.memory=0.5Gi,^ resource.tserver.requests.cpu=0.5,resource.tserver.requests.memory=0.5Gi,^ replicas.master=1,replicas.tserver=1 --namespace yb-demo
クラスタステータスの確認
yb-masterとyb-tserverのPodが一つずつ動作しているか以下で確認します。
kubectl --namespace yb-demo get pods
[出力例]
NAME READY STATUS RESTARTS AGE
yb-master-0 0/2 ContainerCreating 0 19s
yb-tserver-0 0/2 ContainerCreating 0 19s
サービスの起動状態を以下で確認します。
kubectl --namespace yb-demo get services
[出力例]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
yb-master-ui LoadBalancer 10.104.213.48 <pending> 7000:30857/TCP 24s
yb-masters ClusterIP None <none> 7000/TCP,7100/TCP 24s
yb-tserver-service LoadBalancer 10.108.180.228 <pending> 6379:30613/TCP,9042:30498/TCP,5433:31304/TCP 24s
yb-tservers ClusterIP None <none> 9000/TCP,12000/TCP,11000/TCP,13000/TCP,9100/TCP,6379/TCP,9042/TCP,5433/TCP 24s
管理UIをWebブラウザからアクセスするために、ポートフォワード設定をします。
kubectl --namespace yb-demo port-forward svc/yb-master-ui 7000:7000
ブラウザを起動して、http://localhost:7000にアクセスしてみてください。
管理UIにアクセスできました。
これでYugabyteDBのステータスがブラウザからも確認できています。
データベース接続
YsqlshというYugabyteDBのSQLシェルが使えますので、接続してみます。
kubectl --namespace yb-demo exec -it yb-tserver-0 -- sh -c "cd /home/yugabyte && ysqlsh -h yb-tserver-0 --echo-queries"
[出力例]
ysqlsh (11.2-YB-2.17.2.0-b0)
Type "help" for help.
yugabyte=#
「testdb1」という名前のデータベースを作成する場合は、以下のようにCREATE DATABASEコマンドを実行します。
CREATE DATABASE testdb1;
[出力例]
CREATE DATABASE testdb1;
CREATE DATABASE
「testdb1」が作成できているかどうか「\l」コマンドで確認します。
\l
[出力例]
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------+----------+----------+---------+-------------+-----------------------
postgres | postgres | UTF8 | C | en_US.UTF-8 |
system_platform | postgres | UTF8 | C | en_US.UTF-8 |
template0 | postgres | UTF8 | C | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres
testdb1 | yugabyte | UTF8 | C | en_US.UTF-8 |
yugabyte | postgres | UTF8 | C | en_US.UTF-8 |
(6 rows)
ここまでで、Windows10/11にminikubeとYugabyteDBを入れて動作させることができ、データベースの接続まで確認ができました。
Yugabyte社のドキュメントもかなり参考になることが記述されております。
例えばyb-masterとyb-tserverのPod を一つずつではなくて、複数動作させたいという場合は、以下のリンク先を参照ください。
https://docs.yugabyte.com/preview/deploy/kubernetes/single-zone/oss/helm-chart/
また、データベース接続の部分についてもう少し試してみたいという場合は、以下のリンク先が便利です。
https://docs.yugabyte.com/preview/sample-data/
まとめ
分散型SQLデータベースのYugabyteDBはOSSで利用が可能ですので、開発検証はこのように今すぐに始めていただくことが可能です。一方で、本番環境での利用をご検討される際に、OSSのソフトウェアではサポート面で懸念されることもあろうかと思います。このような場合、YugabyteDB Anywareというエンタープライズ向け24時間サポート付きの製品がございます。YugabyteDB Anywareについてご関心お持ちでしたらお問合せいただければ幸いでございます。
YugabyteDBに関することなら当社にお気軽にご相談ください!
[著者プロフィール]
TD SYNNEX 株式会社 | 金子 哲也
アドバンスドソリューション部門 ソリューションビジネス開発本部 プリセールス&エンジニアリング部 マルチクラウドチーム(Azure Solutions Architect Expert、Azure Administrator Associate)
学内情報システム管理・教育に関わったことがきっかけで、コンピュータ製品販売に魅力を感じ、1999年に外資系ITベンダーに入社。メガバンクデータセンタ駐在サポートエンジニアとして、システム安定稼働に努めた。データ肥大化にともなうストレージ機器の稼働に関心をもったことから、国内IT商社にてストレージ製品のリモートサポートを展開した。その後イベント参加がきっかけでデータ活用にはクラウドインフラが必須になると強く意識することになった。2019年6月にTD SYNNEXに入社。Azureクラウドを中心とした拡販の活動を行っている。休日は妻と子供2人で外出して過ごす。