Thực hành chương 1 hệ phân tán | Đại học Bách khoa Hà Nội

Thực hành chương 1 hệ phân tán | Đại học Bách khoa Hà Nội được biên soạn dưới dạng file PDF cho các bạn sinh viên tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị thật tốt cho kì thi sắp tới. Mời bạn đọc đón xem.

BÀI TẬP THỰC HÀNH
MÔN HỌC: HỆ PHÂN TÁN
CHƯƠNG 1: TỔNG QUAN VÀ KIẾN TRÚC HỆ PHÂN TÁN
H TÊN SV: TRƯƠNG VĂN HIN MSSV: 20194276
LP: 132666 MÃ HC PHN: IT4611
1. Web server apache2
Câu hi 1: Đưng dn đn file html cha ni dung mc đnh ca trang web l
/var/www/html/index.html”
Câu hi 2: Cng mc đnh ca dch v www l cng 80
Câu hi 3: Quyn mang s 755 ngha l
7 = 4 + 2 + 1: Ngưi sở hữu thư mc có quyn đọc thư mc (read), chỉnh sửa thư
mc(write) v liệt kê các thư mc bên trong (execute).
5 = 4 + 0 + 1: Những ngưi cùng nhóm chỉ quyn đọc thư mc (read), liệt kê
các thư mc v file bên trong (execute).
5 = 4 + 0 + 1: Những ngưi còn lại chỉ quyn đọc thư mc (read), liệt các
thư mc v file bên trong (execute).
Câu hi 4: Ni dung trang web sau khi g 2 đa ch
Giải thích: Khi ta nhập vo 2 đa chỉ l example.com v test.com, trình duyệt
ngưi dùng sẽ gửi yêu cầu tải trang web đó lên 2 server có tên l test.com v
example.com. Sau đó, Apache sẽ truy cập vo đưng dn thư mc
/var/www/test.com/public_html hoc example.com/public_html v lấy ra tất cả
các file cấu thnh lên trang l 2 file index.html, chạy v hiển th lên trình duyệt
ni dung ca ca nó l ni dung m ta nhìn thấy.
Câu hi 5: Khi truy cp t các máy tính khác trong cùng mng LAN vo 2 trang
web đó thì ni dung hin th ging như trên.
2. Interface trong Java
Câu hi 6:
Câu hi 7:
- Vai trò ca phương thc run(): Ly mt chui s t client gi lên cách nhau bng
khong trng, chuyn chui thành mảng integer sau đó sắp xp theo th t tăng
dn và gi li v cho client. Nó s chạy đon code thông qua mt lung kt ni
client-server.
- Nó đưc gi khi: Có yêu cu gi lên t phía client có s hiu cng trùng vi s
hiu cng ca server. Phương thc run() s được gi t đng khi phương thc
start() đưc gi đ to mt lung mi.
3. Kin trc Microservices
Câu hi 1:
- Lệnh “.mvnwclean package -Dmaven.test.skip=true” gip dn dp các
project maven v xây dng các dch v cho các tp jar l các dch v đưc
xây dng trong Java maven.
- Lệnh “docker build --tag=microservice-kubernetes-demo-apache apache
xây dng nh docker bng cách s dng thit k t Docker hub l mt
microservice-kubernetes-demo-apache. Apache l thư mc cha Dockerfile
cần để xây dng nh docker docker tag microservice-kubernetes-demo-
apache your_docker_account/microservice-kubernetes-demo-apache:latest
gip gn liên kt tag nh mi vi ti khon. Bng cách ny, ta đang tạo mt
tham chiu đn hình ảnh để có th deploy chng v sau.
- Lệnh “docker push your_docker_account/microservice-kubernetes-demo-
apache” được s dng để deploy các nh mi lên Docker hub.
- Các lnh khác được dùng để clone mt git reposity hoc đăng nhập vo mt
Docker account.
Câu hi 2: Repository cha nh mi, l nh microservice-kubernetes-demo-
apache vi tag mi nht.
Câu hi 3: Trng thái ca các pods va mi được to ny l Container
Creating, nhưng sau đó chng chuyn sang trng thái Running.
Họ tên: Nguyễn Tôn
Lớp: INPG 15
MSSV: 20158412
BÀI THC HÀNH : H PHÂN TÁN
Chương 1
Câu 1: Đưng dẫn đến file html cha ni dung mc đnh ca trang web apache là:
var/www/html/index.html”
Câu 2: Cổng mặc đinh của dịch vụ www là cổng 80
Câu 3:
Quyền mang số 755 nghĩa là:
7: Người sở hữu thư mục có quyền đọc thư mục (read), chỉnh sửa thư mục (write),
liệt kê các thư mục và file bên trong (execute);
5: Những người cùng nhóm chỉ có quyền đọc thư mục (read), liệt kê các thư mục
và file bên trong (execute)
5: Những người khác không ở trong nhóm với người sở hữu chỉ có quyền đọc thư
mục (read), liệt kê các thư mục và file bên trong (execute)
Câu 4:
- Sau khi gõ địa ch trên, trên trang trình duyt s hin th :
“Welcome to Example.com !
Success! The example.com virtual host is working ! “
- Khi tạo 2 file “example.com.config” và “test.com.config” với 2 đoạn code trên,
thì nó đu to ra 1 file config trên server (Apache2) cùng truy cập vào file “test.com”
trong thư mc test.com . Đưng dẫn trên thay đổi domain ca cng www trên máy t
localhost/test.com thành example.com và test.com . T đó thấy được nội dung như trên
Câu 5:
Khi truy cp thì ni dung hin th giống như trên .
Câu 6:
- V bên client:
public static void main(String[] args) throws IOException,
InterruptedException {
Socket socket = null;
try {
socket = new Socket(SERVER_IP, SERVER_PORT); // Connect to
server
System.out.println("Connected: " + socket);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
for (int i = '0'; i <= '9'; i++) {
os.write(i); // Send each number to the server
int ch = is.read(); // Waiting for results from server
System.out.print((char) ch + " "); // Display the results received from
the server
Thread.sleep(200);
}
} catch (IOException ie) {
System.out.println("Can't connect to server");
} finally {
if (socket != null) {
socket.close();
}
}
}
- V bên Server:
while (true) {
try {
Socket socket = serverSocket.accept();
System.out.println("Client accepted: " + socket);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
int ch = 0;
while (true) {
ch = is.read(); // nhn s t client
if (ch == -1) {
break;
}
os.write(ch); // gi kết qu v client
}
socket.close();
} catch (IOException e) {
System.err.println(" Connection Error: " + e);
}
}
Câu 7:
Phương thức run trong ví d trên thc hin vic sp xếp dãy s t client gi lên
Phương thức đó đưc gi khi phương thức start được chy.
H󰈼 PHÂN TÁN
1
BÀI THC HÀNH
HC PHN: H PHÂN TÁN
 1: TNG QUAN VÀ KIN TRÚC HPT
1. Web server apache2
1.1. Ni dung
Trên lc h t rng tt c các
dch v mu s dng lý thuyt ca H Phân Tán. bài thc hành này các bn s
th trin khai dch v WWW. C th, các bn s t 1 web server.
1.2. Yêu cu
1.2.1. Lý thuyt
Làm ch Unix OS
Kin thn ca Mng máy tính
1.2.2. Thit b
PC hoc VM
1.2.3. Phn mm
1.3. c thc hành
1.3.1. t web server apache2
c ht chúng ta pht mt phn mm máy ch web, ngày nay thì apache
là thông dng nht. Hãy s dng lnh sau:
sudo apt install apache2
Th truy cp vào webserver này ba ch IP ca mày này t mt máy
khác (2 máy cn trong cùng 1 mng LAN). Các bn s thy hin lên trang web mc
nh ca apache (Có ch bt
thành công webserver.
Câu hi 1: ng dn file html cha ni dung mnh ca trang web các bn
va xem là gì?
Câu hi 2: Cng mnh ca dch v www là gì?
1.3.2. t virtual hosts cho apache2
Máy ch apache2 có kh a nhiu máy o vi ch a ch IP. Bây gi chúng
ta hãy tu tiên, tc cha ni

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
H󰈼 PHÂN TÁN
2
i quy bng lnh sau:
sudo chmod -R 755 /var/www
Câu hi 3: Hãy gii thích quyn mang s 755 là gì?
Vit nnh sa ni dung c
mc public_html mà bn va t
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
(Nh i thành test.com vc test.com).
File cu hình mnh ca các máy o ca apache là:
/etc/apache2/sites-available/000-default.conf
Bây gi hãy to 2 file sau:
/etc/apache2/sites-available/example.com.conf
/etc/apache2/sites-available/test.com.conf
i dung ca file example.com.conf
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
i dung ca file test.com.conf :
<VirtualHost *:80>
ServerAdmin admin@test.com
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
H󰈼 PHÂN TÁN
3
Chy 2 l kích hot 2 file trên:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
Khng li dch v apache:
sudo service apache2 restart
M file /etc/hosts và thêm nhng dòng sau:
127.0.0.1 example.com
127.0.0.1 test.com
Bây gi hãy m trình duyt web và th nghia ch example.comtest.com
Câu hi 4: Bn quan sát thy na ch trên? Gii thích.
Câu hi 5: Th truy cp t các máy tính khác trong cùng mng LAN vào 2 trang web

2. Interface trong Java
2.1. Ni dung
Trên lc v Tính m trong H  m bo Tính
m, chúng ta cn phi xây dng các interface gia các thành phn ca h thng.
Trong phn thc hành này, chúng ta s xây dng mt hình client-n,
 gi mt chui s lên cho server. Server s sp xp nhng s nhn
c vi vic s dc sort c khai báo trong interface. Chúng ta s
thy nhiu các tric sort i phát biu
ca tính m là cho phép nhièu nhà sn xut th tham gia vào xây dng các thành
phn theo các cách khác nhau).
2.2. Yêu cu
2.2.1. Lý thuyt
Lp trình Java
2.2.2. Thit b
PC
2.2.3. Phn mm
Eclipse IDE
JDK/JRE
2.3. c thc hành
H󰈼 PHÂN TÁN
4
2.3.1. t các công c cn thit
- Ti v t IDE Eclipse: https://www.eclipse.org/downloads/packages/
- Ti JDK/JRE:
https://www.oracle.com/technetwork/java/javase/downloads/index.html
2.3.2. Xây d
u tiên, m Eclipse và to mt java project mi vi vic chn File
New
Java
project. Hãy t 
Sau khi to xong, bn s nhìn thy mc tên là src cha
mã ngun.
Tng cách n phi chuc src
chn New
Package
t tên 2 
com.hust.soict.your_name.client_server
com.hust.soict.your_name.helper
ng tên bn)
Trong package client_server, to 2 lt tên là Client Server.
Bây gi chúng ta s l
2.3.2.1. Client
Hãy m file Client.java ra và bu lp trình.
y tiên chúng ta phi import các lp ca b n Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
c main, chúng ta s khi to mt thc th socket bng cách
dùng lp Socket:
Socket socket = new Socket("127.0.0.1", 9898);
Bn th thay th a ch IP s hiu cn mua
ch IP và cng mà server s lng nghe các yêu cu mà Client s gi lên.
Bây gi chúng ta s khi to 2 thc th ca 2 lp BufferedReader PrintWriter 
gi và nhn d liu:
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Khi to 1 thc th cho lp Scanner:
System.out.println(in.readLine());
Scanner scanner = new Scanner(System.in);
H󰈼 PHÂN TÁN
5
Câu hi 6: Hãy t vit m thc hin 1 vòng lp while sao cho s
nhn các s i dùng gi v i dùng gõ ký t
rng ri n enter. Gi ý: hãy dùng l nhn xâu ký t i dùng gõ vào:
String message = scanner.nextLine();
Cusocketscanner li:
socket.close();
scanner.close();
2.3.2.2. Server
Bây gi hãy m chnh sa file Server.java. Mng m
lu nhn các s i dùng gi lên và sp xp nó theo th t n (hoc
nh dn) và gi tr li cho Client.
u tiên hãy import mt s n Java cn thit:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import com.hust.soict.haianh.helper.*;
import java.util.Arrays;
c main, hãy vi
System.out.println("The Sorter Server is running!");
int clientNumber = 0;
try (ServerSocket listener = new ServerSocket(9898)) {
while (true) {
new Sorter(listener.accept(), clientNumber++).start();
}
}
Chú ý là s hiu cng ph hiu cng mà client gi lên.
c main, hãy to 1 lp Sorter t lung.
nó phi k tha t lp Thread:
private static class Sorter extends Thread {
private Socket socket;
private int clientNumber;
public Sorter(Socket socket, int clientNumber) {
this.socket = socket;
this.clientNumber = clientNumber;
System.out.println("New client #" + clientNumber + " connected at " + socket);
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// Send a welcome message to the client.
H󰈼 PHÂN TÁN
6
out.println("Hello, you are client #" + clientNumber);
// Get messages from the client, line by line; Each line has several numbers separated by a space
character
while (true) {
String input = in.readLine();
if (input == null || input.isEmpty()) {
break;
}
//Put it in a string array
String[] nums = input.split(" ");
//Convert this string array to an int array
int[] intarr = new int[ nums.length ];
int i = 0;
for ( String textValue : nums ) {
intarr[i] = Integer.parseInt( textValue );
i++;
}
//Sort the numbers in this int array
new SelectionSort().sort(intarr);
//Convert the int array to String
String strArray[] = Arrays.stream(intarr)
.mapToObj(String::valueOf)
.toArray(String[]::new);
//Send the result to Client
out.println(Arrays.toString(strArray));
}
} catch (IOException e) {
System.out.println("Error handling client #" + clientNumber);
} finally {
try { socket.close(); } catch (IOException e) {}
System.out.println("Connection with client # " + clientNumber + " closed");
}
}
}
Câu hi 7: Vai trò cc run là gì? c gi?
 n th thc gi thuc lp
SelectionSort. Bây gi chúng ta s xây dng mt giao din (interface) khai báo
c sort bên trong. Lp SelectionSort mt trong nhng lp trin khai
giao din này.
2.3.2.3. Interface và các cách trin khai khác nhau
Bây gi hãy n phi chut vào package com.hust.soict.your_name.helper , chn New
Interface
To mt interface mt tên nó là NumberSorter.
 c sort:
public interface NumberSorter {
void sort(int arr[]);
}
Vo mt lt tên là SelectionSort.
H󰈼 PHÂN TÁN
7
Thc t là, lp SelectionSort s trin khai giao din NumberSorter 
th c sort da trên thut toán selection sort. M file SelectionSort.java và
vin code sau:
public class SelectionSort implements NumberSorter{
public void sort(int arr[]) {
int n = arr.length;
// One by one move boundary of unsorted subarray
for (int i = 0; i < n-1; i++)
{
// Find the minimum element in unsorted array
int min_idx = i;
for (int j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element with the first
// element
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
}
2.3.2.4. Ch
Bây gi hãy chy th ng quên phi chc khi chy
client.
2.3.2.5. Trin khai các gii thut sp xp khác
Bây gi hãy t mình trin khai các gii thut sp xp khác. Bc
trên (to lp mn khai li interface NumberSorter).
Th trin khai vi 3 gii thut sau (có th tham kho mã ngun trên Internet):
Bubble sort
Insertion sort
Shell sort
3. Kin trúc Microservices
3.1. Ni dung
󰉉 bài th󰊁c hành này chúng ta s󰉥 xây d󰊁ng m󰉳t ki󰉦󰉴󰉘n
b󰉟ng cách s󰉿 d󰉺ng Kubernetes, m󰉳t n󰉧n t󰉘ng m󰉷 󰉨 qu󰉘n lý nh󰊀ng d󰉬ch v󰉺 d󰉗ng
container. Chúng ta s󰉥 s󰉿 d󰉺󰉨 t󰉗o ra các containers.
H󰈼 PHÂN TÁN
8
3.2. Yêu cu
3.2.1. Lý thuyt
Microservices
Kube fundamentals: Pods, Services, Deployments et al.
Docker
3.2.2. Phn cng
Laptop/PC on Windows
3.2.3. Phn mm
VirtualBox
Docker
The kubernetes command line tool kubectl
The minikube binary
Git bash
3.3. c thc hành
t
- 󰉢t VirtualBox: https://www.virtualbox.org/wiki/Downloads
- 󰉨 󰉢t kubectl trên Windows, chúng ta s󰉥 c󰉚n ph󰉘󰉢t Chocolatey 󰉼󰉵c:
https://chocolatey.org/docs/installation#installing-chocolatey
- Bây gi󰉶 󰉢t công c󰉺 kubernetes v󰉵i l󰉪nh sau:
>choco install kubernetes-cli
Ki󰉨m tra l󰉗󰉼󰉹󰉼󰉟ng l󰉪nh sau:
>kubectl version
- Bây gi󰉶 hãy i minikube-windows-amd64.exe:
https://github.com/kubernetes/minikube/releases
󰉢t tên l󰉗i cho file v󰉾a t󰉘i minikube.exe và thêm vào Path. (N󰉦󰉼
bi󰉦t thêm bi󰉦  󰉼󰉶ng vào Path th󰉦    󰉼󰉵ng d󰉜n 󰉷 link sau:
https://www.java.com/en/download/help/path.xml)
- 󰉯i v󰉵i b󰉗n nào dùng Windows thì s󰉥 b󰉬 v󰉙󰉧 khi cài song song Docker
VirtualBox t󰉗i vì Docker trên Windows tc󰉚n Hyper-V, n VirtualBox thì l󰉗i
không ho󰉗 󰉳 󰉼󰉹c v󰉵i Hyper-V. v󰉝y, gi󰉘      󰉿 d󰉺ng
  󰉼󰉶ng thì hãy s󰉿 d󰉺ng Docker Toolbox:
https://docs.docker.com/toolbox/overview/
S dng ki xây dng ng dng web
Bây gi󰉶 chúng ta s󰉥 phát tri󰉨n m󰉳t 󰉽ng d󰉺  󰉴 󰉘n b󰉟ng vi󰉪c s󰉿 d󰉺ng
ki󰉦n trúc microservices. C󰉺 th󰉨 chúng ta s󰉥 xây d󰊁ng 4 microservices sau:
1. D󰉬ch v󰉺 Apache HTTP: Apache HTTP 󰉼󰉹c s󰉿 d󰉺󰉨 cung 󰉽ng d󰉬ch v󰉺
trang web 󰉷 c󰉱ng 8080. s󰉥 làm nhi󰉪m v󰉺 chuy󰉨n ti󰉦p các HTTP
󰉦n cho 3 microservices khác. do s󰉿 d󰉺ng d󰉬ch v󰉺 này
H󰈼 PHÂN TÁN
9
th󰉝t s󰊁 không c󰉚n thi󰉦t n󰉦u chúng ta xây d󰊁ng cho m󰉲i microservices m󰉳t
c󰉱ng riêng trên host c󰉻a minikube, thay th󰉦 chúng ta s󰉿 d󰉺ng chung 1
󰉨m vào cho c󰉘 3 d󰉬ch v󰉺 (xem hình 󰉼󰉵󰉼󰉹c c󰉙u hình
󰉼󰉳t reversy proxy cho h󰉪 th󰉯󰉴ch󰉦 cân b󰉟ng t󰉘i thì s󰉥 do
󰉘m nhi󰉪m.
2. D󰉬ch v󰉺 Order: D󰉬ch v󰉺 󰉨 x󰉿 󰉴󰉢t hàng c󰉻󰉼󰉶i dùng. D󰉬ch
v󰉺 này k󰉦t n󰉯i v󰉵i d󰉬ch v󰉺 󰉨 l󰉙y thông tin.
3. D󰉬ch v󰉺 Customer: d󰉬ch v󰉺 này có nhi󰉪m v󰉺 qu󰉘n d󰊀 li󰉪u khách hàng.
4. D󰉬ch v󰉺 Catalog: D󰉬ch v󰉺 này qu󰉘n lý các danh m󰉺c hànga.
Mã ngu󰉰n có th󰉨 xem 󰉷 link sau: https://github.com/anhth318/microservices-
demo
S󰉿 d󰉺󰉼󰉺c mà b󰉗n mu󰉯󰉢t 󰉼󰉺c t󰉘i v󰉧:
>git clone https://github.com/anhth318/microservices-demo.git
󰉼󰉺c microservices-demo, ch󰉗y l󰉪nh sau:
./mvnw clean package -Dmaven.test.skip=true
ho󰉢c n󰉦u dùng Windows thì ch󰉗y l󰉪nh:
mvnw.cmd clean package -Dmaven.test.skip=true
Nh󰊀ng l󰉪󰉨 build/re-build 3 d󰉬ch v󰉺 trên.
󰉗n c󰉚n ph󰉘i lên t󰉗o tài kho󰉘n trên Docker Hub: https://hub.docker.com/
Ch󰉗y docker toolbox 󰉷 máy c󰉻a b󰉗n b󰉟ng cách click 󰉳t vào bi󰉨󰉼󰉹ng
H󰈼 PHÂN TÁN
10
Docker Quickstart Terminal.
Bây gi󰉶, b󰉗󰉼󰉬ch v󰉺 󰉷 trên vào d󰉗ng 󰉘nh (images) c󰉻
b󰉗n s󰉥 t󰉘i lên máy ch󰉻 󰉼󰉼󰉵c tiên, b󰉗n c󰉚󰉝p vào
Docker Hub 󰉷 ng l󰉪nh b󰉟ng l󰉪nh sau:
>docker login
l󰉗i username và m󰉝t kh󰉛u tài kho󰉘n c󰉻a b󰉗󰉗o trên DockerHub.
Bây gi󰉶 󰉼󰉺c b󰉗n v󰉾a t󰉘i v󰉧 󰉷 󰉨 build và t󰉘i docker image c󰉻a
t󰉾ng d󰉬ch v󰉺 lên DockerHub:
󰉯i v󰉵i d󰉬ch v󰉺 apache:
>docker build --tag=microservice-kubernetes-demo-apache apache
>docker tag microservice-kubernetes-demo-apache
your_docker_account/microservice-kubernetes-demo-apache:latest
>docker push your_docker_account/microservice-kubernetes-demo-
apache
Câu h󰉮i 1: Hãy th󰊁c hi󰉪n gõ nh󰊀ng l󰉪󰉼󰉴󰊁 󰉼󰉵i 3 d󰉬ch v󰉺 còn l󰉗i.
Câu h󰉮i 2: 󰉝p vào tài kho󰉘n c󰉻a b󰉗n. B󰉗n
th󰉙y nh󰊀ng gì m󰉵i xu󰉙t hi󰉪n trên docker hub repository c󰉻a b󰉗n?
Minikube m󰉳t ng c󰉺 󰉨 tri󰉨n khai Kubernetes m󰉳󰉴󰉘n. s󰉥 t󰉗o
m󰉳t máy 󰉘o và tri󰉨n khai m󰉳󰉴󰉘n có ch󰉽a m󰉳t nút th󰊁c thi duy nh󰉙t.
Minikube th󰉨 ch󰉗y trên nhi󰉧u n󰉧n t󰉘ng h󰉪 󰉧u hành bao g󰉰m Linux, MacOS,
Windows.
Bây gi󰉶, y s󰉿 d󰉺  󰉨 t󰉗o m󰉳t cluster bao g󰉰m 1 nút th󰊁c thi
Kubernetes (máy 󰉘o) duy nh󰉙t, nó s󰉥 ch󰉗y các 󰉽ng d󰉺ng/d󰉬ch v󰉺 󰉼󰉵i d󰉗ng các
󰉧u khi󰉨n b󰉷i Kubernetes master.
>minikube start
B󰉗n tri󰉨n khai các d󰉬ch v󰉺 b󰉟ng cách s󰉿 d󰉺ng các 󰉘nh docker mà b󰉗󰉘i nó lên
DockerHub. B󰉗n hãy m󰉷 file microservices.yaml và thay th󰉦 t󰉙t c󰉘 nh󰊀ng ch󰉲 nào
xu󰉙t hi󰉪n tên tài kho󰉘n docker hub là anhth b󰉟ng tên tài kho󰉘n c󰉻a b󰉗n, c󰉺 th󰉨
nh󰊀ng dòng b󰉞󰉚u b󰉟ng t󰉾 image󰉼
- image: docker.io/anhth/microservice-kubernetes-demo-apache:latest
Ti󰉦󰉗y l󰉪󰉨 tri󰉨n khai các 󰉘
H󰈼 PHÂN TÁN
11
>kubectl apply -f microservices.yaml
Câu l󰉪nh trên t󰉗o ra các Pods. M󰉳t Pods th󰉨 ch󰉽a m󰉳t hay nhi󰉧u Docker
Containers. Trong d󰉺 y m󰉲i Pod ch󰉫 ch󰉽a m󰉳t Docker container. Các d󰉬ch v󰉺
󰉼󰉹c t󰉗o. Các d󰉬ch v󰉺 duy nh󰉙t m󰉳󰉬a ch󰉫 IP và m󰉳t b󰉘n ghi DNS. Các
d󰉬ch v󰉺 th󰉨 s󰉿 d󰉺󰉨 cân b󰉟ng t󰉘i.
S󰉿 d󰉺ng l󰉪󰉨 cho hi󰉪n t󰉙t c󰉘 các thông tin c󰉻a Kubernetes master c󰉻a b󰉗n:
>kubectl get all
Câu h󰉮i 3: Tr󰉗ng thái (status) c󰉻a các pods v󰉾a m󰉵i t󰉗󰉼󰉹c là gì? Bây gi󰉶, hãy
ch󰉶 vài phút và gõ l󰉗i l󰉪󰉗ng thái m󰉵i c󰉻a các pods gi󰉶 󰉨n thành
gì?
󰉨 xem chi ti󰉦󰉴󰉪nh kubectl describe services. L󰉪nh nãy
󰉗󰉼󰉹c cho các pods (kubectl describe pods) và các deployments
(kubectl describe deployments).
B󰉗󰉨 xem logs c󰉻a m󰉳t pod (thay th󰉦 b󰉟ng ID c󰉻a pod c󰉻a b󰉗n):
>kubectl logs catalog-269679894-60dr0
B󰉗n th󰉝m chí có th󰉨 m󰉷 1 shell c󰉻a pod c󰉻a b󰉗n:
>kubectl exec catalog-269679894-60dr0 -it /bin/sh
Hãy ch󰉶 󰉦n khi tr󰉗ng thái c󰉻a t󰉙t c󰉘 các pods c󰉻a b󰉗n chuy󰉨n thành "Running",
󰉗󰉡󰉨 ch󰉗y 󰉽ng d󰉺ng c󰉻a mình. Hãy gõ l󰉪nh sau:
>minikube service apache
V󰉵i l󰉪nh trên thì b󰉗n có th󰉨 m󰉷 󰉼󰉹c trang web thông qua Apache httpd server 󰉷
trên trình duy󰉪t web c󰉻a b󰉗n.
Bây gi󰉶 hãy ch󰉗y 󰉽ng d󰉺ng.
󰈫n o "Customer", b󰉗n s󰉥 th󰉙y t󰉙t c󰉘 các tên c󰉻󰉙n vào "Add
customer", b󰉗n s󰉥 t󰉗󰉼󰉹c khách hàng m󰉵i.
Tr󰉷 v󰉧 trang ch󰉻 󰉼󰉴󰊁 v󰉵i Catalog.
Tr󰉷 v󰉧 trang ch󰉻 Home, 󰉙n vào Order, và hãy th󰉿 thêm vào vài yêu c󰉚u mua hàng.
Sau khi k󰉦󰉾ng quên xóa toàn b󰉳 các d󰉬ch v󰉺 và các deployments:
>kubectl delete service apache catalog customer order
H󰈼 PHÂN TÁN
12
>kubectl delete deployments apache catalog customer order
và t󰉞t cluster:
>minikube stop
| 1/21

Preview text:

Success! The example.com virtual host is working!