开发者如何快速搭建本地 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

相关文章
相关标签/搜索