目次


AWS EKSで、Kubernetes(k8s)を利用

関連ページ
AWS EKSで、Kubernetes(k8s)を利用



AWS EKSとは



Amazon Elastic Kubernetes Service
Amazon EKSは、AWSでマネージド Kubernetes を実行するサービスです。

AWS EKSは、コントロールプレーンで、デプロイ・スケジューリング・スケーリングのオーケストレーション・アプリケーション管理を行います。
AWSのコントロールプレーンは、ECSかEKSを選ぶことができます。

EKSとECSの比較は AWSで使えるコンテナサービスの比較(ECS, EKS, Fargate) を参照してください。


EKSの注意点

Kubernetesクラスターのバージョンアップを行う際には同等の別環境を構築してバージョンアップの検証を行い、実際に本番環境のバージョンアップを行う際にはアップデートの失敗を考慮してブルーグリーンデプロイメントと呼ばれるような、「現在の本番環境を維持したまま新しい本番環境を構築して、DNSの切り替えによって環境移行を行う」ようなオペレーションが必要になります。

AWSでコンテナを支えるサービスについて ECS、EKS、Fargateの違いは? 第2回(最終回) | SunnyCloud
ticles/YKIlSRAAACYANEW9|AWSのコンテナについて初心者にも分かりやすく解説! | アンドエンジニア]]

EKS on Fargate


EKSを選択する理由


Amazon EKSとは

Amazon EKSの仕組み

AWSの名称 k8sでの名称 AWSでの説明
コントロールプレーン Master フルマネージドとなり、管理する必要がない
ワーカーノード node 利用者が管理する部分


EKSの設定方法

方法1:AWS管理コンソール
方法2:aws cli
方法3:eksctl


EKSクラスターの要素

VPCネットワーク
EKSコントロールプレーン
EKSワーカーノード


EKSクラスターVPC

代表的なパターン

公式 Amazon EKS ワーカーノードの謎を解くクラスターネットワーク | Amazon Web Services ブログ

ポッドネットワーキング (CNI)

CNI(Container Network Interface)

EKSではAmazon VPC CNI plugin for KubernetesというネイティブなVPCを利用可能とするプラグインを用いることで、VPCネットワーク上と同じIPをPodに割り当てることなります。つまり、PodはVPC上のIPを利用して通信するため、Podの起動数がVPCで利用可能なIP数に依存するということになります。

https://cloudfish.hatenablog.com/entry/2019/12/09/224246


ワーカーノード

https://labs.gree.jp/blog/2020/01/20271/
ワーカーノード起動時にまとまった数の IP アドレスが確保されます。
起動時に確保する数(デフォルト)は、以下の表のようにインスタンスタイプごとに異なります

Pod の起動時は、確保されたセカンダリ IP アドレスが割り当てられて、Pod 間や VPC 内の他のサービスとネイティブで通信できるようになります。

インスタンスタイプ 起動時に確保される IP アドレス数
c5.large 20
c5.xlarge 30
c5.2xlarge 30
c5.4xlarge 60
m5.large 20
m5.xlarge 30


参考


EKSのトラブルシュート

kubectl logs pod名 Podのログを表示
kubectl describe pod Pod名 Podの詳細表示
kubectl describe node Node名 Nodeの詳細表示
journalctl -u kubelet kubeletが出力するログを確認
kubeletは、Kubernetes nodeサーバ上でデーモンとして動作しています。
Kubernetes nodeサーバ上で実行し、kubeletのログを表示


検討項目

EKSクラスターのバージョンアップ方法

インプレースアップグレードをやり、問題があったら、クラスタマイグレーションを行うのがよいです。

インプレースアップグレード(in-place upgrade)

クラスタマイグレーション(cluster migration)

クラスターバージョンアップのメモ

Amazon EKS は、クラスターの更新時に Kubernetes アドオンを変更しません。
クラスターの更新後、更新後の新しいバージョンの Kubernetes 用に、アドオンを指定さえているバージョンに更新することをお勧めします。


EKSコントロールプレーンとの通信方法

方法1 NAT Gateway経由

ノードグループがPrivateセグメントにある場合、Publicセグメントに配置したNAT Gateway経由でアクセスすることもできます。

方法2 APIサーバーエンドポイント(推奨)

EKSコントロールプレーンの設定で「APIサーバーエンドポイント」の「プライベートアクセス」を有効にするというものです。
プライベートアクセスを有効にすると、ノードグループが配置されるプライベートサブネット上に専用のネットワークインターフェイス (ENI) が作成され、
プライベートサブネットからAPIサーバーエンドポイントに対して直接通信が行えるようになります。

[アップデート] EKSでマネージドノードグループをデプロイする際のパブリックIPアドレス付与の挙動が変更されました | DevelopersIO


Ingress

クラスター内のServiceに対する外部からのアクセス(主にHTTP)を管理するAPIオブジェクトです。

AWS Load Balancer Controller(旧 AWS ALB Ingress Controller)

https://github.com/kubernetes-sigs/aws-load-balancer-controller

How AWS Load Balancer controller works
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/how-it-works/


Kubernetes アドオン

Helm Kubernetes 用パッケージマネージャー
Metrics Server や AWS ALB Ingress Controller などを入れるために利用
AWS Load Balancer Controller
(AWS ALB Ingress Controller)
マニフェストによる ALB の管理や、Kubernetes Deployments リソースの Rolling Update 機能を利用する際に
ALB Target Group への Pod の登録・削除を行う
Metrics Server Kubernetes の 水平オートスケール(HPA)リソースを利用して、API サーバの Deployments の Pod 数をオートスケールするために利用しています。
HPA がオートスケールを判断するのに必要な指標(各 Pod の 割り当てCPU に対する使用率など)を収集します。
Cluster Autoscaler EKS ワーカーノードのオートスケールのため利用


参考


関連ページ
AWS EKSで、Kubernetes(k8s)を利用