1. Container Orchestration

Như chúng ta đã biết, công nghệ điện toán đám mây thế hệ kế tiếp chỉ ra rằng container orchestration sẽ là một công nghệ cần phải biết trong tương lai ngắn. Container orchestration là các công cụ, dịch vụ dùng để điều phối và quản lý nhiều container sao cho chúng làm việc một cách hiệu quả nhất. Khi người người sử dụng container, nhà nhà sử dụng container, các công ty cũng sử dụng container để deploy một cách rộng rãi hơn thì việc tìm ra một tool quản lý tất cả container trong hệ thống hạ tầng chúng ta có là một vấn đề cấp thiết.

Bạn đang xem: Orchestration là gì

Để giải quyết vấn đề đó, một số công ty đã phát triển các container orchestration tool như:

Amazon ECS: là dịch vụ của amazon hỗ trợ container Docker và cho phép bạn chạy các ứng dụng trên một cụm quản lý của EC2 của Amazon.Azure container Service (ACS): dịch vụ của microsoft cho phép bạn tạo ra một cụm các máy ảo mà hoạt động như container host cùng với một máy master được sử dụng để quản lý các container ứng dụng.Google container Engine: được Google xây dựng trên Kubernetes, cho phép bạn chạy container Docker trên nền tảng đám mây của Google. Nó lập lịch đưa container vào cluster và quản lý chúng dựa trên yêu cầu người dùng xác định.Kubernetes: là một hệ thống orchestration cho các container Docker. Nó xử lý lập kế hoạch và quản lý khối lượng công việc dựa trên các thông số người dùng định nghĩa.Mesosphere Marathon: là một framework orchestration cho Apache Mesos được thiết kế để khởi động ứng dụng lâu dài. Nó cung cấp các tính năng quan trọng cho các ứng dụng đang chạy trong một môi trường cluster.Docker Swarm: là một công cụ giúp chúng ta tạo ra một clustering Docker. Nó giúp chúng ta gom nhiều Docker Engine lại với nhau và ta có thể "nhìn" nó như duy nhất một virtual Docker Engine. Tất nhiên là bất cứ công cụ nào có thể giao tiếp với Docker Engine thì cũng sẽ giao tiếp với Docker Swarm bình thường theo đúng chuẩn Docker API, và tất nhiên là trong suốt. Một cụm Swarm có thể được cấu hình và deploy thông qua Docker-Machine. Và theo như bài test của Docker thì họ có thể scale ra 30.000 container trên 1000 node AWS với chỉ một Swarm Manager. Bạn có thể xem nó tương tự như Kubernetes, nhưng theo Docker thì công cụ Swarm của họ lightweight và nhanh hơn gấp 5 lần so với Kubernetes. Và chúng ta sẽ cùng tìm hiểu về Docker Swarm.

2. Docker Swarm

Trước version 1.12, Docker Swarm là một tool/process chạy độc lập với Docker Engine. Docker Swarm làm nhiệm vụ clustering các host chạy Docker Engine lại thành một hệ thống duy nhất và cho phép người dùng chạy các Docker containers trên clustered-system đó.

Đến version 1.12 “swarm” đã được tích hợp vào Docker core và trở thành một native solution cho việc clustering/orchestration giữa các Docker hosts. Tuy cùng tên là “swarm” nhưng bản chất của Swarm-mode trong Docker 1.12 khác hẳn so với docker-swarm tool/process chạy độc lập trước đó. Swarm-mode trong Docker 1.12 được build dựa trên SwarmKit library – có kiến trúc tốt hơn cũng như khả năng scale tốt hơn so với docker-swarm tool.

Sau khi cài đặt xong Docker 1.12, việc sử dụng Swarm mode là vô cùng đơn giản: bạn chỉ cần chạy docker swarm init trên node đóng vai trò manager và chạy docker swarm join --token $IP:PORT trên các node còn lại – các node đóng vai trò worker

:~# docker swarm initSwarm initialized: current node (4ubkww2a9t1sioibe5svo8czb) is now a manager.To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-5sogjq50clr3x90vwg79mgdwkp0v8fvzdq6j1w2ifjy334zmp6-e99ast236g8go5t0hyfbliazx \ 10.0.1.129:2377To add a manager to this swarm, run "docker swarm join-token manager" and follow the instructions.Trên node worker:

:~# docker swarm join --token SWMTKN-1-5sogjq50clr3x90vwg79mgdwkp0v8fvzdq6j1w2ifjy334zmp6-e99ast236g8go5t0hyfbliazx 10.0.1.129:2377This node joined a swarm as a worker.Kiểm tra các node có trong swarm

:~# docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS1nwel5c4phkbv0occmhogg1he Vietdocker Ready Active4ubkww2a9t1sioibe5svo8czb * test-registry.framgia.com.vn Ready Active LeaderSwarm trong Docker 1.12 sẽ không còn cần đến các data-store bên ngoài như Consul hay etcd; sở dĩ vậy là vì trong SwarmKit đã được tích hợp sẵn một implementation của Raft (một consensus protocol/algorithm). Điều này khiến cho việc cài đặt và sử dụng Swarm trở nên cực kỳ đơn giản và nhẹ nhàng.

Trước khi tạo container trên swarm, chúng ta phải tạo 1 network overlay

:~# docker network create -d overlay net-testbjbdqlkb7uamkhg6wq982o00mViệc start container trên Swarm được thực hiện qua command docker service thay vì docker run như thông thường.

:~# docker service create --name redis --network net-test redis2e834udy3equrkfm8o1hlgoo6Kiểm tra service redis vừa được tạo:

:~# docker service ps redisID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR09xtvqwi785d0j2zuv8831q8q redis.1 redis test-registry.framgia.com.vn Running Running 30 seconds agoViệc scale số container chạy service redis có thể thực hiện dễ dàng bằng lệnh:

:~# docker service update --replicas 4 redisredis:~# docker service ps redisID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR09xtvqwi785d0j2zuv8831q8q redis.1 redis test-registry.framgia.com.vn Running Running 2 minutes agods8a3y8apc4ldvpwobf118sm0 redis.2 redis Vietdocker Running Running 14 seconds ago66xuc5piodw04tafnjuqmyf7j redis.3 redis Vietdocker Running Running 8 seconds ago4p0u8m8z8z819vz2hf9mjelse redis.4 redis test-registry.framgia.com.vn Running Running 16 seconds agoNhư chúng ta thấy, việc tạo ra các container chạy service redis là ngẫu nhiên xuất hiện trên các node trong Swarm. 2 container ở node manager và 2 container ở node worker.

Để test service redis có được load-balancing hay không, ta có thể tạo ra 1 container để test. miễn là cùng 1 network relay như vừa tạo lúc trước.

Xem thêm: Tiểu Sử Ca Sĩ Tố My Là Ai - Tiểu Sử, Năm Sinh, Chiều Cao Tố My

:~# docker service create --name test-redis --network net-test rediscak0wypiurzpg7ayw3y9zk3ds:~# docker service ps test-redisID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERRORbs3hkpw8k8fu8r31fchmr5z0h test-redis.1 redis test-registry.framgia.com.vn Running Running 27 seconds agoĐể thực hiện việc test, ta exec vào container vừa tạo và dùng redis-cli để kiểm tra:

:~# docker exec -it test-redis.1.bs3hkpw8k8fu8r31fchmr5z0h /bin/bash:/data# redis-cli -h redisredis:6379> set name 1OKredis:6379> exit:/data# redis-cli -h redisredis:6379> set name 2OKredis:6379> exit:/data# redis-cli -h redisredis:6379> set name 3OKredis:6379> exit:/data# redis-cli -h redisredis:6379> set name 4OKredis:6379> exit:/data# redis-cli -h redisredis:6379> get name"3"redis:6379> exit:/data# redis-cli -h redisredis:6379> get name"4"redis:6379> exitĐiều này chứng tỏ service redis đã Docker tự động load-balancing bằng DNS.

Trong trường hợp bạn không muốn dùng load-balancing qua DNS thì Swarm cũng cung cấp sẵn luôn một Virtual IP để bạn kết nối tới service redis. Ở đây là 10.0.0.2

:~# docker service inspect redis<..."Endpoint": { "Spec": { "Mode": "vip" }, "VirtualIPs": < { "NetworkID": "bjbdqlkb7uamkhg6wq982o00m", "Addr": "10.0.0.2/24" } > },...>Mình vừa giới thiệu qua cho các bạn về Docker Swarm. Vậy có bạn nào muốn quản lý trực tiếp qua giao diện, đơn giản trong khâu deploy hay quản lý môi trường của Docker Swarm không?

Nếu có thì mời các bạn xuống tiếp phần tiếp theo. Chúng ta sẽ cùng tìm hiểu 1 tool như vậy.

3. Rancher

3.1. Giới thiệu về Rancher

Rancher là một nền tảng phần mềm mã nguồn mở cho phép các tổ chức chạy container trong production của mình. Cùng với Rancher, các công ty không còn phải build 1 container service platform từ đầu. Rancher sẽ cung cấp những phần mềm cần thiết để quản lý container trong production. Nó cung cấp các dịch vụ cơ sở hạ tầng như multi-host networking, cân bằng tải toàn cầu và địa phương, và snapshot. Nó tích hợp khả năng quản lý Docker như Docker Machine và Docker Swarm.Rancher là dự án khá mới, bắt đầu phát triển cách đây 2 năm. Với mục tiêu ban đầu là phát triển phần mềm để deploy và manage các container trong mọi công ty, chạy với mọi kiến trúc hạ tầng. Giờ đây Rancher đã trở hỗ trợ rất nhiều container orchestration như: Docker Swarm, Kubernetes và Mesos.Rancher gồm 4 thành phần chính:INFRASTRUCTURE ORCHESTRATION: Rancher lấy tài nguyên từ bất kì đâu hoặc private cloud chỉ cần có nhân Linux. Mỗi máy chủ Linux có thể là máy ảo hoặc máy vật lý, Rancher chỉ quan tâm tới CPU, memory, ổ cứng và kết nối mạng. Từ đó, Rancher sẽ tạo ra 1 instance dựa trên các phần cứng được chia sẻ.CONTAINER ORCHESTRATION AND SCHEDULING: nhiều người dùng chọn cách chạy container sử dụng 1 container orchestration và scheduling framework. Rancher bao gồm tất cả container orchestration phổ biến như: Docker Swarm, Kubernetes, và Mesos. Họ có thể tạo nhiều Swarm cluster hay Kubernetes. Và họ cũng có thể sử dụng native Swarm và Kubernetes tools để quản lý các ứng dụng của họ.APPLICATION CATALOG: người dùng Rancher có thể triển khai toàn bộ 1 cluster ứng dụng chứa multi-container từ catalog chỉ bằng 1 cái nhấn chuột.ENTERPRISE-GRADE CONTROL: Rancher hỗ trợ các plugin xác thực cùng với AD, LDAP và GitHub. Rancher cho phép người dùng share hoặc deny access đến môi trường phát triển và production.

Hình dưới đây minh họa các thành phần chính và các tính năng của Rancher.

*

+ BASE_DIR=/mnt/new_img+ CLOUD_DATA=/opt/user_config.yml+ IFS=,+ read -ra FILES+ "<" -z /mnt/new_img ">"+ mkdir -p /mnt/new_img/var/lib/rancher/conf/cloud-config.d+ "<" /opt/user_config.yml "!=" /scripts/conf/empty.yml ">"+ cp /opt/user_config.yml /mnt/new_img/var/lib/rancher/conf/cloud-config.d/+ "<" -e /mnt/new_img/boot/append ">"+ "<" "" = "" ">"+ APPEND=+ echo ""+ grub2_config ""+ local grub_cfg=/mnt/new_img/boot/grub/grub.cfg+ local append_line=+ cat+ "<" "!" -z ">"+ syslinux_config ""+ local syslinux_cfg=/mnt/new_img/boot/syslinux/syslinux.cfg+ local append_line=+ cat+ "<" "!" -z ">"+ pvgrub_config ""+ local grub_file=/mnt/new_img/boot/grub/menu.lst+ local append_line=+ cat+ "<" "!" -z ">"+ install_rancher+ cp /dist/initrd /mnt/new_img/boot/initrd-v0.7.0-rancheros+ cp /dist/vmlinuz /mnt/new_img/boot/vmlinuz-v0.7.0-rancheros+ seusers=/mnt/new_img/etc/selinux/ros/seusers+ failsafe_context=/mnt/new_img/etc/selinux/ros/contexts/failsafe_context+ "<" -f /mnt/new_img/etc/selinux/ros/seusers ">"+ "<" -f /mnt/new_img/etc/selinux/ros/contexts/failsafe_context ">"+ "<" "" = y ">"+ umount /mnt/new_imgContinue with reboot : yINFO<0189> RebootingChờ rancher reboot lại là xong. Và sau khi Rancher online lại, các bạn phải sử dụng user: rancher cùng với private key tương ứng với public key ssh của các bạn sử dụng trong quá trình cài đặt thì mới access được vào server.

Ok. Giờ ta sẽ enable giao diện quản lý của Rancher lên nhé:docker run -d --restart=always -p 8080:8080 rancher/server

Nào ta cùng lên giao diện thôi

Sau khi thiết lập Admin và Enable access control, chúng ta sẽ cùng tạo và quản lý Swarm nhé.

Click Default > Manage Environment > Add Environment. Phần này nhớ add access control các bạn nhé

Sang Swarm để config tiếp nào

Click INFRASTRUCTURE > Hosts > Add Host

Ở đây chúng ta sẽ điền IP cho các node được add vào mục 4 và copy command ở mục 5 paste vào node cần add. Lưu ý: các node ở đây không cần thiết phải chạy rancheros mà chỉ cần là máy Linux cài được bản Docker mới nhất lên đó. Ta cũng có thể add chính server RancherOS vừa cài xong

Ở đây, ta thấy Rancher tự động chạy image rancher/swarm-agent:v0.1.3 trên các node.

Để thêm 1 service hay project, ta click SWARM > System > Add service hoặc SWARM > project

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *