加盟产品网站建设方案,武建安装公司新闻,门户网站建设报告,企业网站排名本篇已加入《.NET Core on K8S学习实践系列文章索引》#xff0c;可以点击查看更多容器化技术相关系列文章。关于HelmWhy Helm#xff1f;虽然K8S能够很好地组织和编排容器#xff0c;但是缺少一个更高层次的应用打包工具#xff0c;而Helm就是专门干这个事的。通过Helm能够… 本篇已加入《.NET Core on K8S学习实践系列文章索引》可以点击查看更多容器化技术相关系列文章。关于HelmWhy Helm 虽然K8S能够很好地组织和编排容器但是缺少一个更高层次的应用打包工具而Helm就是专门干这个事的。 通过Helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用。同时也可以通过Helm进行容器云应用的分享。Helm的架构Helm的整体架构如下图图片来源-Kubernetes中文社区所示 Helm架构由Helm客户端、Tiller服务器端和Chart仓库所组成两个重要概念1Chart是创建一个应用的信息集合包括各种K8S对象的配置模板、参数定义等可以理解为是apt、yum中的软件安装包2Release是Chart的运行实例代表了一个正在运行的应用。 Tiller部署在Kubernetes中Helm客户端从Chart仓库中获取Chart安装包并通过与Tiller服务器的交互将其安装部署到Kubernetes集群中。 简单说来Helm客户端负责管理Chart而 Tiller服务器则负责管理Release。Helm的安装与使用Helm客户端的安装 执行以下命令将Helm客户端安装在能够执行kubectl命令的节点上这里假设我们安装在k8s-master节点上进行示例演示curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash 也可以通过下面的方式安装wget https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gztar -zxvf helm-v2.11.0-linux-amd64.tar.gzcd linux-amd64/cp helm /usr/local/bin/ 验证查看helm版本helm version 补充为了提高使用命令行的效率建议安装helm命令补全脚本命令如下cd ~ helm completion bash .helmrc echo source .helmrc .bashrc 重新登录后就可以方便地通过tab键来补全helm子命令和参数了如下图所示当我们输入helm install --之后按下Tab键就会给我们参数提示了 Tiller服务端的安装 Tiller服务器本身也是作为容器化的一个应用运行在K8S集群中这里我们简单执行下面的命令即可安装Tiller服务helm init 执行以上命令会如下图所示 看到上图中的提示信息代表Helm服务端已经安装成功。 这时我们可以看看Tiller的Service、Deployment和Pod有没有启动起来 1Service Deployment 2Pod 如果看到其Status不是Running那么很有可能是镜像没有拉取下来可以曲线救国即下载可访问的镜像然后修改Tagdocker pull fishead/gcr.io.kubernetes-helm.tiller:v2.11.0docker tag fishead/gcr.io.kubernetes-helm.tiller:v2.11.0 gcr.io/kubernetes-helm/tiller:v2.11.0 这时再次通过helm version命令验证一下 可以看到我们已经可以成功看到客户端和服务端的版本信息了证明客户端和服务端Pod都已经安装成功了Helm的使用准备 Helm安装好后我们可以通过以下helm search来查看当前可安装的Chart NoteHelm安装时会为我们配置好两个仓库一个是stable官方仓库另一个是local本地仓库上图中显示的都是stable官方仓库中的Chart。 为了能够执行install安装我们还需要事先为Tiller服务器添加集群权限防止因Tiller服务器的权限不足而无法install。# 创建serviceaccount资源tiller属于kube-system命名空间kubectl create serviceaccount -n kube-system tiller# 创建 clusterrolebinding资源tiller-cluster-rule集群角色为cluster-admin用户为kube-system:tillerkubectl create clusterrolebinding tiller-cluster-rule --clusterrolecluster-admin --serviceaccountkube-system:tiller# 修改deployment tiller-deploy的配置增加字段spec.template.spec.serviceAccountkubectl patch deploy -n kube-system tiller-deploy -p {spec:{template:{spec:{serviceAccount:tiller}}}} 至此使用Helm的准备工作就到此结束后面我们就可以开始实践安装Chart了MySQL Chart实践初步安装MySQL Chart 这里我们通过以下命令来通过官方仓库安装mysqlhelm install stable/mysql -nedc-mysql --namespaceedc-charts 其中-n 代表 release的名字--namespace 指定了其所在namespace。 执行成功之后会显示一屏幕的提示信息其中Notes部分包含了release的使用方法可以重点关注一下。 这里我们通过以下命令来看看已经部署的releasehelm list 可以看到该release的状态已经是DEPLOYED也可以看到其版本号是5.7.27。 下面再看看service、deployment、pod以及pvc的情况 从上图可以看到由于还没有为mysql准备PVPersistentVolume不了解此概念的童鞋可以参考这一篇《K8S数据管理》导致当前release不可用处于Pending状态。接下来我们就要先解决PV的问题让release能够正常运行起来在此之前为了后续方便演示这里现将此chart删除helm delete edc-mysql为MySQL Chart准备PV 首先按照约定准备一个edc-mysql-pv.yml如下所示apiVersion: v1kind: PersistentVolumemetadata: name: edc-mysql-pvspec: capacity: storage: 8Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain #storageClassName: nfs nfs: path: /edc/k8s/nfsdata/edc-mysql-pv server: k8s-master 这里申请了一个8G的PV用于适配mysql chart的默认配置要求当然我们也可以通过修改自定义values.yaml来修改。定制化安装MySQL Chart Helm有两种方式传递配置参数实现定制化安装一种是指定自定义的values文件另一种是通过--set直接传入参数值。这里我们演示通过第二种这里我们重新安装mysql charthelm install stable/mysql -namespaceedc-charts --set mysqlRootPasswordedc123456 -n edison 验证结果如下图所示 升级和回滚Release 这里假设我安装的版本是5.7.14这里我将其先升级为5.7.26来演示helm upgrade --set imageTag5.7.26 edison stable/mysql 通过查看可以看到image已经换为了5.7.26 通过helm history可以查看release的所有历史版本 Note这里Revision 1是5.7.14版本Revision 2是5.7.26版本Revision 3是5.7.27版本。 这里我们通过helm rollback回退到Revision 1版本即5.7.14版本可以看到已经成功回退到了5.7.14版本 小结本文介绍了K8S的包管理器Helm的基本概念与安装和使用Helm能够帮助我们像使用apt或yum那样管理安装、部署、升级和删除容器化应用。下一篇将会介绍如何自定义一个Chart并基于之前的ASP.NET Core API应用示例将其打包成一个Chart并发到本地的Chart仓库供团队成员使用。恰童鞋骚年风华也许不再正茂但却仍想挥斥方遒。本公众号会长期关注和分享.NET CoreMicroserviceCloud NativeDevOps等技术内容文章还会与你分享个人生活成长的点滴及各类好书的读书笔记希望能对你有所帮助一起成长点个【在看】和更多人一起分享