前言
本文為〈Set Up A CI/CD Pipeline With Kubernetes〉系列文章(deprecated)的學習筆記。
環境
- macOS
- Docker (with HyperKit)
目標
使用 Kubernetes 和 Jenkins 為範例應用程式建立 CI/CD 自動化部署流程。
環境設定
安裝 minikube。
| 1 | brew install minikube | 
查看 minikube 版本。
| 1 | minikube version | 
安裝 kubectl。
| 1 | brew install kubernetes-cli | 
查看 kubectl 版本。
| 1 | kubectl version | 
安裝 Helm 管理工具。
| 1 | brew install kubernetes-helm | 
查看 Helm 版本。
| 1 | helm version | 
為了從頭開始,使用以下指令將先前使用過的 minikube 痕跡清除。
| 1 | minikube stop; minikube delete; sudo rm -rf ~/.minikube; sudo rm -rf ~/.kube | 
範例專案
複製一份 kenzanlabs/kubernetes-ci-cd 專案到自己的儲存庫,並下載到工作目錄。
| 1 | git clone [email protected]:<YOUR_REPOSITORY>/kubernetes-ci-cd.git | 
啟動叢集
啟動一個 cluster。
| 1 | minikube start | 
- 使用 --memory參數可以指定分配的記憶體。
- 使用 --cpus參數可以指定分配的處理器。
啟用 Ingress 附加元件,用來管理 cluster 中服務的外部存取。
| 1 | minikube addons enable ingress | 
檢查 cluster 內所有的 pods。
| 1 | kubectl get pods --all-namespaces | 
使用另一個終端機視窗輸入以下指令,開啟圖形化介面。
| 1 | minikube dashboard | 
試著將一個 Nginx 的 image 部署到一個 pod。
| 1 | kubectl run --generator=run-pod/v1 --image=nginx nginx-app --port=80 | 
暴露這個 Nginx 的 pod。
| 1 | kubectl expose deployment nginx --type NodePort --port 80 | 
開啟 Nginx 服務。
| 1 | minikube service nginx | 
刪除 Nginx 服務。
| 1 | kubectl delete service nginx | 
刪除 Nginx 部署。
| 1 | kubectl delete deployment nginx | 
本地映像檔儲存庫
為了建立一個本地的映像檔儲存庫,進到 kubernetes-ci-cd 專案,透過寫好的 YAML 文件啟動一個 pod。
| 1 | kubectl apply -f manifests/registry.yaml | 
- 如果出現錯誤,到原專案查看 Pull Request 可能需要被修正的項目。
查看儲存庫的部署狀態。
| 1 | kubectl rollout status deployments/registry | 
開啟 registry-ui 服務。
| 1 | minikube service registry-ui | 
試著更新一個應用程式,修改 applications/hello-kenzan/index.html 檔:
| 1 | Hello from Me! | 
建立一個帶有域名前綴的 Docker image。
| 1 | docker build -t 127.0.0.1:30400/hello-kenzan:latest -f applications/hello-kenzan/Dockerfile applications/hello-kenzan | 
在推送 image 之前,需要先啟動一個用來處理 proxy 的容器。
| 1 | docker run -d -e "REG_IP=`minikube ip`" -e "REG_PORT=30400" --name socat-registry -p 30400:5000 socat-registry | 
把 image 推送到儲存庫,並重新查看儲存庫的頁面,多了一個 hello-kenzan。
| 1 | docker push 127.0.0.1:30400/hello-kenzan:latest | 
將用來處理 proxy 的容器停止。
| 1 | docker stop socat-registry | 
透過另一個寫好的 YAML 文件部署 hello-kenzan 這個應用程式。
| 1 | kubectl apply -f applications/hello-kenzan/k8s/manual-deployment.yaml | 
開啟 hello-kenzan 服務,發現先前對應用程式修改的部分。
| 1 | minikube service hello-kenzan | 
刪除 hello-kenzan 服務。
| 1 | kubectl delete service hello-kenzan | 
刪除 hello-kenzan 部署。
| 1 | kubectl delete deployment hello-kenzan | 
告一段落,停止 minikube。
| 1 | minikube stop |