Amazon Elastic Kubernetes Service (Amazon EKS) クラスターでデプロイするカスタム Amazon Linux Amazon マシンイメージ (AMI) を作成したいと考えています。
簡単な説明
Amazon EKS 用のカスタム Amazon Linux AMI を作成するには、次を使用する必要があります。
注意: Packer は AWS CloudFormation スタックを使用して動作します。スタックは、m4.large または a1.large Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを実行します (対象の AMI アーキテクチャによって異なります)。インスタンスは Packer によってプロビジョニングされます。インスタンスにパッケージとバイナリがプロビジョニングされると、Packer は実行中のインスタンスから AMI を作成します。
解決方法
注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用シていることを確認してください。
Packer をインストールして設定する
1. HashiCorp ウェブサイトからパッカーをインストールします。
2. Packer がユーザーに代わって AWS API オペレーションを呼び出すことができるように、AWS アカウントの認証情報を設定します。静的認証情報 (シークレットキーとシークレットアクセスキー)、環境変数、共有認証情報ファイル、または Amazon EC2 ロールを使用できます。
注: Packer の AWS 認証情報の設定については、HashiCorp ウェブサイトの「Authentication」(認証) と「IAM Task or Instance Role」(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 ターゲットを通じて実行されます。ビルドプロセスは (HashiCorp ウェブサイトの) amazon-ebs Packer ビルダーを使用し、インスタンスを起動します。(HashiCorp ウェブサイトの) Packer シェルプロビジョナーは、インスタンスで install-worker.sh スクリプトを実行して、ソフトウェアをインストールし、その他の設定タスクを実行します。その後、Packer はインスタンスから AMI を作成し、AMI の作成後にインスタンスを終了します。
カスタムソース AMI を提供する
カスタムソース AMI を設定するには、Packer 設定ファイル eks-worker-al2.json で source_ami_id、source_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 CLI コマンドを実行します。
$ aws s3 ls s3://amazon-eks
$ aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
注: amazon-eks、kubernetes_version、kubernetes_build_date、および arch をご使用の値に置き換えます。
重要: プロビジョニング中にワーカーノードに独自のバイナリをダウンロードするには、install-worker.sh スクリプトで使用される amazon-eks バケットフォルダ構造をミラーリングする必要があります。
2. 独自のビルドプロセスでバイナリを準備したら、AWS CLI を使用してバイナリを独自の S3 バケットにコピーします。
カスタム kubelet バイナリを使用する例を次に示します。
$ aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
注: my-custom-bucket、amazon-eks、kubernetes_version、kubernetes_build_date、および arch をご使用の値に置き換えます。
重要: 特定の kubernetes_version、kubernetes_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_name、binary_bucket_region、kubernetes_version、および kubernetes_build_date パラメータが、Amazon S3 バイナリへのパスと一致することを確認します。
デフォルトのバイナリを使用して Amazon EKS ワーカー AMI を構築する
1. カスタムベース AMI とデフォルト (最新の) Kubernetes バイナリを使用して Amazon EKS ワーカー AMI を構築するには、eks-worker-al2.json ファイルが正しいベース AMI で更新されていることを確認します。
2. Kubernetes バージョンをパラメータとして指定してビルドプロセスをトリガーするには、次のコマンドを実行します。
$ make 1.14 # Build a Amazon EKS Worker AMI for k8s 1.14
注意: より高度な設定の場合、ビルドをトリガーする前に amazon-eks-ami AWS GitHub リポジトリの設定ファイルを変更する必要があります。
ヒント: Packer 設定を使用してカスタム AMI を構築する場合の一般的な問題については、AWS GitHub を確認してください。