使用 Kubernetes 和 Jenkins 為應用程式建立自動化部署(一)

前言

本文為〈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 git@github.com:<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

參考資料