ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 1


本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。

关于Helm

Why Helm?

      

      虽然K8S能够很好地组织和编排容器,但是缺少一个更高层次的应用打包工具,而Helm就是专门干这个事的。

  通过Helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用。同时,也可以通过Helm进行容器云应用的分享。

Helm的架构

Helm的整体架构如下图(图片来源-Kubernetes中文社区)所示:

  

  Helm架构由Helm客户端、Tiller服务器端和Chart仓库所组成;

两个重要概念:

(1)Chart是创建一个应用的信息集合,包括各种K8S对象的配置模板、参数定义等,可以理解为是apt、yum中的软件安装包;

(2)Release是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有没有启动起来:

  (1)Service & Deployment

  

   

        (2)Pod

  

  

        如果看到其Status不是Running,那么很有可能是镜像没有拉取下来,可以曲线救国:即下载可访问的镜像然后修改Tag!

docker 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:

  

Note:Helm安装时会为我们配置好两个仓库,一个是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 --clusterrole=cluster-admin --serviceaccount=kube-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

        这里我们通过以下命令来通过官方仓库安装mysql:

helm install stable/mysql -n=edc-mysql --namespace=edc-charts

  其中,-n 代表 release的名字,--namespace 指定了其所在namespace。

  执行成功之后,会显示一屏幕的提示信息,其中Notes部分包含了release的使用方法,可以重点关注一下。

  这里我们通过以下命令来看看已经部署的release:

helm list

  

   可以看到,该release的状态已经是DEPLOYED,也可以看到其版本号是5.7.27。

  下面再看看service、deployment、pod以及pvc的情况:

  

  

   

        从上图可以看到,由于还没有为mysql准备PV(PersistentVolume,不了解此概念的童鞋可以参考这一篇《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 chart:

helm install stable/mysql -namespace=edc-charts --set mysqlRootPassword=edc123456 -n edison

  验证结果如下图所示:

  

升级和回滚Release

        这里假设我安装的版本是5.7.14,这里我将其先升级为5.7.26来演示:

helm upgrade --set imageTag=5.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 Core,Microservice,Cloud Native,DevOps等技术内容文章,还会与你分享个人生活成长的点滴及各类好书的读书笔记,希望能对你有所帮助,一起成长!


点个【在看】,和更多人一起分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值