HomeArchiveFeedShelf

KubernetesにPerforceサーバーをデプロイする

なぜPerforceか

Perforceは、gitやsvnのようなバージョン管理ツールですが、大きなバイナリファイルに最適化されています。

Perforceは、Naughty Dogs、Electronic Arts、Ubisoftなどのトップクラスのゲームスタジオによって広く使用されています。

私がGit LFSではなくPerforceを選ぶ理由は、すでに稼働中のk8sクラスターがあり、ゲームプロジェクトのために大きなアセットファイルがあるため、Githubでデータパックを購入したくないからです。

Dockerfile

私のすべてのノードはarm64ベースのAWS仮想マシンです。Perforceはもはやarm64用のLinuxパッケージを維持していません。バイナリをダウンロードしてdockerイメージをビルドする方法を試みたところ、うまくいきました。

FROM ubuntu:jammy

# システムを更新
RUN apt-get update -y

# 依存関係をインストール
RUN apt-get install -y wget tar

# 作業ディレクトリを設定
WORKDIR /perforce

# Perforceバイナリをダウンロードして抽出
RUN wget https://www.perforce.com/downloads/perforce/r24.1/bin.linux26aarch64/helix-core-server.tgz -O helix-core-server.tgz \
    && tar -xzf helix-core-server.tgz \
    && rm helix-core-server.tgz

# PerforceバイナリをPATHに追加
ENV PATH="/perforce:${PATH}"

# Perforceの環境変数を定義
ENV P4ROOT=/perforce
ENV P4PORT=1666

# Perforceサーバーポートを公開
EXPOSE 1666

# Perforceサーバーを起動し、ログを追跡
CMD p4d -r /perforce -p $P4PORT -L /perforce/logs/log && tail -F /perforce/logs/log

ダウンロードURLは公式のPerforceダウンロードページにあります。この記事が書かれた時点で、helixサーバーの最新バージョンは2024.1/2596294です。独自のdockerイメージを作成する際には、新しいリリースを確認してください。

ビルドしてレジストリにプッシュ

#!/bin/bash

# 変数
repositoryHost='your-registry'
repository='your-repo'
imageBaseName='helix-core-server'
platforms='linux/arm64' # プラットフォームを定義

# package.jsonからバージョンを抽出
version='0.0.1'

# バージョン付きの完全なイメージタグ
imageTag="$imageBaseName:$version"

# マルチプラットフォームビルドをサポートする新しいビルダーインスタンスを作成(まだ作成されていない場合)
docker buildx create --name mymultiarchbuilder --use

# ビルドインスタンスを起動(まだ起動されていない場合)
docker buildx inspect --bootstrap

# Dockerイメージをビルドしてプッシュ
docker buildx build --platform $platforms -t $repositoryHost/$repository/$imageTag --push .

K8sデプロイメント

k8sクラスターからサービスを公開するたびに、DDoSの問題を考慮します。そうしないと、早かれ遅かれ直面することになります。通常、nodeport + nginx ingress controllerを介して公開し、cloudflareの背後に置きます。

しかし、Perforceはhttpサービスではなく、cloudflareのオレンジクラウドを介してプロキシできません。オレンジクラウドを無効にし、nodeportを使用して直接アクセスする必要があります。これは、私が自分のためだけに使用しているので、大きな問題ではありません。Perforceサーバーがインターネット上で公開される場合は、DDoS保護を考慮する必要があります。

deployment.yaml

私はすでにk8sクラスター内にjuicefsに基づくPVCを設定しているので、ポッドは再デプロイ中にデータを失うことはありません。juicefsのdata/perforce-rootをコンテナ内の/etc/perforce/perforceにマッピングしました。あなたのケースに合わせて調整してください。

この記事では、juicefsをk8sクラスターにPersistentVolumeとしてデプロイする方法については触れていません。詳細はjuicefsの公式ドキュメントに記載されています。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: perforce-server
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: perforce-server
  template:
    metadata:
      labels:
        app: perforce-server
    spec:
      containers:
        - name: perforce-server
          image: your-registry/helix-core-server:0.0.1
          ports:
            - containerPort: 1666
          volumeMounts:
            - mountPath: /etc/perforce
              name: perforce-storage
              subPath: data/perforce-root/etc/perfoce
            - mountPath: /perfoce
              name: perforce-storage
              subPath: data/perfoce-root/perfoce
          env:
            - name: P4ROOT
              value: /perforce
            - name: P4PORT
              value: '1666'
      volumes:
        - name: perforce-storage
          persistentVolumeClaim:
            claimName: juicefs-pvc

nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: perforce-service
  namespace: default
spec:
  type: NodePort
  ports:
    - port: 1666
      targetPort: 1666
  selector:
    app: perforce-server

適用する

kubectl apply -f deployment.yaml
kubectl apply -f nodeport.yaml

perforce-serverに割り当てられたポートを確認するには

kubectl get svc

私の場合、ポートは30222です。あなたのドメインをノードのパブリックIPにポイントしてください。あなたのPerforceアドレスはyour-domain:30222です。ファイアウォールやその他の関連するセキュリティポリシーを調整することを忘れないでください。

パスワードを設定

このステップは、initコンテナを使用してk8sに自動で行わせることもできますが、面倒なので、ポッドに入って手動で一度だけ行います。設定はPVCが提供されるため、永続的です。

ポッド名を取得

kubectl get pods -l app=perforce-server

次に、それに入ります

kubectl exec pod-name-you-just-got -it -- /bin/bash

認証を有効にする

p4 protect -o > protections.p4s

Google検索の結果では、管理者のユーザー名はsuperですが、私のprotection.p4sにはrootしか見えません。気にしないでください、rootのパスワードを設定します。

p4 -u root passwd

これで、rootとパスワードを使用してyour-domain:30222のPerforceサーバーに接続できます。

p4admin GUIクライアントを使用してrootで接続し、日常の開発のために通常の権限を持つユーザーを作成できます。

参考

@2024-05-18 16:20