k8s-helm-二十四

一、介绍

Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。

yum不光要解决包之间的依赖关系,还要提供具体的程序包。但是helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com等;

Helm有如下几个基本概念:

  • Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。每个Chart包含下面两部分:
    • 包的基本描述文件Chart.yaml
    • 放在templates目录中的一个或多个Kubernetes manifest文件模板
  • Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次
  • Repository:chart的仓库,用于发布和存储chart

helm提供了一个应用所需要的所有清单文件。比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件。我们把这三个文件打包到一起,就是一个应用程序的程序包,我们称之为Chart。

Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。

helm是工作在k8s集群之外的。helm不直接操作apiserver,而是和Tiller交互。Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值(值文件),最后部署成为release。

在helm工作中,helm先去检查chart是否存在,存在就把chart下载到helm本机当前用户的家目录下。然后helm把chart交给tiller,tiller再和api server交互。api server一旦把chart部署在k8s集群上,就不再叫chart了,而叫release。

所以,一个chart赋值不同,完全可以部署出多个release出来的,所以我们可以把chart看做是一个安装包的模板。

如果发现chart更新了,helm就自动滚动更新,而且helm还支持一键回滚的操作。

image

 

二、安装helm

一般helm是安装在k8s集群之外,这里我们就安装在master上了;

https://github.com/helm/helm/releases

image

下载压缩包,并解压:

[root@master src]# tar zxf helm-v2.9.1-linux-amd64.tar.gz

[root@master src]# ls
helm-v2.9.1-linux-amd64.tar.gz   linux-amd64 

[root@master src]# cd linux-amd64/    #解压后名字是 linux-amd64

[root@master linux-amd64]# ls
helm  LICENSE  README.md

[root@master linux-amd64]# mv helm /usr/bin/    #直接就能用

[root@master linux-amd64]# helm -h        #查看帮助

 

三、部署Tiller

(1)Tiller运行在K8s集群之上,也必须拥有集群的管理权限,也就是需要一个serviceaccount,创建一个clusterrolebinding到cluster-admin

rbac配置示例文件: https://github.com/helm/helm/blob/master/docs/rbac.md

[root@master helm]# pwd
/root/manifests/helm

#资源定义清单
[root@master helm]# vim tiller-rbac.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

#创建
[root@master helm]# kubectl apply -f tiller-rbac.yaml 
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created

[root@master helm]# kubectl get sa -n kube-system |grep tiller 
tiller                               1         107s

(2)初始化

进行初始化时,会用到gcr.io/kubernetes-helm中的镜像,可以提前去阿里云下载、打标,镜像标签要和Helm版本号相同;

#初始化
[root@master helm]# helm init
Creating /root/.helm 
Creating /root/.helm/repository 
Creating /root/.helm/repository/cache 
Creating /root/.helm/repository/local 
Creating /root/.helm/plugins 
Creating /root/.helm/starters 
Creating /root/.helm/cache/archive 
Creating /root/.helm/repository/repositories.yaml 
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 
Adding local repo with URL: http://127.0.0.1:8879/charts 
$HELM_HOME has been configured at /root/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

#查看,pod起来了
[root@master helm]# kubectl get pods -n kube-system |grep tiller
tiller-deploy-86c9995bb6-6mnvb           1/1     Running   0          49s

#查看server、client
[root@master helm]# helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

 

四、使用helm

(1)

官方可用的Chart仓库列表: https://hub.kubeapps.com

可以搜索charts

image

也可以使用helm命令搜索;

[root@master helm]# helm search redis
NAME                                CHART VERSION    APP VERSION    DESCRIPTION                                       
stable/prometheus-redis-exporter    1.0.2            0.28.0         Prometheus exporter for Redis metrics             
stable/redis                        6.4.3            4.0.14         Open source, advanced key-value store. It is of...
stable/redis-ha                     3.3.3            5.0.3          Highly available Kubernetes implementation of R...
stable/sensu                        0.2.3            0.28           Sensu monitoring framework backed by the Redis ...

(2)helm常用命令:

helm常用命令:
- helm search:    搜索charts
- helm fetch:     下载charts到本地目录
- helm install:   安装charts
- helm list:      列出charts的所有版本

用法:
  helm [command]

命令可用选项:
  completion  为指定的shell生成自动补全脚本(bash或zsh)
  create      创建一个新的charts
  delete      删除指定版本的release
  dependency  管理charts的依赖
  fetch       下载charts并解压到本地目录
  get         下载一个release
  history     release历史信息
  home        显示helm的家目录
  init        在客户端和服务端初始化helm
  inspect     查看charts的详细信息
  install     安装charts
  lint        检测包的存在问题
  list        列出release
  package     将chart目录进行打包
  plugin      add(增加), list(列出), or remove(移除) Helm 插件
  repo        add(增加), list(列出), remove(移除), update(更新), and index(索引) chart仓库
  reset       卸载tiller
  rollback    release版本回滚
  search      关键字搜索chart
  serve       启动一个本地的http server
  status      查看release状态信息
  template    本地模板
  test        release测试
  upgrade     release更新
  verify      验证chart的签名和有效期
  version     打印客户端和服务端的版本信息

(3)helm仓库

Helm 安装时已经默认配置好了两个仓库:stablelocalstable 是官方仓库,local 是用户存放自己开发的chart的本地仓库。

[root@master .helm]# helm repo list
NAME      URL                                             
stable    https://kubernetes-charts.storage.googleapis.com
local     http://127.0.0.1:8879/chart
posted @ 2019-04-01 11:15  米兰的小铁將  阅读(470)  评论(0编辑  收藏  举报