Kubernetes を使用して Amazon EKS ワーカーノードに SSM エージェントをインストールする DaemonSet - AWS 規範ガイダンス

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

Kubernetes を使用して Amazon EKS ワーカーノードに SSM エージェントをインストールする DaemonSet

作成者: Mahendra Revanasiddappa (AWS)

環境:PoC またはパイロット

テクノロジー: コンテナとマイクロサービス DevOps、インフラストラクチャ

AWS サービス: Amazon EKS; AWS Systems Manager

[概要]

注、2021 年 9 月:Amazon EKS に最適化された最新の AMI では SSM エージェントが自動的にインストールされます。詳細については、リリースノートの「June 2021 AMI」セクションを参照してください。

Amazon Elastic Kubernetes Service (Amazon EKS) では、セキュリティガイドラインにより、ワーカーノードにはSecure Shell (SSH) キーペアがアタッチされていません。このパターンは、Kubernetes DaemonSet リソースタイプを使用して、手動でインストールしたり、ノードの Amazon マシンイメージ (AMI) を置き換えたりするのではなく、すべてのワーカーノードに AWS Systems Manager Agent (SSM Agent) をインストールする方法を示しています。 は、ワーカーノードで cron ジョブ DaemonSet を使用して SSM Agent のインストールをスケジュールします。このパターンを使用して他のパッケージをワーカーノードにインストールすることもできます。

クラスター内の問題をトラブルシューティングする場合、SSM Agent をオンデマンドでインストールすると、SSH キーペアがなくても、ワーカーノードとの SSH セッションの確立、ログの収集、またはインスタンス設定の確認が可能になります。

前提条件と制限

前提条件

  • Amazon Elastic Compute Cloud (Amazon EC2) ワーカーノードを備えた既存の Amazon EKS クラスター。

  • コンテナインスタンスには、SSM サービスと通信するために必要な許可がなければなりません。AWS Identity and Access Management (IAM) マネージドロール AmazonSSMManagedInstanceCore は、SSM エージェントが EC2 インスタンスで実行するために必要なアクセス許可を提供します。詳細については、 AWS Systems Manager のドキュメントを参照してください。

制約事項

  • は Fargate プラットフォームでサポートされていないため、このパターン DaemonSets は AWS Fargate には適用されません。

  • このパターンは Linux ベースのワーカーノードにのみ適用されます。

  • DaemonSet ポッドは特権モードで実行されます。Amazon EKS クラスターに特権モードでポッドをブロックするウェブフックがある場合、SSM エージェントはインストールされません。

アーキテクチャ

このパターンのアーキテクチャを以下に図で示します。

Kubernetes DaemonSet を使用して Amazon EKS ワーカーノードに SSM エージェントをインストールします。

ツール

ツール

  • kubectl」は、Amazon EKS クラスターを操作するために使用されるコマンドラインユーティリティです。このパターンではkubectl、 を使用して Amazon EKS クラスター DaemonSet に をデプロイします。これにより、すべてのワーカーノードに SSM エージェントがインストールされます。

  • Amazon EKS は、独自の Kubernetes コントロールプレーンまたはノードをインストール、操作、維持することなく、 で Kubernetes を簡単に実行できるようにするマネージドサービスです。Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理を自動化するためのオープンソースシステムです。

  • AWS Systems Manager Session Manager は、EC2 インスタンス、オンプレミスインスタンス、仮想マシン (VM) を、インタラクティブなワンクリックブラウザベースのシェルまたは AWS コマンドラインインターフェイス (AWS CLI) を介して管理できます。

コード

次のコードを使用して、Amazon EKS クラスターに SSM エージェントをインストールする DaemonSet 設定ファイルを作成します。「エピック 」セクションの指示に従います。

cat << EOF > ssm_daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: labels: k8s-app: ssm-installer name: ssm-installer namespace: kube-system spec: selector: matchLabels: k8s-app: ssm-installer template: metadata: labels: k8s-app: ssm-installer spec: containers: - name: sleeper image: busybox command: ['sh', '-c', 'echo I keep things running! && sleep 3600'] initContainers: - image: amazonlinux imagePullPolicy: Always name: ssm command: ["/bin/bash"] args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"] securityContext: allowPrivilegeEscalation: true volumeMounts: - mountPath: /etc/cron.d name: cronfile terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumes: - name: cronfile hostPath: path: /etc/cron.d type: Directory dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler terminationGracePeriodSeconds: 30 EOF

エピック

タスク説明必要なスキル

EKS クラスターにアクセスするように kubectl をインストールして設定します。

kubectlがまだインストールされておらず、Amazon EKS クラスタにアクセスするように構成されていない場合、Amazon EKS ドキュメントの「kubectl のインストール」を参照してください。

DevOps
タスク説明必要なスキル

DaemonSet 設定ファイルを作成します。

このパターンの前半の「コード」セクションのコードを使用してssm_daemonset.yaml、Amazon EKS クラスターにデプロイされる という DaemonSet 設定ファイルを作成します。

によって起動されるポッド DaemonSet には、メインコンテナと initコンテナがあります。メインコンテナにはsleepコマンドがあります。initコンテナには、パス/etc/cron.d/に SSM Agent をインストールするための cron ジョブファイルを作成するcommandセクションが含まれています。cron ジョブは 1 回だけ実行され、作成されるファイルはジョブの完了後に自動的に削除されます。

init コンテナが終了すると、メインコンテナは 60 分間待機してから終了します。60 分後、新しいポッドが起動します。このポッドは、SSM エージェントがない場合はインストールするか、SSM エージェントを最新バージョンに更新します。

必要であれば、sleepコマンドを変更して、ポッドを1日1回再起動したり、もっと頻繁に実行したりすることができる。 

DevOps

Amazon EKS クラスター DaemonSet に をデプロイします。

前のステップで作成した DaemonSet 設定ファイルを Amazon EKS クラスターにデプロイするには、次のコマンドを使用します。

kubectl apply -f ssm_daemonset.yaml

このコマンドは DaemonSet 、ワーカーノードでポッドを実行して SSM エージェントをインストールする を作成します。

DevOps

関連リソース