翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Kubernetes を使用して Amazon EKS ワーカーノードに SSM エージェントをインストールする DaemonSet
作成者: Mahendra Revanasiddappa (AWS)
環境:PoC またはパイロット | テクノロジー: コンテナとマイクロサービス DevOps、インフラストラクチャ | AWS サービス: Amazon EKS; AWS Systems Manager |
[概要]
注、2021 年 9 月:Amazon EKS に最適化された最新の AMI では SSM エージェントが自動的にインストールされます。詳細については、リリースノート
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 エージェントをインストールします。](images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)
ツール
ツール
「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 をインストールして設定します。 |
| DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
DaemonSet 設定ファイルを作成します。 | このパターンの前半の「コード」セクションのコードを使用して によって起動されるポッド DaemonSet には、メインコンテナと init コンテナが終了すると、メインコンテナは 60 分間待機してから終了します。60 分後、新しいポッドが起動します。このポッドは、SSM エージェントがない場合はインストールするか、SSM エージェントを最新バージョンに更新します。 必要であれば、 | DevOps |
Amazon EKS クラスター DaemonSet に をデプロイします。 | 前のステップで作成した DaemonSet 設定ファイルを Amazon EKS クラスターにデプロイするには、次のコマンドを使用します。
このコマンドは DaemonSet 、ワーカーノードでポッドを実行して SSM エージェントをインストールする を作成します。 | DevOps |
関連リソース
kubectl のインストール (Amazon EKS ドキュメント)
セッションマネージャーのセットアップ (AWS Systems Manager ドキュメント)