Amazon Elastic Kubernetes Service
Amazon EKSは、AWSでマネージド Kubernetes を実行するサービスです。
AWS EKSは、コントロールプレーンで、デプロイ・スケジューリング・スケーリングのオーケストレーション・アプリケーション管理を行います。
AWSのコントロールプレーンは、ECSかEKSを選ぶことができます。
EKSとECSの比較は AWSで使えるコンテナサービスの比較(ECS, EKS, Fargate) を参照してください。
Kubernetesクラスターのバージョンアップを行う際には同等の別環境を構築してバージョンアップの検証を行い、実際に本番環境のバージョンアップを行う際にはアップデートの失敗を考慮してブルーグリーンデプロイメントと呼ばれるような、「現在の本番環境を維持したまま新しい本番環境を構築して、DNSの切り替えによって環境移行を行う」ようなオペレーションが必要になります。
AWSでコンテナを支えるサービスについて ECS、EKS、Fargateの違いは? 第2回(最終回) | SunnyCloud
ticles/YKIlSRAAACYANEW9|AWSのコンテナについて初心者にも分かりやすく解説! | アンドエンジニア]]
AWSの名称 | k8sでの名称 | AWSでの説明 |
---|---|---|
コントロールプレーン | Master | フルマネージドとなり、管理する必要がない |
ワーカーノード | node | 利用者が管理する部分 |
公式 Amazon EKS ワーカーノードの謎を解くクラスターネットワーク | Amazon Web Services ブログ
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 |
kubectl logs pod名 | Podのログを表示 |
kubectl describe pod Pod名 | Podの詳細表示 |
kubectl describe node Node名 | Nodeの詳細表示 |
journalctl -u kubelet | kubeletが出力するログを確認 kubeletは、Kubernetes nodeサーバ上でデーモンとして動作しています。 Kubernetes nodeサーバ上で実行し、kubeletのログを表示 |
インプレースアップグレードをやり、問題があったら、クラスタマイグレーションを行うのがよいです。
Amazon EKS は、クラスターの更新時に Kubernetes アドオンを変更しません。
クラスターの更新後、更新後の新しいバージョンの Kubernetes 用に、アドオンを指定さえているバージョンに更新することをお勧めします。
ノードグループがPrivateセグメントにある場合、Publicセグメントに配置したNAT Gateway経由でアクセスすることもできます。
EKSコントロールプレーンの設定で「APIサーバーエンドポイント」の「プライベートアクセス」を有効にするというものです。
プライベートアクセスを有効にすると、ノードグループが配置されるプライベートサブネット上に専用のネットワークインターフェイス (ENI) が作成され、
プライベートサブネットからAPIサーバーエンドポイントに対して直接通信が行えるようになります。
[アップデート] EKSでマネージドノードグループをデプロイする際のパブリックIPアドレス付与の挙動が変更されました | DevelopersIO
クラスター内のServiceに対する外部からのアクセス(主にHTTP)を管理するAPIオブジェクトです。
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/
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 ワーカーノードのオートスケールのため利用 |