サンプルアプリケーションをデプロイする
このトピックでは、サンプルアプリケーションをクラスターにデプロイします。
前提条件
-
既存の少なくとも 1 つのノードがある Kubernetes クラスター。既存の Amazon EKS クラスターがない場合は、Amazon EKS の使用開始 のガイドの 1 つを使用して Amazon EKS クラスターをデプロイできます。Windows アプリケーションをデプロイする場合は、クラスターと少なくとも 1 つの Amazon EC2 Windows ノードで Windows サポート を有効にする必要があります。
-
コンピュータに
Kubectl
がインストールされている。詳細については、「kubectl のインストールまたは更新」を参照してください。 -
クラスターと通信できるように
Kubectl
が設定されている。詳細については、「Amazon EKS クラスターの kubeconfig ファイルを作成または更新する」を参照してください。 -
サンプルワークロードを Fargate にデプロイする予定の場合は、名前を変更しない限り、このチュートリアルで作成したのと同じ名前空間
eks-sample-app
を含む既存の Fargate プロファイルが必要です。入門ガイドのいずれかを使用してクラスターを作成した場合は、新しいプロファイルを作成するか、既存のプロファイルに名前空間を追加する必要があります。これは、入門ガイドで作成されたプロファイルでは、このチュートリアルで使用される名前空間が指定されていないためです。VPC には、少なくとも 1 つのプライベートサブネットも必要です。
サンプルアプリケーションをデプロイするには
多くの変数は次のステップで変更できますが、変数値は、指定された場合のみ変更することをお勧めします。KubernetesPods、デプロイ、およびサービスについて理解を深めたら、他の値を変更して試すことができます。
-
名前空間を作成します。名前空間を使用すると、Kubernetes 内のリソースをグループ化できます。詳細については、「Kubernetes ドキュメント」の「名前空間
」を参照してください。サンプルアプリケーションを AWS Fargate にデプロイする予定の場合、AWS Fargate プロファイル 内の namespace
の値がeks-sample-app
であることを確認します。kubectl create namespace eks-sample-app
-
Kubernetes デプロイを作成する。このサンプルのデプロイでは、パブリックリポジトリからコンテナイメージをプルし、その 3 つのレプリカ (個別の Pods) をクラスターにデプロイします。詳細については、「Kubernetes ドキュメント」の「デプロイ
」を参照してください。アプリケーションを Linux ノードまたは Windows ノードにデプロイできます。Fargate にデプロイする場合は、Linux アプリケーションのみデプロイできます。 -
次の内容を
eks-sample-deployment.yaml
という名前のファイルに保存します。サンプルアプリケーションのコンテナではネットワークストレージを使用しませんが、それを使用する必要があるアプリケーションが存在する場合があります。詳細については、「ストレージ」を参照してください。 -
デプロイマニフェストをクラスターに適用します。
kubectl apply -f eks-sample-deployment.yaml
-
-
サービスを作成する サービスを利用すると、単一の IP アドレスまたは名前を使用して、すべてのレプリカにアクセスできます。詳細については、「Kubernetes ドキュメント」の「サービス
」を参照してください。サンプルアプリケーションには実装されていませんが、他の AWS サービスと対話する必要があるアプリケーションがある場合、Pods の Kubernetes サービスアカウントを作成し、AWS IAM アカウントに関連付けることをお勧めします。サービスアカウントを指定すると、Pods には、他のサービスとのやり取りのために指定した最小限のアクセス許可だけが与えられます。詳細については、「サービスアカウントの IAM ロール」を参照してください。 -
次の内容を
eks-sample-service.yaml
という名前のファイルに保存します。Kubernetes は、クラスター内からのみアクセスできる独自の IP アドレスをサービスに割り当てます。クラスターの外部からサービスにアクセスするには、AWS Load Balancer Controller をデプロイして、サービスに対してアプリケーションやネットワークトラフィックの負荷分散を行います。 -
サービスマニフェストをクラスターに適用します。
kubectl apply -f eks-sample-service.yaml
-
-
eks-sample-app
名前空間内に存在するすべてのリソースを表示します。kubectl get all -n eks-sample-app
出力例は次のとおりです。
Windows リソースをデプロイした場合は、次の出力の
のすべてのインスタンスはlinux
windows
です。他の値の例
は、実際の出力とは異なる場合があります。NAME READY STATUS RESTARTS AGE pod/eks-sample-
linux
-deployment-65b7669776-m6qxz
1/1 Running 0 27m pod/eks-sample-linux
-deployment-65b7669776-mmxvd
1/1 Running 0 27m pod/eks-sample-linux
-deployment-65b7669776-qzn22
1/1 Running 0 27m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eks-sample-linux
-service ClusterIP10.100.74.8
<none> 80/TCP 32m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/eks-sample-linux
-deployment 3/3 3 3 27m NAME DESIRED CURRENT READY AGE replicaset.apps/eks-sample-linux
-deployment-776d8f8fd8
3 3 3 27m出力では、前の手順でデプロイしたサンプルマニフェストで指定されたサービスとデプロイが表示されます。また、3 つの Pods も表示されます。これは、サンプルマニフェストで
3
replicas
が指定されたためです。Pods についての詳細は、「Kubernetesドキュメント」の「ポッド」を参照してください。Kubernetes は、サンプルマニフェストで指定されていない場合でも、自動的に replicaset
リソースを作成します。ReplicaSets
の詳細については、「Kubernetesドキュメント」の「ReplicaSet」を参照してください。 注記
Kubernetes は、マニフェストで指定したレプリカの数を維持します。本稼働デプロイで、Kubernetes を使用してレプリカ数を水平にスケーリングしたり、Pods のコンピューティングリソースを垂直にスケーリングしたりする場合は、Horizontal Pod Autoscaler と Vertical Pod Autoscaler を使用します。
-
デプロイされたサービスの詳細を表示します。Windows サービスをデプロイした場合は、
をlinux
windows
で置き換えます。kubectl -n eks-sample-app describe service eks-sample-
linux
-service出力例は次のとおりです。
Windows リソースをデプロイした場合は、次の出力の
のすべてのインスタンスはlinux
windows
です。他の値の例
は、実際の出力とは異なる場合があります。Name: eks-sample-
linux
-service Namespace: eks-sample-app Labels: app=eks-sample-linux
-app Annotations: <none> Selector: app=eks-sample-linux
-app Type: ClusterIP IP Families: <none> IP:10.100.74.8
IPs:10.100.74.8
Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints:192.168.24.212
:80,192.168.50.185
:80,192.168.63.93
:80 Session Affinity: None Events: <none>前の出力では、
IP:
の値は、クラスター内のどのノードまたは Pod からもアクセスできる一意の IP アドレスですが、クラスターの外からはアクセスできません。Endpoints
の値は、VPC 内からサービスの一部である Pods に割り当てられる IP アドレスです。 -
前のステップで 名前空間を表示 したときに、出力にリストされた Pods のうち、1 つの詳細を表示します。Windows アプリケーションをデプロイした場合は、
をlinux
windows
に置き換え、
をいずれかの Pods に対して返された値に置き換えます。776d8f8fd8-78w66
kubectl -n eks-sample-app describe pod eks-sample-
linux
-deployment-65b7669776-m6qxz
省略された出力
Windows リソースをデプロイした場合は、次の出力の
のすべてのインスタンスはlinux
windows
です。他の
は、実際の出力とは異なる場合があります。example values
Name: eks-sample-
linux
-deployment-65b7669776-m6qxz
Namespace: eks-sample-app Priority: 0 Node: ip-192-168-45-132
.us-west-2
.compute.internal/192.168.45.132
[...] IP:192.168.63.93
IPs: IP:192.168.63.93
Controlled By: ReplicaSet/eks-sample-linux
-deployment-65b7669776
[...] Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned eks-sample-app/eks-sample-linux
-deployment-65b7669776-m6qxz
to ip-192-168-45-132
.us-west-2
.compute.internal [...]前の出力では、
IP:
の値は CIDR ブロックから Pod に割り当てられる一意の IP です。CIDR ブロックは、ノードが存在するサブネットに割り当てられています。異なる CIDR ブロックから Pods の IP アドレスを割り当てたい場合は、デフォルトの動作を変更できます。詳細については、「ポッド用のカスタムネットワーク」を参照してください。また、Kubernetes スケジューラーが IP アドレス
を使用して192.168.45.132
Node
上の Pod をスケジュールしたことを確認できます。ヒント
コマンドラインを使用する代わりに、Pods、サービス、デプロイ、その他の Kubernetes リソースに関する多くの詳細を AWS Management Console に表示できます。詳細については、「Kubernetes リソースを表示する」を参照してください。
-
前の手順で説明した Pod でシェルを実行し、
をいずれかの Pods の ID に置き換えます。65b7669776-m6qxz
-
Pod シェルから、前のステップでデプロイと共にインストールされたウェブサーバーからの出力を表示します。サービス名のみ指定する必要があります。デフォルトでは、Amazon EKS クラスターとともにデプロイされる CoreDNS によって、サービスの IP アドレスに解決されます。
-
Pod シェルから、Pod の DNS サーバーを表示します。
-
exit
を入力して、Pod の接続を切断します。 -
サンプルアプリケーションの使用が終了したら、次のコマンドを使用して、サンプルの名前空間、サービス、デプロイを削除できます。
kubectl delete namespace eks-sample-app