Dịch vụ Ecs không cập nhật định nghĩa nhiệm vụ


8

Trong cụm ecs, tôi có một dịch vụ chạy với 2 phiên bản ec2. Và tôi cập nhật định nghĩa nhiệm vụ để lấy hình ảnh docker mới. Nhưng định nghĩa nhiệm vụ cũ vẫn chạy mặc dù có một định nghĩa nhiệm vụ mới.

Tôi đã sử dụng các lệnh sau để cập nhật định nghĩa nhiệm vụ và dịch vụ.

aws ecs register-task-definition --family service90-task --cli-input-json file://service90-task.json

aws ecs update-service --cluster service90-cluster --service service90-service --desired-count 0

TASK_REVISION=`aws ecs describe-task-definition --task-definition service90-task | egrep "revision" | tr "/" " " | awk '{print $2}' | sed 's/"$//'`

aws ecs update-service --cluster service90-cluster --service service90-service --task-definition service90-task:${TASK_REVISION} --desired-count 2

Tôi đã thử nhiều lần nhưng không thể tìm ra mình đã sai ở đâu. Tôi muốn có được dịch vụ ecs để chạy định nghĩa nhiệm vụ mới thay vì định nghĩa cũ.

Câu trả lời:


7

Như tôi đã tìm ra sau này, lý do không cập nhật tác vụ là số lượng mong muốn được đặt thành 2 và chỉ có 2 phiên bản EC2 khả dụng. Vì vậy, tác nhân ECS cố gắng giữ lại số lượng mong muốn mặc dù nhiệm vụ đã được cập nhật.

Giải pháp - Có thêm một phiên bản EC2 (trong trường hợp này là 3 phiên bản EC2). Hoặc có thêm một ví dụ so với số lượng nhiệm vụ ưa thích.

Theo cách này, định nghĩa tác vụ mới có thể chạy trong trường hợp bổ sung. Sau khi được ổn định trên phiên bản EC2 bổ sung, tác nhân ECS sẽ rút kết nối trên hai phiên bản khác cho định nghĩa tác vụ cũ, trong khi bộ cân bằng tải chuyển hướng lưu lượng đến phiên bản cập nhật. Tác nhân ECS thay thế định nghĩa nhiệm vụ cũ bằng các tác vụ mới. Và sau đó nó duy trì số lượng mong muốn là 2.


2

Một giải pháp thay thế là đặt Minimum healthy percenttùy chọn triển khai của dịch vụ 0, dẫn đến các tác vụ hiện có bị dừng trước khi phiên bản mới được triển khai.

Điều này cho phép các cụm đối tượng ec2 được sử dụng, với mức tiết kiệm chi phí liên quan, v.v.

Không phù hợp cho sản xuất vì bạn sẽ có thời gian chết giữa các lần triển khai


Ngày điều tra và khởi động lại máy chủ, giải quyết bằng câu trả lời này! Cảm ơn :)
Neara

2

Để cập nhật định nghĩa tác vụ trong "tác vụ" đang chạy trong dịch vụ Bạn cần xóa các tác vụ và Bắt đầu một tác vụ mới.

Theo cách này, tôi giải quyết vấn đề cập nhật định nghĩa nhiệm vụ trong các nhiệm vụ

Tôi đã viết mã sau đây:

    # Register a new Task definition 
    aws ecs register-task-definition --family testing-cluster --cli-input-json file://scripts/taskdefinition/testingtaskdef.json --region $AWS_REGION

    # Update Service in the Cluster
    aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE --task-definition testing-cluster --desired-count 1 --region $AWS_REGION 



    DECRIBED_SERVICE=$(aws ecs describe-services --region $AWS_REGION --cluster $CLUSTER_NAME --services $SERVICE);
    CURRENT_DESIRED_COUNT=$(echo $DECRIBED_SERVICE | jq --raw-output ".services[0].desiredCount")
    #    - echo $CURRENT_DESIRED_COUNT

    CURRENT_TASK_REVISION=$(echo $DECRIBED_SERVICE | jq -r ".services[0].taskDefinition")
    echo "Current Task definition in Service" + $CURRENT_TASK_REVISION

    CURRENT_RUNNING_TASK=$(echo $DECRIBED_SERVICE | jq -r ".services[0].runningCount")
    echo $CURRENT_RUNNING_TASK

    CURRENT_STALE_TASK=$(echo $DECRIBED_SERVICE | jq -r ".services[0].deployments | .[] | select(.taskDefinition != \"$CURRENT_TASK_REVISION\") | .taskDefinition")
    echo "Task defn apart from current service Taskdefn" +  $CURRENT_STALE_TASK
    #   - echo $CURRENT_STALE_TASK

    tasks=$(aws ecs --region $AWS_REGION list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns | map(.[40:]) | reduce .[] as $item (""; . + $item + " ")')
    echo "Tasks are as follows" 
    echo $tasks
    TASKS=$(aws ecs --region $AWS_REGION describe-tasks --cluster $CLUSTER_NAME --task $tasks);
    #    - echo $TASKS
    OLDER_TASK=$(echo $TASKS | jq -r ".tasks[] | select(.taskDefinitionArn!= \"$CURRENT_TASK_REVISION\") | .taskArn | split(\"/\") | .[1] ")
    echo "Older Task running  " + $OLDER_TASK
    for old_task in $OLDER_TASK; do
        aws ecs --region us-east-1 stop-task --cluster $CLUSTER_NAME --task $old_task
    done    

    # Run new tasks with the updated new Task-definition
    aws ecs --region $AWS_REGION run-task --cluster $CLUSTER_NAME --task-definition $CURRENT_TASK_REVISION

0

Tôi đã gãi đầu trong chuyện này trong một thời gian dài và không bao giờ tìm thấy một giải pháp khả thi ở bất cứ đâu cho đến tuần trước.

AWS vừa phát hành API mới của mình, nơi họ có tùy chọn - Force để loại bỏ dịch vụ. Vấn đề của Nhóm mục tiêu mà bạn gặp phải chỉ đơn giản là vì Nhóm mục tiêu đã đăng ký với nhiệm vụ của bạn đã bị xóa và bạn không thể liên kết một Nhóm mục tiêu mới với nó. Vì vậy, vì nhiệm vụ và dịch vụ này hiện đã bị hỏng, nên cách duy nhất để giải quyết là xóa nó, bạn không thể cập nhật nó nữa.

Bạn có thể sử dụng lệnh này để xóa dịch vụ của bạn bây giờ; nó là không thể vào tuần trước!

aws ecs delete-service --service my-http-service --force true

Hi vọng điêu nay co ich

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.