本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Kubernetes DaemonSet 在 Amazon EKS 工作者節點上安裝 SSM Agent
由 Mahendra Revanasiddappa (AWS) 建立
Summary
請注意,2021 年 9 月:最新的 Amazon EKS 最佳化 AMIs 會自動安裝 SSM 代理程式。如需詳細資訊,請參閱 2021 年 6 月 AMIs的版本備註
在 Amazon Elastic Kubernetes Service (Amazon EKS) 中,基於安全準則,工作者節點不會連接 Secure Shell (SSH) 金鑰對。此模式顯示如何使用 Kubernetes DaemonSet 資源類型,在所有工作者節點上安裝 AWS Systems Manager Agent (SSM Agent),而不是手動安裝或取代節點的 Amazon Machine Image (AMI)。DaemonSet 在工作者節點上使用 Cron 任務來排程 SSM Agent 的安裝。您也可以使用此模式在工作者節點上安裝其他套件。
當您對叢集中的問題進行故障診斷時,安裝隨需 SSM Agent 可讓您使用工作者節點建立 SSH 工作階段、收集日誌或查看執行個體組態,而不需要 SSH 金鑰對。
先決條件和限制
先決條件
具有 Amazon Elastic Compute Cloud (Amazon EC2) 工作者節點的現有 Amazon EKS 叢集。
容器執行個體應具備與 SSM 服務通訊所需的許可。AWS Identity and Access Management (IAM) 受管角色 AmazonSSMManagedInstanceCore 提供 SSM Agent 在 EC2 執行個體上執行的必要許可。如需詳細資訊,請參閱 AWS Systems Manager 文件。
限制
此模式不適用於 AWS Fargate,因為 Fargate 平台不支援 DaemonSets。
此模式僅適用於 Linux 型工作者節點。
DaemonSet Pod 會以特殊權限模式執行。如果 Amazon EKS 叢集具有 Webhook,以特殊權限模式封鎖 Pod,則不會安裝 SSM Agent。
架構
下圖說明此模式的架構。

工具
工具
kubectl 是一種命令列公用程式,用於與 Amazon EKS 叢集互動。此模式使用
kubectl
來部署 Amazon EKS 叢集上的 DaemonSet,這會在所有工作者節點上安裝 SSM Agent。Amazon EKS 可讓您在 AWS 上輕鬆執行 Kubernetes,而無需安裝、操作和維護您自己的 Kubernetes 控制平面或節點。Kubernetes 是一套開放原始碼系統,用於容器化應用程式的自動化部署、擴展與管理。
AWS Systems Manager Session Manager 可讓您透過互動式、一鍵式瀏覽器型 shell 或透過 AWS Command Line Interface (AWS CLI) 來管理您的 EC2 執行個體、內部部署執行個體和虛擬機器 (VMs)。
Code
使用下列程式碼來建立 DaemonSet 組態檔案,該檔案將在 Amazon EKS 叢集上安裝 SSM Agent。請遵循 Epics 區段中的指示。
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
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
安裝並設定 kubectl 以存取 EKS 叢集。 | 如果 | DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
建立 DaemonSet 組態檔案。 | 在此模式稍早的 Codesection 中使用程式碼來建立名為 的 DaemonSet 組態檔案 DaemonSet 啟動的 Pod 具有主要容器和 當初始化容器完成時,主要容器會等待 60 分鐘再結束。60 分鐘後,會啟動新的 Pod。如果 SSM Agent 遺失,此 Pod 會安裝 SSM Agent,或將 SSM Agent 更新至最新版本。 如有需要,您可以修改 | DevOps |
在 Amazon EKS 叢集上部署 DaemonSet。 | 若要在 Amazon EKS 叢集上部署您在上一個步驟中建立的 DaemonSet 組態檔案,請使用下列命令:
此命令會建立 DaemonSet,以在工作者節點上執行 Pod,以安裝 SSM Agent。 | DevOps |
相關資源
安裝 kubectl (Amazon EKS 文件)
設定 Session Manager (AWS Systems Manager 文件)