開發者如何快速搭建本地 Kubernetes 集羣?Minikube趟坑記錄

1.背景

爲啥要在本地搭建 Kubernetes 集羣?因爲開發者可以在本地快速驗證自己實現的功能,接口。衆所周知,由於 Kubernetes 部署較爲複雜,使得廣大開發者和運維人員學習和試用 Kubernetes 的門檻很高,光是部署一套 Kubernetes 集羣,就需要部署大量的組件,花費精力較大。爲了降低用戶體驗 Kubernetes 的門檻,Minikube 項目應運而生,它是 Github 上的一個開源項目,提供了一鍵安裝的 Kubernetes 本地集羣,支持 MacOS,Linux,Windows。
誰需要 Minikube?

  • 本地開發 Kubernetes應用
  • 離線開發 Kubernetes 應用
  • 體驗最新版 Kubernetes
    如果你有以上需求,可以使用 Minikube。 Minikube 大大簡化了的開發者部署自己的服務到 Kubernetes,因爲這個本地集羣可以部署在自己的筆記本,親測 8C16G筆記本跑起來很輕鬆,隨時可以啓停,不依賴網絡連接。開發者可以在自己的筆記本里,運行Kubernetes 的 Pods,快速驗證自己的服務功能是否生效。
    被納入到了 Kubernetes 官方項目裏-https://github.com/kubernetes/minikube
    2.搭建趟坑之旅
    Mac 環境安裝:
    使用官方地址進行一鍵安裝:
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
    && sudo install minikube-darwin-amd64 /usr/local/bin/minikube

啓動 Minikube:

使用官網文檔啓動:Minikube Start,集羣可以正常啓動。

o坑點 :鏡像源指向了 gcr.io
啓動Minikube 之後,運行 pod 一般都會失敗,因爲 Minikube 默認將它的鏡像中心默認指向了 gcr.io,從這裏下載過鏡像的人都被它深深傷害過,可以在啓動參數裏指定鏡像源和私有鏡像庫。
配置私有鏡像倉庫:
根據官方文檔,在啓動時加入參數:” --insecure-registry”
minikube start --insecure-registry "docker-release-local.demo.jfrog.com" --registry-mirror=https://registry.docker-cn.com

這裏--insecure-registry配置的是JFrog 的本地私有 Artifactory Docker 鏡像倉庫,一般企業內部都有私有鏡像庫。
o坑點 :指定私有鏡像庫不生效
筆者使用的Minikube v1.2.0 Mac 版本在啓動時--insecure-registry並不生效,可以找到主機上 minikube 配置文件目錄下的文件進行修改。打開文件:~/.minikube/machines/minikube/config.json,增加記錄” docker-release-local.demo.jfrog.com”

配置完之後鏡像拉取默認會從私有鏡像倉庫尋找鏡像。
從私有鏡像倉庫拉取鏡像

啓動 Minikube 後,在 Kubernetes 集羣裏創建鏡像中心的密鑰“regcred”:
kubectl create secret docker-registry regcred --docker-server=docker-release-local.demo.jfrog.com --docker-username=admin --docker-password=*** [email protected]

在微服務的 Deployment yaml 文件裏使用這個密鑰即可讓 Pod 通過密鑰登錄私有鏡像倉庫,拉取鏡像。
配置好私有鏡像倉庫之後,你的Pod 鏡像拉取速度是秒級的。
啓動應用-Jenkins
寫一個 Jenkins 的部署 yaml 文件,讓它運行在 Kubernetes 集羣裏。

Jenkins 可以正常運行。

o坑點:Pod 重啓時候,Jenkins 數據沒了?
很多應用的配置文件是需要放到 Pod 之外進行管理的,比如 Jenkins。這就需要 Minikube 支持掛載目錄。Minikube 官方提供了對掛載目錄的支持,默認/data 目錄是在重啓 Minikube 之後,文件也會保留的目錄,可以在/data 目錄下創建Jenkins_home目錄,然後在Kubernetes 裏聲明 PV,類型爲 hostPath,掛載這個目錄。

聲明好這個持久化卷之後,就可以在 Jenkins 的部署 yaml 文件裏通過 PVC 來使用這個目錄。

上圖可以看到我們把 Jenkins pod 裏的/var/Jenkins_home 目錄映射到了 Pod 外部,也就是 Minikube 主機上的/data/Jenkins-home,這樣即使 Pod 重啓,Minikube 重啓也不會丟失數據。
o坑點:掛載目錄寫失敗
當掛創建好/data/Jenkins-home目錄之後,默認只有 root 用戶有寫權限,Jenkins Pod 啓動起來之後,會因爲無法寫入配置文件而啓動失敗,此時需要將/data/Jenkins-home的權限賦予 docker 用戶,再次啓動 pod 即可正常運行。

訪問服務
當 Jenkins Pod 運行起來之後,可以通過 Jenkins service 的 nodePort 暴露的 31081進行訪問,這裏注意 ip 是 Minikube 的 ip 地址:

3.小結
通過 Minikube 能夠實現開發者微服務的本地快速部署,對自己開發的功能,接口進行本地的快速驗證,大大提升開發者的交付質量和效率。
4.附錄
文中用到的代碼倉庫在這裏,歡迎想動手實踐的同學進行 clone:https://github.com/alexwang66/sample-microservices-k8s

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章