Why Helm?
Helm 是由 Deis 发起的一个开源工具,是Kubernetes中的包管理器,类似yum包管理工具,yum用来安装RPM包,而Helm用来安装charts,这里的charts便类似RPM软件包,有助于简化部署和管理 Kubernetes 应用。
Helm基本概念
Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件。
Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
Repository:用于发布和存储 Chart 的仓库。
helm 安装
vi inventory/group_vars/k8s-cluster.yml
helm_enabled: true
vi roles/download/defaults/main.yml
helm_image_repo: "registry.cn-hangzhou.aliyuncs.com/linkcloud/k8s-helm"
tiller_image_repo: "registry.cn-hangzhou.aliyuncs.com/linkcloud/tiller"
ansible-playbook -b -i inventory/inventory.cfg cluster.yml --tags="helm"
安装确认
helm repo list
helm list
Chart 仓库
存放chart的地方,可以分享给其他人使用。本质上只是个http的server,有index.yaml,以及做好的chart。
默认安装好有个名为stable的仓库,路径为https://kubernetes-charts.storage.googleapis.com
对应的制作chart的源代码在 https://github.com/kubernetes/charts/tree/master/stable
结构
比如仓库https://example.com/charts
他的内部结构是
charts/
|
|- index.yaml
|
|- alpine-0.1.2.tgz
|
|- alpine-0.1.2.tgz.prov
制作自己的仓库-基于github page
在github项目里面,进入setting,GitHub Pages,source配置为master branch的docs。然后系统会提示你比如https://xxxx.github.io/charts/
这样,我们放入项目的docs目录会变成server的根目录,server地址就是https://xxxx.github.io/charts/.
创建chart
创建目录,比如test,在test目录写好你需要的chart的源码,helm package test. 将打包好的拷贝到docs目录下面,helm repo index docs --url https://xxxxx.github.io/charts
然后更新好github,这样仓库就会增加chart
添加仓库
helm repo add xxxx https://xxxxx.github.io/charts
安装chart
helm install xxxx/test
helm chart 可视化 monocular
monocular是用来可视化查看仓库的chart和已经安装的chart,可以添加不同的chart仓库,从仓库安装各种chart
安装
前提需要安装 ingress controller 和 cert-manager;
values.yaml 细节根据自己需要修改
helm install stable/nginx-ingress --name nginx-ingress-0 -f values.yaml --version 0.11.1
helm install stable/cert-manager --name cert-manager-0 -f values.yaml
添加集群证书颁发者
vi clusterissuer.yaml
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v01.api.letsencrypt.org/directory
email: 1804005856@@qq.com
privateKeySecretRef:
name: letsencrypt-prod
http01: {}
kubectl create -f clusterissuer.yaml
安装monocular
helm repo add monocular https://kubernetes-helm.github.io/monocular
helm install monocular/monocular -f values.yaml