1.背景node
爲啥要在本地搭建 Kubernetes 集羣?由於開發者能夠在本地快速驗證本身實現的功能,接口。衆所周知,因爲 Kubernetes 部署較爲複雜,使得廣大開發者和運維人員學習和試用 Kubernetes 的門檻很高,光是部署一套 Kubernetes 集羣,就須要部署大量的組件,花費精力較大。爲了下降用戶體驗 Kubernetes 的門檻,Minikube 項目應運而生,它是 Github 上的一個開源項目,提供了一鍵安裝的 Kubernetes 本地集羣,支持 MacOS,Linux,Windows。
誰須要 Minikube?git
啓動 Minikube:github
使用官網文檔啓動:Minikube Start,集羣能夠正常啓動。docker
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.comjson
這裏--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」api
配置完以後鏡像拉取默認會從私有鏡像倉庫尋找鏡像。
從私有鏡像倉庫拉取鏡像網絡
啓動 Minikube 後,在 Kubernetes 集羣裏建立鏡像中心的密鑰「regcred」:
kubectl create secret docker-registry regcred --docker-server=docker-release-local.demo.jfrog.com --docker-username=admin --docker-password=*** --docker-email=wq@jfrogchina.com運維
在微服務的 Deployment yaml 文件裏使用這個密鑰便可讓 Pod 經過密鑰登陸私有鏡像倉庫,拉取鏡像。
配置好私有鏡像倉庫以後,你的Pod 鏡像拉取速度是秒級的。
啓動應用-Jenkins
寫一個 Jenkins 的部署 yaml 文件,讓它運行在 Kubernetes 集羣裏。curl
Jenkins 能夠正常運行。ide
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