第五篇 kubernetes 部署Helm包管理工具

摘要:
Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。Helm产生原因利用Kubernetes部署一个应用,需要Kubernetes原生资源文件如deployment、replicationcontroller、service或pod等。Tillerserver主要负责如下:1.监听来自Helmclient的请求2通过chart及其配置构建一次发布3安装chart到Kubernetes集群,并跟踪随后的发布4.通过与Kubernetes交互升级或卸载chart简单的说,client管理charts,而server管理发布release。

1.Kubernetes应用部署工具-Helm简介

随着业务容器化与向微服务架构转变,通过分解巨大的单体应用为多个服务的方式,
分解了单体应用的复杂性,使每个微服务都可以独立部署和扩展,实现了敏捷开发和快速迭代和部署。
但任何事情都有两面性,虽然微服务给我们带来了很多便利,但由于应用被拆分成多个组件,导致服务数量大幅增加,
对于Kubernetest编排来说,每个组件有自己的资源文件,并且可以独立的部署与伸缩,
这给采用Kubernetes做应用编排带来了诸多挑战:

1.管理、编辑与更新大量的K8s配置文件
2.部署一个含有大量配置文件的复杂K8s应用
3.分享和复用K8s配置和应用
4.参数化配置模板支持多个环境
5.管理应用的发布:回滚、diff和查看发布历史
6.控制一个部署周期中的某一些环节
7.发布后的验证

而Helm恰好可以帮助我们解决上面问题!

Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。
通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。

Helm产生原因

利用Kubernetes部署一个应用,需要Kubernetes原生资源文件如deployment、replicationcontroller、service或pod 等。
而对于一个复杂的应用,会有很多类似上面的资源描述文件,如果有更新或回滚应用的需求,
可能要修改和维护所涉及的大量资源文件,且由于缺少对发布过的应用版本管理和控制,
使Kubernetes上的应用维护和更新等面临诸多的挑战。

Helm架构
Helm基本架构如下:
第五篇 kubernetes 部署Helm包管理工具第1张
Helm用途

#做为Kubernetes的一个包管理工具,Helm具有如下功能:
1.创建新的chart
2.chart打包成tgz格式
3.上传chart到chart仓库或从仓库中下载chart
4.在Kubernetes集群中安装或卸载chart
5.管理用Helm安装的chart的发布周期

#Helm有三个重要概念:

chart:包含了创建Kubernetes的一个应用实例的必要信息
config:包含了应用发布配置信息
release:是一个chart及其配置的一个运行实例

#Helm组件:Helm有以下两个组成部分:

Helm Client是用户命令行工具,其主要负责如下:
1.本地chart开发
2.仓库管理
3.与Tiller sever交互
4.发送预安装的chart
5.查询release信息
6.要求升级或卸载已存在的release
7.Tiller Server是一个部署在Kubernetes集群内部的server,其与Helm client、Kubernetes API server进行交互。

Tiller server主要负责如下:
1.监听来自Helm client的请求
2通过chart及其配置构建一次发布
3安装chart到Kubernetes集群,并跟踪随后的发布
4.通过与Kubernetes交互升级或卸载chart

简单的说,client管理charts,而server管理发布release。

Helm实现

#Helm client
Helm client采用go语言编写,采用gRPC协议与Tiller server交互。

#Helm server
Tiller server也同样采用go语言编写,提供了gRPC server与client进行交互,利用Kubernetes client 库与Kubernetes进行通信,当前库使用了REST+JSON格式。
Tiller server 没有自己的数据库,目前使用Kubernetes的ConfigMaps存储相关信息

2.k8s 部署Helm包管理工具

方式一:使用官方提供的脚本一键安装

#curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
#chmod 700 get_helm.sh
# ./get_helm.sh

方式二:手动下载安装
#Helm client安装
(1)#下载 Helm 2.17.0  的二进制安装包
在hosts 中追加一条解析:
216.58.199.16 kubernetes-charts.storage.googleapis.com

# mkdir /root/k8s/helm
# cd /root/k8s/helm/
#wget https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz
#ls
helm-v2.17.0-linux-amd64.tar.gz


(2)#解开压缩包
#tar -zxvf helm-v2.17.0-linux-amd64.tar.gz

(3)#helm二进制文件移到/usr/local/bin目录。
#cp linux-amd64/helm /usr/local/bin/helm
#helm help
# chmod +x /usr/local/bin/helm 
#设置命令自动补全
# echo 'source <(helm completion bash)' >> /etc/profile
#. /etc/profile 


#Helm Tiller安装

Helm Tiller是Helm的server,Tiller有多种安装方式,比如本地安装或以pod形式部署到Kubernetes集群中。
本文以pod安装为例,安装Tiller的最简单方式是helm init, 该命令会检查helm本地环境设置是否正确,
helm init会连接kubectl默认连接的kubernetes集群(可以通过kubectl config view查看),
一旦连接集群成功,tiller会被安装到kube-system namespace中。

执行helm init,该命令会在当前目录下创建helm文件夹即~/.helm,并且通过Kubernetes Deployment 部署tiller. 检查Tiller是否成功安装:

#cd /root/k8s/helm

创建RBAC角色并绑定
#kubectl create serviceaccount --namespace kube-system tiller
#kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
开始初始化安装
#helm init --service-account=tiller   #Tiller server的环境初始化
更换SA用户
# kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

第五篇 kubernetes 部署Helm包管理工具第2张
第五篇 kubernetes 部署Helm包管理工具第3张

# helm repo list
NAME  	URL
stable	https://charts.helm.sh/stable
local 	http://127.0.0.1:8879/charts
#Helm TILLER删除
由于 Tiller的数据存储于Kubernetes ConfigMap中,所以删除、升降级Tiller,原Helm部署的应用数据并不会丢失。
删除Tiller:
# helm reset

3.测试helm是否可以正常使用

# helm search mysql      #搜索MySQL
#查看到的是charts包文件,查出来的版本是helm的Charts包的版本
# helm inspect stable/mysql    #查看其详细信息
# helm fetch stable/mysql        #下载搜索到的包到本地
# helm install stable/mysql       #在线安装这个MySQL

4.Helm 常用操作

查看版本 
#helm version

查看当前安装的charts
#helm list

查询 charts
#helm search nginx

下载远程安装包到本地。
#helm fetch rancher-stable/rancher

查看package详细信息
#helm inspect chart

安装charts
#helm install --name nginx --namespaces prod bitnami/nginx

查看charts状态
#helm status nginx

删除charts
#helm delete --purge nginx

增加repo
#helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#helm repo add --username admin --password password myps https://harbor.pt1.cn/chartrepo/charts

更新repo仓库资源
#helm repo update

创建charts
#helm create helm_charts

测试charts语法
#helm lint 

打包charts
#cd helm_charts && helm package ./

查看生成的yaml文件
#helm  template  helm_charts-0.1.1.tgz

更新image
#helm upgrade --set image.tag=‘v201908‘ test update myharbor/study-api-en-oral

回滚relase
#helm rollback 2

自定义 package 的选项:
查询支持的选项
#helm inspect values stable/mysql

自定义 password 持久化存储
#helm install --name db-mysql --set mysqlRootPassword=anoyi  stable/mysql

查询 charts
#helm search mysql

查询 package 详细信息
#helm inspect stable/mysql

部署 package
#helm install stable/mysql

查看服务状态
#helm status existing-serval

删除服务
#helm delete --purge existing-serval
-
release "existing-serval" deleted
-
再次查看显示状态为删除
#helm status existing-serval 
-
LAST DEPLOYED: Mon Aug 12 19:09:51 2019
NAMESPACE: default
STATUS: DELETED
-
部署之前可以自定义 package 的选项:
查询支持的选项
#helm inspect values stable/mysql

自定义 password 持久化存储
#helm install --name pttestdb --set mysqlRootPassword=test  stable/mysql

查看密码变量
#helm get values  pttestdb
-
mysqlRootPassword: test
-

本文至此就结束了!
官网地址:https://helm.sh/zh/
第五篇 kubernetes 部署Helm包管理工具第4张

免责声明:文章转载自《第五篇 kubernetes 部署Helm包管理工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇下载特定区域内百度街景照片数据Python+paramiko实现绕过跳板机免密登录服务端下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

云原生时代消息中间件的演进路线

引言 本文以一张云进化历史图开场,来谈谈云原生时代消息中间件的演进路线,但本文绝对不是“开局一张图,内容全靠编”。 从虚拟化技术诞生以来,IaaS/PaaS/SaaS概念陆续被提了出来,各种容器技术层出不穷。到2015年,Cloud Native概念应运而生,一时间,各种云厂商,云服务以及云应用都加上了“云原生”前缀。 我们也一直在思考,传统的消息中间件...

redis-ha

Reids Redis是高级键值缓存和存储。它通常被称为数据缓存服务器,因为键可以包含字符串,哈希,列表,集合,排序集合,位图和超级日志。 TL;DR; $ helm install stable/redis-ha 默认情况下,此图表总共安装3个Pod: 一个pod包含Redis主容器和哨兵容器(提供可选的Prometheus指标导出器Sidecar)...

K8s容器资源限制

在K8s中定义Pod中运行容器有两个维度的限制:1. 资源需求:即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如: Pod运行至少需要2G内存,1核CPU2. 资源限额:即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。 # kubectl describe node node1.zcf.com...

安装 Flannel 报错:network plugin is not ready: cni config uninitialized

本次部署 Kubernetes 1.13.3 版本,使用 kubeadm 方式进行部署,当部署 Flannel 网络时出现如下报错: [root@k8s-master01 ~]# journalctl -fu kubelet 7月 09 10:19:56 k8s-master01 kubelet[41802]: W0709 10:19:56.859190...

K8S部署之kubeadm

K8S部署笔记 一、集群环境说明 主机名 IP地址 说明 k8s-master01 192.168.1.107 master节点 k8s-master02 192.168.1.108 master节点 k8s-master03 192.168.1.109 master节点 k8s-master-lb(在master节点) 192.16...

基于kuboard管理k8s

前言 昨天我们分享了本地springboot项目构建docker镜像的内容,详细介绍了springboot项目打包、镜像构建、基于docker启动运行的全过程,这个技术虽然不是特别难,但是很实用,因为镜像构建完成后,我们不仅可以让我们的服务在docker中运行,也可以让它在k8s中运行,今天我们就来看下如何通过kuboard在k8s上部署我们的服务。 今天...