本文别离从如下几个方面来分享一波 如何将本人的镜像应用 helm 部署
- 简略介绍一下 helm
<!—->
- 应用本人写 yaml 文件的形式在 k8s 中部署利用
<!—->
- 应用 helm 的形式在 k8s 中部署利用
简略介绍一下 helm
Helm 是 Kubernetes 的包管理器,在云原生畛域用于利用打包和散发
Helm Chart 蕴含了 Docker 镜像以及其在 k8s 中的基础设施配置,例如 service,deployment 等等,helm 能够把 k8s 的利用进行实现封装,公布给任意一个其余的 k8s 环境应用
能够查看 helm 文档地址:https://helm.sh/zh/docs/
应用本人写 yaml 文件的形式在 k8s 中部署利用
接下来便开始咱们的实战演练了,咱们须要有如下工具:
- 根本的 k8s 集群 环境,也能够是 minikube
<!—->
- 根本的 docker 环境和常识
<!—->
- 根本的 git 环境和常识
<!—->
- Helm 工具
个别状况下,咱们刚开始会用 k8s 的时候,咱们会去独自的编写 deployment,service 对应的 yaml 文件,而后再一一部署,如果咱们的利用应用到了卷,配置文件等,咱们编写的 yaml 只会更多,并且不利于分享和流传。
例如咱们在部署一个 利用名为 my-helm-demo 的时候,咱们会这样做
1、编写源码,并输入能够执行程序
咱们编写一个 web 服务端,提供一个 v1 版本的查问接口,咱们应用 gin 简略实现一下
先来看看咱们的残缺的我的项目整体构造
先来编码实现 web 服务器
- helm_demo/my_demo/main.go
应用上述源码文件,咱们编译能够生成可执行程序,咱们将它命名为 my_demo_svr,并且将它放到 helm_demo 目录下
2、制作镜像
这个时候咱们来开始制作镜像,在 helm_demo 下编写启动脚本 start.sh 和 Dockerfile
- helm_demo/start.sh
#!/bin/bash
./my_demo_svr
- helm_demo/Dockerfile
FROM centos
ADD my_demo_svr /
ADD start.sh /
ENTRYPOINT ["sh", "start.sh"]
制作 docker 镜像,对于 docker 相干的细节就不赘述了,docker 仓库能够查看 https://hub.docker.com/repositories
对于 docker 的根本知识点,能够查看我的 docker 系列历史文章
docker build -t xiaomotong888/my-helm-demo:v1 .
docker push xiaomotong888/my-helm-demo:v1
3、编写 deployment 和 service 的 yaml 文件
开始在 helm_demo 目录下 编写根本的 deployment 和 service 相干 yaml 文件
- my_helm_demo-deploy.yaml
咱们 deploy 中的镜像应用下面咱们制作的:xiaomotong888/my-helm-demo:v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-helm-demo
spec:
replicas: 3
selector:
matchLabels:
app: my-helm-demo
template:
metadata:
name: my-helm-demo
labels:
app: my-helm-demo
spec:
containers:
- image: xiaomotong888/my-helm-demo:v1
name: my-helm-demo
- my_helm_demo-service.yaml
此处 service 咱们应用 NodePort 的形式来裸露服务的端口 31889,咱们本身容器的端口是 8989
apiVersion: v1
kind: Service
metadata:
name: my-helm-demo-service
spec:
ports:
- port: 8989
targetPort: 8989
nodePort: 31889
protocol: TCP
selector:
app: my-helm-demo
type: NodePort
4、部署
kubectl create -f my_helm_demo-deploy.yaml
kubectl create -f my_helm_demo-service.yaml
5、查看成果
查看 po
查看 svc
在 k8s 内部申请咱们的 web 接口,成果如下,能够失常在 k8s 环境内部申请 k8s 裸露的端口 31889
后面有说到,咱们应用上述的形式,不便于当前的查找和分享,那么接下来,咱们能够应用 helm 的形式来玩
在应用 helm 前,咱们将方才部署的 deploy 和 service 先革除掉
kubectl delete -f my_helm_demo-service.yaml
kubectl delete -f my_helm_demo-deploy.yaml
应用 helm 的形式在 k8s 中部署利用
对于咱们应用 helm 的时候,咱们能够这样来玩,应用 helm 工具能够很不便的查找和分享咱们残缺的部署包
1、装置 helm
依照 helm,咱们能够间接应用官网的步骤,下载压缩包,解压之后将可执行程序 helm 放到咱们的零碎 bin 目录下
- 下载 须要的版本
<!—->
- 解压(
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
)
<!—->
- 在解压目中找到
helm
程序,挪动到须要的目录中(mv linux-amd64/helm /usr/local/bin/helm
)
2、创立 Helm Chart,并批改镜像和具体的端口
在咱们的 helm_demo 目录下创立 Helm Chart
helm create my-helm-demo
执行命令后,helm 工具在咱们的 helm_demo 目录下生产了如下文件:
咱们能够看到,有很多对于 k8s 的 yaml 文件,实际上咱们当初只须要去批改 values.yaml 中对于镜像和端口的配置
对于镜像的配置,批改成咱们的镜像版本
image:
repository: xiaomotong888/my-helm-demo
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: "v1"
同理,批改端口
service:
type: NodePort
port: 8989
nodePort: 31889
最初找到 helm_demo/my-helm-demo/templates/service.yaml 补充一下 service 的端口的配置
此处能够解释一下 {{.Values.service.nodePort}} 的含意:
示意会援用 values.yaml 文件的 service 上面的 nodePort 对应的值,也就是上一步咱们补充的端口信息 31889
3、本地部署 helm 包,验证成果
这个时候,简略的本地 helm 包咱们就弄好了,当初来部署本地的 helm 包
在 helm_demo 目录下 执行命令进行部署
helm install my-helm-demo my-helm-demo
部署之后,咱们能够查看 helm 列表,查看 pod,查看 svc 来检查一下
- helm list
<!—->
- kubectl get po
<!—->
- kubectl get svc
同样的,应用 postman 申请接口,也是没问题的
4、将部署包推到 github 仓库中,做成 helm 仓库,便于后续查问和分享
接下来,咱们就来看看如何弄一个本人的 helm 仓库,以及版本升级和迭代
在以后这个仓库中(helm_demo),咱们先将上述波及到的文件推到 github 上,而后去设置咱们的 github Pages
此处的 branch 咱们记得设置成,master 分支的 /docs 目录
开始制作 helm 包
- 在 helm_demo 目录下 新建 docs 目录
mkdir docs
- 制作 helm 包
helm package my-helm-demo -d docs
- 进入 docs 目录,并生成拜访的 index.yaml 文件
cd docs
helm repo index .
这个时候,咱们能够看到 docs 目录下呈现了 2 个文件
[root@VM-20-15-centos helm_demo]# tree docs/
docs/
├── index.yaml
├── my-helm-demo-0.1.0.tgz
此时将整个 helm_demo 我的项目本地的文件提交到近程仓库,咱们能够在近程仓库上看到咱们的 helm 包
5、部署利用
在应用 helm 仓库部署之前,咱么先将方才应用本地 helm 部署的利用先卸载掉
helm uninstall my-helm-demo
- 增加咱们本人的 helm 仓库,并更新
helm repo add my-repo https://qingconglaixueit.github.io/helm_demo/
helm repo update
- 查看咱们的 my-repo 仓库,并装置利用
helm search repo my-repo
helm install my-helm-demo my-repo/my-helm-demo
能够反复上述部署本地 helm 包之后的查看操作,查看 pod,查看 svc,查看端口等信息
6、批改咱们的源码,生成 v2 版本的部署包
此时,咱们批改源码,减少 v2 版本的查问接口
上述 helm_demo/main.go 调整成如下内容:
这个时候,编译生成可执行程序,步骤和上述步骤完全一致
失去最新的镜像为:xiaomotong888/my-helm-demo:v2
再应用上述的形式制作最新的 helm 包(批改版本记得批改 helm_demo/my-helm-demo/Chart.yaml 的 version 值为 0.2.0),并推到 github 上,此时咱们能够看到 github 上曾经有 2 个版本的包了
7、降级最新部署包
此时咱们执行命令来降级咱们的最新版本的包
helm repo update my-repo
helm search repo my-repo
仓库中最新的 helm 包曾经 更新成 0.2.0 版本了,咱们能够来进行一波降级
helm upgrade --install my-helm-demo my-repo/my-helm-demo
8、查看成果
降级之后,咱们还是同样的去查看 pod,svc,端口等,咱们能够看到咱们 pod 的版本曾经变成最新的了
应用 postman 申请版本 2 的接口,咱们能够查看一下成果
如上波及的 helm 包,你也能够本人拉取自行应用哦,看到这里置信,你学会了吧
本文源码能够查看地址:https://github.com/qingconglaixueit/helm_demo
当然对于 helm 的其余应用及技巧,间接参考官网文档即可:https://helm.sh/zh/docs/
至此,本篇内容完结
感激浏览,欢送交换,点个赞,关注一波 再走吧
欢送点赞,关注,珍藏
敌人们,你的反对和激励,是我保持分享,提高质量的能源
好了,本次就到这里
技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。
我是 阿兵云原生,欢送点赞关注珍藏,下次见~