Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2020年2月13日_Cloud_Native_Meetup_Tokyo.pdf

 2020年2月13日_Cloud_Native_Meetup_Tokyo.pdf

Noriyuki TAKEI

February 13, 2020
Tweet

More Decks by Noriyuki TAKEI

Other Decks in Technology

Transcript

  1. © SIOS Technology, Inc. All rights Reserved. Azure Kubernetes Service

    + Seleniumで実現する お⼿軽負荷テスト環境 2020年2⽉13⽇ Cloud Native Meetup Tokyo #12
  2. © SIOS Technology, Inc. All rights Reserved. About me 2

    Internal Only BCPVUNF Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • 千葉県在住 Favorites • Azure • Squash • Sweets blog https://tech-lab.sios.jp/ core skill Azure Kubernetes Service Cloud Native, Serverless全般 Twitter @noriyukitakei
  3. © SIOS Technology, Inc. All rights Reserved. WordPress on k8s

    3 Internal Only Internal Only https://tech-lab.sios.jp/archives/18591 今回のセッションのお話は、弊社技術ブログでも ご覧頂けます。 本セッションの ブログのURL
  4. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    4 Internal Only ハッシュタグ #cloudnativejp もしくは @noriyukitakei に忌憚ないご意⾒ お願いいたします 本セッションの ブログのURL
  5. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    5 Internal Only 負荷テストといえば やっぱり JMeterあたり、、、。 本セッションの ブログのURL
  6. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    6 Internal Only でも⼀つ問題が。。。 本セッションの ブログのURL
  7. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    7 Internal Only 弊社開発製品の OpenID Connectの シーケンスですが、マ ジで複雑、、、。 本セッションの ブログのURL
  8. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    8 Internal Only OpenID ConnectのIDトークンはシーケンスによってはクライアントの ブラウザからPostされる形でサーバー側に渡るので、それをParseしな ければいけない、、、。 本セッションの ブログのURL
  9. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    9 Internal Only Jmeterで正規表現 書くのめんどくさい 本セッションの ブログのURL
  10. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    10 Internal Only 本セッションの ブログのURL そこで Selenium︕︕
  11. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    11 Internal Only ブラウザのオートメーションツール Headless Chrome / Firefox使えば GUIのない環境でも動作可能 Javaなど複数の⾔語むけにSDKが提供されている 本セッションの ブログのURL
  12. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    12 Internal Only // アクセスする driver.get("https://hogehoge.example.com/test.php"); // ログイン // ID⼊⼒ wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("loginfmt"))); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("idSIButton9"))); driver.findElement(By.name("loginfmt")).sendKeys(userData.getUserName()); driver.findElement(By.id("idSIButton9")).click(); // パスワード⼊⼒ wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("passwd"))); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("idSIButton9"))); driver.findElement(By.name("passwd")).sendKeys(userData.getPassword()); driver.findElement(By.id("idSIButton9")).click(); JavaのSDKによるSeleniumのプログラムです。とあるログイン画⾯へ のIDとパスワードを送信しています。 本セッションの ブログのURL
  13. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    13 Internal Only 本セッションの ブログのURL Seleniumだったら ブラウザの動きを エミュレートしているだけなので、 シナリオづくり楽︕︕
  14. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    14 Internal Only 本セッションの ブログのURL でも、 JMeterに⽐べて重いのでは︖ Jmeterは1リクエスト1スレッドで 動作するけど、Seleniumは 1プロセス1リクエストになる、、、。
  15. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    15 Internal Only 本セッションの ブログのURL そこで Azure Kubernetes Service︕︕
  16. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    16 Internal Only 本セッションの ブログのURL ログインする処理を実 現するSelenium(Java) をPodにデプロイ Pod間で共有するVolumeにロ グを出⼒ FluetndがApplication Insightsにログを送って、 Application Insightsのア ラートによりエラーが出た ら通知
  17. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    17 Internal Only 本セッションの ブログのURL マネージドなサービスなので、ノード 数を動的に増やすことができる。ノー ド数増やせば負荷を増やすことができ る。
  18. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    18 Internal Only FROM centos:7 RUN yum -y install java-1.8.0-openjdk wget unzip # 最新のSelenium Driverが最新のChromeに対応していないので、旧バージョンのSeleniumをダウンロ ードして実⾏します。 RUN wget http://dist.control.lth.se/public/CentOS-7/x86_64/google.x86_64/Packages/google- chrome-stable-71.0.3578.98-1.x86_64.rpm -P /tmp && \ yum -y install libOSMesa google-noto-cjk-fonts && \ yum -y localinstall /tmp/google-chrome-stable-71.0.3578.98-1.x86_64.rpm # Selenium Driverをダウンロードしインストールします。 RUN wget https://chromedriver.storage.googleapis.com/73.0.3683.68/chromedriver_linux64.zip && \ unzip chromedriver_linux64.zip && \ mv chromedriver /usr/local/bin/ && \ chown root:root /usr/local/bin/chromedriver Dockerfile 本セッションの ブログのURL Seleniumスクリプト実⾏⽤Dockerコンテナのイメージを作ります。
  19. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    19 Internal Only # Chromeを実⾏するために必要なライブラリをインストールします。 RUN yum -y install libX11 GConf2 fontconfig # 負荷テストかけるアプリケーションをstresstest.jarという実⾏形式のjarファイルにして、 # 所定のディレクトリに配置します。 RUN mkdir -p /opt/stress-test/bin COPY ./stresstest.jar /opt/stress-test/bin RUN mkdir -p /opt/stress-test/data COPY ./test.csv /opt/stress-test/data # 負荷テストをかけるJavaアプリケーションを実⾏します。 CMD ["java","-jar","/opt/stress-test/bin/stresstest.jar"] Dockerfile 本セッションの ブログのURL 〜 前ページからの続き 〜
  20. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    20 Internal Only <source> @type tail # Seleniumが吐き出すログの出⼒パスです。 path /var/log/stresstest/stress-test.log tag selenium.selenium <parse> @type none </parse> </source> <match **> @type application_insights # Application InsightsのInsturmentation Keyを指定しています。 instrumentation_key <Application InsightsのInsturmentation Key> </match> fluent.conf 本セッションの ブログのURL Seleniumが吐き出したログをApplication Insightsに出⼒するコンテナ のイメージを作成します。まず、fluentdの設定ファイルである fluent.confを以下のように作成します。
  21. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    21 # fluentdのOffical Imageを使います。 FROM fluent/fluentd:v1.7-1 # fluentdのOfficial Imageのサイト(https://hub.docker.com/r/fluent/fluentd/)に # 書いてあるとおりにカスタマイズする。ただし13⾏⽬の部分はApplication Insights⽤の # プラグイン(https://github.com/microsoft/fluent-plugin-application-insights)を # インストールするように変更する。 USER root RUN apk add --no-cache --update --virtual .build-deps \ sudo build-base ruby-dev \ # cutomize following instruction as you wish && sudo gem install fluent-plugin-application-insights \ && sudo gem sources --clear-all \ && apk del .build-deps \ && rm -rf /home/fluent/.gem/ruby/2.5.0/cache/*.gem COPY fluent.conf /fluentd/etc/ USER fluent fluent.conf 本セッションの ブログのURL 次に以下のDockerfileを作成して、コンテナのイメージを作成します。
  22. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    22 # Seleniumを実⾏するアプリケーションをデプ ロイするためのマニフェストです。 apiVersion: apps/v1beta1 kind: Deployment metadata: name: stress-test spec: # ここで指定した下図だけSeleniumが # 起動します。同時に負荷をかけたい接続数を # 指定して下さい。 replicas: 10 selector: matchLabels: app: stress-test template: metadata: labels: app: stress-test deployment.yml Seleniumを実⾏するアプリケーションをデプロイするためのマニフェス トです。 spec: containers: - name: stt image: ntakeiacr.azurecr.io/stt:1.4 # fluentdとログを共有するための # Volumeをmountします。 volumeMounts: - mountPath: /var/log/stresstest name: log-volume imagePullSecrets: - name: docker-reg-credential # fluentdとログを共有するための # Volumeを作成します。 # Pod間でデータを共有したいので # hostPathとします。 volumes: - name: log-volume hostPath: path: /var/log/stresstest 本セッションの ブログのURL
  23. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    23 # fluentdを実⾏するためのマニフェストです。 # サイドカーとして配置するので、 # 各Nodeに⼀つづつ配置します。そのため # リソースの種別はDamemonSetとしています。 apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd deployment.yml fluentdを実⾏するアプリケーションをデプロイするためのマニフェスト です。 spec: containers: - image: ntakeiacr.azurecr.io/fluentd:1.2 name: fluentd # Seleniumとログを共有するための # Volumeをmountします。 volumeMounts: - mountPath: /var/log/stresstest name: log-volume imagePullSecrets: - name: docker-reg-credential # Seleniumとログを共有するための # Volumeを作成します。 # Pod間でデータを共有したいので # hostPathとします。 volumes: - name: log-volume hostPath: path: /var/log/stresstest 本セッションの ブログのURL
  24. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    24 Internal Only 本セッションの ブログのURL まとめ︕︕
  25. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    25 Internal Only シナリオづくりが簡単 ノード数を増やせば、簡単に負荷を増やすことができる。 Javaなど複数の⾔語むけにSDKが提供されている。 開発の間⼝が広い︕︕ メリット 本セッションの ブログのURL
  26. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    26 Internal Only Jmeterのようにたくさんの負荷をかけることは出来ない。 そこそこの負荷の要件のときしかマッチしない。 ノード数を増やすことで負荷を増やすので、 お⾦がかかる。⻑時間負荷をかけられない。 なんとなく、Kubernetesの正しい使い⽅で ないような気もする、、、。 デメリット 本セッションの ブログのURL
  27. © SIOS Technology, Inc. All rights Reserved. Selenium on AKSでお⼿軽負荷テスト

    27 Internal Only うっかりKubernetesクラスター削除し 忘れると1⽇でこういうことになりま す、、、。 本セッションの ブログのURL
  28. © SIOS Technology, Inc. All rights Reserved. さいごに 28 Internal

    Only Internal Only https://tech-lab.sios.jp/ 弊社技術ブログは、 下記URLでお届けしております。⾒てね︕︕