文档章节

Helm 容器应用包管理工具安装记录

openthings
 openthings
发布于 2018/02/07 18:00
字数 1848
阅读 1521
收藏 1

Helm容器应用包管理工具安装记录

  • 本文在Docker on Mac 18.02上试验通过,Ubuntu16.04+K8S1.10.2上验证可用。

Docker(https://www.docker.com)已经被大量使用,可以从dockerhub(https://www.dockerhub.com)或者私有的Harbor/Registry(https://my.oschina.net/u/2306127/blog/659097)来拉取镜像,快速创建一个虚拟的系统。但对于很多服务来说,往往需要多个docker来共同完成,这可以通过docker compose文件,一次性启动多个docker container,可以运行于swarm模式或者Kubernetes模式,从而提供伸缩能力。

Helm(https://docs.helm.sh/)是基于Kubernetes面向容器的包管理工具,包括客户端、服务端两个主要部分。Helm的包类似于docker compose文件(与Rancher的应用文件也基本类似)。Helm的包以一个目录方式存储,可以放在github.com的代码仓库中进行共享(如:https://github.com/openthings/zhelm-charts),也可以从已有的仓库服务中直接安装,https://kubernetes-charts.storage.googleapis.com/ 是Google维护的chart库,访问该地址可以看到所有的chart列表(需要科学访问),由于这个是Helm的默认主库,因此安装Helm也是要求能够访问这个地址的,否则helm init执行后运行时会异常。也可以搭建自己的Helm服务,而本地一般会在主目录下维护一个.helm的本地仓库。

1、安装Helm

下载安装:

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

或者直接下载,拷贝到/usr/local/bin目录中(或其它目录)运行:

wget -c https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz
tar -vxf helm-v2.9.1-linux-amd64.tar.gz
sudo cp linux-amd64/helm /usr/local/bin

查看版本信息:

helm version

查看状态:

kubectl cluster-info
kubectl config current-context

对于2.9.0/1版本,需要打上补丁,操作如下:

kubectl -n kube-system patch deployment tiller-deploy -p '{"spec": {"template": {"spec": {"automountServiceAccountToken": true}}}}

创建权限设置文件:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

将上面内容保存为helm-rbac-config.yaml,然后运行创建服务账号和kubernetes的访问授权:

kubectl create -f helm-rbac-config.yaml

helm初始化:

helm init --service-account tiller

检查安装是否成功:

kubectl -n kube-system get pods | grep tiller

或者:

kubectl get pods --namespace=kube-system

更新仓库:

helm repo update 
  • 注意,如果出现异常,一般是网络问题。下载镜像需要等待和科学上网。

权限问题

helm init 运行起来了,但是helm list 运行出错,如下。

helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"

这是RABC权限设置问题,参照如下解决(更好的方式时使用前面的rbac-config.yaml配置文件):

kubectl create serviceaccount --namespace kube-system tiller

kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'      
helm init --service-account tiller --upgrade

Kubernetes升级后问题解决:

Kubernetes升级到1.11.2后,helm list出现下面错误:

Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default"

重新运行权限设置和初始化后,运行正常:

# 在kube-system命名空间中创建tiller账户
kubectl create serviceaccount --namespace kube-system tiller

# 创建角色并授予cluster-admin权限
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

# 指定账户进行初始化,别忘了还要指定tiller镜像哦
helm init --service-account tiller --upgrade # --tiller-image

在控制台输入helm,显示helm的主要命令,如下:

Available Commands:
  completion  Generate autocompletions script for the specified shell (bash or zsh)
  create      create a new chart with the given name
  delete      given a release name, delete the release from Kubernetes
  dependency  manage a chart's dependencies
  fetch       download a chart from a repository and (optionally) unpack it in local directory
  get         download a named release
  history     fetch release history
  home        displays the location of HELM_HOME
  init        initialize Helm on both client and server
  inspect     inspect a chart
  install     install a chart archive
  lint        examines a chart for possible issues
  list        list releases
  package     package a chart directory into a chart archive
  plugin      add, list, or remove Helm plugins
  repo        add, list, remove, update, and index chart repositories
  reset       uninstalls Tiller from a cluster
  rollback    roll back a release to a previous revision
  search      search for a keyword in charts
  serve       start a local http web server
  status      displays the status of the named release
  template    locally render templates
  test        test a release
  upgrade     upgrade a release
  verify      verify that a chart at the given path has been signed and is valid
  version     print the client/server version information

Flags:
      --debug                     enable verbose output
  -h, --help                      help for helm
      --home string               location of your Helm config. Overrides $HELM_HOME (default "/Users/wangerqi/.helm")
      --host string               address of Tiller. Overrides $HELM_HOST
      --kube-context string       name of the kubeconfig context to use
      --kubeconfig string         path to kubeconfig file. Overrides $KUBECONFIG
      --tiller-namespace string   namespace of Tiller (default "kube

2、使用Helm

Helm已经有不少内置的应用服务(地址为 https://kubernetes-charts.storage.googleapis.com/), 源文件在 https://github.com/kubernetes/charts  ,建议自己Fork下来,修改后就可以直接使用,我自己做了个镜像( https://github.com/openthings/zhelm-charts ),有一些小的改进。

下面以安装MySQL为例说明Helm的使用:

安装MySQL

可以通过docker run或docker compose文件来启动 MySQL容器。这里,我们使用helm来安装。运行:

helm install stable/mysql

然后,检查容器是否运行:

kubectl get pod

获取MySQL的登录密码:

MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default knotted-pronghorn-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

echo $MYSQL_ROOT_PASSWORD

记录下来,后面登录使用。

创建MySQL客户端,基于Ubuntu:

kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

然后,进入了Ubuntu的控制台,安装mysql的客户端软件:

apt-get update && apt-get install mysql-client -y

登录进mysql:

mysql -h knotted-pronghorn-mysql -p


3、创建自己的Chart

helm里面的包描述文件叫chart,既可以使用kubernetes内置的,也可以创建自己的chart,然后加到仓库里面、安装使用。

  • 建议将自己的chart放到github.com的projects里面,进行版本化管理和共享。

这里介绍创建创建自己chart的方法,在控制台输入:

helm create mongodb

#目录结构如下:
mongodb
├── Chart.yaml #Chart本身的版本和配置信息
├── charts #依赖的chart
├── templates #配置模板目录
│   ├── NOTES.txt #helm提示信息
│   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板
│   ├── deployment.yaml #kubernetes Deployment object
│   └── service.yaml #kubernetes Serivce
└── values.yaml #kubernetes object configuration

目录结构和文件是helm自动生成的,具体的文件内容可以进目录去查看。

先验证、测试一下:

helm install --dry-run --debug mongodb

安装到本地Kubernetes服务中:

helm install  mongodb

查看下该服务在Kubernetes环境下的运行状态:

kubectl get pod

查看Helm仓库:

helm ls

删除仓库中的服务,如:

helm delete mongodb

对该服务打包:

helm package .

注意,因为Kubernetes面向的网络服务集群,helm的后台是通过tiller服务远程执行的(即便位于同一个机器),因此需要tiller服务可用,如果reset集群后,可以通过helm init重新安装。

正常情况下,Kubernetes服务运行状态如下:

kubectl get pod --namespace=kube-system

NAME                                         READY     STATUS    RESTARTS   AGE
etcd-docker-for-desktop                      1/1       Running   0          56m
kube-apiserver-docker-for-desktop            1/1       Running   0          56m
kube-controller-manager-docker-for-desktop   1/1       Running   0          55m
kube-dns-6f4fd4bdf-gv59d                     3/3       Running   0          55m
kube-proxy-r4xnw                             1/1       Running   0          55m
kube-scheduler-docker-for-desktop            1/1       Running   0          57m
kubernetes-dashboard-845747bdd4-v8jg6        1/1       Running   0          25m
tiller-deploy-7594bf7b76-dlxt2               1/1       Running   0          8m

其中的dashboard是一个Kubernetes管理Web可视化面板,可以参照这里安装:

参考:https://docs.bitnami.com/kubernetes/how-to/deploy-application-kubernetes-helm/

© 著作权归作者所有

openthings
粉丝 325
博文 1140
码字总数 689435
作品 1
东城
架构师
私信 提问
加载中

评论(1)

使用Helm 在容器服务k8s集群一键部署wordpress

Helm 是啥? 微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get...

xianlubird
2018/03/09
0
0
如何在Ubuntu里安装Helm

Helm是什么?在战网上玩过暗黑破坏神2代的程序员们应该还记得,Helm是国度的意思。 而在计算机领域,Helm是什么? Helm是Kubernetes的一个包管理工具,有点像nodejs的npm,Ubuntu的apt和Cen...

jerrywangsap
2018/10/02
0
0
Helm 架构 - 每天5分钟玩转 Docker 容器技术(161)

在实践之前,我们先来看看 Helm 的架构。 Helm 有两个重要的概念:chart 和 release。 chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明...

cloudman6
2018/04/29
0
0
直播 | Helm:强大的Kubernetes包管理工具

分享时间:4月24日 20:30 分享主题:Helm:强大的Kubernetes包管理工具 分享人介绍:赵化冰,程序员及开源软件爱好者,目前在NFV&SDN编排开源社区ONAP担任MSB项目负责人,致力于高性能,高可...

m2l0zgssvc7r69efdtj
2018/04/23
0
0
Helm:强大的Kubernetes包管理工具

Helm是Kubernetes生态系统中的一个软件包管理工具。本文将介绍为何要使用Helm进行Kubernetes软件包管理,澄清Helm中使用到的相关概念,并通过一个具体的示例学习如何使用Helm打包,分发,安装...

Docker
2018/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

75、GridFS

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用Mongo DB存储数据,使用FGridFS可以快速集成开发。 工作原理: 在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个...

lianbang_W
23分钟前
4
0
js bind 绑定this指向

本文转载于:专业的前端网站➱js bind 绑定this指向 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>bind函数绑定this指向......

前端老手
25分钟前
4
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
32分钟前
4
0
深入vue-公司分享ppt

组件注册 全局注册 注册组件,传入一个扩展过的构造器 Vue.component('my-component', Vue.extend({/*...*/})) 注册组件,传入一个选项对象(自动调用Vue.extend) Vue.component('my-comp...

莫西摩西
33分钟前
3
0
gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
43分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部