内容简介:Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端、Tiller服务端,Helm三个主要部件:Chart、仓库、Release;Chart:为Kubernetes中应用程序所需要的资源的定义。仓库:为存储Helm chart的仓库,可从仓库中下载chart直接使用
Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端、Tiller服务端,Helm三个主要部件:Chart、仓库、Release;
Chart:为Kubernetes中应用程序所需要的资源的定义。
仓库:为存储Helm chart的仓库,可从仓库中下载chart直接使用
Release:Kubernetes中运行的chart实例,每个chart可多次安装,每次安装都是一个新版本;
Helm 常见指令:
helm search 在仓库中查找chart
helm inspect stable/mongodb 可查看该chart的介绍信息;
helm install stable/mongodb 可直接下载该chart并安装该chart;
版本升级:
helm upgrade releaseName .
helm rollback releaseName 1 回滚到版本1
从零开始通过helm发布Kubernetes项目:
一、结构介绍
初始化项目:
helm create nginx
执行完后创建名为nginx的chart,现在查看nginx目录中的文件:
charts:目录用于存放所依赖的子chart
chart.yaml:为当前chart的说明文件,也可在模板中访问该文件;
templates:目录为nginx项目的模板目录,通常会使用values.yaml配置内容进行填充,板引擎渲染此目录的文件后Tiller将渲染得到的结果 提交给Kubernetes创建响应的对象;
values.yaml:为值文件,定义模板中需要使用的值,在templates的模板文件中将访问改值;
在templates目录中有可以看到deployment.yaml、ingress.yaml、service.yaml文件这些为定义Kubernetes deployment、ingress、service对象的模板文件;
NOTES.txt:为安装chart成功后的说明文件
_helpers.tpl:模板助手文件,定义的值可在模板中使用;
二、通过helm在Kubernetes中部署Nginx
1、helm 初步使用
现在删除template目录中的所有文件、清空values.yaml文件中所有内容
部署nginx需要一个deployment控制器与对外提供服务的service,现在我们分别手动创建这个两个文件并编写相关内容;
deployment.yaml :
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
service.yaml
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx type: NodePort ports: - port: 80 nodePort: 30078
此时我们在上级目录执行:helm install nginx 已经可以将nginx部署到Kubernetes中;
但如果只是这样使用Helm,那它存在的意义也不大,既然说template目录是模板目录当然它里面的模板文件也不能只是这么使用,要让模板文件体现出它的模型性质;下面我们将使用Helm的模板等功能,让模板文件体现出他的模板性质;
2、helm 模板
目前为止deployment.yaml与service.yaml虽然是放在模板目录下但是完全没有体现出他的模板性质,现在我们开始这两个文件的模板化;
模板语法基础:
内置对象:helm中有这么这个常用内置对象:Release、Values、Chart、Files、Capabilities、Template;
Release:此对象描述当前release,内置有:Release.Name release名称、Release.Time 发布时间等等等对面;
Values:此对象为从values.yaml文件与用户提供的文件中传递到模板的对值对象;
Chart:此对象为chart.yaml文件所提供的数据对象;
Files:提供了对chart非特殊文件的访问;
Capabilities:这提供了Kubernetes集群信息的访问;
Template:正在执行的当前模板信息
下面我们通过helm内置对象Values来实现deployment.yaml、service.yaml文件的模板化,Values对象的取值范围:
1、当前chart的values.yaml文件;
2、如当前为子chart,则来自父chart的values.yaml文件;
3、在helm install或helm update执行是通过-f参数传递的文件;
4、通过helm install 时通过 –set设置的值;
如values.yaml文件中存在replicaCount: 1对象,则在模板文件中通过{{ .Values.replicaCount }}即可访问到values.yaml文件定义的对象值1;
通过 _helpers.tpl 可定义命名模板,下面定义模板deploy.name
{{- define "deploy.name" -}} demo-deploy-nginx {{- end }}
其中:{{ – 表示删除左侧的空格 – }} 删除右侧的空格
此时可在模板文件中通过{{ template “deploy.name” . }} 引用该命名模板;
实现模板化:
提取需要模板化的数据,这里提取出deployment对象的name、labels、replicas、matchLabels、template的labels、template spec的name、image;service对象的name、selector labels、type、port、nodePort等配置;
我们再从提取出来的配置中挑选出name类与labels类配置定义为命名模板存放在_helpers.tpl文件中,其他的配置项定义在Values.yaml文件中;
_helpers.tpl文件内容如下:存放了deploy名称、service名称、deploy的lables、deploy中pod的lables;
{{- define "deploy.name" -}} demo-deploy-nginx {{- end }} {{- define "service.name" -}} demo-service-nginx {{- end }} {{- define "labels" -}} demo: nginx {{- end}} {{- define "deploy.labels" -}} deploy: nginx {{- end}}
values.yaml文件,此文件定义了副本数、镜像名称与版本、service类型、端口等:
# 定义模板默认值 replicaCount: 1 image: repository: nginx tag: 1.7.9 service: type: NodePort port: 80 nodePort: 30078
值文件定义好了此时需要在模板deployment、service文件中引用上述两个文件所定义的值,下面开始重构deployment.yaml与service.yaml文件:
service.yaml文件:
apiVersion: v1 kind: Service metadata: name: {{ template "service.name" . }} spec: selector: {{ template "labels" . }} type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} nodePort: {{ .Values.service.nodePort }}
deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: {{ template "deploy.name" . }} labels: {{ template "deploy.labels" .}} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: {{ template "labels" . }} template: metadata: labels: {{ template "labels" . }} spec: containers: - name: {{ .Chart.Name}} image: {{ .Values.image.repository }}:{{ .Values.image.tag }} ports: - containerPort: 80
模板文件编写好后可以再重新使用Helm install部署nginx试试,执行前先执行helm delete running-chipmunk卸载掉之前安装的;
参考资料: https://docs.helm.sh/
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript经典实例
Shelley Powers / 李强 / 中国电力出版社 / 2012-3 / 78.00元
《JavaScript经典实例》各节中的完整代码解决了常见的编程问题,并且给出了在任何浏览器中构建Web应用程序的技术。只需要将这些代码示例复制并粘贴到你自己的项目中就行了,可以快速完成工作,并且在此过程中学习JavaScript的很多知识。你还将学习如何利用ECMAScript5和HTML5中的最新功能,包括新的跨域挂件通信技术、HTML5的video和audio元素,以及绘制画布。《JavaS......一起来看看 《JavaScript经典实例》 这本书的介绍吧!