这篇文章记录如何安装和使用helm。
什么是 helm
Kubernetes是容器集群管理系统,每个成功的软件平台都有一个优秀的打包系统,比如 Debian、Ubuntu 的 apt,Redhat、Centos 的 yum。而 Helm 则是 Kubernetes 上的包管理器。helm相当于一个应用商店,将一个在云上部署的应用相关的组件全部打包起来,进行安装、升级、管理等。在kubernetes中,我们部署一个标准的应用,以下的应用基本都会使用到:
Service
Secret
PVC
Deployment
ConfigMap
...
helm 有几个概念名词:chart,release和repository。chart就是包,而release代表一个运行实例,Repository是用于发布和存储 Chart 的存储库。helm 的工作,就是将这些yaml配置在更高一个层次,统一起来管理:
新建chart。
更新chart。
在kubernetes中安装和卸载release。
更新、回滚和测试release。
helm 架构
helm 包含两个组件:helm 客户端 和 tiller 服务器:
helm客户端负责管理chart
tiller服务器负责管理release
Repository 是 Chart 存储库,Helm 客户端通过 HTTP 协议来访问存储库中 Chart 的索引文件和压缩包。
helm安装
helm客户端
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
helm version
# 安装helm命令补全脚本
cd ~ && helm completion bash > .helmrc && echo "source .helmrc" >> .bashrc
tiller服务器创建tiller的和
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller然后安装helm服务端tiller
helm init使用指定自己的镜像,因为官方的镜像因为某些原因无法拉取。为应用程序设置:
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'检查是否安装成功:
$ kubectl -n kube-system get pods|grep tiller
tiller-deploy-f5597467b-wdwfl 1/1 Running 0 2h
$ helm version
Client: &version.Version
Server: &version.Version
tips:安装出问题时使用 helm reset && helm init 重置安装。
使用第三方的 Chart 存储库
helm repo add 存储库名 存储库URL
helm repo update关于 Helm 相关命令的说明,您可以参阅Helm 文档鉴于国内使用镜像非常不方便Σ(っ °Д °;)っ,请添加国内的镜像进行使用kube-charts-mirror
helm repo add stable https://burdenbear.github.io/kube-charts-mirror/
使用helm安装应用例子
安装好pv或者storageclass
apiVersion: v1
kind: PersistentVolume
metadata:
name: helm-mysql
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4
nfs:
path: /helm-mysql
server: 172.10.1.100
kubectl apply -f helm-mysql-pv.yml
安装mysql
helm install stable/mysql --name helm-mysql
helm list
helm的使用
参考官方文档。https://docs.helm.sh/
自定义chart
创建一个Chart的骨架:
helm create testapi-chart目录结构如下所示,我们主要关注目录中的这三个文件即可:Chart.yaml、values.yaml和NOTES.txt。
testapi-chart
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml打开Chart.yaml,填写应用的详细信息打开并根据需要编辑values.yaml对Chart进行校验
helm lint testapi-chart对Chart进行打包:
helm package testapi-chart --debug
Successfully packaged chart and saved it to: /var/local/k8s/helm/alpine-0.1.0.tgz
[debug] Successfully saved /var/local/k8s/helm/alpine-0.1.0.tgz to /root/.helm/repository/local安装本地repository中的chart
helm search local
helm install --name example local/mychart --set service.type=NodePort使用Helm serve命令启动一个repo server,该server缺省使用’$HELM_HOME/repository/local’目录作为Chart存储,并在8879端口上提供服务。
helm serve --address 0.0.0.0:8879 &启动本地repo server后,将其加入Helm的repo列表。
helm repo add local http://127.0.0.1:8879
"local" has been added to your repositories现在再查找testapi chart包,就可以找到了。
chart 搜索
helm search
添加源
添加中国的源:
helm repo add stable https://burdenbear.github.io/kube-charts-mirror/参考https://github.com/BurdenBear/kube-charts-mirror
常用命令行
helm list
helm search
helm search mysql --versions
helm repo list
helm serve &
monocular 安装
因为没能把nginx-ingress安装成功,最后选择了Træfik-ingress
Træfik-ingress 安装
官网https://docs.traefik.io/,以下按照 user-guide 进行安装,其实就是两个命令行:
# 创建角色和rbac绑定
$ kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-rbac.yaml
# ServiceAccount, DaemonSet(直接绑定主机端口),service
$ kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml就可以看到效果了:
curl $(minikube ip)
404 page not foundtraefik参照GitHub的教程进行安装:
Install
Configuration
Deployment
Development
config
我创建了一个自己的配置文件,使用 kubernetes helm 国内镜像的配置 custom.yaml
$ cat > custom.yaml
ingress:
hosts:
- monocular.local
annotations:
traefik.frontend.rule.type: PathPrefixStrip
kubernetes.io/ingress.class: traefik
api:
config:
repos:
- name: monocular
url: https://kubernetes-helm.github.io/monocular
source: https://github.com/kubernetes-helm/monocular/tree/master/charts
EOF
添加 repo
helm repo add monocular https://kubernetes-helm.github.io/monocular
安装pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: monocular-mongodb
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
mountOptions:
- hard
- nfsvers=4
nfs:
path: /monocular
server: 172.10.1.100
$ kubectl apply -f monocular-pv.yml
安装 monocular
helm install monocular/monocular --name monocular --set controller.hostNetwork=true -f custom.yaml如果出现错误,重新来过的话,清空重置:
helm del --purge monocular
kubectl delete pv monocular-mongodb获得 ingress 地址:
参考资料
Error: no available release name found #3055
利用 Helm 简化 Kubernetes 应用部署
https://docs.helm.sh/
Monocular UI
https://jimmysong.io/kubernetes-handbook/
kubernetes-helm部署及本地repo搭建
DockOne微信分享(一六九):Helm:强大的Kubernetes包管理工具
Kuberentes Helm 介紹
「滋磁一下」
领取专属 10元无门槛券
私享最新 技术干货