手動更新 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMIs) - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

手動更新 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMIs)

有時,您可能需要更新 Amazon ECS 容器代理程式,才能取得錯誤修正和新功能。更新 Amazon ECS 容器代理程式不會中斷容器執行個體上執行的任務或服務。

注意

代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體,以更新您 Windows 叢集中的代理版本。

  1. 透過 SSH 登入您的容器執行個體。

  2. 檢查以查看您的代理是否是使用 ECS_DATADIR 環境變數儲存其狀態。

    ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR

    輸出:

    "ECS_DATADIR=/data",
    重要

    若先前的命令並未傳回 ECS_DATADIR 環境變數,您必須停止任何在此容器執行個體上執行的任務,才能更新您的代理。較新的代理會使用 ECS_DATADIR 環境變數儲存其狀態,讓您可以在任務執行中時更新它們,而不會有任何問題。

  3. 停止 Amazon ECS 容器代理程式。

    ubuntu:~$ docker stop ecs-agent
  4. 刪除代理容器。

    ubuntu:~$ docker rm ecs-agent
  5. 確保/etc/ecs目錄和 Amazon ECS 容器代理程式組態檔案存在於 /etc/ecs/ecs.config

    ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
  6. 編輯 /etc/ecs/ecs.config 檔案,並確保其至少包含以下變數宣告。若您不希望您的容器執行個體使用預設叢集註冊,請將叢集名稱指定為 ECS_CLUSTER 的值。

    ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default

    如需這些和其他代理執行時間選項的詳細資訊,請參閱「Amazon ECS 容器代理程式組態」。

    注意

    您可以選擇將代理程式環境變數儲存在 Amazon S3 中 (可在啟動時使用 Amazon EC2 使用者資料下載到您的容器執行個體)。針對敏感性資訊 (例如私有存放庫的身分驗證登入資料),此為建議選項。如需詳細資訊,請參閱 在 Amazon S3 中儲存 Amazon ECS 容器執行個體組態在 Amazon ECS 中使用非AWS 容器映像

  7. 從 Amazon Elastic Container Registry Public 中提取最新的 Amazon ECS 容器代理程式映像。

    ubuntu:~$ docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest

    輸出:

    Pulling repository amazon/amazon-ecs-agent a5a56a5e13dc: Download complete 511136ea3c5a: Download complete 9950b5d678a1: Download complete c48ddcf21b63: Download complete Status: Image is up to date for amazon/amazon-ecs-agent:latest
  8. 在容器執行個體上執行最新的 Amazon ECS 容器代理程式。

    注意

    使用 Docker 重新啟動政策或處理序管理員 (例如 upstartsystemd) 將容器代理程式做為服務或常駐程式處理,並確保在結束後重新啟動它。Amazon ECS 最佳化 AMI 會為此目的使用 ecs-init RPM,您可以檢視此 RPM onWord 的原始程式碼。 GitHub

    以下代理程式執行命令範例分成獨立的各行來顯示每個選項。如需這些和其他代理執行時間選項的詳細資訊,請參閱「Amazon ECS 容器代理程式組態」。

    重要

    啟用 SELinux 的作業系統需要docker run命令中的 --privileged選項。此外,對於啟用 SELinux 的容器執行個體,建議您將 :Z選項新增至 /log/data磁碟區掛載。但是,這些磁碟區的主機掛載必須在您執行命令前存在,否則您會接收到 no such file or directory 錯誤。如果您在啟用 ECS 的容器執行個體上執行 Amazon SELinux 代理程式時遇到困難,請採取下列動作:

    • 在您的容器執行個體上建立主機磁碟區掛載點。

      ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
    • 為以下 docker run 命令新增 --privileged 選項。

    • 為以下 docker run 命令的 /log/data 容器磁碟區掛載附加 :Z 選項 (例如,--volume=/var/log/ecs/:/log:Z)。

    ubuntu:~$ sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --volume=/etc/ecs:/etc/ecs/pki \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest
    注意

    若您接收到 Error response from daemon: Cannot start container 訊息,您可以使用 sudo docker rm ecs-agent 命令刪除失敗的容器,並再度嘗試執行代理程式。