NGINX モダン アプリ リファレンス アーキテクチャ(MARA) プロジェクトに取り組み始めたとき、私たちはすでにこのプラットフォームに精通しており、部門予算を使用して支払うことができたため、IaaS プロバイダーとして AWS を選択しました。 もちろん、誰もが同じ経験や予算を持っているわけではありません。そのため、多くの方から、 K3s 、 Canonical MicroK8s 、 minikubeなどの Kubernetes ディストリビューションを使用して、ラボベースの環境やワークステーションで MARA をローカルに実行するためのオプションを提供するよう要望がありました。
皆様のご要望にお応えして、本日、MicroK8s で MARA をテストし、ご自身で導入できるように手順を提供できたことをお知らせいたします。
テストに MicroK8s を選んだのはなぜですか? MARA に必要な DNS、ストレージ、および出力機能を、メモリ フットプリントの小さい、簡単に導入できるモデルで提供するためです。 MicroK8s を使用すると、テスト シナリオを簡単に繰り返し実行して、適切なレベルのパフォーマンスを実現する展開の最小要件を決定できます。
この作業により、他の Kubernetes ディストリビューションのテストが容易になると期待しています。さまざまなディストリビューションの現在のステータスについては、 GitHub リポジトリを参照してください。 リストに載せたいお気に入りのディストリビューションがある場合は、フォークしてテストし、プル リクエストを作成してください。
MARA をローカルで実行する場合の最大の制約は、メモリと CPU です。 予備テスト中に、メモリ枯渇の問題の大部分は Elasticsearch に関連していることがわかりました。 Kibana は、メモリ量が極めて少ない構成 ( 16 GB未満) ではほとんど使用できません。 この問題に対処するために、完全な Elasticsearch デプロイメントに通常備わっている冗長性保護を排除する設定を MARA 構成ファイルに用意しました。 これにより障害モードの数が増えますが、これはリソースが制限された環境では必要なトレードオフです。
CPU の制約は、サンプルのBank of Siriusアプリケーションにかかる負荷の量に直接関連しています。 MARA の導入には、Bank of Sirius に負荷を生成するLocustが含まれており、ユーザー数と新規ユーザーの生成率はユーザーが制御する設定になっています。
Bank of Sirius の負荷が増加すると、システムの残りの部分にも影響が及ぶことに注意してください。 ユーザー数または生成率のいずれかが高すぎる場合、MARA のパフォーマンスが低下し、コンポーネントがクラッシュしたり停止したりする可能性が高くなります。 この動作を引き起こす値は使用可能な CPU によって異なりますが、要件で指定された容量以上の展開では、最大 64 人のユーザーと一度に 16 人のユーザーのスパンのレートによって生じる負荷を処理できると予想されます。
背景知識が整いましたので、MicroK8s で MARA を立ち上げる準備が整いました。
Ubuntu 20.04 (Focal)以降を実行しているシステム (ベアメタル Linux サーバー、仮想化、またはクラウド) のルート
アクセス。最低限、次のものが必要です。
MARA に必要なすべてのライブラリとバイナリを備えたローカル システム上の Python 3 仮想環境。 Python 3 がまだインストールされていない場合は、次のコマンドを実行します。
$ sudo apt update$ sudo apt install -y python3-venv
NGINX Ingress Controller の出力に割り当てる MicroK8s の統合MetalLBロード バランサー用の空き IPv4 アドレスが少なくとも 1 つ。 Bank of Sirius アプリケーションに localhost 経由でアクセスする場合は、使用可能な任意のプライベート( RFC 1918準拠)アドレスが受け入れられます。 たとえば、ネットワークが 192.168.100.0/24 の場合、10.10.10.10 などのアドレスを使用できます。
Pulumi アカウントとアクセス トークン。 これらがまだない場合は、 MARA のデプロイの手順 1で作成します。
Pulumi では状態ファイルを S3 互換のオブジェクト ストアまたはローカル ファイル システムに保存できますが、執筆時点では MARA はこれをサポートしていないことに注意してください。 この制限は、MARA または Pulumi の将来のリリースでは削除される予定です。
MicroK8sをインストールします。
$ sudo snap install microk8s --classicmicrok8s (1.23/stable) v1.23.3 from Canonical✓ installed
microk8s
コマンドを実行するために必要な権限を設定します。 のために <ユーザー名>
、あなたのアカウントを置き換えてください 根
システム上の権限:
$ sudo usermod -a -G microk8s <username>$ sudo chown -f -R <username> ~/.kube
$ newgrp microk8s
新しい権限を有効にするには、ルート権限を持つアカウントからログアウトして再度ログインしてください。
DNS 、ストレージ、 MetalLB用の MicroK8s アドオンを有効にします。
プロンプトで、次のいずれかを表すX . X . X . X ‑ X . X . X . Y
の形式で IP アドレス範囲を指定します。
192.168.100.100-192.168.100.110
(以下で使用される値)192.168.100.100-192.168.100.100
)$ microk8s enable dns storage metallbEnabling DNS
Applying manifest
...
Restarting kubelet
DNS is enabled
Enabling default storage class
...
Storage will be available soon
Enabling MetalLB
Enter each IP address range delimited by comma (e.g. '10.64.140.43-10.64.140.49,192.168.0.105-192.168.0.111'): 192.168.100.100-192.168.100.110
Applying Metallb manifest
...
MetalLB is enabled
MicroK8s が実行されていることを確認します。
$ microk8s statusmicrok8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
dns # CoreDNS
ha-cluster # Configure high availability on the current node
metallb # Loadbalancer for your Kubernetes cluster
storage # Storage class; allocates storage from host directory
...
ほとんどのユーティリティが見つけられると想定されるファイル ( ~/.kube/config ) に MicroK8s 構成をロードし、ディレクトリとファイルに推奨される権限を設定します。
$ microk8s config > ~/.kube/config$ sudo chmod 0644 ~/.kube/config
MARA リポジトリをクローンし、Bank of Sirius サブモジュールを初期化します。
$ git clone https://github.com/nginxinc/kic-reference-architectures.git$ cd kic-reference-architectures/
$ git submodule update --init --recursive --remote
クローンされた MARA リポジトリのルート ディレクトリ (前の手順でディレクトリを変更しました) で作業し、MicroK8s クラスターの Python 仮想環境を設定します。
$ ./bin/setup_venv.sh
このコマンドは長いトレースを生成します。 エラーがある場合は、MARA GitHub リポジトリの既知の問題/警告セクションで提案を確認してください。
Python 仮想環境をアクティブにします。 このコマンドは、仮想環境を使用するためにPATH
およびその他の環境変数を設定します。
$ source ./pulumi/python/venv/bin/activate
MicroK8s クラスターが MARA デプロイメント用に正しく構成されていることを確認します。
$ ./bin/testcap.sh
This script will perform testing on the current kubernetes installation using the currently active kubernetes configuration and context.
Any failures should be investigated, as they will indicate that the installation does not meet the minimum set of capabilities required to run MARA.
...
==============================================================
| All tests passed! This system meets the basic requirements |
| to deploy MARA. |
==============================================================
このセクションで MARA をデプロイするために使用されるstart.sh
スクリプトには、デプロイを成功させるために追加のアクションを必要とするオプションが含まれています。 簡単にするために、ここでは次のような基本的な展開を想定します。
「お知らせ」
を参照してください。「NOTE!」
を参照してください。MicroK8s クラスターに MARA をデプロイします。
Pulumi を使用するようにワークステーションをまだ設定していない場合は、Pulumi にログインするように指示され (必要に応じてアカウントを作成)、Pulumi アカウントに関連付けられた API トークンの入力を求められます。
$ ./bin/start.shAdding to [/home/ubuntu/kic-reference-architectures/bin/venv/bin] to PATH
Manage your Pulumi stacks by logging in.
Run `pulumi login --help` for alternative login options.
Enter your access token from https://app.pulumi.com/account/tokens
or hit <ENTER> to log in using your browser : <token>
Please read the documentation for more details.
デプロイメント タイプを選択し、プロンプトでk
と入力して、kubeconfig ファイルを使用してデプロイメントを構築します。 make
と Docker がインストールされていないことに関する警告は無視してください。デプロイメントでは代わりにレジストリからの NGINX Ingress Controller イメージが使用されます。
Type a for AWS, k for kubeconfig? k
Calling kubeconfig startup script
make is not installed - it must be installed if you intend to build NGINX Kubernetes Ingress Controller from source.
docker is not installed - it must be installed if you intend to build NGINX Kubernetes Ingress Controller from source.
プロンプトで、作成する Pulumi スタックの名前を指定します (ここではmara
)。 Pulumi アカウント内で一意である必要があります。
Enter the name of the Pulumi stack to use in all projects: maraSubmodule source found
Configuring all Pulumi projects to use the stack: mara
Created stack 'mara'
NOTICE! Currently the deployment via kubeconfig only supports pulling images from the registry! A JWT is required in order to access the NGINX Plus repository. This should be placed in a file in the extras directory in the root, in a file named jwt.token
See https://docs.nginx.com/nginx-ingress-controller/installation/using-the-jwt-token-docker-secret/ for more details and examples.
No JWT found; writing placeholder manifest
NOTICE! When using a kubeconfig file you need to ensure that your environment is configured to connect to Kubernetes properly. If you have multiple kubernetes contexts (or custom contexts) you may need to remove them and replace them with a simple ~/.kube/config file. This will be addressed in a future release.
プロンプトで、kubeconfig ファイルへのフルパスとクラスターの名前を指定します。 ここにあります /家/<ユーザー名>設定ファイル
そして microk8s クラスター
。
Provide an absolute path to your kubeconfig filevalue: /home/<username>/.kube/config
Provide your clustername
value: microk8s-cluster
Attempting to connect to kubernetes cluster
次のプロンプトで、クラスターの完全修飾ドメイン名 (FQDN) を指定します。 このスクリプトは、NGINX Ingress Controller を構成することと、自己署名証明書を作成することの 2 つの目的で FQDN を使用します (2 番目の用途では、値を IP アドレスにすることはできません)。 mara.example.com
を別の FQDN に置き換える場合は、次の手順でもそれを使用することを忘れないでください。
Create a fqdn for your deploymentvalue: mara.example.com
Grafana 管理者パスワードを指定します:
Create a password for the grafana admin user; this password will be used to access the Grafana dashboardThis should be an alphanumeric string without any shell special characters; it is presented in plain text due to current limitations with Pulumi secrets. You will need this password to access the Grafana dashboard.
value: <password>
インストール プロセスのトレースが表示され、各ステップで次の情報が表示されます。
Logstore は
Elasticsearch デプロイメントの開始を通知します)最後のステップ(Bank of Siriusの場合)が完了すると、トレースはMetalLBによってNGINX Ingress Controllerに割り当てられたIPアドレスを報告します(ここでは192.168.100.100
) と、デプロイメント用に選択した FQDN (ここではmara.example.com
) に加えて、デプロイメントに関するその他の情報を入力します。
The startup process has finished successfully
Next Steps:
1. Map the IP address (192.168.100.100) of your Ingress Controller with your FQDN (mara.example.com).
2. Use the ./bin/test-forward.sh program to establish tunnels you can use to connect to the management tools.
3. Use kubectl, k9s, or the Kubernetes dashboard to explore your deployment.
To review your configuration options, including the passwords defined, you can access the pulumi secrets via the following commands:
Main Configuration: pulumi config -C /jenkins/workspace/jaytest/bin/../pulumi/python/config
Bank of Sirius (Example Application) Configuration: pulumi config -C /jenkins/workspace/jaytest/bin/../pulumi/python/kubernetes/applications/sirius
K8 Loadbalancer IP: kubectl get services --namespace nginx-ingress
Please see the documentation in the github repository for more information
FQDN の解決に使用するツール (ローカルの/etc/hostsファイルや DNS サーバーなど) で、前の手順で報告された FQDN と IP アドレス間のマッピングを作成します。
MARA デプロイメントへのリクエストが成功したことを確認します。 curl が
自己署名証明書を受け入れるように、 -k
オプションを含めます。 証明書の詳細情報を表示するには、 -v
オプションを追加します。
$ curl -k -I https://mara.example.comHTTP/1.1 200 OK
Server: nginx/1.21.5
Date: Day, DD Mon YYYY hh:mm:ss TZ
Content-Type: text/html; charset=utf-8
Content-Length: 7016
Connection: keep-alive
ブラウザでhttps://mara.example.comに移動し、Bank of Sirius の Web サイトを表示します。 本稿執筆時点では、多くのブラウザ (Firefox や Safari を含む) では、自己署名証明書を使用しているサイトに関する警告を安全にクリックスルーできます。 Chrome を使用しないことをお勧めします。最近のセキュリティの変更により、サイトにアクセスできなくなる可能性があります。
test-forward.sh
スクリプトを実行して Kubernetes ポート転送を設定し、MARA 管理スイートのツール ( Elasticsearch 、 Grafana 、 Kibana 、 Locust 、 Prometheus)にアクセスできるようにします。 スクリプトは適切なサービス名を決定し、 kubectl
コマンドを実行してそれらをローカル ポートに転送します。
注記: ポート転送が正しく機能するには、このコマンドを実行するコマンド シェルと同じシステム上でブラウザーが実行されている必要があります。 そうでない場合(たとえば、仮想化環境を使用している場合)、コマンドは成功したように見えますが、ポート転送は実際には機能しません。 詳細については、GitHub リポジトリの「MARA の管理ツールへのアクセス」を参照してください。
$ ./bin/test-forward.shConnections Details
====================================
Kibana: http://localhost:5601
Grafana: http://localhost:3000
Locust: http://localhost:8089
Prometheus: http://localhost:9090
Elasticsearch: http://localhost:9200
====================================
Issue Ctrl-C to Exit
それでおしまい! これらの手順に従うと、約 20 分以内に MARA デプロイメントが環境内で稼働します。 この時点で、他の Kubernetes アプリケーションと同様に、Bank of Sirius アプリケーションと対話できます。 まず、組み込みの可観測性ツールを使用して、Locust でさまざまな量の負荷を生成したときに環境がどのように動作するかをテストすることをお勧めします。
私たちの目標は、できるだけ多くの Kubernetes ユーザーにとって MARA をできるだけ便利なものにすることです。 一部のコンポーネントの選択が気に入らないですか? 共有したい場合は、コンポーネントを置き換えてプル リクエストを開くことをお勧めします。 また、私たちのリポジトリの「問題とディスカッション」ページで、ご意見やご質問(私たちが行った疑わしい仮定など)をお寄せください。
この投稿はシリーズの一部です。 今後 MARA に機能が追加されるにつれて、その詳細をブログで公開していきます。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 q。"