一、安裝 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
鏡像加速(本文使用阿裡雲鏡像):
## vi /etc/docker/daemon.json
{"registry-mirrors":["https://<你的ID>.mirror.aliyuncs.com"]}
## systemctl daemon-reload
## systemctl restart docker
備注:本文使用的鏡像為 luksa/kubia,是《Kubernetes in Action》中使用的鏡像,其為一個簡單的 Node.js 應用:Dockerfile 檔案的内容為:const http = require('http'); const os = require('os'); console.log("Kubia server starting..."); var handler = function(request, response) { console.log("Received request form " + request.connection.remoteAddress); response.writeHead(200); response.end("You've hit " + os.hostname() + "\n"); }; var www = http.createServer(handler); www.listen(8080);
FROM node:7 ADD app.js /app.js ENTRYPOINT ["node", "app.js"]
二、配置 k8s 叢集
Minikube 是一個建構單節點叢集的工具,是運作 Kubemetes 叢集最簡單、最快捷的途徑2.1. 安裝 kubectl
官方給出位址是:https://storage.googleapis.com ,需要梯子才能使用,改為使用阿裡雲的下載下傳位址:驗證是否成功:
curl -Lo kubectl http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.20.0/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl
kubectl version --client
2.2. 安裝 minikube
同樣使用阿裡雲的下載下傳位址:啟動叢集:
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.16.0/minikube-linux-amd64 && chmod +x ./minikube && mv ./minikube /usr/local/bin/minikube
檢視叢集(前提是已經安裝了 kubectl):
minikube start --driver=none
遇到的報錯:
kubectl get pod -A # pod 可以縮寫為 po
- Sorry, Kubernetes 1.20.0 requires conntrack to be installed in root’s path
## 安裝 conntrack: yum install conntrack
- /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables #/pro的配置檔案根據實際環境來
三、部署應用
3.1. 部署應用
kubectl create deployment hello-minikube --image=luksa/kubia
3.1.1. pod
一個 pod 是一組緊密相關的容器,它們總是一起運作在同一個工作節上,以及同一個 Linux 命名空間中。每個 pod 就像一個獨立的邏輯機器,擁有自己的 IP、主機名、程序等,運作一個獨立的應用程式。應用程式可以是單個程序,運作在單個容器中,也可以是一個主應用程序或者其他支援程序,每個程序都在自己的容器中運作一個 pod 的所有容器都運作在同一個邏輯機器上,而其他 pod 中的容器,即使運作在同個工作節點上,也會出現在不同的節點上。可以通過下面指令檢視 pod 清單:![]()
k8s (一) 學習環境 Kubernetes 叢集搭建 kubectl get pods kubectl get pods -o wide # 顯示 pod 運作的 IP 和所運作的節點
3.2. 建立服務對象
每個 pod 都有自己的 IP 位址,但是這個位址是叢集内部的,不能從叢集外部通路。要讓 pod 能夠從外部通路,需要通過服務對象公開它,要建立一個特殊的 LoadBalancer 類型的服務。因為如果你建立一個正常服務(一個 ClusterIP 服務),比如 pod,它隻能從叢集内部通路。通過建立 LoadBalancer 類型的服務,将建立一個外部的負載均衡,可以通過負載均衡的公共 IP 通路 pod可以通過下面指令檢視服務清單:
kubectl expose deployment hello-minikube --type=NodePort --port=8080
如果執行上面的指令可以看到服務是沒有外部 IP 的,可以使用下面指令為其配置設定端口:
kubectl get services
也可以使用下面指令指定端口:minikube service hello-minikube # 本文配置設定的端口為:31526
kubectl port-forward service/hello-minikube 7080:8080 # 可以通過 http://localhost:7080 通路
3.3. 水準伸縮應用
可以通過下面指令檢視 Deployment 清單:
kubectl get deployments
預設隻有 1 個 pod 副本,可以增加 pod 副本的數量:
kubectl scale deployment hello-minikube --replicas 3
再次執行檢視 Deployment 清單指令,可以看到目标數量變成了 3(需要等待一段時間 3 個 pod 才能都啟動),等 3 個 pod 都成功啟動後,多次調用接口,可以看到有不同的輸出:
curl http://192.168.12.130:31526 # 31526 為本文配置設定的端口
## You've hit hello-minikube-6895494d6d-wsfmx
## You've hit hello-minikube-6895494d6d-cbsnz
## You've hit hello-minikube-6895494d6d-rvgvw
參考:
- 《Kubernetes in Action》
- Install and Set Up kubectl
- minikube start