최근에 업무로 인해서 Agones 를 사용해야하는 이슈가 있었다 그래서 agones 설치 및 fleet server 설치까지 진행한 부분을 공유하고자 합니다.
1. Agones 설치
저는 agones 를 우선 argocd 의 app of apps 형태로 deploy 하였습니다, 하지만 공식 문서에서 하는데로 하자면
helm repo add agones https://agones.dev/chart/stable
helm repo update
helm install my-release --namespace agones-system --create-namespace agones/agones
위의 명령어로 간단하게 서버를 올릴 수 있습니다.
특정 버전으로 올리고자 한다면 "--version" 으로 올리시면 될거 같습니다.
참고로 저는 EKS 위에 올렸습니다. EKS 에 올리시는 경우에는 SG ( Security Group ) 에 대한 확인이 필요하실겁니다.
Agones 의 경우 노드의 7000-8000 포트를 찾아서 개방하기 때문에 이 부분을 SG 에 추가해주셔야 TCP 혹은 UDP 요청이 들어갑니다.
해당 부분에 대한 링크는 아래에 있습니다.
https://agones.dev/site/docs/installation/creating-cluster/eks/
2. Agones Fleet 사용해보기
우선 fleet 에 대한 자세한 설명은
https://agones.dev/site/docs/reference/fleet/
Amazon Elastic Kubernetes Service
Follow these steps to create an [Amazon Elastic Kubernetes Service (EKS)](https://aws.amazon.com/eks/) cluster for your Agones install.
agones.dev
Fleet Specification
A `Fleet` is a set of warm GameServers that are available to be allocated from.
agones.dev
위에 있으나 간단하게 설명하자면
"Gameserver 를 관리하는 하나의 set" 이라고 이해하시면 쉬울거 같습니다.
즉 kubernetes 에서 pod를 하나의 deployment 으로 관리 하듯이 agones 에서는 fleet 을 통해서 여러 게임 서버를 관리 해줄 수 있습니다.
이 fleet 을 통해서 gameserver 를 관리하게 되면
- kubernetes 에 해당 Gameserver 이미지를 가지고 있는 pod 를 생성 및 container port 를 열어주게 됩니다.
- gameserver 가 올라가 있는 IP 및 개방한 port 를 알려주게 됩니다.
- gameserver 가 종료 되면 다음 게임 서버를 사용자가 원하는 replicas 만큼 유지 해줍니다.
3. 실제 서버 통신 해보기
https://github.com/googleforgames/agones/blob/release-1.39.0/examples/fleet.yaml
에서 제공 해주는 예시는 UDP 서버로 되어 있어서 요청을 보낼떄는 telnet 혹은 nc ( netcat ) 을 사용해서 보내주면 됩니다.
이러한 simple game server 예시의 코드를 뒤지다 보면 EXIT 을 받았을 때 게임 서버를 종료 해준다는 것을 의미합니다.
echo "EXIT" | nc -u [IP] [PORT]
저의 경우 netcat 을 사용하였고 요청 이후 ACK 오는것을 확인 하고 Gameserver 또한 종료 후 새로 띄워진것을 확인 했습니다.
위 서버를 tcp 로 변경하고자 하면 tcp flag 옵션을 주면 되는데 해당 예제는 아래에 링크를 남기겠습니다.
https://github.com/googleforgames/agones/blob/release-1.39.0/examples/simple-game-server/fleet-tcp.yaml
이렇듯 게임 서버를 운영하는데 Kubernetes 를 활용할 수 있는 agones 를 대충 훑어보았습니다.
생각보다 간단하지만 여러가지 챙겨야 하는 옵션들이 있어서 나름 시간을 먹었던거 같습니다.
필요하신 경우에 알맞게 사용하면 유용한 툴인거 같습니다.
'DevOps 잡다구리 > Kubernetes Stuff' 카테고리의 다른 글
[Kubernetes] Pod 생성 과정에서 container runtime 들이 하고 있는 일들 -1 CRICTL part (0) | 2024.09.26 |
---|---|
[Kubernetes] CRI-O 에 관하여 (0) | 2024.09.01 |
[Kubernetes] Using Kubespray to build Kubernetes cluster. (0) | 2024.02.28 |
[Argocd] Using Helm chart while using my values.yaml (0) | 2024.02.22 |
[Kubernetes] Istio for access log (0) | 2023.05.11 |