LoginSignup
7
5

More than 3 years have passed since last update.

RancherでEKSを管理してみよう

Last updated at Posted at 2019-04-14

AWS Open Source Blog に投稿された「Managing Amazon EKS Clusters with Rancher」を参考に環境を構築してみます。

Managing Amazon EKS Clusters with Rancher

EKSクラスタの作成やIAMユーザへのロール設定などの項目も記載しました

今回のゴール


  • RancherでEKSクラスターを構築して、パブリックアクセス可能なアプリをデプロイしてみる
  • GrafanaやInfluxDBなど他のオープンソースソフトウェアの組み合わせを使用して、リアルタイムの地理空間データを追跡するためのサンプルプロジェクトをデプロイします
前提条件

  • Rancherサーバー用にグローバルIPアドレスでアクセス可能なホストVM、ラップトップ、またはサーバーが必要です
    • 今回は AzureVM (West US 2) の CentOS 7 を使用しました
    • dockerバージョンはNode Requirementsを参考にしてください
    • Rancher Master用のVMに固定IPを採番し、Route53 パブリックZONEに登録したAレコードを使用しました
    • TCP 22、80、および443でアクセス可能
      • TCP:22の接続元IPは制限、TCP:80,443はPermit ANY AN
Amazon EKS の捜査権限を付与したAWSアカウントを作成します

  • IAMでのAWSアカウント作成方法はこちらを参考にしてください
  • 今回EKSを使用するために作成したIAMユーザに適用したPolicyの設定例です
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:ListRoles",
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:GetRole",
                "iam:PassRole",
                "iam:CreateInstanceProfile",
                "iam:AddRoleToInstanceProfile",
                "iam:CreateServiceLinkedRole",
                "iam:RemoveRoleFromInstanceProfile",
                "iam:DeleteInstanceProfile",
                "autoscaling:*",
                "kms:RetireGrant",
                "ec2:*",
                "cloudformation:*"
            ],
            "Resource": "*"
        }
    ]
}
EKS クラスター VPC を作成する

  • CloudFormation コンソールへアクセスします
  • Oregonリージョンを選択します Rancher-EKS-VPC-Clusters02.png
  • 「Create Stack」を選択します Rancher-EKS-VPC-Clusters01.png
  • [Specify an Amazon S3 template URL (S3 テンプレート URL の指定)] を選択、s3からサンプルスタックのURLを設定して「NEXT」をクリック
  • https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-11-07/amazon-eks-vpc-sample.yaml Rancher-EKS-VPC-Clusters03.png
  • 「Stack name」や「Worker Network Configuration」にワーカーノード用ネットワークのプリフィックスを設定し「NEXT」をクリック Rancher-EKS-VPC-Clusters04.png
  • [オプション] ページで、スタックリソースへタグ付けして[NEXT]をクリック Rancher-EKS-VPC-Clusters05.png
  • 次のページで設定内容を確認し「Create」を選択
  • Rancher設定で使用するので、スタック作成が完了したら「Outputs」から [SecurityGroups] 、[VpcId]、[SubnetIds] を確認しておきます Rancher-EKS-VPC-Clusters06.png
Rancherサーバー用仮想マシンへSSHアクセスしてRancherコンテナを起動します

  • Master用のVMにSSHアクセスして下記コマンドを実行します
  • docker run -d --restart=unless-stopped --name rancher --hostname rancher -p 80:80 -p 443:443 rancher/rancher:stable
  • ブログでは:latest 指定しているのですが、今回はStable(v2.1.7 2019/03/31時点)を指定します
    • ブラウザでMaster用のVMのグローバルIPかAレコードホスト名にHTTPSでアクセスします
    • アクセスした初期画面で admin パスワードを作成します Rancher-AdminLogin.PNG
    • EKSがRancherにインストールの進行状況を通知できるように、Master用のVMのグローバルIPかAレコードホスト名を入力します Rancher-ServerURL.PNG
EKSクラスターを作成

  • 前提条件の項で作成したAWS IAMユーザのAccess key ID と Secret access key を確認します
  • Rancher にサインインし、「Clusters」画面で「Add Cluster」ボタンを選択します Rancher-EKS-Add-Clusters.png
    • Amazon EKS を選択します Rancher-SelectEKS.PNG
  • 下記内容を入力・選択します
    • Cluster Name を入力
    • EKS作成用に作成したIAMユーザの「Access Key ID」と「Secret Access Key」を入力
  • 「Region」のプルダウンでEKS環境を作成するAWSリージョンを選択します
    • 現在選択できるリージョンは「us-east-1」、「us-west-2」、「eu-west-1」
    • 各種情報の選択・入力後「 Next: Select Service Role」を選択します Rancher-EKSsetting.PNG
    • 次の画面で「Standard Rancher generated service role」のチェックをいれて「Next: Select VPC & Subnet」を選択します Rancher-ServiceRole.PNG
    • 「Public IP for Worker Nodes:YES」、「VPC & Subnet」は「 Custom: Choose from your existing VPC and Subnets」で作成済みのEKS用 VPC を選択して「Next:Select subnets」に進みます Rancher-EKS-VPC.PNG
    • 次の画面でsubnetを選択して「Next:Select Security Group」を選択します Rancher-EKS-Subnet.PNG
    • 次の画面で適応する Security Groupe を選択して「Next:Set Instance Options」を選択します
    • 「Instance Type」はm5.large ,「Minimum ASG Size」は1「Maximum ASG Size」は3の初期値で設定して「Create」で環境を作成します Rancher-EKS-InstanceType.PNG
    • コンソールにクラスタのステータスが「プロビジョニング」として表示されますので、10~15分ほど待ちましょう
    • RancherはAWSバックエンドのCloudformationテンプレートを使用してインストールを開始します
    • Cloudformationコンソールで環境構築の詳細なイベントをモニターできます Rancher-EKS-Cfn.png
    • EKSコンソールからもクラスターが作成されていることを確認できます Rancher-EKS-Clusters.png
    • クラスタのプロビジョニングが完了すると、Rancherコンソールのステータスが「Active:」に変わります。 Rancher-Cluster-Active.png
    • ワーカーノードとして m5.large のEC2 が3つ起動されています Rancher-EKS-WorkerNode.png
EKSクラスターにnginxポッドを展開してみます

  • 画面左上のプルダウンメニューから「Default」プロジェクトを選択します Rancher-EKS-Cluster-Default.png
    • 表示された「workload」画面で「Deploy」を選択します Rancher-EKS-Cluster-Workload01.png
    • ワークロードに名前を付けて、Docker Image に「nginx」を指定します
    • 「Add Port」をクリックして、コンテナー・ポート「80」を公開設定します
    • リスニング・ポートに「80」を指定し、プルダウンメニューからレイヤー4ロード・バランサーを指定します
    • 上記設定でNginxnインスタンスへインターネットからアクセス可能になります Rancher-EKS-Cluster-Workload02.png
    • ページ下部の「Launch」をクリックし、[ワークロード]タブと[ロードバランシング]タブのステータスが[アクティブ]になるまで確認して、ワークロードとロードバランサのプロビジョニングが完了するのを待ちます。 Rancher-EKS-Cluster-Workload03.png
    • ロードバランサがプロビジョニングを終了すると、クリック可能なリンクがワークロードの下に表示されます。 EKSクラスター用のDNSエントリーが作成され、伝播するのに数分かかることがあります
    • リンクをクリックした後に404エラーが表示される場合は、Elastic Load Balancer DNSレコードが更新されるまでさらに数分待ってからやり直してください Rancher-EKS-Cluster-Workload04.png Rancher-EKS-Cluster-Workload05.png
    • 「80 / tcp」のリンクをクリックすると、デフォルトのnginxページに移動します Rancher-EKS-Cluster-Workload06.png Rancher-EKS-Cluster-Workload07.png
    • ACMからELBを確認してると Type:Classic で作成されていました Rancher-EKS-Cluster-Workload08.png
nginxポッドを Scale up してみます

  • ワークロードの急増に対応するためにとても簡単にコンテナを増やすことができます
  • Defaultプロジェクトのworkloadを選択し、+ / - 記号をクリックすることで動的に調整します Rancher-EKS-Cluster-ScaleUp01.png
NYC Citi Bikeのリアルタイムデータを追跡するためのサンプルプロジェクトのデプロイしてみます
  • 3つのポッドを準備してニューヨークのシティバイクの利用者をリアルタイムで追跡するためのRancherプロジェクトを展開します
  • Data ingestion pod:このポッドには、Citi Bikeによって公開されたリアルタイムデータをjson形式で定期的にクエリし、それをAPI経由でInfluxDBデータベースに保存するためのスクリプトが含まれています。
  • Time-series DB pod with InfluxDB: このポッドには、Citi Bikeサイトからリアルタイムで細流化するデータを処理するためにInfluxDBがインストールされています。InfluxDBは、クエリと検索の時系列に最適化された人気のあるオープンソースデータベースです。さらに、ポッドには、AWS EBS gp2ストレージクラスを使用して履歴データをアーカイブするために必要な永続的なボリュームを提供するローカルマウントポイントもあります。
  • Grafana pod:このポッドは、収集されたデータを視覚化するためのGrafanaが稼働しています

  • プロジェクトのためにKubernetes名前空間を作ります。左上隅にあるドロップダウンメニューから[Default Namespace]を選択し、[Namespaces]をクリックします
    Rancher-EKS-Name-Space01.png

  • [Add Namespace ]をクリックして
    Rancher-EKS-Name-Space02.png

  • [Name]に ns-citibike を入力し[Create]をクリックします
    Rancher-EKS-Name-Space04.png

  • 左上隅にあるドロップダウンメニューを選択して、クラスタコンソールに戻り、[Launch kubectlを選択します
    Rancher-EKS-Name-Space05.png

  • シェルウィンドウで「kubectl get nodes -o wide」と入力してワーカーノードのステータスが「準備完了」になっているか確認します
    Rancher-EKS-Name-Space06.png

  • 下記のコマンドを発行してプロジェクトを起動します

  • スクリプトをエディタなどで確認すると、必要な手順がコメントとして記載されています

  • スクリプトの実行が完了するまで数分待ちましょう

> curl 'https://raw.githubusercontent.com/aws-samples/managing-eks-clusters-with-rancher/master/run' | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1600  100  1600    0     0   7881      0 --:--:-- --:--:-- --:--:--  7881
persistentvolumeclaim "influxdbvolclaim" created
deployment.apps "deploy-influxdb" created
Waiting for influxdb container to become available                                                                     KERNEL-VERSION                CONTAINER-RUNTIME
Waiting for influxdb container to become available                                                               x 2   4.14.62-70.117.amzn2.x86_64   docker://17.6.2
Waiting for influxdb container to become available                                                               x 2   4.14.62-70.117.amzn2.x86_64   docker://17.6.2
Waiting for influxdb container to become available                                                               x 2   4.14.62-70.117.amzn2.x86_64   docker://17.6.2
Waiting for influxdb container to become available
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1058  100  1058    0     0   6870      0 --:--:-- --:--:-- --:--:--  6870
persistentvolumeclaim "citivolclaim" created
deployment.apps "deploy-citibike" created
service "grafana-svc" created
deployment.apps "deploy-grafana" created
Done !!
>
  • 「Done !!] の表示を確認したら[Close]でシェル画面を閉じます Rancher-EKS-Name-Space07.png
  • 「Default Project]に3つのポッドがプロビジョニングされます
  • ロードバランサーのDNSレコードが更新される[80/tcp]のリンクをクリックするとGrafanaにアクセス可能になります Rancher-EKS-Name-Space08.png
  • Grafanaのログインページで、ユーザー名「admin」、パスワード「admin」を入力してログインします Rancher-EKS-Name-Space09.png
  • データを視覚化するダッシュボードを設定する準備が完了しました
データソースを構成してみます

  • 左側のペインで歯車のアイコンを選択し、「Data Sources」をクリックします Rancher-EKS-Config-DataSource01.png
  • 「Add data source」をクリックします Rancher-EKS-Config-DataSource02.png
  • データソースの名前(例えばcitibike)を入力し、タイプとしてinfluxDBを選択、データベース名として 'coordinates'を入力します
  • URLフィールドには influxDBポッド のプライベートIPアドレスを確認し、http:// :8086 と入力して[Save & Test]をクリックします
  • Rancherのデフォルトのネームスペースページに移動し、deploy-influxdbポッドをクリックすると、influxdbのプライベートIPアドレスを確認できます Rancher-EKS-Config-DataSource03.png Rancher-EKS-Config-DataSource04.png Rancher-EKS-Config-DataSource05.png
ダッシュボードテンプレートをインポートします

  • 下記URLのダッシュボードテンプレートjsonファイルをダウンロードしてデスクトップに保存します
  • https://raw.githubusercontent.com/aws-samples/managing-eks-clusters-with-rancher/master/CitiBike.json
  • [+] マークをクリックして[Import]を選択します
  • ウィンドウの右側にあるUpload json Fileをクリックして、デスクトップにダウンロードしたテンプレートを選択します
    Rancher-EKS-Config-DataSource06.png
    Rancher-EKS-Config-DataSource07.png
    Rancher-EKS-Config-DataSource08.png

  • ニューヨーク中のすべてのシティバイクステーションのリアルタイムの状況を追跡し始めることができるようになりました

  • すべてのステーションの現在の使用可能自転車も色分けされたアイコンで地図上で表示されます

    • 緑色は30台以上の自転車があることを意味し、赤色は自転車の数が少なくなっていることを示します Rancher-EKS-Config-DataSource09.png
  • 自転車ステーションのIDを選択すると折れ線グラフで需要の傾向を確認することができます

  • ステーションの長期需要トレンドを追跡するための時間枠を指定することもできます
    Rancher-EKS-Config-DataSource10.png

  • 都市計画担当者はこの情報を使用して、日々の交通機関のニーズを自転車に頼っているニューヨーカーのために、自転車ステーションの収容能力を拡大/縮小を計画することができます

より大きいストレージ容量のが必要となった際に対応するためのAWS EBSとの統合

  • 上記のプロジェクトコマンドを起動すると、EBS for InfluxDBのストレージタイプgg2と取り込みポッドを使用して2つの永続ボリューム(各50GB)が作成されます
  • これらの永続ボリュームとその永続ボリュームの要求(PVC)を確認するには、デフォルトのネームスペースに移動して上部の[Volume]タブを選択します Rancher-EKS-PVC01.png
  • [Workloads]タブをクリックしてウィンドウの右端にある[deploy-citibike]コンテナのドロップダウンメニューをクリックし、[Execute Shell]をクリックしてインジェストポッドの内部を確認します Rancher-EKS-PVC02.png
  • 表示されたシェルプロンプトで ‘mount | grep citibike’ を実行します
  • ボリュームデバイス/ dev / xvdxxがext4ファイルシステムを使って/ citibikeにマウントされていることを確認できます
  • 「ls / citibike」を実行するとすべてのjsonファイルがアーカイブされている状態を確認できます
[root@deploy-citibike-5d4cb8967-mqwpx /]# mount | grep citibike
/dev/nvme1n1 on /citibike type ext4 (rw,relatime,data=ordered)
[root@deploy-citibike-5d4cb8967-mqwpx /]# ls -lh /citibike
total 33M
-rw-r--r-- 1 root root 3.6M Apr 14 04:47 1555217262.json
-rw-r--r-- 1 root root 3.6M Apr 14 04:59 1555217969.json
-rw-r--r-- 1 root root 3.6M Apr 14 05:11 1555218679.json
-rw-r--r-- 1 root root 3.6M Apr 14 05:23 1555219387.json
-rw-r--r-- 1 root root 3.6M Apr 14 05:34 1555220095.json
-rw-r--r-- 1 root root 3.6M Apr 14 05:46 1555220801.json
-rw-r--r-- 1 root root 3.6M Apr 14 05:58 1555221508.json
-rw-r--r-- 1 root root 3.6M Apr 14 06:10 1555222216.json
-rw-r--r-- 1 root root 3.6M Apr 14 06:22 1555222923.json
drwx------ 2 root root  16K Apr 14 04:36 lost+found
[root@deploy-citibike-5d4cb8967-mqwpx /]#
まとめ

  • コンテナ化されているGrafanaやInfluxDBなどのオープンソースツールを使用して、ニューヨークのCiti Bikeのリアルタイム地理空間データを追跡するためのサンプルプロジェクトのデプロイをすることでRancherを使用したEKSクラスターの作成および管理をする方法を学びました
後片付けをします

  • Rancher API用IAMユーザへ設定したロールが正しく設定されていれば、クラスターを削除することで検証環境をクリーンアップすることができます Rancher-EKS-Delete-Enviroment01.png Rancher-EKS-Delete-Enviroment02.png
  • 念のため、AMCよりEC2やALB、Cloudformationスタックが削除されているか確認しましょう
    • Rancherからの環境削除で CLB や EBS が残ってしまい、課金が継続していたことがありました。
  • Rancherクラスターを削除する際にエラーが発生したらCloudformationの「Events」や「CloudTrail」ログをIAMユーザでフィルタ表示させるなどして、不足している権限を調査しましょう
参考文献

Managing Amazon EKS Clusters with Rancher
Amazon EKS ユーザーガイド Amazon EKS の使用開始
NYC Citi Bike

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5