前一天我們建立好了 Kubernetes 的環境,今天就來實際使用看看,將應用程式透過 Pod 部屬到 k8s 內部。
在 Kubernetes 有著各式元件,有負責建置容器,也有負責管理網路的。使用 K8s 的方法就是根據需求來建置所需要的元件,這裡就來介紹最基本的 Node 以及 Pod 。
Node 是 Kubernetes 的硬體單位,可以是實體機或虛擬機,作為工作節點提供運算資源。
Pod 是 Kubernetes 的最小運行單位,由一個或多個容器所組成,一個 Pod 對應一個應用程式。
實際情況來說,在一個 k8s 叢集上會有許多 Node,代表實際的運算資源,裡面安裝了如 Docker 的容器平台,而 k8s 就會以 Pod 為單位將容器放入到 Node 上做運行。
要如何建立、管理 Kubernetes 的元件,可以使用Kubectl
工具,我們就來實際練習看看。
進入 Cloud Shell 網站,點擊終端機輸入指令
列出所有的 project ,找到之前所創建專案的 PROJECT_ID
gcloud projects list
PROJECT_ID
,開啟專案 Terminal在前一篇中已經設置好了kubectl
工具了,現在使用kubectl get <type>
就能夠查看叢集上的各種元件。
kubectl get nodes
(輸出結果)
NAME STATUS ROLES AGE VERSION
gke-lab-default-pool-9638ad20-l69n Ready <none> 7m50s v1.20.9-gke.701
gke-lab-default-pool-9638ad20-tnlg Ready <none> 7m50s v1.20.9-gke.701
gke-lab-default-pool-9638ad20-x3jm Ready <none> 7m50s v1.20.9-gke.701
這裡對應著 GCP 上的三台 VM ,被加入到 k8s 作為工作節點,使用kubectl describe <type> <object name>
就能查看詳細資料。
<object name>
改為你任一 Node 的名稱kubectl describe node <object name>
會輸出這個 Node 的資訊,包括 IP、系統資源、事件等等。
要如何在 Kubernetes 建立元件,可以在一個 yaml 文件中描述,下面就來使用 yaml 檔來建置 Pod 。
cd && mkdir k8s-test
cd ~/k8s-test && touch mypod.yaml
左上 Explorer -> Open Folder -> 選擇 k8s-test 資料夾 -> Open
mypod.yaml
檔案並貼上以下內容,並將<your iamge name>
改成之前建立的 Image Name這裡的 Image 是在 Day08 所建立的 Node 應用
apiVersion: v1
kind: Pod
metadata:
name: mypod
labels:
app: myapp
spec:
containers:
- name: mycontainer
image: <your iamge name>
ports:
- containerPort: 8080
apiVersion
kind
metadata
spec
containers
建好了 yaml 檔案,就可以使用kubectl apply -f <file>
指令,Kubernetes 會根據 yaml檔的內容建立相應元件。
mypod.yaml
建立元件kubectl apply -f mypod.yaml
使用kubectl get <type>
就能夠查看 Pod 元件。
kubectl get pods
(輸出結果)
# 剛建立時輸入
NAME READY STATUS RESTARTS AGE
mypod 0/1 ContainerCreating 0 5s
# 建立完成後輸入
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 14s
可以看到mypod
建立成功並成功運行,使用kubectl describe <type> <object name>
查看詳細資料。
mypod
詳情kubectl describe pod mypod
(輸出結果 -> Event)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 90s default-scheduler Successfully assigned default/mypod to gke-lab-default-pool-9638ad20-l69n
Normal Pulling 89s kubelet Pulling image "gcr.io/ninth-bonito-324214/node-project:v1"
Normal Pulled 79s kubelet Successfully pulled image "gcr.io/ninth-bonito-324214/node-project:v1" in 9.834570297s
Normal Created 78s kubelet Created container mycontainer
Normal Started 78s kubelet Started container mycontainer
會顯示 Pod 詳細資訊,包括容器使用了什麼 Image 、運行事件等等。
建立好了 Pod 後,要怎麼跟裡面的容器進行互動,常見的有兩種方式
這裡使用第一種方式,利用kubectl port-forward <pod> <本機 port>:<pod port>
,可以將 Pod 中的某個 Port 跟本機端做映射。
kubectl port-forward mypod 8080:8080
(輸出結果)
Forwarding from 127.0.0.1:8080 -> 8080
此時透過 cloud shell 的 8080 Port 就能獲取 Pod 裡的服務。
網頁預覽->透過以下通訊預覽 : 8080
看到回傳訊息,成功的與容器進行互動。
Ctrl +c
停止 port-forward今天學習到了 kubectl 基本指令,以及如何透過 yaml 檔案來建置 Pod 元件,下一章將會介紹 service 元件,建立 Pod 的溝通管道。