https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/fargate.html
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/metrics-server.html
- values.yaml
|
1 2 3 4 5 6 7 8 9 10 |
containerPort: 4443 args: - --kubelet-insecure-tls tolerations: - key: "eks.amazonaws.com/compute-type" operator: "Equal" value: "fargate" effect: "NoSchedule" |
- helm add
|
1 2 |
$ helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ $ helm install metrics-server metrics-server/metrics-server --namespace kube-system -f values.yaml |
- add RBAC
EKS Fargate の kubelet は Webhook 認可を使用しており、metrics-server が kubelet のメトリクスエンドポイントにアクセスするには system:kubelet-api-admin ClusterRole が必要。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: metrics-server:kubelet-api-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:kubelet-api-admin subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system |
- add HPA
|
1 2 3 4 5 |
autoscaling: enabled: true minReplicas: 3 maxReplicas: 6 targetCPUUtilizationPercentage: 40 |
|
1 2 |
$ kubectl apply -f metrics-server-rbac.yaml $ helm upgrade <release-name> <chart> --namespace <namespace> -f values.yaml |
- 動作確認
|
1 2 3 |
$ kubectl get apiservice v1beta1.metrics.k8s.io $ kubectl top pods -n $ kubectl get hpa -n |
EC2ノード場合は起きないが、EKS Fargateではpod IP = Fargate ノードの IP になる。Fargate kubelet は VPC 内でこの IPの port 10250を占有しているため、metrics-server のデフォルト(10250)のままだと kube-apiserverがmetrics-server のコンテナではなくFargate kubeletに到達してしまい、FailedDiscoveryCheckが発生する。
ちなみにprometheus-adapterでやろうと思ったが、カスタムメトリクス(リクエスト数、キュー数など)での HPA は可能。しかし、EKS FargateではAWS がノードを管理しているため、kubelet や cAdvisor のエンドポイント(:10250/metrics/cadvisor など)に直接アクセスできない制約があるのと、CPUやメモリで制御するにはCloudWatch Container InsightsやADOT(AWS Distro for OpenTelemetry)になるため、metrics-serverのほうがシンプルである。
Was this helpful?
0 / 0
1989年生まれのFindy/SRE サブマネージャー。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。 現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、 緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用、チームマネジメントを担当している。
個人事業主では数社サーバー保守とベンチャー企業のインフラコンサルティングを行うほか、TechBullを創業し、ジュニアエンジニアのコミュニティを運営している。さらに、エンジニア向けYouTubeメディア「TECH WORLD」ではSRE関連の動画に出演し、過去には脆弱性スキャナ「Vuls」のOSS活動にも貢献。 ガジェット系エンジニアYouTuberとしても発信。