Kubernetes 软件仓库 Helm


原文链接: Kubernetes 软件仓库 Helm

helm 仓库

Helm 基本概念

Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为 Kubernetes 构建的应用,它包含几个基本概念

Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件,
Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
Repository:用于发布和存储 Chart 的仓库。

Helm 组件

Helm 采用客户端 / 服务器架构,有如下组件组成:
Helm CLI 是 Helm 客户端,可以在本地执行;
Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期 ;
Repository 是 Chart 仓库,Helm 客户端通过 HTTP 协议来访问仓库中 Chart 的索引文件和压缩包。
安装 helm 客户端

下载安装 helm 客户端

tar -zxvf helm-v2.8.0-rc.1-linux-amd64.tgz
mv linux-amd64/helm /usr/local/bin/helm
helm help

安装 helm 服务端

因为网络原因,指定 helm 的 repo 为阿里云的 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts。
预先下载好了 gcr.io/kubernetes-helm/tiller:v2.7.0 镜像。
遇到错误 failed to list: configmaps is forbidden: User “system:serviceaccount:kube-system:default” cannot list configmaps in the namespace “kube-system”
执行以下命令创建 serviceaccount tiller 并且给它集群管理权限,使用 tiller 的安装 helm 服务端。

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 -i gcr.io/kubernetes-helm/tiller:v2.7.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

helm 使用

若要查看在存储库中可用的所有 Helm charts,请键入以下命令:

helm search

若遇到 Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误
手动更换 stable 存储库为阿里云的存储库

helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
helm search

卸载 helm 服务端

执行命令,加–force 强制卸载

helm reset 或
helm reset --force

安装 chart 管理 UI monocular

Monocular 是一个开源软件,用于管理 kubernetes 上以 Helm Charts 形式创建的服务,可以通过它的 web 页面来安装 helm Charts。
安装 Nginx Ingress controller
安装的 k8s 集群启用了 RBAC,则一定要加 rbac.create=true 参数。

helm install stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true

安装 Monocular

$ helm repo add monocular https://kubernetes-helm.github.io/monocular
$ helm helm install monocular/monocular -f custom-repos.yaml

custom-repos.yaml 为自己定义的 chart repo 源

cat ../../monocular/custom-repos.yaml
api:
config:

repos:
  - name: stable
    url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts
    source: https://github.com/kubernetes/charts/tree/master/stable
  - name: incubator
    url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator
    source: https://github.com/kubernetes/charts/tree/master/incubator
  - name: monocular
    url: https://kubernetes-helm.github.io/monocular
    source: https://github.com/kubernetes-helm/monocular/tree/master/charts

安装中遇到的问题是如和给 monocular cahrt 中 mongodb 的 PVC 持久化存储,这个就要依赖实践中 kubernetes 的环境了,我使用的 k8s 环境使用 ceph rbd 存储。我首先就要创建一个 default storageclass 给所以未明显指定 storageclass 的 PVC 使用,然后手动创建 rbd image,创建 k8s pv 绑定到 rbd image 上。这样 chart 中 pvc 才会绑定到 pv 上,使用 ceph 存储。删除 chart 的 release 后,还要手动回收 pv。此外,chart 中镜像的下载也费劲。
monocular

目前的 monocular 只能使用 chart 的默认配置来部署 chart 的 release,无法自定义配置值。

`