OKE(Oracle Container Engine for Kubernetes)でJMeterクラスター環境構築_その1

id:s-oomori です。

先日、日本オラクル社で「Container Native Day:コンテナ/Kubernetesを用意に導入し、最大のメリットを享受する方法とは」というテーマのセミナーで登壇させていただく機会があり、Cloudiiからは「"AWSからOracle Cloudに移行してみました" OKE評価報告 」という内容でお話させていただきました。


開催前からイベント内容の記事が公開されたり、タイトルを攻めすぎたのかそれなりのプレッシャーがありましたが、やりきりました。 thinkit.co.jp



本ブログでは約3回に分けて、今回取り上げた内容をOracle Cloud Infrastructure(OCI)のOKE(Oracle Container Engine for Kubernetes)の設定〜JMeter実行までの内容をお伝えします。
Kubernetes(K8s)入門にも使えるようになるべく情報を記載していきたいと思います。
セミナーの模様は、別途記事がでるようですので、UPされたらこちらでも更新させていただきます。
※CloudiiのSNSでもお知らせします。(Twitter:@cloudii_jp)

【第1回】OKEでKubernetesクラスターの作成〜接続(今回)
【第2回】JMeterクラスター環境構築〜テスト
【第3回】JMeterクラスターをスケールしてみる(予定)


発表資料

  • 今回のブログ内容では資料中の図が参考になりますので、参照しながら進めるとより理解し易いと思います。
  • 最後の2枚の背景が半透明にならない。。。(実際は半透明です) speakerdeck.com

なぜJMeterクラスター?

なぜ今回JMeterクラスターを取り扱ったかというと、当社はゲームインフラ構築にも携わっており、そのゲームエンジン負荷試験にJMeterを採用してます。
当初はAWSのEC2を使って構成していましたが、JMeterでPlugin(独自サンプラー等)を使用しており、プログラムを変更した時に都度、JMeterマスターからスレーブにプログラムを配布していたためその作業がとても手間でした。
そこでDockerでコンテナ化し、K8sで配備や管理をするような構成にしたところとても楽になったという事例があり、AWSから移行しやすそうだと考えたからです。

また、今回の構成にとても近い環境を提供しているサイトもあったので助かりました。

参考にしたサイトは以下になります。
※手順も記載されていて簡単に環境を構築できます。
※このサイトを使った構築については第2回でお伝えします。 blog.kubernauts.io


JMeterクラスター記事(全3回)の到達目標

  • OKEでクラスター構築する。
  • JMeterクラスターを構成しテストを実行し、Grafanaで結果を視覚化する。
  • 下図の赤枠の構成を構築します。 f:id:s-oomori:20190318115333p:plain


前提

  • 作業端末でkuberctlコマンド等のK8sを扱うに当たって必要なコマンドを導入しておく。
     ※私はMac Bookで実装。別途専用Linuxを立ち上げると自分のPCに余計なツールを導入する必要がなくなります。

  • OCIのCLIを導入しておく。
     ※導入方法はCloudiiブログでもUPしてますので参考にしてください。
      Oracle Cloud Infrastructure CLIの導入 - Cloudii blogOracle Cloud Infrastructure CLIの導入 (後編:環境設定) - Cloudii blog

  • OCIのService Limitを解除しておく。
     ※1リージョンあたりのCompute同時構築数が制限されているので、検証でも増やしておくことを推奨します。
     ※Computeのシェープ種類も用途によっては解除してください。
     ※解除方法はOCI Web上から英語文で申請すれば解除してくれます。または、SRからの解除申請も可能です。

  • 推奨:OCIでOKE用のCompartmentを作成しておく。また、必要に応じて、権限等のセキュリティ周りも設定しておく。
     ※今回は、「test-container」というCompatmentを事前に作成しておいたので、このCompartmentを利用します。

  • 今回は「us-Phoenix-1」リージョンを使います。


OKEクラスター構築

1.OCIメニューの「Developer Services」-「Container Clusters(OKE)」を選択
 ※「Developer Services」選択でもOKE画面が開きます。
f:id:s-oomori:20190317182938p:plain

2.Clusters画面で、対象Compartmentが選択されていることを確認し「Create Cluster」を選択 f:id:s-oomori:20190317183417p:plain

3.Cluster Creation画面で、対象項目を入力/選択

  • NAME=クラスター名:今回は「jmeter-cluster」
  • KUBERNETES VERSION=K8sの1.10、v1.11、v1.12が選択可能:今回は最新Verのv1.12.6を選択
  • 「QUICK CREATE」を選択:VCNやサブネット等の必要なネットワーク周りを自動で構成してくれます。
     ※デフォルトでWorker Nodeを3つ構成します。
     ※事前に構築したVCNを利用する場合は「CUSTOM CREATE」を選択してください。 f:id:s-oomori:20190317185236p:plain

  • SHAPE=Worker Nodeのシェープ:今回は「VM.Standards2.1」を選択

  • QUANTITY PER SUBNET=1サブネットあたりのノード数を指定:今回は1サブネットあたり1ノードとするため「1」を入力
  • PUBLIC SSH KEY=PUBLIC SSH KEYを指定可能:今回は自前のKEYを入力します。
  • 残りはデフォルトのまま「Create」を選択 f:id:s-oomori:20190317193040p:plain

4.「Cluster and associated network resources created.」となればクラスターが構築されます。 f:id:s-oomori:20190317193708p:plain

5.Cluster Statusが「Creating」→「Active」となりクラスター構築完了したかに見えますが、まだNode作成が完了してない状態です。Nodeはこの後、自動で構成されます。 f:id:s-oomori:20190317194328p:plain

6.Nodeが1サブネットあたり1つずつ構成されステータスが「UPDATING」→「ACTIVE」になれば構成完了です。 f:id:s-oomori:20190317194520p:plain

※Compute-Instancesを見ると、3つのインスタンスが作成されていることが確認できます。これがノードとなります。


OKEクラスター接続

1.作成したクラスタの「Access Kubeconfig」を選択。 f:id:s-oomori:20190317200500p:plain

2.設定ファイル取得のコマンドが記載されてます。(ここ親切!! f:id:s-oomori:20190317200805p:plain

  • 記載されている通り、計3つのコマンドを入力します。

  • 注意:既にconfigファイルが生成されている場合は、configをバックアップし、今回のコンフィグ作成後にマージし、今回作成したクラスターに切り替えてください。
    参考:複数のkubernetesクラスタを超簡単に切り替える - monkey404(kubectxはとても便利です!)
    【例 】 ※「kubectxコマンド」で都度確認してください。

kubectx
#既存configをバックアップ
cp ~/.kube/config ~/.kube/config_bak1
#jmeter-clusterを「.kube/config」に設定
oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.phx.************ --file $HOME/.kube/config --region us-phoenix-1
kubectx
#jmeter-clusterのconfigをバックアップ
cp ~/.kube/config ~/.kube/config_bak2
#バックアップした2つのconfigをマージ
KUBECONFIG=~/.kube/config_bak1:~/.kube/config_bak2 kubectl config view --flatten > ~/.kube/config
kubectx
#下記のコマンドでクラスター切り替え
kubectx 切り替えたいクラスター名


* OKEのコマンドを入力するとクラスター名は「context-クラスターIDの最後の方が記載」の名前付けになってるので、今回は下図から「context-c3tkn3fmqyg」が対象クラスターとなります。 f:id:s-oomori:20190317204910p:plain

  • 参考:kubectxコマンドで表示されるクラスター名は、config内の名前を書き換えることで任意の名前に変更することができます。

7.kubectlコマンドでクラスターにアクセスできるか確認

kubectl get nodes

今回3ノードを生成したので、次のように結果が返ってくれば問題ありません。 ※1サブネットあたり1ノードなので、それぞれのセグメントも違います

NAME        STATUS    ROLES     AGE       VERSION
10.0.10.2   Ready     node      1h        v1.12.6
10.0.11.2   Ready     node      1h        v1.12.6
10.0.12.2   Ready     node      1h        v1.12.6


今回は、クラスター構成〜クラスター接続までになります。
次回は、JMeterクラスタ環境を構築します。(なるべく急いで書きます


参考サイト