LoginSignup
3
0

More than 1 year has passed since last update.

Open Match チュートリアルをminikubeでやる場合の落とし穴

Last updated at Posted at 2022-12-17

Applibot Advent Calendar 2022 」 18日目の記事になります。
前日は @smoto-shei さんの Amazon SageMaker でモデルをデプロイしてみたという記事でした。

はじめに

Open Matchとminikube何もわからんという状態からOpen Match チュートリアルをminikube環境で実行する際にハマった箇所を紹介します。
※チュートリアル自体の解説はしません。

動作環境

今回、動作確認した環境は下記の通りです。
Screen Shot 2022-12-17 at 23.01.48.png

落とし穴

Installation

Setup a Minikube Clusterに下記のコマンドが記載していますが、これだとOpen Matchが正常に起動しません。

$ minikube start --cpus=3 --memory=2500mb

Dashboardを見ると状況がわかりやすいのでminikubeを起動したら下記コマンドでDashboardも起動するのがおすすめです。

$ minikube dashboard

Dashboardが開いたらネームスペースでopen-matchを選択してメニューからポッドを選択します。
Pendingになっているポッドを確認すると下記画像のエラーが表示されています。
※違うエラーが表示されることがありますが、おそらく原因は同じです。
Screen Shot 2022-12-18 at 0.16.42.png
これを見ると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 builddocker 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でビルドできない罠にハマりました:cry:
具体的に何が違うかというと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 Runsedを使ってkubectl applyする箇所があります。
Build a basic MatchmakerStep 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"を忘れずに実行しましょう!:smile:

おわりに

これでOpen Match チュートリアルを最後まで実行できるようになったと思います。
それでは良きOpen Matchライフをお過ごしください!

以上、「 Applibot Advent Calendar 2022 」 18日目の記事でした!
明日は@ref3000さんです!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0