What is Kubernetes
自從Google開源了Kubernetes(簡稱k8s)之後, k8s 已經成為目前最受歡迎的容器管理工具與調度平台, 現在不管在哪個雲端服務商Google, Microsoft, 或是Amazon 的布道大會上, 一定會有個議程在談k8s, 由此可見它的受歡迎程度相當的高
雖然k8s很受歡迎, 但實際上它並不是這麼好學的工具, 裏頭的觀念非常非常的多, 不可能一時片刻就完全學起來, 因此這篇文章將會著重在某些重點觀念上, 帶著大家簡單的了解k8s的基本功能與基本操作
為了簡化安裝步驟, 以下的教學將會使用minikue來讓大家體驗k8s
雖然k8s很受歡迎, 但實際上它並不是這麼好學的工具, 裏頭的觀念非常非常的多, 不可能一時片刻就完全學起來, 因此這篇文章將會著重在某些重點觀念上, 帶著大家簡單的了解k8s的基本功能與基本操作
為了簡化安裝步驟, 以下的教學將會使用minikue來讓大家體驗k8s
Minikube
是一種閹割版的k8s, 由於安裝步驟非常簡單, 所以常常被用來當成入門k8s的工具安裝步驟
使用Ubuntu 18.04sudo apt update
安裝KVM會用到的套件
minikube會在宿主機上起一個vm跑k8s的相關服務, 所以我們必須安裝kvm相關套件
如果執行以上指令都沒問題的話, 就可以開始玩看看k8s
檢查Pod有沒有起來
執行kubectl run之後 除了Pod被建立起來之外, 同時Deployment也會一起被建起來
可以用以下指令來看部屬狀況
以上的事情可以在k8s叢集內建立一個Service來達成目的
sudo apt install \
qemu-kvm \
libvirt-clients \
libvirt-daemon-system \
bridge-utils \
virt-manager
將使用者加入libvirt群組
讓一般使用者有權限執行sudo usermod -a -G libvirt $(whoami)
安裝kubectl
kubectl是kubenetes的管理工具sudo snap install kubectl --classic
開始建立minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube \
&& sudo cp minikube /usr/local/bin/ \
&& rm minikube
安裝KVN2 driver
curl -Lo docker-machine-driver-kvm2 https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 \
&& chmod +x docker-machine-driver-kvm2 \
&& sudo cp docker-machine-driver-kvm2 /usr/local/bin/ \
&& rm docker-machine-driver-kvm2
執行minikube
minikube會在宿主機上起一個VM去安裝k8sminikube start --vm-driver kvm2
如果執行以上指令都沒問題的話, 就可以開始玩看看k8s
練習起一個NGINX的服務
kubectl run mynginx --image=nginx --replicas=3
這個指令預設會去docker hub上把Nginx的image抓下來, 然後在minikube的叢集內產生3個Pod去跑Nginx容器PodPod是在k8s的架構下,所有操作的最小單位,一個Pod允許同時包含多個容器, 當Pod生命週期結束時, 上面跑的容器也通通會被殺掉
檢查Pod有沒有起來
kubectl get pods -o wide
如果有成功建立的話可以看到每個Pod目前的狀態應該是Running執行kubectl run之後 除了Pod被建立起來之外, 同時Deployment也會一起被建起來
Deployment用來定義叢集內Pod的部屬方式, 比如說用它來指定Pod的副本數量, 使部屬時產生多個副本
可以用以下指令來看部屬狀況
kubectl get deployment
因為我們有建立3個複本, 如果部屬成功的話理論上狀態應該都要是READY
揭露服務
若要讓Pod裡面的Nginx容器能夠對外服務的話, 我們必須替它開個Port使其能夠對外, 並將請求導向至Port 80以上的事情可以在k8s叢集內建立一個Service來達成目的
ServiceService是位於Pod前端的抽象層, 主要定義了如何存取Pod的規則, 而每個 Service 都會有個虛擬IP, 使其當外部請求進來時, 能夠正常地被導向至後方提供服務的 pod
kubectl expose deployment mynginx --port=80 --target-port=31352 --type=NodePort
檢查Service有沒有被建立kubectl get svc
成功的話應該會看到如下圖所示的結果開始測試
可以直接開瀏覽器測試, 或是下minikube的指令去開瀏覽器minikube service mynginx
留言
張貼留言