

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Eksctl とは
<a name="what-is-eksctl"></a>

eksctl は、Amazon Elastic Kubernetes Service (Amazon EKS) クラスターの作成、管理、運用のプロセスを自動化および簡素化するコマンドラインユーティリティツールです。Go で記述された eksctl は、YAML 設定と CLI コマンドを使用して宣言構文を提供し、複雑な EKS クラスターオペレーションを処理します。複雑な EKS クラスターオペレーションでは、異なる AWS サービス間で複数の手動ステップが必要になります。

eksctl は、EKS クラスターを大規模に一貫してデプロイおよび管理する必要がある DevOps エンジニア、プラットフォームチーム、Kubernetes 管理者にとって特に重要です。これは、セルフマネージド Kubernetes から EKS に移行する組織や、Infrastructure as Code (IaC) プラクティスを実装する組織にとって特に便利です。既存の CI/CD パイプラインや自動化ワークフローに統合できるためです。このツールは、VPC 設定、IAM ロールの作成、セキュリティグループ管理など、EKS クラスターのセットアップに必要な AWS サービス間の複雑なやり取りの多くを抽象化します。

eksctl の主な機能には、1 つのコマンドで完全に機能する EKS クラスターを作成する機能、カスタムネットワーク設定のサポート、ノードグループの自動管理、GitOps ワークフロー統合などがあります。このツールは、宣言的なアプローチでクラスターのアップグレードを管理し、ノードグループをスケーリングし、アドオン管理を処理します。また、eksctl は、ネイティブ AWS SDK 統合を通じて他の AWS ツールやサービスとの互換性を維持しながら、Fargate プロファイル設定、マネージド型ノードグループのカスタマイズ、スポットインスタンス統合などの高度な機能も提供します。

## 機能
<a name="_features"></a>

現在実装されている機能は次のとおりです。
+ クラスターの作成、取得、一覧表示、削除
+ ノードグループの作成、ドレイン、削除
+ ノードグループのスケール
+  クラスターを更新する
+ カスタム AMIs
+ VPC ネットワーキングを設定する
+ API エンドポイントへのアクセスを設定する
+ GPU ノードグループのサポート
+ スポットインスタンスと混合インスタンス
+ IAM 管理ポリシーとアドオンポリシー
+ クラスター Cloudformation スタックを一覧表示する
+ coredns をインストールする
+ クラスターの kubeconfig ファイルの書き込み

# Eksctl に関するよくある質問
<a name="faq"></a>

## General
<a name="_general"></a>

 **`eksctl`を使用して、 によって作成されていないクラスターを管理できますか`eksctl`?**

はい。バージョンから`0.40.0`、 によって作成されたかどうかにかかわらず、任意のクラスター`eksctl`に対して を実行できます`eksctl`。詳細については、「[eksctl で作成されていないクラスター](unowned-clusters.md)」を参照してください。

## ノードグループ
<a name="nodegroup-faq"></a>

 **ノードグループのインスタンスタイプを変更するにはどうすればよいですか?**

の観点からは`eksctl`、ノードグループはイミュータブルです。つまり、 を作成したら、ノードグループをスケールアップまたは`eksctl`スケールダウンするだけです。

インスタンスタイプを変更するには、目的のインスタンスタイプで新しいノードグループを作成し、ワークロードが新しいインスタンスタイプに移動するようにドレインします。このステップが完了したら、古いノードグループを削除できます。

 **ノードグループの生成されたユーザーデータを表示するにはどうすればよいですか?**

まず、ノードグループを管理する Cloudformation スタックの名前が必要です。

```
eksctl utils describe-stacks --region=us-west-2 --cluster NAME
```

のような名前が表示されます`eksctl-CLUSTER_NAME-nodegroup-NODEGROUP_NAME`。

以下を実行して、ユーザーデータを取得できます。base64 からデコードし、ギップされたデータを解凍する最後の行に注意してください。

```
NG_STACK=eksctl-scrumptious-monster-1595247364-nodegroup-ng-29b8862f # your stack here
LAUNCH_TEMPLATE_ID=$(aws cloudformation describe-stack-resources --stack-name $NG_STACK \
| jq -r '.StackResources | map(select(.LogicalResourceId == "NodeGroupLaunchTemplate") \
| .PhysicalResourceId)[0]')
aws ec2 describe-launch-template-versions --launch-template-id $LAUNCH_TEMPLATE_ID \
| jq -r '.LaunchTemplateVersions[0].LaunchTemplateData.UserData' \
| base64 -d | gunzip
```

## Ingress
<a name="_ingress"></a>

 **で Ingress をセットアップするにはどうすればよいですか`eksctl`?**

[AWS Load Balancer Controller](https://github.com/kubernetes-sigs/aws-load-balancer-controller) を使用することをお勧めします。コントローラーをクラスターにデプロイする方法と、古い ALB Ingress Controller から移行する方法については、[こちら](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html)を参照してください。

Nginx Ingress Controller の場合、セットアップは[他の Kubernetes クラスターの ](https://kubernetes.github.io/ingress-nginx/deploy/#aws)と同じになります。

## Kubectl
<a name="_kubectl"></a>

 **HTTPS プロキシを使用していて、クラスター証明書の検証が失敗した場合、システム CAs はどのように使用できますか?**

環境変数を設定`KUBECONFIG_USE_SYSTEM_CA`して、システム認証機関`kubeconfig`を尊重します。

# ドライラン
<a name="dry-run"></a>

ドライラン機能を使用すると、ノードグループの作成に進む前に、インスタンスセレクタに一致するインスタンスを検査および変更できます。

インスタンスセレクタオプションと を使用して `eksctl create cluster`が呼び出されると`--dry-run`、eksctl は CLI オプションを表すノードグループと、インスタンスセレクタリソース条件に一致するインスタンスに設定されたインスタンスタイプを含む ClusterConfig ファイルを出力します。

```
eksctl create cluster --name development --dry-run


apiVersion: eksctl.io/v1alpha5
cloudWatch:
  clusterLogging: {}
iam:
  vpcResourceControllerPolicy: true
  withOIDC: false
kind: ClusterConfig
managedNodeGroups:
- amiFamily: AmazonLinux2
  desiredCapacity: 2
  disableIMDSv1: true
  disablePodIMDS: false
  iam:
    withAddonPolicies:
      albIngress: false
      appMesh: false
      appMeshPreview: false
      autoScaler: false
      certManager: false
      cloudWatch: false
      ebs: false
      efs: false
      externalDNS: false
      fsx: false
      imageBuilder: false
      xRay: false
  instanceSelector: {}
  instanceType: m5.large
  labels:
    alpha.eksctl.io/cluster-name: development
    alpha.eksctl.io/nodegroup-name: ng-4aba8a47
  maxSize: 2
  minSize: 2
  name: ng-4aba8a47
  privateNetworking: false
  securityGroups:
    withLocal: null
    withShared: null
  ssh:
    allow: false
    enableSsm: false
    publicKeyPath: ""
  tags:
    alpha.eksctl.io/nodegroup-name: ng-4aba8a47
    alpha.eksctl.io/nodegroup-type: managed
  volumeIOPS: 3000
  volumeSize: 80
  volumeThroughput: 125
  volumeType: gp3
metadata:
  name: development
  region: us-west-2
  version: "1.24"
privateCluster:
  enabled: false
vpc:
  autoAllocateIPv6: false
  cidr: 192.168.0.0/16
  clusterEndpoints:
    privateAccess: false
    publicAccess: true
  manageSharedNodeSecurityGroupRules: true
  nat:
    gateway: Single
```

その後、生成された ClusterConfig を に渡すことができます`eksctl create cluster`。

```
eksctl create cluster -f generated-cluster.yaml
```

ClusterConfig ファイルが で渡されると`--dry-run`、eksctl はファイルに設定された値を含む ClusterConfig ファイルを出力します。

## eksctl の 1 回限りのオプション
<a name="_one_off_options_in_eksctl"></a>

など、 `ClusterConfig` ファイルで表現できない特定の 1 回限りのオプションがあります`--install-vpc-controllers`。

次のことが期待されます。

```
eksctl create cluster --<options...> --dry-run > config.yaml
```

次に、次の操作を行います。

```
eksctl create cluster -f config.yaml
```

は、 なしで最初のコマンドを実行するのと同じです`--dry-run`。

したがって、eksctl は、 が渡されたときに設定ファイルで表現できない渡すオプションを禁止`--dry-run`します。

**重要**  
AWS プロファイルを渡す必要がある場合は、CLI `--profile` オプションを渡す代わりに、 `AWS_PROFILE`環境変数を設定します。