AWS

このドキュメントでは、AWS(EKS)上でDiarkisを構築、デプロイ、オーケストレーションするプロセスについて説明します。

概要

提供されているk8s設定を使用すれば、Diarkisの使用は簡単です。ただし、これらの設定は初期段階のものであるため、必要に応じて自由に修正してください。


必要条件

  1. Docker のいずれかの設定:

    1. MacOS - Docker for MacOSをインストール。インストールガイドはこちら

    2. Linux - お使いのLinuxディストリビューションに合わせてDockerをインストール。インストールガイドはこちら注意: Dockerはx86_64/amd64アーキテクチャの主要なLinuxディストリビューション用に.deb.rpmパッケージを提供しており、Archベースのディストリビューションの実験的サポートも提供しています。

    3. Windows (WSL2またはHyper-Vバックエンド) - インストールガイドはこちら。初めてDockerをインストールする場合は、バックエンドの選択前にユースケースを考慮してください。

  2. AWSアカウント と請求が有効になっていること。AWSアカウントやプロジェクトをお持ちでない場合は、こちらを参照して始めてください。

  3. AWS CLI (awsコマンド) と適切な認証。インストールガイドはこちら (注意: AWS CLIはすべての主要なオペレーティングシステムをサポートしています)。CLI認証のヘルプはこちらを参照してください。

  4. Kubernetes CLI (kubectlコマンド) はこちらからダウンロード可能です。

  5. EKS CLI (eksctlコマンド) はAWS Workshopのこちらからダウンロード可能です。


セットアップガイド

以下の手順で、テンプレートDiarkisサーバークラスタの構築、デプロイ、オーケストレーションのプロセスをご案内します。これらの手順で、開始するのに十分な情報が得られるはずです。

Diarkisイメージ用のECRを作成

Diarkisコンポーネントイメージをデプロイ用にプッシュする前に、まずリモートECRレジストリを準備する必要があります。ベースイメージとしてデフォルトでalpineを使用しており、Docker Hubから取得できます。

aws sts get-caller-identity  # 正しいターゲットを確認
aws ecr create-repository --repository-name http
aws ecr create-repository --repository-name udp
aws ecr create-repository --repository-name tcp
aws ecr create-repository --repository-name mars

Diarkis用のEKSを作成して接続

eksctl create cluster -f cloud/aws/cluster_config.yaml  # 約10分かかります

注意: 選択したAZでNATゲートウェイの互換性に関するエラーが発生した場合は、別のAZを選択してください

aws eks --region ap-northeast-1 update-kubeconfig --name diarkis  # k8s認証情報を取得

EKSファイアウォールを開放

EKSノードへの0.0.0.0/0からのポート7000-8000のTCPおよびUDPトラフィックを許可します。 セキュリティグループ名eks-cluster-sg-diarkis-*で設定することをお勧めします。


サーバーイメージにタグを付けてプッシュ

server-templateで生成されたプロジェクトルートから、以下のコマンドを実行します:

make build-local

./remote_binにサーバー実行ファイル(udptcphttpmars)を生成した後、コンテナイメージをビルドします:

make setup-aws
make build-container-aws
make push-container-aws

マニフェストを適用

kustomize build k8s/aws/overlays/dev0 | kubectl apply -f -

以下の4つのコンポーネントが実行中かどうかを確認します:

$ kubectl get po -n dev0
NAME                    READY   STATUS    RESTARTS   AGE
http-5c7dbbb6d7-lhjlm   1/1     Running   0          3d14h
mars-0                  1/1     Running   0          3d14h
tcp-88dc5f97d-7sqk9     1/1     Running   0          3d14h
udp-fdc6bbccc-dwc5w     1/1     Running   0          3d14h

Diarkisクラスタの確認

まず、パブリックエンドポイントを取得します:

EXTERNAL_IP=$(kubectl get svc http -o json -n dev0 | jq -r '.status.loadBalancer.ingress[].hostname')
kubectl get svc -n dev0 -o wide  # または、このコマンドを使用

取得したEXTERNAL_IPにHTTP GETリクエストを送信します:

curl ${EXTERNAL_IP}/auth/1

以下のようなレスポンスが返ってきた場合、正常に動作しています:

{
  "TCP": "ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com:7201",
  "UDP": "ec2-yy-yy-yy-yy.ap-northeast-1.compute.amazonaws.com:7101",
  "sid": "xxxxxxxxxx",
  "encryptionKey": "xxxxxxxxxx",
  "encryptionIV": "xxxxxxxxxx",
  "encryptionMacKey": "xxxxxxxxxx"
}

項目が不足している場合、デプロイされたコンポーネントのいずれかに問題がある可能性があります。この時点で、Diarkisサポートに連絡することをお勧めします。


クラスタオートスケーラーのセットアップ

kubectl apply -f cluster-autoscaler-autodiscover.yaml

このファイルはdiarkisというクラスタ名用に事前設定されています。異なるクラスタ名を使用する場合は、マニフェスト内のdiarkisへの参照を修正してください。


ログコレクターのセットアップ

コンテナからのログはCloudWatch Logsを使用して集約できます。 fluent-bitは既にamazon-cloudwatch名前空間にデプロイされていますが、権限が設定されていません。

diarkis-publicdiarkis-privateノードにCloudWatchAgentServerPolicyを割り当ててログを集約します。ログは/aws/containerinsights/Cluster_Name/applicationの下に表示され、フィルタリングが可能です。

最終更新

役に立ちましたか?