k8s插件helm部署 野性酷女 2024-04-17 19:42 19阅读 0赞 ### 一、helm简介 ### 很多人都使用过Ubuntu下的ap-get或者CentOS下的yum,这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用,用户则可以以简单的方式查找、安装、升级、卸载应用程序。 我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。 对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。 对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。 除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。 ### 二、Helm组件及相关术语 ### **Helm** Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。 **Tiller** Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能**。** **Chart** Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。 **Repoistory** Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。 **Release** 使用 `helm install` 命令在 Kubernetes 集群中部署的 Chart 称为 Release。 注:需要注意的是:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例。 ### 三、Helm工作原理 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjU5NTAxMg_size_16_color_FFFFFF_t_70][] **Chart Install 过程** Helm从指定的目录或者tgz文件中解析出Chart结构信息 Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller Tiller根据Chart和Values生成一个Release Tiller将Release发送给Kubernetes用于生成Release **Chart Update过程** Helm从指定的目录或者tgz文件中解析出Chart结构信息 Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller Tiller生成Release并更新指定名称的Release的History Tiller将Release发送给Kubernetes用于更新Release **Chart Rollback过程** Helm将要回滚的Release的名称传递给Tiller Tiller根据Release的名称查找History Tiller从History中获取上一个Release Tiller将上一个Release发送给Kubernetes用于替换当前Release ### 四、安装配置Helm ### **安装helm** 仓库地址: https://github.com/helm/helm/releases #根据需要下载对应版本 wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.3-linux-amd64.tar.gz tar zxf helm-v2.14.3-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/ #helm使用方法 helm help **为Tiller配置授权帐号** cat << EOF > tiller.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system EOF kubectl apply -f tiller.yaml **安装服务端Tiller** helm init --service-account tiller -i registry.aliyuncs.com/google_containers/tiller:v2.14.3 --skip-refresh helm初始化默认使用gcr.io源,由于国内正常无法访问,所以这里使了用阿里源。 注意tiller版本要和helm版本相同。 **验证Tiller是否运行** [root@master1 ~]# kubectl get pods -n kube-system -l name=tiller NAME READY STATUS RESTARTS AGE tiller-deploy-96f5d9ff4-ctswl 1/1 Running 0 ### 五、使用helm ### **1)更换仓库** 若遇到错误:Unable to get an update from the “stable” chart repository ([https://kubernetes-charts.storage.googleapis.com][https_kubernetes-charts.storage.googleapis.com]) , 可手动更换 stable 存储库为阿里云的存储库。 # 先移除原先的仓库 helm repo remove stable # 添加新的仓库地址 helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts # 更新仓库 helm repo update 2)查看在存储库中可用的所有 Helm charts [root@master1 ingress-nginx]# helm search NAME CHART VERSION APP VERSION DESCRIPTION stable/acs-engine-autoscaler 2.2.2 2.1.1 DEPRECATED Scales worker nodes within agent pools stable/aerospike 0.2.8 v4.5.0.5 A Helm chart for Aerospike in Kubernetes stable/airflow 4.0.7 1.10.4 Airflow is a platform to programmatically author, schedul... stable/ambassador 3.3.2 0.76.0 A Helm chart for Datawire Ambassador stable/anchore-engine 1.2.1 0.4.2 Anchore container analysis and policy evaluation engine s... stable/apm-server 2.1.4 7.0.0 The server receives data from the Elastic APM agents and ... stable/ark 4.2.2 0.10.2 DEPRECATED A Helm chart for ark ... 3)更新charts列表 helm repo update 4)安装charts 安装Nginx Ingress controller,安装的k8s集群启用了RBAC,则一定要加rbac.create=true参数. helm install stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true Monocular是一个开源软件,用于管理kubernetes上以Helm Charts形式创建的服务,可以通过它的web页面来安装helm Charts. # 添加新的源 helm repo add monocular https://kubernetes-helm.github.io/monocular # 安装 helm install monocular/monocular -f custom-repos.yaml # custom-repos.yaml 内容 api: config: repos: - name: stable url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts source: https://github.com/kubernetes/charts/tree/master/stable - name: incubator url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator source: https://github.com/kubernetes/charts/tree/master/incubator - name: monocular url: https://kubernetes-helm.github.io/monocular source: https://github.com/kubernetes-helm/monocular/tree/master/charts 5)查看K8S中已安装的charts helm list NAME REVISION UPDATED STATUS CHART NAMESPACE amber-seal 1 Mon Jul 2 17:29:25 2018 DEPLOYED nginx-ingress-0.9.5 default my-release 1 Mon Jul 2 15:19:44 2018 DEPLOYED spark-0.1.10 default nonplussed-panther 1 Mon Jul 2 17:27:41 2018 FAILED nginx-ingress-0.9.5 default turbulent-tuatara 1 Mon Jul 2 17:31:33 2018 DEPLOYED monocular-0.6.2 default 6)删除安装的charts # 删除:helm delete xxx helm delete amber-seal 7)查看charts详细信息 helm inspect chartname 8)release操作 #查看当前集群中部署的release helm list #查看release的状态 helm status releasename #查看release历史版本 helm history releasename #升级release helm upgrade releasename chartname 选项 #回滚release helm rollback releasename 版本号 选项 #删除release helm delete releasename 选项 ### 六、Helm Chart 结构 ### **Chart 目录结构** examples/ Chart.yaml # Yaml文件,用于描述Chart的基本信息,包括名称版本等 LICENSE # [可选] 协议 README.md # [可选] 当前Chart的介绍 values.yaml # Chart的默认配置文件 requirements.yaml # [可选] 用于存放当前Chart依赖的其它Chart的说明文件 charts/ # [可选]: 该目录中放置当前Chart依赖的其它Chart templates/ # [可选]: 部署文件模版目录,模版使用的值来自values.yaml和由Tiller提供的值 templates/NOTES.txt # [可选]: 放置Chart的使用指南 **Chart.yaml 文件** name: [必须] Chart的名称 version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/ description: [可选] Chart的简要描述 keywords: - [可选] 关键字列表 home: [可选] 项目地址 sources: - [可选] 当前Chart的下载地址列表 maintainers: # [可选] - name: [必须] 名字 email: [可选] 邮箱 engine: gotpl # [可选] 模版引擎,默认值是gotpl icon: [可选] 一个SVG或PNG格式的图片地址 **requirements.yaml 和 charts目录** dependencies: - name: example version: 1.2.3 repository: http://example.com/charts - name: Chart名称 version: Chart版本 repository: 该Chart所在的仓库地址 Chart支持两种方式表示依赖关系,可以使用requirements.yaml或者直接将依赖的Chart放置到charts目录中。 **templates 目录** templates目录中存放了Kubernetes部署文件的模版。 # db.yaml apiVersion: v1 kind: ReplicationController metadata: name: deis-database namespace: deis labels: heritage: deis spec: replicas: 1 selector: app: deis-database template: metadata: labels: app: deis-database spec: serviceAccount: deis-database containers: - name: deis-database image: { {.Values.imageRegistry}}/postgres:{ {.Values.dockerTag}} imagePullPolicy: { {.Values.pullPolicy}} ports: - containerPort: 5432 env: - name: DATABASE_STORAGE value: { {default "minio" .Values.storage}} 模版语法扩展了 golang/text/template的语法 # 这种方式定义的模版,会去除test模版尾部所有的空行 { {- define "test"}} 模版内容 { {- end}} # 去除test模版头部的第一个空行 { {- template "test" }} [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjU5NTAxMg_size_16_color_FFFFFF_t_70]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/17/c1852382464c47068b2f7b01e12f2aea.png [https_kubernetes-charts.storage.googleapis.com]: https://kubernetes-charts.storage.googleapis.com
还没有评论,来说两句吧...