「 Applibot Advent Calendar 2022 」 18日目の記事になります。
前日は @smoto-shei さんの Amazon SageMaker でモデルをデプロイしてみたという記事でした。
はじめに
Open Matchとminikube何もわからんという状態からOpen Match チュートリアルをminikube環境で実行する際にハマった箇所を紹介します。
※チュートリアル自体の解説はしません。
動作環境
落とし穴
Installation
Setup a Minikube Clusterに下記のコマンドが記載していますが、これだとOpen Matchが正常に起動しません。
$ minikube start --cpus=3 --memory=2500mb
Dashboardを見ると状況がわかりやすいのでminikubeを起動したら下記コマンドでDashboardも起動するのがおすすめです。
$ minikube dashboard
Dashboardが開いたらネームスペースでopen-matchを選択してメニューからポッドを選択します。
Pendingになっているポッドを確認すると下記画像のエラーが表示されています。
※違うエラーが表示されることがありますが、おそらく原因は同じです。
これを見るとCPUとメモリが足りていないことがわかります。
minikube start
時に指定する--cpus
と--memory
を環境に合わせて余裕を持った値を指定してください。
Install with Helm
Install the default Evaluatorの下記コマンドでOpen Matchをインストールするとエラーが発生します
$ helm install open-match --create-namespace --namespace open-match open-match/open-match \
--set open-match-customize.enabled=true \
--set open-match-customize.evaluator.enabled=true \
--set open-match-override.enabled=true
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: [resource mapping not found for name: "open-match-redis-podsecuritypolicy" namespace: "open-match" from "": no matches for kind "PodSecurityPolicy" in version "policy/v1beta1"
ensure CRDs are installed first, resource mapping not found for name: "open-match-core-podsecuritypolicy" namespace: "open-match" from "": no matches for kind "PodSecurityPolicy" in version "policy/v1beta1"
ensure CRDs are installed first]
非推奨になっていたPodSecurityPolicyがKubernetes 1.25で削除されたのが原因です。
下記 1.25のChangelog
PodSecurityPolicy is Removed, Pod Security Admission graduates to Stable
HelmでOpen Matchをインストールする場合はKubernetes 1.24.8以下を使うことでインストールできます。
具体的には下記のようにminikube start
時にKubernetesのバージョンを指定して起動します。
$ minikube start --kubernetes-version v1.24.8
余計なものでハマらないようにOpen Matchインストール時にチュートリアルのバージョンに合ったものを明示的に指定することをおすすめします。
下記のようにバージョン指定します。
$ helm install open-match --version 1.5.0
Tutorials
メニューのTutorialsにとても大事な内容が書いてありますが、直接子要素のチュートリアルリンクを開くと見逃してしまうので注意してください。
Note
For Minikube users, please run the command below to instruct Minikube to use local Docker images.
# Instructs Minikube to use local images
# https://kubernetes.io/docs/setup/learning-environment/minikube/#use-local-images-by-re-using-the-docker-daemon
$ eval $(minikube docker-env)
minikube起動後にeval $(minikube docker-env)
を実行するとローカルのDockerイメージを使えるようになるのでminikubeでチュートリアルをする場合は必ず実行してください。
Set up Image Registry
どのチュートリアルでもSet up Image Registry
という項目がありますが
REGISTRY=[YOUR_REGISTRY_URL]
と書いてあり何を設定するか困ると思います。
minikube環境でローカルイメージを使用する場合は適当な文字列で大丈夫です!
REGISTRY=local
とかで構いません。
またdocker build
とdocker push
する項目がありますが、docker build
だけで大丈夫です。
eval $(minikube docker-env)
をしていればdocker build
でminikube内でイメージを使えるようになります。
docker build
後にdocker image ls
でビルドしたイメージが表示されていれば問題ありません。
Get the Tutorial template
各チュートリアルのGet the Tutorial template
で下記のように書いてあるのでインストールしたOpen Matchと合うブランチをチェックアウトするようにしてください。
Checkout release-x.y branch(e.g. release-1.3, release-1.4) of the Open Match Git repository.
私はこれを無視してmainブランチでチュートリアルを進めたらdocker build
でビルドできない罠にハマりました
具体的に何が違うかというとDockerfile内の記述が変わります。
release-1.5ブランチだとgo build
の前に下記が追記されています。
RUN go mod edit -replace open-match.dev/open-match@v0.0.0-dev=open-match.dev/open-match@v1.5.0
RUN go mod tidy
チュートリアル内のgo.modは下記のようになっていて、ローカルのOpen Matchを使うようにreplaceされているのでdocker build
する際はバージョン指定してreplaceするようです。
require (
google.golang.org/grpc v1.36.0
open-match.dev/open-match v0.0.0-dev
)
replace open-match.dev/open-match v0.0.0-dev => ../../../
ドキュメントにはチュートリアルフォルダをコピーして使うように書いてありますが、go.modがこのようになっているのでIDEで開くとインポートが上手くいきません。
適宜v0.0.0-dev
を変えてreplaceを削除するかコピーせずにローカルのopen-matchリポジトリ内で作業してください。
Deploy and Run
各チュートリアルのDeploy and Run
でsed
を使ってkubectl apply
する箇所があります。
Build a basic MatchmakerのStep 4 - Deploy and Runでは
For Minikube users, run:
とminikube向けのコマンドが別で記載されていますが、他のチュートリアルでは省略されているので注意が必要です。
$ sed "s|REGISTRY_PLACEHOLDER|$REGISTRY|g" matchmaker.yaml | sed "s|Always|Never|g" | kubectl apply -f -
minikube環境で必要なのはsed "s|Always|Never|g"
の部分です。
kubectl apply
する箇所ではsed "s|Always|Never|g"
を忘れずに実行しましょう!
おわりに
これでOpen Match チュートリアルを最後まで実行できるようになったと思います。
それでは良きOpen Matchライフをお過ごしください!
以上、「 Applibot Advent Calendar 2022 」 18日目の記事でした!
明日は@ref3000さんです!