Amazon EKS 用のカスタム Amazon Linux AMI を作成する方法を教えてください。

最終更新日: 2020 年 2 月 6 日

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターでデプロイするカスタム Amazon Linux Amazon マシンイメージ (AMI) を作成したいです。

簡単な説明

Amazon EKS 用のカスタム Linux AMI を作成するには、次を使用する必要があります。

注意: Packer は AWS CloudFormation スタックを使用して動作します。スタックは、m4.large または a1.large Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを実行します (対象の AMI アーキテクチャによって異なります)。このインスタンスは Packer によってプロビジョニングされます。インスタンスにパッケージとバイナリがプロビジョニングされると、Packer は実行中のインスタンスから AMI を作成します。

解決方法

Packer をインストールして設定する

1.    Packer をインストールします。

2.    Packer がユーザーに代わって AWS API オペレーションを呼び出すことができるように、AWS アカウントの認証情報を設定します。静的認証情報 (シークレットキーとシークレットアクセスキー)、環境変数、共有認証情報ファイル、または Amazon EC2 ロールを使用できます。

注意: Packer の AWS 認証情報の設定については、認証IAM タスクまたはインスタンスロールを参照してください。

Amazon EKS AMI リポジトリのクローンを作成する

Amazon EKS AMI リポジトリをワークステーションにクローンを作成するには、次のコマンドを実行します。

$ git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami

注意: Packer は、ビルド仕様として eks-worker-al2.json を使用して、一連の makefile ターゲットを通じて実行されます。ビルドプロセスは amazon-ebs Packer ビルダーを使用し、インスタンスを起動します。Packer シェルプロビジョナーは、インスタンスで install-worker.sh スクリプトを実行して、ソフトウェアをインストールし、その他の設定タスクを実行します。その後、Packer はインスタンスから AMI を作成し、AMI の作成後にインスタンスを終了します。

カスタムソース AMI を提供する

カスタムソース AMI を設定するには、Packer 設定ファイル eks-worker-al2.jsonsource_ami_idsource_ami_owner、および aws_region の変数を設定します。次に例を示します。

"source_ami_id": "SOURCE_AMI_ID",      # Enter the ID of your source image
"source_ami_owners": "AWS_ACCOUNT_ID", # Enter the account where this image is stored
"aws_region": "AWS_DEFAULT_REGION",    # Enter the AWS Region of the source AMI

カスタムワーカーバイナリを提供するには、(オプション) 独自の Kubernetes バイナリを提供する セクションの手順を完了します。

AWS からデフォルトの Kubernetes バイナリを使用してイメージを構築するには、デフォルトのバイナリを使用して Amazon EKS ワーカー AMI を構築するセクションの手順を完了します。

(オプション) 独自の Kubernetes バイナリを提供する

Packer がインスタンスをプロビジョニングすると、デフォルトで us-west-2 の Amazon EKS パブリック Amazon Simple Storage Service (Amazon S3) バケット amazon-eks からバイナリがダウンロードされます。詳細については、install-worker.sh ファイルを参照してください。

1.    デフォルトのバケットで提供されている使用可能なバイナリを確認するには、次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを実行します。

$ aws s3 ls s3://amazon-eks 
$ aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/

注意: amazon-ekskubernetes_versionkubernetes_build_date、および arch をご使用の値に置き換えます。

重要: プロビジョニング中にワーカーノードに独自のバイナリをダウンロードするには、install-worker.sh スクリプトで使用される amazon-eks バケットフォルダ構造をミラーリングする必要があります。

2.    独自のビルドプロセスでバイナリを準備したら、AWS CLI を使用してバイナリを独自の Amazon S3 バケットにコピーします。

カスタム kubelet バイナリを使用する例を次に示します。

$ aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet

注意: my-custom-bucketamazon-ekskubernetes_versionkubernetes_build_date、および arch をご使用の値に置き換えます。

重要: 特定の kubernetes_versionkubernetes_build_date、および arch の組み合わせに対して、デフォルトの amazon-eks バケットにリストされているすべてのバイナリを指定する必要があります。これらのバイナリは、HashiCorp Packer をインストールして構成するセクションで設定された AWS Identity and Access Management (IAM) 認証情報を使用してアクセスできる必要があります。

カスタムバイナリを使用して Amazon EKS ワーカー AMI を構築する

ビルドプロセスを開始するには、eks-worker-al2.json で設定されたソース AMI を使用して、パラメータを指定して make を呼び出します。次に例を示します。

$ make k8s \
    binary_bucket_name=my-custom-bucket \
    binary_bucket_region=eu-west-1 \
    kubernetes_version=1.14.9 \
    kubernetes_build_date=2020-01-22

注意: binary_bucket_namebinary_bucket_regionkubernetes_version、および kubernetes_build_date パラメータが、Amazon S3 バイナリへのパスと一致することを確認します。

デフォルトのバイナリを使用して Amazon EKS ワーカー AMI を構築する

1.    カスタムベース AMI とデフォルト (最新の) Kubernetes バイナリを使用して Amazon EKS ワーカー AMI を構築するには、eks-worker-al2.json ファイルが正しいベース AMI で更新されていることを確認します。

2.    Kubernetes バージョンをパラメータとして指定してビルドプロセスをトリガーするには、次のコマンドを実行します。

$ make k8s 1.14  # Build a Amazon EKS Worker AMI for k8s 1.14

注意: より高度な設定の場合、ビルドをトリガーする前に amazon-eks-ami AWS GitHub リポジトリの設定ファイルを変更する必要があります。

ヒント: Packer 設定を使用してカスタム AMI を構築する場合の一般的な問題については、AWS GitHub を確認してください。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合