はじめに
Agones 有名なのでちゃんと勉強したいのですが、なかなか時間が取れませんでした。 このブログをきっかけに検証環境を作って今後使いたい時に使えるようにしたいと思っています。
もくじ
- ローカルの k8s 環境
ローカルのk8s 環境
minikube は virtual box / docker が必要だったので諦める kindを試してみる
What’s kind
https://qiita.com/tomoyafujita/items/5a3c06705f62c5732bc5
kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
公式のツールで、docker container “nodes"を使って、ローカル
でクラスターを動かす
Let’s Start
kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
これだけでOK
status 確認 kubectl で Control Plane に対して操作
kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:49314
CoreDNS is running at https://127.0.0.1:49314/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
ローカルホストで Control Plane が待ち受けるようになる
これやるととんでもない量のデータが
kubectl cluster-info dump --context kind-kind
replicaset と daemonset
- replicaset : 指定された数のポッドのコピーを維持すること。可用性を確保
- daemonset: 全てのノード(または特定のノード)に対して、特定のポッドを一つずつ実行する.ログや proxy 向け
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kind-control-plane Ready control-plane 18m v1.27.3 172.18.0.2 <none> Debian GNU/Linux 11 (bullseye) 6.4.16-linuxkit containerd://1.7.1
kind-control-plane が動作していることがわかる
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36ba1eb386b8 kindest/node:v1.27.3 "/usr/local/bin/entr…" 19 minutes ago Up 19 minutes 127.0.0.1:49314->6443/tcp kind-control-plane
「127.0.0.1:49314->6443/tcp」の部分より
ホストのポート6443をコンテナとして起動したapi-serverへマッピングしているため、ホストマシンからkubectl
にてクラスタを管理することも可能です。
Agones のホスト
https://castaneai.hatenablog.com/entry/2019/05/16/153339 https://agones.dev/site/docs/installation/ これを参考に
kubectl create namespace agones-system --context kind-kind
namespace/agones-system created
Install Agones using YAML (本番は helm を推奨) https://agones.dev/site/docs/installation/install-agones/yaml/
kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/install/yaml/install.yaml
確認
kubectl describe --namespace agones-system pods
kubectl describe --namespace agones-system pods | grep "Name:"
4種類立ち上がる
agones-allocator-6bd8dcf69-bl6t4
agones-controller-6d64fc55fc-8lwv8
agones-extensions-64bd6f4f88-k65ng
agones-ping-5bc68794f9-6m7vg
kubectl get pods --namespace agones-system
NAME READY STATUS RESTARTS AGE
agones-allocator-6bd8dcf69-bl6t4 1/1 Running 0 2m
agones-allocator-6bd8dcf69-tnm8l 1/1 Running 0 2m
agones-allocator-6bd8dcf69-x9wss 1/1 Running 0 2m
agones-controller-6d64fc55fc-8lwv8 1/1 Running 0 2m
agones-controller-6d64fc55fc-vf59s 1/1 Running 0 2m
agones-extensions-64bd6f4f88-k65ng 1/1 Running 0 2m
agones-extensions-64bd6f4f88-z8z5g 1/1 Running 0 2m
agones-ping-5bc68794f9-6m7vg 1/1 Running 0 2m
agones-ping-5bc68794f9-md59q 1/1 Running 0 119s
ここまでで、 GameLift 的な CP の準備ができた状態。 まだ GameServer がないので立ち上げる
GameServer Deploy
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml
kubectl get gameservers
接続してみる
kubectl get gs
NAME STATE ADDRESS PORT NODE AGE
simple-game-server-ff9w5 Ready 172.18.0.2 7171 kind-control-plane 34s
nc -u 172.18.0.2 7171
接続できんくね? kind の制約の可能性あるな… https://egashira.dev/blog/nodeport-with-port-mapping-in-kind-cluster
kind は、Docker コンテナ上で動作し k8s クラスタとして振る舞うが、ホストマシンからルーティング可能な IP アドレスが kind の Docker コンテナに振られないため。
touch kconfig.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 7171
hostPort: 8080
- role: worker
kind create cluster --config ./kconfig.yaml
kubectl create namespace agones-system --context kind-kind
kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/install/yaml/install.yaml
以下でステータスを確認して待つ
kubectl get pods --namespace agones-system
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml
kubectl get gs
これだとポートが変わっちゃう
wget https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/install/yaml/install.yaml
nodeport どれ割り当てるかは Agones がレンジから決める
# minimum port that can be exposed to GameServer traffic
- name: MIN_PORT
value: "7171"
# maximum port that can be exposed to GameServer traffic
- name: MAX_PORT
value: "7171"
kind create cluster --config ./kconfig.yaml
kubectl create namespace agones-system --context kind-kind
kubectl apply --server-side -f ./install.yaml
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml
docker ps
d4d44169f79a kindest/node:v1.27.3 "/usr/local/bin/entr…" 8 minutes ago Up 8 minutes 127.0.0.1:51084->6443/tcp, 0.0.0.0:8080->7171/tcp kind-control-plane
TCP で繋いでるので接続きれちゃう
nc -u 0.0.0.0 8080
kubectl get pod --context kind-kind
NAME READY STATUS RESTARTS AGE
simple-game-server-cmw54 2/2 Running 0 11m
kubectl describe pod simple-game-server-cmw54
Port: 7654/UDP
Host Port: 7171/UDP
kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:51084
CoreDNS is running at https://127.0.0.1:51084/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 7171
hostPort: 8080
protocol: UDP
- role: worker
三度目の正直
kind create cluster --config ./kconfig.yaml
kubectl create namespace agones-system --context kind-kind
kubectl apply --server-side -f ./install.yaml
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml
ステータス確認
kubectl get gs -n agones-system
NAME STATE ADDRESS PORT NODE AGE
simple-game-server-4cwqd Ready 172.18.0.2 7171 kind-worker 26s
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1084d7762661 kindest/node:v1.27.3 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes 127.0.0.1:52636->6443/tcp, 0.0.0.0:8080->7171/udp kind-control-plane
b37826c00192 kindest/node:v1.27.3 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes kind-worker
テスト
nc -u 0.0.0.0 8080
うーーーん?kind-worker に立ち上がってるのはミスな気がする
kubectl apply --server-side -f ./install.yaml --context kind-kind
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml --context kind-kind
kubectl get pods --namespace agones-system --context kind-kind
kubectl get gs --context kind-kind
4 回目
kind create cluster --config ./kconfig.yaml --name agones
kubectl cluster-info --context kind-agones
Kubernetes control plane is running at https://127.0.0.1:53821
CoreDNS is running at https://127.0.0.1:53821/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
kubectl create namespace agones-system --context kind-agones
kubectl apply --server-side -f ./install.yaml --context kind-agones
kubectl get pods --namespace agones-system --context kind-agones
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml --context kind-agones
kubectl get gs --context kind-agones
NAME STATE ADDRESS PORT NODE AGE
simple-game-server-tvmfq Scheduled 172.18.0.2 7171 agones-worker 13s
nc -u 0.0.0.0 8081
nc -u 0.0.0.0 8081
やっぱこれがおかしい気がする
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d463f2b5dd0e kindest/node:v1.27.3 "/usr/local/bin/entr…" 8 minutes ago Up 8 minutes 127.0.0.1:53821->6443/tcp, 0.0.0.0:8081->7171/udp agones-control-plane
bda97cc3724e kindest/node:v1.27.3 "/usr/local/bin/entr…" 8 minutes ago Up 8 minutes agones-worker
agones-worker Node へのパスが必要。こうだわ
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
extraPortMappings:
- containerPort: 7171
hostPort: 8081
protocol: UDP
v5
kind create cluster --config ./kconfig.yaml --name agones
kubectl create namespace agones-system --context kind-agones
kubectl apply --server-side -f ./install.yaml --context kind-agones
kubectl get pods --namespace agones-system --context kind-agones
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.36.0/examples/simple-game-server/gameserver.yaml --context kind-agones
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f76dc794754 kindest/node:v1.27.3 "/usr/local/bin/entr…" 2 minutes ago Up 2 minutes 127.0.0.1:54608->6443/tcp agones-control-plane
83f91c792726 kindest/node:v1.27.3 "/usr/local/bin/entr…" 2 minutes ago Up 2 minutes 0.0.0.0:8081->7171/udp agones-worker
shuaki@909c4ac8a726 [~/_tmp] % nc -u 0.0.0.0 8081
a
ACK: a
OK やっとセットアップできた