Nam Hoang

Front End / Fullstack Developer / DevOps / Scrum Master who love to build a great product

“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” - Antoine de Saint-Exupéry

May 10, 2019
How to run minikube on AWS EC2

minikube logo

Nếu như bạn đang học Kubernetes và cố gắng chạy Minikube trên EC2 Instance, bạn chắc chắn giống mình. Mình không thực sự thích việc cài mọi thứ trên máy tính cá nhân và dùng nó chỉ để cho học tập hay trong 1 thời gian ngắn. EC2 là 1 lựa chọn hợp lý. Nhưng mình đã rất khó khăn để chạy được Minikube trên AWS EC2 cho lần đầu tiền. Dưới đây là tổng hợp ngắn của mình về cách chạy Minikube trên AWS EC2.

1. Thiết lập 1 public EC2 Server với cấu hình sau:

Tag Mô tả
AMIUbuntu Server 18.04 LTS (HVM), SSD Volume Type - ami-0ac019f4fcb7cb7e6
Instance Typet2.medium
Storage22 GB (gp2)
Security GroupVì để phục vụ cho việc học tập, bạn có thể mở quyền truy cập cho tất cả các cổng
Key PairBạn sẽ cần key này để truy cập vào EC2 Instance

Bạn phải sử dụng t2.medium Type bởi vì Minikube hiện tại yêu cầu ít nhất 2 vCPUs.

2. Truy cập vào EC2 Instance bằng cách sử dụng keypair

ssh ubuntu@<ipv4_public_ip> -i <keypair>.pem

3. Cài đặt kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

4. Cài đặt Docker

sudo apt-get -y update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# Installing Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-cache policy docker-ce
sudo apt-get install -y docker-ce
sudo usermod -aG docker ubuntu
# Setup daemon.
sudo bash -c 'cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
  "max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF'
sudo mkdir -p /etc/systemd/system/docker.service.d

# Restart docker.
sudo systemctl daemon-reload
sudo systemctl restart docker

5. Cài đặt kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

6. Cài đặt Minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v${MINIKUBE}/minikube-linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube

7. Kiểm tra Minikube Version

$ sudo minikube version
minikube version: v1.0.1

Chúng ta đã cài đặt thành công Minikube.

Hãy chạy thử Minikube!

8. Khởi chạy Minikube

sudo minikube start --vm-driver=none --extra-config=kubelet.cgroup-driver=systemd

Note: Mặc định, Minikube cần truy cập bào BIOS của máy tính. Nhưng chúng ta không thể truy cập vì EC2 Instance là 1 Virtual Machine. Vì vậy chúng ta cần thêm flag: —vm-driver=none

9. Hãy kiểm thử trạng thái của Minikube

$ sudo minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 10.4.0.72

10. Hãy chạy thử container đầu tiên

$ sudo kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/hello-minikube created

11. Hãy cung cấp cổng cho container để chúng ta có thể truy cập đươc vào nó

$ sudo kubectl expose deployment hello-minikube --type=NodePort
service/hello-minikube exposed

12. Hiển thị port để truy cập vào container

$ sudo kubectl get services
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort    10.105.67.232   <none>        8080:32656/TCP   75s
kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP          16m

Chúng ta có thể thấy cổng 32656 được public ra để ta có thể truy cập vào container.

Note: Chú ý khi setup EC2 Instance, chúng ta đã mở quyền truy cập vào tất cả các cổng, nên mình nghĩ bạn sẽ không gặp bất cứ lỗi truy cập nào khi truy cập cổng 32656 của EC2.

Đây là ví dụ mẫu của kết quả truy cập:

http://<ipv4_public_ip>:32656

CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://<ipv4_public_ip>:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
accept-encoding=gzip, deflate
accept-language=en-US,en;q=0.9,vi-VN;q=0.8,vi;q=0.7
connection=keep-alive
host=<ipv4_public_ip>:32656
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
BODY:
-no body in request-

13. Xóa service và dừng Minikube

# Delete the exposed service (port)
$ sudo kubectl delete services hello-minikube

# Delete the deployed container (hello-minikube)
$ sudo kubectl delete deployment hello-minikube

# Stopping Minikube/Shutting Down the Cluster
$ minikube stop

Kết luận

Trên đây là bài tổng hợp của mình về việc chạy Minikube trên EC2 Instance. Rất hi vọng sẽ giúp và tiết kiệm được thời gian của nhiều bạn.

Hãy theo dõi blog của mình và để lại comment để giúp mình có thêm động lực chia sẻ nhiều hơn :)

Link tham khảo