Các nhánh và phiên bản của OpenStack

Một phần của tài liệu Nghiên cứu, triển khai openstack sử dụng docker (Trang 27)

Phiên bản Đặc điểm

Austin (10/2010)

Là phiên bản đầu tiên của OpenStack bao gồm 2 projects là Object storage (Swift) và Compute (Nova). Project Compute trong phiên bản này chỉ ở mức độ testing và hạn chế nhiều tính năng khi triển khai. Bexar

(02/2011)

Tích hợp 1 project mới là Image Service, đồng thời có nhiều sự thay đổi cải tiến trong Nova và Swift. Phiên bản này cho phép lưu trữ file lớn hơn 5Gb và tích hợp một service mới “swauth” cho việc chứng thực, thẩm quyền. Đồng thời cải tiến nhiều tính năng trong API cũng như mở rộng việc hỗ trợ các hypervisors cho ảo hóa.

Catus (04/2011)

Phiên bản này cũng bao gồm 3 projects như Bexar, tuy nhiên có sự cải tiến API và hỗ trợ thêm 2 công nghệ ảo hóa LXC containers và VMware. Glance giới thiệu công cụ command- line mới phục vụ việc truy cập 29 dịch vụ, thêm các định dạng image và thẩm định image đảm bảo toàn vẹn dữ liệu (Integrity).

Dianlo (09/2011)

Đây là phiên bản được sử dụng thử nghiệm, cũng có 3 projects chính như phiên bản CACTUS.

Essex (04/2012)

Với sự hỗ trợ và nâng cấp 2 projects mới là KEYSTONE và HORIZON.

Folsom (09/2012)

Phiên bản này sử dụng CINDER thay thế cho nova - volume. Grizzly

(04/2013)

Phiên bản thử nghiệm trên 3 máy server vật lý theo mô hình cài đặt 3 node: CONTROLLER, NETWORK, COMPUTE.

Havana (10/2013)

Bổ sung thêm HEAT & CEILOMETER. Icehouse

(04/2014)

Hỗ trợ thêm phần bảo mật, bổ sung thêm TROVE. Juno

(10/2014)

Hỗ trợ thêm dịch vụ xử lý dữ liệu SAHARA. Kilo

(04/2015)

Bổ sung thêm thành phần Ironic (Công cụ giúp triển khai OpenStack dễ dàng hơn).

Liberty (10/2015)

Bổ sung các tính năng kiểm soát truy cập dựa trên vai trò (RBAC) cho các dự án điều phối nhiệt và mạng Neutron. Các kiểm soát này cho phép người vận hành, tinh chỉnh cài đặt bảo mật ở tất cả các cấp mạng và chức năng điều phối và API.

Mitaka (04/2016)

Khả năng quản lý nâng cao neutron thông qua mạng lớp 3 được cải tiến và hỗ trợ bộ định tuyến ảo phân tán (DVR).

(10/2016) chức năng đối với khả năng mở rộng, bao gồm khả năng tăng hoặc giảm quy mô trên các nền tảng và khu vực địa lý. Điều này càng củng cố sự thống trị của OpenStack như một giải pháp cho các đám mây ở mọi kích thước. Các cải tiến bao gồm cải thiện khả năng mở rộng/thu nhỏ quy mô trong Nova, Horizon và Swift; tiến triển với tế bào V2 và những cải tiến cho nhiều thời kỳ thuê nhà trong Ironic.

Ocata (02/2017)

Các cải tiến khác liên quan đến vùng chứa bao gồm: Kubernetes hiện bao gồm hỗ trợ Kolla phân phối SUSE mới cho Kubernetes tại 30 mặt phẳng điều khiển dịch vụ mạng, vùng chứa Kuryr hiện hỗ trợ Docker Swarm Kolla (Các dịch vụ OpenStack được chứa trong vùng).

Queens (02/2018)

Hỗ trợ cho vGPU (Đơn vị xử lý đồ họa ảo) - trong Nova, hỗ trợ vGPU cho phép quản trị viên đám mây xác định hương vị để yêu cầu tài nguyên và độ phân giải cụ thể cho vGPU. Người dùng cuối có thể khởi động các máy ảo có vGPU, một dung lượng quan trọng cho khối lượng công việc đồ họa chuyên sâu và nhiều khối lượng công việc khoa học, trí tuệ nhân tạo và máy học.

Train

(16/10/2019 )

Bản phát hành OpenStack Train mở rộng bảo mật và bảo vệ dữ liệu, bổ sung hỗ trợ AI và học máy mới.

Vitoria (10/2020)

Thêm tùy chọn TLS cho các kết nối TLS đã lưu trong bộ nhớ đệm.

CHƯƠNG 3. DOCKER 3.1 Tổng quan về docker

3.1.1 Định nghĩa

Docker là một nền tảng miễn phí (open platform) dành cho việc phát triển, triển khai ứng dụng, cho phép người dùng có thể phát triển và triển khai phần mềm một cách nhanh chóng mà không phải quan tâm nhiều đến hạ tầng bên dưới.

Hình 3. 1 Quá trình hoạt động của Docker

Docker cung cấp khả năng đóng gói và triển khai ứng dụng trong một môi trường cô lập được gọi là container. Với tính cô lập và bảo mật, Docker cho phép người dùng có thể triển khai nhiều container đồng thời trên một server (máy chủ) nhất định. Các container sử dụng rất ít dung lượng bộ nhớ vì chúng không cần sử dụng hypervisor, thay vào đó các container sẽ tương tác trực tiếp với nhân (kernel) của server. Người dùng có thể khởi chạy nhiều container trên một tổ hợp phần cứng nhất định so với việc sử dụng máy ảo, và thậm chí có thể chạy các Docker container trên các máy ảo.

3.1.2 Các thành phần chính

Các thành phần chính của Docker bao gồm:

Docker Engine: là thành phần chính của Docker, như một công cụ để đóng gói ứng dụng.

Docker Hub: là dịch vụ cloud để chia sẻ ứng dụng và tự động hóa chuỗi các công việc liên tục, có thể thao tác pull/push với các images.

3.1.3 Một số khái niệm:

Docker images: là một “read-only template”. Chẳng hạn, một image chứa hệ điều hành Ubuntu đã cài đặt sẵn Apache và ứng dụng web.

Docker registries: là kho chứa images. Người dùng có thể tạo ra các images của mình và tải lên đây hoặc tải về các images được chia sẻ.

Docker container: hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker 37 container được tạo ra từ một docker image. Các thao tác với một container: chạy, bật, dừng, di chuyển, và xóa.

Docker file: là một file chứa tập hợp các lệnh để Docker có thể đọc và thực hiện để đóng gói một image theo yêu cầu người dùng

Orchestration: là các công cụ, dịch vụ dùng để điều phối và quản lý nhiều containers sao cho chúng làm việc hiệu quả nhất.

3.1.4 So sánh Docker với Virtual machine

3.1.4.1 Kiến trúc của service hoạt động trên máy ảo

Máy ảo (Virtual Machine – VM) là một mô phỏng của hệ thống máy tính. Nói một cách đơn giản, công nghệ này giúp người dùng có thể tạo ra nhiều “máy tính logic” trên một “máy tính vật lý”, dễ dàng quản lý vấn đề bảo mật.

Hình 3. 2 Kiến trúc của service hoạt động trên máy ảo

Infrastructure (hạ tầng): có thể là laptop, một server (máy chủ) chuyên dụng (dedicated server) hoạt động trong một trung tâm dữ liệu (Data Center) hoặc một server riêng ảo (Virtual Private Server – VPS) trên cloud như DigitalOcean, Amazon, GCP,…

Host Operating System (hệ điều hành của server): hệ điều hành đang sử dụng cho server đang sử dụng, có thể là macOS, Windows hoặc Linux.

Hypervisor (phần mềm giám sát máy ảo): có thể coi máy ảo như một máy tính độc lập được đóng gói vào một tập tin duy nhất, nhưng cần phải có một phần mềm để có thể chạy tập tin đó. Các hypervisor được sử dụng để tạo, startup, dừng và reset lại các máy ảo, cho phép mỗi máy ảo hoặc “guest” truy cập vào lớp tài nguyên phần cứng vật lý bên dưới, chẳng hạn như CPU, RAM và ổ cứng. Phần mềm này cũng có thể giới hạn số lượng tài nguyên hệ thống mà mỗi máy ảo có thể sử dụng để đảm bảo cho nhiều máy ảo cùng hoạt động đồng thời trên một hệ thống. Có thể kể đến các hypervisor phổ

biến trên thị trường hiện nay như HyperKit cho macOS, Hyper-V cho Windows và KVM cho Linux. Ngoài ra, 2 hypervisor phổ biến khác là VirtualBox và VMWare.

Guest OS (hệ điều hành của máy ảo): với mỗi máy ảo được tạo ra, người quản trị cần phải cài đặt một hệ điều hành đi kèm cho máy ảo đó để cài đặt và triển khai các service cần thiết. Ví dụ bạn cần triển khai 3 service trên 3 máy ảo khác nhau và mỗi “Guest OS” sẽ tiêu tốn ít nhất 700 MB dung lượng ổ cứng, vậy sẽ tiêu tốn khoảng 2.1 GB dung lượng ổ cứng của server để tạo 3 máy ảo để triển khai 3 service khác nhau. Chưa kể để các “Guest OS” này sẽ sử dụng một lượng tài nguyên khác của hệ thống như CPU, RAM.

Bins / Libs (các tập tin / thư viện cần thiết): các service / application sẽ cần phải có các gói tập tin, thư viện đi kèm để có thể hoạt động.

App (application – service): mã nguồn của các ứng dụng, phần mềm.

3.1.4.2 Kiến trúc của service hoạt động trên Docker container:

Nếu so sánh với kiến trúc của service khi hoạt động trên nền tảng máy ảo, service hoạt động trên Docker container sẽ loại bỏ lớp “Guest OS”, với tốc độ khởi tạo service nhanh hơn hẳn so với việc sử dụng máy ảo. Docker Container sẽ giảm thiểu và đơn giản hóa các bản cập nhật bảo mật.

Hình 3. 3 Kiến trúc của service hoạt động trên Docker container

Infrastructure (hạ tầng): có thể là laptop, một server chuyên dụng (dedicated server) hoat động trong một trung tâm dữ liệu (Data Center) hoặc một server riêng ảo (Virtual Private Server – VPS) trên cloud như DigitalOcean, Amazon, GCP,…

Host Operating System (hệ điều hành của server): hệ điều hành đang sử dụng cho server đang sử dụng, có thể là macOS, Windows hoặc Linux.

Docker daemon (còn gọi là Docker Engine): đây là service hoạt động trên server, được dùng để quản lý các thành phần cần thiết để khởi tạo và tương tác với Docker container.

Bins/Libs (các tập tin/thư viện cần thiết): các gói tập tin, thư viện đi kèm của service được thêm vào Docker image.

3.1.4.3 Sự khác nhau giữa máy ảo và Docker Container

Hình 3. 4 So sánh máy ảo và containers

Docker daemon có thể giao tiếp trực tiếp với hệ điều hành của server và phân bổ tài nguyên cho các Docker container đang chạy, đảm bảo mỗi container hoạt động độc lập với các container khác và hệ điều hành của server. Thay vì phải đợi một phút để máy ảo khởi động, người dùng có thể khởi động Docker container chỉ trong vài mili giây và tiết kiệm được rất nhiều dung lượng ổ đĩa và các tài nguyên hệ thống khác do không cần phải sử dụng “guest OS” cồng kềnh cho mỗi ứng dụng. Người dùng sẽ không cần ảo hóa vì Docker chạy trực tiếp trên hệ điều hành của server.

Máy Ảo Docker container

Kích thước (dung lượng) lớn. Kích thước (dung lượng) nhỏ. Hiệu suất hạn chế. Hiệu suất gốc (native).

Mỗi máy ảo sẽ có một hệ điều hành riêng.

Container sẽ sử dụng hệ điều hành của host. Ảo hóa về mặt phần cứng Ảo hóa về mặt hệ điều hành

Thời gian khởi động tính theo phút Thời gian khởi động tính theo mili giây Phân bổ bộ nhớ theo nhu cầu cần thiết Yêu cầu ít dung lượng bộ nhớ hơn

Hoàn toàn bị cô lập và an toàn hơn Cô lập ở mức tiến trình, có thể kém an toàn hơn

Bảng 3. 1 So sánh máy ảo và Doker Containers

Việc sử dụng máy ảo hay Docker container sẽ phụ thuộc vào nhu cầu sử dụng của người dùng. Máy ảo rất phù hợp trong việc cách ly tài nguyên hệ thống và toàn bộ môi trường làm việc. Đây sẽ là lựa chọn tốt hơn để chạy các ứng dụng yêu cầu tất cả tài nguyên và chức năng của hệ điều hành khi bạn cần chạy nhiều ứng dụng trên server hoặc có nhiều hệ điều hành khác nhau để quản lý. Ví dụ: công ty của bạn cung cấp dịch vụ web hosting, bạn có thể sẽ sử dụng máy ảo để phân phối tài nguyên của server công ty cho từng khách hàng.

Mặt khác, triết lý của Docker là cô lập các ứng dụng riêng lẻ, không phải toàn bộ hệ thống. Một ví dụ hoàn hảo về điều này sẽ là chia nhỏ một loạt các dịch vụ ứng dụng web thành các Docker image của riêng chúng và triển khai chúng bằng Docker Container. Docker Container là lựa chọn tốt hơn khi ưu tiên lớn nhất của bạn là tối đa hóa số lượng ứng dụng đang chạy trên một số lượng server tối thiểu.

3.2 Các thành phần trong Docker

3.2.1 Các thành phần

Docker images: là một khuôn mẫu để tạo một container. Thường thì image sẽ base trên 1 image khác với những tùy chỉnh thêm. ví dụ bạn build 1 image dựa trên image ubuntu để chạy Apache web service và ứng dụng của bạn và những tùy chỉnh, cấu hình để ứng dụng của bạn có thể chạy được. Bạn có thể tự build một image riêng cho mình hoặc sử dụng những image được publish từ cộng đồng Docker Hub. Một image sẽ được build dựa trên những chỉ dẫn của Dockerfile.

Docker registries: là kho chứa images. Người dùng có thể tạo ra các images của mình và tải lên đây hoặc tải về các images được chia sẻ.

Docker container: hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker container được tạo ra từ một docker image. Các thao tác với một container: chạy, bật, dừng, di chuyển, và xóa. Dockerfile: Là một tập tin bao gồm các chỉ dẫn để build một image.

Orchestration : là các công cụ, dịch vụ dùng để điều phối và quản lý nhiều containers sao cho chúng làm việc hiệu quả nhất.

3.2.2 Kiến trúc của Docker

Docker sử dụng kiến trúc client-server. Docker client sẽ nói liên lạc với các Docker daemon, các Docker daemon sẽ thực hiện các tác vụ build, run và distributing các Docker container. Cả Docker client và Docker daemon có thể chạy trên cùng 1 máy, hoặc có thể kết nối theo kiểu Docker client điều khiển các docker daemon như hình dưới. Docker client và daemon giao tiếp với nhau thông qua socket hoặc RESTful API.

Hình 3. 5 Kiến trúc của Docker

Docker Daemon: chạy trên các máy host. Người dùng sẽ không tương tác trực tiếp với các daemon, mà thông qua Docker Client.

Docker Client: là giao diện người dùng của Docker, nó cung cấp cho người dùng giao diện dòng lệnh và thực hiện phản hồi với các Docker daemon.

Docker Images: là một template chỉ cho phép đọc, ví dụ một image có thể chứa hệ điều hành Ubuntu và web app. Images được dùng để tạo Docker container. Docker cho phép chúng ta build và cập nhật các image có sẵn một cách cơ bản nhất, hoặc bạn có thể download Docker images của người khác.

Docker container: giữ mọi thứ chúng ta cần để chạy một app. Mỗi container được tạo từ Docker image. Docker container có thể có các trạng thái run, started, stopped, moved và deleted

3.2.3 Ưu điểm hình thức đóng gói thành Container

Ví dụ như trước kia ta không thể dùng chung Port, thì ở đây 2 ứng dụng với 2 container khác nhau. Ta có thể cấu hình Port trùng nhau cho ứng dụng này.

Tiếp theo là về việc quản lí phiên bản. Ta khó có thể cài 2 phiên bản của 1 phần mềm trên cùng 1 máy hypervisor. Tuy nhiên với Container, ta có thể cài mỗi phiên bản trên 1 Container và chạy một cách trơn tru.

Khả năng khởi động nhanh của Docker cũng là một lợi thế rất lớn. Docker sẽ ngốn ít tài nguyên hơn các máy hypervisor.

3.2.4 Quy trình thực thi của một hệ thống sử dụng Docker

Hình 3. 6 Quy trình thực thi của hệ thống sử dụng Docker

Quy trình được thực hiện với 3 bước chính: Build -> Push -> Pull,Run.

Bước 1: Build

Đầu tiên chúng ta sẽ tạo một dockerfile, trong dockerfile này chính là code của chúng ta. Dockerfile này sẽ được Build tại một máy tính đã cài đặt Docker Engine. Sau khi build ta sẽ thu được Container, trong Container này chứa bộ thư viện và ứng dụng của chúng ta.

Bước 2: Push

Sau khi có được Container, chúng ta thực hiện push Container này lên đám mây và lưu trữ ở đó. Việc push này có thể thực hiện qua môi trường mạng Internet.

Bước 3: Pull, Run

Giả sử một máy tính muốn sử dụng Container chúng ta đã push lên đám mây (máy đã cài Docker Engine) thì bắt buộc máy phải thực hiện việc Pull container này về máy. Sau đó thực hiện Run Container này.

3.3 Các lệnh cơ bản thường dùng

#List image/container:

$ docker image/container ls

#Delete image/container:

$ docker image/container rm <tên image/container >

#Delete all image hiện có:

$ docker image rm $(docker images –a –q) #List all container hiện có:

$ docker ps –a

#Stop a container cụ thể:

$ docker stop <tên container>

#Run container từ image và thay đổi tên container:

$ docker run –name <tên container> <tên image>

#Stop all container:

$ docker stop $(docker ps –a –q)

#Delete all container hiện có:

$ docker rm $(docker ps –a –q)

#Show log a container:

$ docker logs <tên container>

#Build một image từ container:

$ docker build -t <tên container>

#Tạo một container chạy ngầm:

#Tải một image trên docker hub:

$ docker pull <tên image>

#Start một container:

$ docker start <tên container>

3.4 Cài đặt, sử dụng docker

3.4.1 Cài đặt Docker

Sau đây là quá trình cài đặt Docker trên Ubuntu 20.4:

Bước 1: Update và Upgrade apt hệ thống $ sudo apt update

$ sudo apt upgrade

Bước 2: Download và cài đặt Docker $ sudo apt install docker.io

Một phần của tài liệu Nghiên cứu, triển khai openstack sử dụng docker (Trang 27)

w