메인 콘텐츠로 건너뛰기
블로그컴퓨팅지연 없음, 모든 조각: Xonotic, K3s, 엣지 컴퓨팅으로 게임 레벨업하기

지연 없음, 모든 프래그: Xonotic, K3s, 엣지 컴퓨팅으로 게임 레벨업하기

No_Lag_All_Frag_Level_Up_Your_Gaming

게이머의 상황을 가정해 보겠습니다. 인생 최고의 게임을 즐기고 있는데, 하루 중 오늘만이라도 스트리밍을 하고 싶다고 생각해보세요. 완벽한 승리를 위한 헤드샷을 준비하고 있고, 우승 화면이 뜨는 것을 상상하고 있는데... 게임이 지연됩니다. 상대방에게 당한 것입니다. 게임 오버.

실시간 플레이의 작은 결함으로 인해 영광의 순간과 승리의 한 바퀴를 놓친 경험은 누구나 있을 것입니다. 이러한 경험에 대한 불만으로 인해 플레이어가 자신의 운명을 스스로 통제할 수 있는 셀프 호스팅 게임이 다시 인기를 끌고 있습니다. 하지만 안타깝게도 셀프 호스팅은 모든 게임이나 모든 게이머에게 적합한 옵션은 아닙니다. 하지만 자체 하드웨어를 구매하고 유지 관리할 필요 없이 랙을 그림자 영역으로 추방할 수 있는 방법이 있다면 어떨까요?

조금만 개발하면 서버를 사용자(플레이어)에게 더 가까이 가져와 지연 시간이 짧은 자신만의 분산 게임 환경을 구축할 수 있습니다. 파워 트리오를 소개합니다: Xonotic, K3s와 엣지 컴퓨팅의 강력한 성능을 갖춘 Akamai Cloud.

엣지란 무엇인가요?

엣지 컴퓨팅은 수백(또는 수천) 마일 떨어진 대규모 중앙 집중식 데이터 센터에 의존하는 대신 데이터 소스, 즉 사용자 가까이에 처리 능력을 제공합니다. 이렇게 하면 데이터가 멀리 이동할 필요가 없기 때문에 끔찍한 지연을 유발하는 지연 시간을 획기적으로 줄일 수 있습니다.

왜 K3인가? 가볍고 민첩한 주행

K3s는 경량 Kubernetes 배포판입니다. 배포, 확장, 모든 것이 원활하게 실행되도록 하는 애플리케이션을 위한 놀랍도록 스마트하고 효율적인 관리자라고 생각하면 됩니다. K3s는 리소스가 제한된 환경을 위해 특별히 설계된 K8s의 파생 버전입니다. 작고 빠르며 매우 효과적이며 게임 인프라의 도우미가 될 수 있습니다.

그리고 아고네스는? 게임 서버 마에스트로

Agones는 전용 게임 서버를 관리하기 위해 특별히 설계된 오픈 소스 Kubernetes 네이티브 프로젝트입니다. 게임 서버 인스턴스 확장, 할당, 실행의 복잡성을 처리하므로 서버 구성에 신경 쓰지 않고 프래깅에 집중할 수 있습니다.

시작하자! (재미있는 부분)

We’re going to set up a Xonotic server (a fast-paced, free, open-source FPS) on a Linode instance, managed by K3s and Agones. Get ready to experience Xonotic like never before! If you’d like to follow our full guide, go to the docs.

1단계: Terraform 시간 - 기초 다지기

Terraform 은 "코드형 인프라" 도구입니다. 이 도구를 사용하면 서버 설정을 파일로 정의할 수 있으므로 반복 가능하고 관리하기 쉽습니다. 먼저 설치하세요:

brew install terraform

(참고: macOS를 사용하지 않는 경우, Terraform 웹사이트에서 사용 중인 OS에 대한 설치 지침을 확인하세요.)

2단계: 프로젝트 설정 - 게임 본부

프로젝트의 디렉토리를 만들어 보겠습니다:

mkdir xonotic

cd xonotic

3단계: Terraform 스크립트 - 서버(및 방화벽) 구축하기!

라는 파일을 만듭니다. main.tf 를 복사하여 다음 코드에 붙여넣습니다. 

여기서 마법이 일어납니다! 리노드 인스턴스를 정의하고, 방화벽을 설정하고, 필요한 모든 것을 구성하고 있습니다. 

이 사례에서는 Akamai의 분산 컴퓨팅 리전 중 하나인 덴버에 전용 컴퓨팅 인스턴스를 배포하고 있습니다. 여러 명의 도전자에게 적합한 4개의 vCPU가 있는 8GB 전용 인스턴스를 사용하는 것이 좋습니다.

참고: 이 샘플 코드를 그대로 사용하려면 현재 제한적으로 제공되는 분산 컴퓨팅 영역에 대한 액세스 권한이 있어야 합니다.

# Specify the required Terraform provider

terraform {

  required_providers {

    linode = {

      source = "linode/linode"

      version = ">= 1.27.0"  # Ensure a version that supports metadata

    }

  }

}

# Define variables for sensitive information

variable "linode_token" {

  description = "Linode API token"

  type        = string

  sensitive   = true

}

variable "root_password" {

  description = "Root password for the instance"

  type        = string

  sensitive   = true

}

variable "admin_ip" {

  description = "IPv4 address to be used to access the instance"

  type        = string

  sensitive   = true

}

# Configure the Linode provider

provider "linode" {

  token = var.linode_token

}

# Define the cloud-init configuration

data "template_file" "cloud_init" {

  template = <<EOF

#cloud-config

package_update: true

package_upgrade: true

runcmd:

  - apt update -y

  - apt upgrade -y

EOF

}

# Create a 8GB dedicated Linode instance in Denver

resource "linode_instance" "my_instance" {

  label     = "xonotic-game-server"

  region    = "us-den-1"

  type      = "g6-dedicated-edge-4"

  image     = "linode/ubuntu20.04"

  root_pass = var.root_password

  booted    = true

  metadata {

    user_data = base64encode(data.template_file.cloud_init.rendered)

  }

}

# Create a firewall to allow incoming traffic on port 22 and 7000-8000

resource "linode_firewall" "my_firewall" {

  label = "xonotic-firewall"

# Drop everything that is not covered by an explicitly rule

  inbound_policy = "DROP"

# Allow all outbound traffic

  outbound_policy = "ACCEPT"

  # Rule to allow SSH (port 22)

  inbound {

    label    = "allow-ssh"

    action   = "ACCEPT"

    protocol = "TCP"

    ports    = "22"

    ipv4     = [var.admin_ip]

  }

  # Rule to allow custom port range (7000-8000)

  inbound {

    label    = "allow-custom-ports"

    action   = "ACCEPT"

    protocol = "UDP"

    ports    = "7000-8000"

    ipv4     = ["0.0.0.0/0"]

    ipv6     = ["::/0"]

  }

  # Rule to allow Agones port 8080

  inbound {

    label    = "allow-custom-ports"

    action   = "ACCEPT"

    protocol = "TCP"

    ports    = "8080"

    ipv4     = ["0.0.0.0/0"]

    ipv6     = ["::/0"]

  }

  # Associate the firewall with the instance

  linodes = [linode_instance.my_instance.id]

}

# Output the instance's IP address

output "instance_ip" {

  value = linode_instance.my_instance.ip_address

}

이제 다음과 같은 이름의 파일을 만듭니다. terraform.tfvars 를 클릭하고 Linode API 토큰과 루트 비밀번호를 추가하세요(자리 표시자를 바꾸는 것을 잊지 마세요!):

linode_token  = "your_linode_api_token"

root_password = "your_root_password"

admin_ip = "your_ipv4_address/32"

중요 보안 참고 사항: 당신의 terraform.tfvars 파일 안전 및 절대 공개 리포지토리에 커밋하세요!

현재 IP 주소를 잘 모르는 경우 다음 명령을 사용하면 현재 공인 IP 주소를 반환받을 수 있습니다.

curl http://whatismyip.akamai.com

4단계: 초기화 및 적용 - Terraform 작동하게 하세요!

먼저 Terraform 초기화합니다:

terraform init

이렇게 하면 리노드 공급자가 다운로드됩니다. 그런 다음 구성을 적용합니다:

terraform apply

변경 사항을 확인하라는 메시지가 표시됩니다. 유형 yes 를 입력하고 Enter 키를 누릅니다. 이제 Terraform 리노드 인스턴스를 프로비저닝하고 방화벽을 설정합니다. 몇 분 정도 걸릴 수 있습니다. 커피를 마시거나 조준 연습을 하세요....

5단계: SSH 로그인 - 서버가 기다립니다!

Terraform 완료되면 인스턴스의 IP 주소가 출력됩니다. 리노드 클라우드 관리자의 새로 생성한 인스턴스의 네트워크 탭에서 역방향 DNS 이름을 찾을 수도 있습니다. SSH를 사용하여 연결합니다:

ssh root@your_instance_ip_or_dns

갈다 your_instance_ip_or_dns 를 실제 IP 주소 또는 DNS 이름으로 입력합니다. 설정한 루트 비밀번호를 입력하라는 메시지가 표시됩니다. terraform.tfvars.

6단계: K3s 설치 - 경량 Kubernetes의 강자

의외로 간단합니다! 리노드 인스턴스에서 이 명령을 실행하기만 하면 됩니다:

curl -sfL https://get.k3s.io | sh -

K3를 다운로드하고 설치합니다. 1~2분 정도 소요됩니다.

7단계: Agones 설치 - 게임 서버 오케스트레이션 시간!

이제 Xonotic 게임 서버를 관리할 Agones를 설치하겠습니다. 다음 명령을 실행합니다:

kubectl create namespace agones-system

kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/install/yaml/install.yaml

이렇게 하면 Agones 전용 네임스페이스가 생성되고 K3 클러스터에 배포됩니다.

8단계: Agones가 실행 중인지 확인 - 상태 확인

모든 것이 원활하게 실행되고 있는지 확인해 보겠습니다:

kubectl describe --namespace agones-system pods

Agones 파드가 실행 중임을 나타내는 출력이 표시되어야 합니다.

9단계: Xonotic 게임 서버 상태를 배포하고 가져옵니다.

kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml

 watch kubectl describe gameserver

10단계: 게임 서버 IP 받기 - 연결 준비 완료!
게임 서버와 해당 서버의 IP 주소 목록을 가져옵니다:

kubectl get gs

11단계: Xonotic 클라이언트 - 다운로드 및 설치

아직 설치하지 않았다면 https://xonotic.org/ 에서 운영 체제용 Xonotic 클라이언트를 다운로드하세요.

12단계: 연결하고 플레이하세요! - 프래그 타임!

  1. Xonotic 시작: 클라이언트를 시작합니다.
  2. 멀티플레이어 모드: '멀티플레이어'로 Go .
  3. 서버 연결: 서버에 수동으로 연결하려면 선택합니다.
  4. IP 및 포트를 입력합니다: 에서 받은 IP 주소와 포트를 입력합니다. kubectl get gs 이전 명령으로 교체됩니다.
  5. 게임에 참여하세요: 접속하여 지연 시간이 짧은 Xonotic 경험을 즐기세요!

정리(지배가 끝나면)

아고네스 함대와 게임 서버 인스턴스를 제거합니다:

kubectl delete -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml

그런 다음 다음을 사용할 수 있습니다. terraform destroy 를 프로젝트 디렉토리에 추가하여 리노드 인스턴스와 방화벽을 제거하여 추가 비용을 방지하세요.

결론 결론: 게임의 미래는 당신의 손에 달려 있습니다

방금 엣지 컴퓨팅, K3, Agones를 사용하여 강력하고 지연 시간이 짧은 게임 환경을 구축했습니다. 이는 게임 제공업체 소유의 서버에 전적으로 의존하는 방식에서 벗어나 집에서 더 가까운 곳에서 게임 경험을 즐길 수 있는 방법을 보여줍니다. 이렇게 하면 지연 시간으로 인한 손실 없이 더 원활하고 반응성이 뛰어나며 재미있는 게임을 즐길 수 있습니다. 

Akamai는 클라우드 컴퓨팅 고객이 사용할 수 있는 25개 이상의 전 세계 분산형 코어 컴퓨팅 리전을 보유하고 있습니다. 오클랜드, 요하네스버그, 보고타 등 클라우드 공급업체의 서비스가 제공되지 않는 주요 대도시에 전용 인스턴스를 배포하는 분산 컴퓨팅 리전을 활용하여 워크로드를 더욱 가까운 곳에 배치할 수 있습니다. 계정에 가입하고 사용 가능한 분산 리전의 전체 목록을 확인한 후 클라우드 컨설턴트와 연락하여 해당 지역의 리소스에 액세스할 자격이 있는지 확인하거나 지원 티켓을 생성하세요.

If you want to learn more, check out our guide on how to set up a Xonotic server with K3s and Agones.

내용

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *