23

开发者如何快速搭建本地 Kubernetes 集群?Minikube趟坑记录

 4 years ago
source link: https://studygolang.com/articles/27980
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、背景

为啥要在本地搭建 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

二、搭建趟坑之旅

  • Mac 环境安装:

使用官方地址进行一键安装:

qyyQnyf.png!web

  • 坑点 :二进制包下载需翻墙

官方文档给的下载地址需要访问谷歌的服务器storage.googleapis.com,有时候下载容易失败,可以切换到阿里云的下载地址:

FnQJJnv.png!web

该地址亲测可用。

  • 启动 Minikube:

使用官网文档启动:Minikube Start,集群可以正常启动。

  • 坑点 :镜像源指向了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 镜像仓库,一般企业内部都有私有镜像库。

  • 坑点 :指定私有镜像库不生效

笔者使用的Minikube v1.2.0 Mac 版本在启动时--insecure-registry并不生效,可以找到主机上 minikube 配置文件目录下的文件进行修改。打开文件:~/.minikube/machines/minikube/config.json,增加记录” docker-release-local.demo.jfrog.com”

V7rErqe.png!web

配置完之后镜像拉取默认会从私有镜像仓库寻找镜像。

  • 从私有镜像仓库拉取镜像

启动 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 通过密钥登录私有镜像仓库,拉取镜像。

7JV7za6.png!web

配置好私有镜像仓库之后,你的Pod 镜像拉取速度是秒级的。

  • 启动应用-Jenkins

写一个 Jenkins 的部署 yaml 文件,让它运行在 Kubernetes 集群里。

mie63mn.png!web

Jenkins 可以正常运行。

ArYfmyy.png!web

  • 坑点:Pod 重启时候,Jenkins 数据没了?

很多应用的配置文件是需要放到 Pod 之外进行管理的,比如 Jenkins。这就需要 Minikube 支持挂载目录。Minikube 官方提供了对挂载目录的支持,默认/data 目录是在重启 Minikube 之后,文件也会保留的目录,可以在/data 目录下创建Jenkins_home目录,然后在Kubernetes 里声明 PV,类型为 hostPath,挂载这个目录。

Fbu6NnE.png!web

声明好这个持久化卷之后,就可以在 Jenkins 的部署 yaml 文件里通过 PVC 来使用这个目录。

amqAF3n.png!web

上图可以看到我们把 Jenkins pod 里的/var/Jenkins_home 目录映射到了 Pod 外部,也就是 Minikube 主机上的/data/Jenkins-home,这样即使 Pod 重启,Minikube 重启也不会丢失数据。

  • 坑点:挂载目录写失败

当挂创建好/data/Jenkins-home目录之后,默认只有 root 用户有写权限,Jenkins Pod 启动起来之后,会因为无法写入配置文件而启动失败,此时需要将/data/Jenkins-home的权限赋予 docker 用户,再次启动 pod 即可正常运行。

ymaMJjZ.png!web

  • 访问服务

当 Jenkins Pod 运行起来之后,可以通过 Jenkins service 的 nodePort 暴露的 31081进行访问,这里注意 ip 是 Minikube 的 ip 地址:

R3mquqm.png!web

三、小结

通过 Minikube 能够实现开发者微服务的本地快速部署,对自己开发的功能,接口进行本地的快速验证,大大提升开发者的交付质量和效率。

四、附录

文中用到的代码仓库在这里,欢迎想动手实践的同学进行 clone https://github.com/alexwang66/sample-microservices-k8s

更多精彩内容可以专注我们的在线课堂

微信搜索公众号:jfrogchina 获取课程通知


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK