Quay lại

Bài 10: Chạy Container trên Cluster - phần 2 Chuyên mục Docker    2023-12-16    25 Lượt xem    20 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Bài 10: Chạy Container trên Cluster - phần 2

Docker Swarm

Docker Swarm là một công cụ của Docker được sử dụng để quản lý và triển khai các ứng dụng chia tách thành các containers trên một mạng của nhiều máy chủ (nodes). Docker Swarm giúp tạo ra một môi trường chạy ứng dụng đa máy chủ, nơi các containers có thể được phân phối và quản lý một cách linh hoạt và hiệu quả.

Dưới đây là một số điểm chính về Docker Swarm:

  1. Orchestration: Docker Swarm hoạt động như một hệ thống orchestration, giúp tự động hóa việc triển khai, cập nhật và mở rộng các ứng dụng chia tách thành các containers trên nhiều máy chủ.

  2. Nodes: Mỗi máy chủ tham gia vào mạng của Docker Swarm được gọi là một "node". Có hai loại nodes chính: manager nodesworker nodes.

    • Manager Nodes: Chịu trách nhiệm quản lý toàn bộ hệ thống Swarm, bao gồm triển khai ứng dụng, quản lý trạng thái của các containers và xử lý yêu cầu từ người dùng hoặc các ứng dụng khác.

    • Worker Nodes: Là nơi chứa các containers và thực hiện công việc thực tế của ứng dụng. Các worker nodes thực hiện các nhiệm vụ được giao từ manager nodes.

    • Swarm Worker được quản lý bởi Swarm Manager và được mô tả trong sơ đồ bên dưới:
  3. Service: Trong Docker Swarm, một dịch vụ là một đơn vị triển khai cho một ứng dụng hoặc một phần của ứng dụng. Một dịch vụ có thể chứa nhiều replicas (bản sao) của một container và có thể được triển khai trên nhiều worker nodes.

  4. Overlay Networking: Docker Swarm hỗ trợ mạng overlay, cho phép các containers trên các node khác nhau giao tiếp với nhau thông qua một mạng ảo.

  5. Service Discovery: Swarm cung cấp dịch vụ định tên, giúp các containers có thể giao tiếp với nhau bằng tên thay vì địa chỉ IP.

  6. Rolling Updates: Swarm cho phép triển khai các bản cập nhật ứng dụng một cách linh hoạt và không làm gián đoạn dịch vụ.

Docker Swarm là một giải pháp orchestration dễ sử dụng và phổ biến cho việc triển khai và quản lý ứng dụng container trong môi trường sản xuất.

Docker Swarm orchestrator/Swarm Mode

Docker Swarm Orchestrator là một phần của Docker Swarm, là một công cụ orchestration tích hợp trong Docker, được thiết kế để quản lý và điều phối containers chạy trên nhiều máy chủ để tạo thành một hệ thống phân tán. Orchestrator chịu trách nhiệm cho việc triển khai, quản lý, và mở rộng ứng dụng trong môi trường container.

Dưới đây là một số chi tiết về Docker Swarm Orchestrator:

1. Quản Lý Nodes:

  • Orchestrator quản lý các nodes trong Swarm, bao gồm cả manager nodes và worker nodes.
  • Manager nodes chịu trách nhiệm quản lý toàn bộ hệ thống, điều phối việc triển khai và giám sát trạng thái của các containers.
  • Worker nodes là nơi chứa các containers và thực hiện công việc thực tế của ứng dụng.

2. Service Management:

  • Orchestrator quản lý dịch vụ (services), là một đơn vị triển khai cho một ứng dụng hoặc một phần của ứng dụng.
  • Dịch vụ có thể bao gồm nhiều replicas của một container và được phân phối trên các worker nodes để đảm bảo tính sẵn sàng và khả năng chịu lỗi.

3. Auto-Scaling:

  • Orchestrator hỗ trợ tự động mở rộng số lượng replicas của một dịch vụ dựa trên tải hoặc yêu cầu người dùng.
  • Nó có thể tự động thêm hoặc giảm bớt số lượng containers để đảm bảo rằng ứng dụng luôn có đủ nguồn lực.

4. Overlay Networking:

  • Orchestrator cung cấp mạng overlay, cho phép các containers trên các node khác nhau giao tiếp với nhau thông qua một mạng ảo.

5. Service Discovery:

  • Orchestrator cung cấp dịch vụ định tên cho các containers, giúp chúng có thể giao tiếp với nhau bằng tên thay vì địa chỉ IP.

6. Rolling Updates:

  • Orchestrator hỗ trợ triển khai rolling updates, cho phép bạn cập nhật ứng dụng một cách mượt mà và không làm gián đoạn dịch vụ.

7. Health Checks:

  • Orchestrator có khả năng kiểm tra sức khỏe của containers và tự động thay thế các containers lỗi bằng các replicas khác.

8. Load Balancing:

  • Orchestrator tự động quản lý việc phân phối tải giữa các containers trong một dịch vụ để đảm bảo hiệu suất tốt.

9. Security:

  • Orchestrator hỗ trợ các tính năng bảo mật như mã hóa dữ liệu và quản lý quyền truy cập để bảo vệ môi trường Swarm.

Docker Swarm Orchestrator giúp đơn giản hóa việc triển khai và quản lý containers trong môi trường sản xuất, giúp tận dụng tối đa khả năng chịu lỗi, mở rộng linh hoạt và quản lý các ứng dụng phức tạp trên nhiều máy chủ.

Các command sử dụng trong Swarm

Dưới đây là một số lệnh cơ bản trong Docker Swarm và chi tiết về cách chúng hoạt động:

Khởi tạo Swarm (Docker swarm):

  1. Khởi tạo một Swarm:
    docker swarm init​
    Lệnh này được sử dụng để khởi tạo một Docker Swarm trên máy chủ hiện tại và biến máy chủ đó thành một manager node. Khi được chạy, nó sẽ cung cấp một mã thông báo để các worker nodes có thể kết nối vào Swarm.
  2. Kết nối một worker node vào Swarm:

    docker swarm join --token <TOKEN> <MANAGER_IP>:<MANAGER_PORT>​

    Lệnh này được sử dụng trên các worker nodes để kết nối vào Swarm đã được khởi tạo. Thông tin token và địa chỉ IP của manager node được cung cấp khi chạy lệnh docker swarm init trên manager node.

  3. Kết nối một manager node vào Swarm (với --token):

    docker swarm join-token manager​

    Lệnh này hiển thị mã thông báo và lệnh để kết nối một manager node vào Swarm.

  4. Leave swarm mode
    1. docker swarm leave --force

Kết Nối Nodes (Docker Node):

  1. Liệt kê tất cả các nodes trong Swarm:
    docker node ls​
    Lệnh này hiển thị danh sách tất cả các nodes trong Swarm, bao gồm cả manager nodes và worker nodes, cùng với trạng thái của chúng.
  2. Giảm quyền của một node cụ thể trong mạng Swarm.
    1. docker node demote <node_id>
    2. Khi bạn demote một node, nó không còn được coi là một "manager" nữa, nghĩa là nó không thể quản lý và đưa ra quyết định cho cả cluster. Thay vào đó, nó trở thành một "worker" chỉ thực hiện các công việc mà manager gửi đến.
  3.  Thăng cấp một worker node lên manager node
    1. docker node promote <NODE_ID>
    2. Khi bạn chạy lệnh docker node promote <NODE_ID>, nó sẽ thăng cấp một worker node có NODE_ID đặc tả thành một manager node. Điều này mở rộng khả năng quản lý của swarm và cho phép node đó tham gia vào việc quản lý và điều phối nhiệm vụ
  4. Ngoài ra nó còn một số câu lệnh khác các bạn có thể sử dụng cmd bên dưới để tìm hiểu thêm nhé !
    1. docker node --help

Lưu ý rằng để thực hiện các thao tác quản lý node trong Docker Swarm, bạn cần đang chạy trên một máy chủ manager và đã kết nối đến Swarm cluster của bạn.

Quản Lý Dịch Vụ (Docker Service):

Trong Docker Swarm, docker service là một lệnh dùng để quản lý và triển khai các dịch vụ (services). Docker Swarm là một tính năng của Docker cho phép bạn quản lý và triển khai ứng dụng phân tán trên một cluster của các máy chủ Docker.

Một dịch vụ (service) trong Docker Swarm là một tập hợp các container chạy một ứng dụng cụ thể, được quản lý và triển khai như một đơn vị. Dịch vụ này có thể chạy trên nhiều node trong cluster, và Docker Swarm sẽ quản lý cân bằng tải và sự chịu lỗi cho dịch vụ đó.

Một số thao tác phổ biến với docker service bao gồm:

  1. Tạo một Dịch vụ:

    docker service create --name my-service my-image​
  2. Hiển thị danh sách các Dịch vụ:

    docker service ls​
  3. Hiển thị thông tin chi tiết của một Dịch vụ:

    docker service inspect my-service​
  4. Mở rộng hoặc thu nhỏ số lượng container của một Dịch vụ:

    docker service scale my-service=3​
  5. Thực hiện rolling update cho một dịch vụ trong Swarm:

    1. docker service update --image new-image my-service​
  6. Liệt kê các task (nhiệm vụ) của một dịch vụ cụ thể:
    1. Trong Docker Swarm, lệnh docker service ps được sử dụng để liệt kê các task (nhiệm vụ) của một dịch vụ cụ thể. Mỗi dịch vụ (service) trong Docker Swarm được triển khai bằng cách chạy một hoặc nhiều container, và mỗi container đó được gọi là một task.

      Cú pháp cơ bản của lệnh docker service ps là:

      docker service ps <service_name>​

      Trong đó, <service_name> là tên của dịch vụ mà bạn muốn xem danh sách các task.

      Ví dụ, để xem các task của một dịch vụ có tên là "web-app", bạn có thể sử dụng lệnh sau:

      docker service ps web-app​

      Kết quả sẽ liệt kê thông tin về mỗi task, bao gồm ID của task, container ID, tình trạng (running, complete, failed, etc.), node mà task đang chạy, và các thông tin khác.

      Lệnh này rất hữu ích để theo dõi trạng thái của các task của dịch vụ trong môi trường Swarm, đặc biệt là khi bạn muốn kiểm tra việc triển khai, cân bằng tải hoặc chịu lỗi của dịch vụ đó.

Quản Lý Stack (Docker Stack):

Trong Docker Swarm, docker stack là một lệnh được sử dụng để triển khai và quản lý ứng dụng phân tán sử dụng Docker Compose file. Một stack là một tập hợp của một hoặc nhiều dịch vụ (services) được triển khai trong Swarm. Lệnh docker stack giúp quản lý các stack đó trên Swarm.

Dưới đây là một số chi tiết về lệnh docker stack:

1. Triển Khai Một Stack:

docker stack deploy -c <COMPOSE_FILE> <STACK_NAME>​
  • -c <COMPOSE_FILE>: Chỉ định Docker Compose file để định nghĩa các dịch vụ và cấu hình của stack.
  • <STACK_NAME>: Tên của stack.

2. Liệt Kê Các Stacks:

docker stack ls​

Lệnh này hiển thị danh sách các stack đang chạy trong Swarm, cùng với số lượng replicas và trạng thái của chúng.

3. Xem Chi Tiết Về Một Stack:

docker stack ps <STACK_NAME>

Lệnh này hiển thị chi tiết về các replicas của các dịch vụ trong stack, bao gồm trạng thái và các thông số khác.

4. Xóa Một Stack:

docker stack rm <STACK_NAME>
Lệnh này dừng và xóa một stack khỏi Swarm, đồng thời cũng xóa các dịch vụ và containers liên quan.

5. Rolling Update Cho Một Stack:

docker stack deploy -c <NEW_COMPOSE_FILE> <STACK_NAME>​

Khi bạn thực hiện việc triển khai lại một stack với một Docker Compose file mới (mà thường chứa cập nhật cho các dịch vụ), Docker Swarm thực hiện một rolling update cho các dịch vụ mà không làm gián đoạn dịch vụ.

Quản Lý Secret (Docker Secret):

Trong Docker Swarm, docker secret là một lệnh được sử dụng để quản lý và triển khai các secrets (bí mật) trong ứng dụng. Secrets là thông tin nhạy cảm như mật khẩu, chứng chỉ TLS, khóa API, hoặc bất kỳ loại thông tin nhạy cảm nào khác mà bạn không muốn hiển thị trực tiếp trong các files cấu hình hoặc Docker Compose files. Docker Swarm đảm bảo rằng secrets được chia sẻ an toàn giữa các nodes trong môi trường Swarm.

Dưới đây là một số chi tiết về lệnh docker secret:

1. Tạo Một Secret:

echo "my_secret_value" | docker secret create <SECRET_NAME> -​
  • <SECRET_NAME>: Tên của secret, ví dụ: db_password.

Lệnh này sẽ tạo một secret từ giá trị được cung cấp.

2. Liệt Kê Các Secrets:

docker secret ls​

Lệnh này hiển thị danh sách các secrets đang tồn tại trong Docker Swarm.

3. Xem Chi Tiết Về Một Secret:

docker secret inspect <SECRET_NAME>​
  • <SECRET_NAME>: Tên của secret.

Lệnh này cung cấp thông tin chi tiết về một secret, bao gồm cả ID, tên, và ngày tạo.

4. Xóa Một Secret:

docker secret rm <SECRET_NAME>​
  • <SECRET_NAME>: Tên của secret.

Lệnh này xóa một secret từ Docker Swarm.

5. Triển Khai Một Stack Sử Dụng Secret:

Để sử dụng secret trong một Docker Compose file hoặc stack file, bạn có thể sử dụng cú pháp như sau:

version: '3.1'

services:
  myapp:
    image: myapp:latest
    secrets:
      - source: my_secret
        target: /path/in/container
        mode: 0400
secrets:
  my_secret:
    external: true​

Trong đoạn compose file trên, secret có tên my_secret được sử dụng trong dịch vụ myapp. Nó có thể được mount vào đường dẫn /path/in/container trong container và được set quyền truy cập là 0400.

Lưu ý rằng secrets chỉ có sẵn cho các services và không thể trực tiếp truy cập từ bên ngoài container. Secrets được quản lý và giữ an toàn trong Swarm.

Đây là một số lệnh quan trọng trong Docker Swarm. Để biết thêm chi tiết và tùy chọn, bạn có thể sử dụng docker swarm --helpdocker service --help để xem danh sách đầy đủ các tùy chọn cho mỗi lệnh.

 
 
 
 
 
 
 
 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday