Kubernetes超初心者入門 4. EKS構築 後編 一つ一つ進むことが大切です。

★★★ イベント情報 ★★★
◇【参加登録受付中】Kong Summit, Japan 2022◇
今年は12月15日に開催決定!最新情報とデモとともにKongと事例/ユースケースのご紹介などAPIエコノミーやマイクロサービスに関心のある開発者の方にとっては必見です。ぜひお申し込みください!イベントの詳細・お申込はこちら

こんにちは、サイオステクノロジーの前田です。

Kubernetesの構築ですが、最終目標はKubernetesを構築することではなく、Kubernetesを構築しアプリケーションをデプロイし提供することでしょう。超初心者入門4回目はEKS構築の後編として、EKSのワーカノードの構築とサンプルアプリケーションのデプロイ、デプロイしたアプリケーションの正常性確認について話していきます。初めてのKubernetes構築は大変だと思いますが、頑張っていきましょう。

目的と目標

  • 目的
    • Kubernetesでアプリケーションをデプロイし公開、Kubernetesアプリケーションの構成を俯瞰できるようになる。
  • 目標
    • ワーカーノードの作成
    • アプリケーションのデプロイ
    • アプリケーションをグローバルネットワークからアクセス
    • 作成されたAWSのリソースを確認

 

今回でEKSを構築してサンプルアプリケーションのデプロイが完了します。アプリケーションをデプロイしても詳しく理解してないこともたくさんあると思いますが、構いません。クラスター側とアプリケーション側の差異がわかるようになるだけで十分です。

インフラエンジニアの方は、サーバとアプリケーションで利用した状況が、Kubernetesクラスタのノードとコンテナと設定ファイルで分かれている状況を理解していただれば幸いです。

インフラエンジニア以外の方は、いろいろ(クラスターとノード(サーバ)、アプリケーション)設定することがあるのだなと全体像が把握していただければ幸いです。

EKSのワーカーノードなど

今回はEKSクラスターがマネージドするワーカーノード(EC2)を構築していきます。ほかにもセルフマネージドのワーカーノードやFargatetという完全なマネージドノードがあります。

EKSのワーカーノードの種類

EKSのワーカーノードは3種類あります。詳細は下記リンクからご覧ください。

管理が必要な度合いとしては、下記のようになります。

(管理作業が少ない) AWS Fargate > マネージド型ノードグループ >> セルフマネージド型ノード (管理作業が多い)

マネージド型ノードグループを最初期に選択して、管理運用業務を下げたい場合は AWS Fargateを利用する。全部管理したい場合や詳細なチューニングがしたいという場合はセルフマネージド型ノードを利用という選択をするのがおすすめです。

外部アクセスについて

外部アクセス可能にするにはKubernetesクラスタに設定を行う必要があります。主に2つありserviceリソースもしくはingressリソースで設定する方法です。規模が小さな場合はserviceで利用する場合が多く、規模が大きい場合はingressのほうが利用が多いというイメージをしてください。EKSのserviceリソースで外部アクセス可能な種類のserviceを作成するとLBが作成されます。

Kubernetesの利用を進めると外部との連携が増えてきます。最終的にはクラスターにinfraノードという(永続ストレージ、LBや、コンテナレジストリ)を構築する場合もあります。予算等で構成を変えることができるのがKubernetesの長所であり難しさでもあります。

作業概要

  • IAMロールの作成
    • EKS側でEC2を操作をするためのロールを作成します。
  • ワーカーノードの作成
    • ノードプールを設定してワーカーノードの起動状態を設定します。
  • アプリケーションのデプロイ
    • アプリケーションのデプロイと簡易な正常性確認を行います。
  • サービスの設定
    • Kubernetesのserviceというリソースを設定して、自動的ロードバランサーが連動して作成され外部からアクセスを可能な状態にします。

作業詳細

■IAMロールの作成

  1. IAM管理ページ
    1. IAM管理ページにアクセスします。
    2. ロール を選択します。
    3. ロールを作成 を選択します。
  2. ワーカーノード用のロール作成
    1. 信頼されたエンティティを選択 画面
      1. ユースケースで EC2 を選択します。
      2. 次へ を選択します。
    2. 許可を追加 画面
      1. 許可ポリシーで AmazonEC2ContainerRegistryReadOnly を検索し追加します。
      2. 許可ポリシーで AmazonEKSWorkerNodePolicy を検索し追加します。
      3. 許可ポリシーで AmazonEKS_CNI_Policy を検索し追加します。
      4. 次へ を選択します。
    3. 名前、確認、および作成 画面
      1. ロール名に testeksnoderole と(任意で)記載します。
      2. ロールを作成 を選択します。
  3. ロールが作成されるのを確認します。

■ワーカーノードの作成

  1. ノードグループ追加初期設定
    1. ワーカーノードを作成するEKSクラスターにアクセスします。
    2. コンピューティング を選択します。
    3. ノードグループを追加 を選択します。
  2. ノードグループ詳細設定
    1. ノードグループを設定 画面
      1. 名前 testeksnodegroup と入力します。
      2. ノードIAMロールに先ほど作成したIAMロールを設定します。
      3. 次へ を選択します。
    2. コンピューティングとスケーリングの設定を実行 画面
      1. 次へ を選択します。
    3. ネットワーキングを指定 画面
      1. サブネットでpublicのネットワークを除外します。
      2. 次へ を選択します。
    4. 確認及び作成 画面
      1. 作成 を選択します。
  3. 構築確認
    1. 構築まで待機(EC2を構築してKubernetesの設定をしているのでしばらくかかります)
    2. 構築完了が出ることを確認します。

ワーカーノードの作成という目標達成です。やったー

■アプリケーションのデプロイ

サンプルアプリケーションをデプロイしていきます。主にコマンドライン操作になります。クラスターに接続できる環境で操作してください。

  1. ノードの状態確認
    1. ノードの確認
      • kubectl get node
        • ノードにアプリケーションがデプロイできる状態 STATUSがReadyの状態であることを確認してください。
  2.  ネームスペースを作成
    1. namespaceを作成します。
      • kubectl create namespace testnamespace
    2. 作成されたnamespaceの確認します。
      • kubectl get namespace
        • testnamespaceの存在を確認します。
  3. アプリケーションのデプロイ
    1. アプリケーションをデプロイします。
      • kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml -n testnamespace
    2. アプリケーションのデプロイが完了されるのを待ちます。
      • kubectl get all -n testnamespace
        ================================================================
        NAME                                    READY   STATUS    RESTARTS   AGE
        pod/nginx-deployment-66b6c48dd5-c8dt8   1/1     Running   0          14s
        pod/nginx-deployment-66b6c48dd5-cw2l7   1/1     Running   0          14s
        pod/nginx-deployment-66b6c48dd5-mm57h   1/1     Running   0          14s

        NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
        deployment.apps/nginx-deployment   3/3     3            3           15s

        NAME                                          DESIRED   CURRENT   READY   AGE
        replicaset.apps/nginx-deployment-66b6c48dd5   3         3         3       16s
        =================================================================
      • 上記のようにpodのSTATUSがRunningであることを確認します。
    3. サービスを作成します。
      • kubectl expose deployment nginx-deployment --name=nginx-service -n testnamespace
    4. サービスの作成確認をします。
      • kubectl get svc -n testnamespace
        • ngnix-service という名前のserviceを確認します。
  4. 正常性確認(http応答) 
    1. ポートフォワード設定(バックグラウンド実行)します。
      • kubectl port-forward service/nginx-service 8080:80 -n testnamespace &  
    2. アクセス確認を実施します。
      • curl localhost:8080 -s | grep title
      • 結果として下記表示を確認します。
        • <title>Welcome to nginx!</title>
      • nginxの画面が表示されていることを確認します。
    3. ポートフォワードの終了します。
      • disown %1
        • バックグラウンドで実行されていたポートフォワードが終了します。

 

アプリケーションの作成という目標達成です。GOOD

■サービスの設定

外部アクセスを可能にするサービスの設定を行います。

  1. kubernetesのサービスの設定
    1. サービス(ロードバランサータイプ)の作成
      kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancer -n testnamespace
    2. 作成されたサービスの確認
      1. kubectl get svc -n testnamespace
      2. nginx-service-loadbalancer のEXTERNAL-IPの値を取得します。
  2. 正常性確認
    1. ブラウザにEXTERNAL-IPを利用してアクセスします。
    2. nginxの画面が表示されます。

アプリケーションに外部アクセスという目標達成です。最高かよ

■作成されたリソースの確認

作成されたリソースを軽く確認をします。

  • EC2
    • ワーカーノードのみがEC2で作成されています。自作でクラスターを作成した場合はマスターノード側も作成が必要ですが、AWSのEKSの場合はマスター側はマネージドでAWS側が管理しているため表示されません。
  • VPC
    • KubernetesのコンテナのネットワークとクラスターのネットワークはCIDRが違います。そのため自作でクラスターを構築する場合にはIPのレンジとネットワークに気を付けなければいけません。
  • Loadbalancer

loadbalacerはservice(ロードバランサーの種類)がある場合に作成されます。

■削除

  1. ネームスペースの削除
    1. kubectl delete namespace testnamespace
  2. ノードプール削除
    1. ワーカーノードを作成するEKSクラスターにアクセスします。
    2. コンピューティング を選択します。
    3. 削除したいノードグループを選択します。
    4. 削除を選択します。
    5. ノードグループ名を入力します。
    6. 削除を選択します。
    7. ノードが削除されるまでしばらく待ちます。
  3. クラスターの削除
    1. 全てのノードグループが削除されていることを確認してクラスターを削除を選択します。
    2. クラスター名を入力します。
    3. 削除 を選択します。

最後に

EKSを操作してアプリケーションをデプロイしてきました。Kubernetesのメリットを受けるのはここから先になります。

なぜなら、ここから先は開発者はネームスペース以下を考慮、運用者はクラスターについての考慮という風に作業分担が可能だからです。さらに、毎回クラスター構築&詳細なサーバ設定が必要なくなります。 

一番大変な初期作業の認識を終えることができました。クラスターを構築できたことを誇ってください。今回は管理画面を利用した構築なので、設定等を変えて構築したりしてみてください。そうすればさらにKubernetesクラスターについて理解が深まります。

本記事がKubernets初心者の悩みを解決する一つになれば幸いです。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる