Download as pdf or txt
Download as pdf or txt
You are on page 1of 31

LAB 4

KUBERNETES K8S
NỘI DUNG
có những gì?

Mục tiêu bài Lab Hướng dẫn cài đặt K8S trên

Giới thiệu Kubernetes(K8S) Yêu cầu thực hành


HỌC GÌ VÀ LÀM ĐƯỢC GÌ
hôm nay?

Cài đặt được K8s sử


Kubernetes
dung minikube

Tìm hiểu về K8s


Tạo & thao tác với
K8s dashboard

Yêu cầu thực hành


4

GIỚI THIỆU
C o ntainer O rc h es tration: Ku b ernetes
5
K8s LÀ GÌ ?

• Kubernetes là một mã nguồn mở được dùng để tự động triển khai hệ thống, scaling,
quản lý các container.
• Nó nhóm các container cấu thành lên một ứng dụng thành các đơn vị logic để dễ dàng
quản lý và vận hành. Được phát triển bởi Google.
6
K8s architecture
7
Các thành phần
- Một K8s cluster sẽ gồm tập các nodes chạy các ứng dung ảo hóa bang container. Trên mỗi node sẽ
cần chạy một "kubelet", đây là chương trình để chạy k8s. Cần một node để làm "chủ" cluster, trên
đó sẽ cài API server, scheduler ... Các máy còn lại sẽ chạy kubelet để sinh ra các container.
- Etcd: key-value stores chứa thông tin định danh, liên lạc giữa các nodes.
- API Server: server cung cấp Kubernetes API. Nó có nhiệm vụ đặt Pod vào Node, đồng bộ hoá
thông tin của Pod bằng REST API tiếp nhận cài đặt của pod/service/replicationController.
- Controller Manager Service: “kube-controller manager”, quản lý tất cả các bộ điều khiển xử lý các
tác vụ thông thường trong cluster. Chúng bao gồm Node Controller, Replication Controller,
Endpoints Controller, and Service Account and Token Controllers.
- Scheduler Service: định thời, phân bố tài nguyên còn khả dung đến các ứng dung container
- Dashboard (optional)
8

T HAM KHẢO
Đ ể h i ểu th êm v ề c á c k h ái n i ệm
9
Pods

• Pod là 1 nhóm (1 trở lên) các container thực hiện một mục đích nào đó, như là chạy ứng
dụng container nào đó. Các container trong pods này chia sẻ không gian lưu trữ, địa chỉ
IP với nhau. Pod thì được tạo ra hoặc xóa tùy thuộc vào yêu cầu/định nghĩa có đơn vị
dịch vụ cấp cao hơn
10
Services
• Pods có life-cycle ngắn, do vậy nó
không đảm bảo về địa chỉ ip luôn cố
định. Điều này khiến cho việc giao
tiếp giữa các microservice trở nên
khó khăn. Do đó, K8s giới thiệu về
một dịch vụ, nó là một lớp nằm trên
một số nhóm Pod. Nó được được
gắn địa chỉ IP tĩnh và có thể trỏ tên
miền vào dịch vụ này. Tại đây chúng
ta có thể thực hiện cân bằng tải. Mỗi
service sẽ được gán 1 domain do
người dùng lựa chọn, khi ứng dụng
cần kết nối đến service, ta chỉ cần
dùng domain để truy cập.
11
Persistent Volumes & Namespaces

- Persistent Volumes
- Do ứng dụng container chỉ là
runtime, khi restart, tắt thì mọi
data đều bị xóa → cần một không
gian lưu trữ cứng
- PV: Khái niệm trừu tượng, giúp
người dùng định nghĩa không gian
lưu trữ cứng cho service.
Kubernetes hỗ trợ nhiều kiểu
volumes, như là: NFS, Ceph,
GlusterFS, local directory, …
- Namespaces:
- Nhóm các đối tượng, tài nguyên
trong K8s thành một vùng truy
cập riêng biệt tiện cho việc triển
khai, vận hành và quản lý ứng
dụng. Vd: DEV, staging, Prod
environment
12
Ingress rules, network policies, configMaps & secrets
• Network policies: Định nghĩa các quy tắc truy cập mạng giữa các Pod
bên trong Cluster.
• Network: Cho phép tùy biến Network control plane của toàn K8s
cluster (default: ectd, custom: flannel, weavenet, …)
• ConfigMaps and Secrets:
• ConfigMap là nơi định nghĩa các biến môi trường được sử dụng
trong các service.
• Secrets: cũng tương tự như ConfigMap, secrets sẽ lưu trữ các cấu
hình chứa thông tin nhạy cảm như password, API key, …
13

D E M O T R I Ể N KHAI K8 s s ử d ụ ng
M i ni Kube
14

Cài đặt: https://minikube.sigs.k8s.io/docs/start/


Minikube có thể sử dụng các cơ sở hạ tầng ảo hóa cấp cao hơn gồm VM hoặc container
• Máy vật lý Window (Powershell):
• Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
• minikube start --driver=hyperv
• Máy vậy lý Linux:
• minikube start --driver=kvm2
• Máy vậy lý MacOS:
• minikube start --driver=hyperkit
15

$ minikube kubectl -- get po -A T ư ơ ng tá c v ớ i


K8 s c l u s ter
• Gõ lệnh:
$ minikube kubectl -- get po -A
Để xem thông tin các services
của K8s cluster
16
T ạ o k 8 s d a s h board
UI
• Gõ lệnh:
$ minikube dashboard
Tr i ể n k h a i d ị ch v ụ trên k 8 s c l u s t e r s ử d ụ n g n o d e Po r t
17

• kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4


• kubectl expose deployment hello-minikube --type=NodePort --port=8080
18
Tr u y c ậ p d ị c h v ụ k i ểu n o d ePor t đ ã tr i ển k h ai trên k 8 s
• $ kubectl get services hello-minikube
c l u ster
• $ minikube service hello-minikube

• Tùy chỉnh forwarding port cho service:


$ kubectl port-forward service/hello-minikube 7080:8080
Tr i ển k h a i d ị ch v ụ trên k 8 s c l us ter k i ểu L o a dBalancer
19

• kubectl create deployment balanced --image=k8s.gcr.io/echoserver:1.4


• kubectl expose deployment balanced --type=LoadBalancer --port=8000
20
Tr u y c ậ p d ị c h v ụ k i ểu L o a dBalancer tr i ển k h ai trên k 8 s
Tạo tunnel/proxy tới loadbalancer
• minikube tunnel

• Tìm kiếm IP để đi tới dịch vụ


$ kubectl get services balanced

• Truy cập bang <EXTERNAL-IP>:8000


21
Đ ẩ y ( p u s h) i m a g e l ên k 8 s c l u s ter
• Kích hoạt dịch vụ registry (image) của k8s cluster
$ minikube addons enable registry
• Build container image với cú pháp sau:
$ docker build --tag $(minikube ip):5000/<container_image_name> .
• Push container image lên K8S cluster với cú pháp sau:
$ docker push $(minikube ip):5000/<container_image_name>
22
Q u ản l ý M i nikube K8 s c l u ster
Tạm dung cluster (ko ảnh hưởng các dịch vụ đã tạo)
$ minikube pause
Dừng cluster:
$ minikube stop
Them bộ nhớ RAM cho cluster node (phải restart) :
$ minikube config set memory 16384
Xem danh sách các dịch vụ tiện ích có thể cài thêm:
$ minikube addons list
Xóa cluster node:
$ minikube delete --all
23

D ù n g m i n ikube đ ể tr i ển
k h ai c l u s ter n h iều n o d es
24 Tr i ển k h a i l ạ i v ớ i
$ minikube start --nodes 2 -p multinode-demo c ấ u h ì nh n h iều
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
n o d es
multinode-demo Ready master 5m35s v1.19.2
multinode-demo-m02 Ready <none> 4m51s v1.19.2
• Tạo lại cluster với nhiều hơn
1 node
$ minikube status -p multinode-demo
25 C á ch tr i ển k h a i d ị ch v ụ trên c l u s ter n h iều n o d e
❖ Áp dụng kịch bản hello-world deployment:
• kubectl apply -f hello-deployment.yaml
deployment.apps/hello created
• kubectl rollout status deployment/hello
deployment "hello" successfully rolled out
❖ Áp dụng kịch bản hello-world services:
• kubectl apply -f hello-svc.yaml
• kubectl get pods -o wide
26 L i ệt k ê d a n h s á c h c á c d ị c h v ụ đ a n g c h ạ y trên c l u s ter
$ minikube service list -p multinode-demo

Dùng lệnh sau để kiểm tra request được xử lý bởi podId nào:
$ curl http://192.168.64.3:31000
Dừng và xóa cluster
$ minikube stop -p multinode-demo
$ minikube delete -p multinode-demo
LAB 4: KUBERNETES
YÊU CẦU THỰC HÀNH

Yêu cầu Hướng dẫn Báo cáo


YÊU CẦU
nội dung thực hành
Cho đoạn HTML sau, xây dựng container image thao các bước dành cho K8s dựa trên
ảnh gốc (https://hub.docker.com/_/nginx) có chưa file index.html với nội dung sau:
<!DOCTYPE html>
<html>
<head>
<title>Thực hành Hệ tính toán phân bố - 4</title> </head>
<body>
<center><img src="http://portal.uit.edu.vn/Styles/profi/images/logo186x150.png"/ ></center>
<center><h1>MSSV: 123456</h1></center>
<center><h2> Họ và tên: Nguyễn Văn An</h2></center>
</body>
</html>
YÊU CẦU nội dung thực hành
1. Triển khai K8S cluster trên máy tính cá nhân sử dung minikube (4đ)
2. Triển khai Dashboard (1đ)
3. Thực hiện việc build và đẩy container image lên K8s cluster với nội dung được mô tả trong
slide trước (2đ)
4. Triển khai dịch vụ k8s kiểu nodePort cho container image tạo ở Bước 3 với replica = 2 (2đ)
5. Triển khai dịch vụ k8s kiểu loadBalance cho container image tạo ở Bước 3(1đ)
Lưu ý: các dịch vụ triển khai phải truy cập được bằng IP của host (cách cấu hình tùy chọn)
Sinh viên nộp báo cáo dưới dạng file word hoặc pdf với tên file:
<MSSV>_NguyenVanA_LAB4.{docx/pdf}
Báo cáo cần thể hiện các bước cài đặt cấu hình step-by-step và các bước truy cập dịch vụ
minh chứng bằng hình chụp màn hình.
BÁO CÁO
cần gì?
Quy trình thực hiện

Chụp hình lại từng bước thực hiện


Quy trình

Lệnh cấu hình


Nội dung file Dockerfile, các file
deployment.yaml nếu có
Hình chụp Lệnh
kết quả cấu hình
Hình chụp kết quả
Hình chụp Browser kết quả truy cập
31

Now It's your turn!

You might also like