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

1.背景node

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

  • 本地開發 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: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

相關文章
相關標籤/搜索