1 简介
Helm 是K8S中查找、分享、使用软件的最佳方式,它是k8s的包管理器,可以在CNCF Helm Project Journey report 中详细的背景信息。
Helm 有3个核心概念,它们分别是Chart、Repository 和 Release:
- Chart 是一个 Helm 软件包。在k8s 内部,它包含了运行一个应用、工具、服务的全部资源的定义。可以把它等价为K8s中 Homebrew 的 formula、Apt 的dpkg、Yum 的RPM文件。
- Repository 用于收集和分享 Charts。它类似于 Perl’s CPAN archive 或者 Fedora 的包数据库,但它专用于K8S。
- Release 是运行在K8S集群中的一个chart 实例,一个chart 可以被多次安装到同一个集群中,每次安装的时候都会创建一个新的release。以mysql chart为例子,若需要在k8s中安装2个数据库,则需要安装对应的mysql chart两次;每次安装都会生成一个release,每个release都具备其自己唯一的名称。
2 安装&常用命令
2.1 安装
- 下载并解压安装包
更多安装方法参考:docs/intro/install1) 下载helm # wget https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz # tar zxvf helm-v3.4.2-linux-amd64.tar.gz # cp linux-amd64/helm /usr/local/bin/helm 2)测试helm $ helm version version.BuildInfo{ Version:"v3.4.2", GitCommit:"23dd3af5e19a02d4f4baa5b2f242645a1a3af629", GitTreeState:"clean", GoVersion:"go1.14.13"} 3)添加helm仓库 $ helm repo add stable https://charts.helm.sh/stable "stable" has been added to your repositories 注: 安装snap的系统,可以直接使用 snap install helm 来安装
2. 测试
查看repo 中可用的 charts$ helm search repo stable
2.2 常见命令
当前helm包括了24个一级子命令,大致如下,以下对一些常见的命令加以介绍,后续会根据使用情况持续在此处更新。
- completion - generate autocompletions script for the specified shell
实现 bash 下 helm 命令的自动补全功能 $ source <(helm completion bash)
- create - create a new chart with the given name
- dependency - manage a chart’s dependencies
- env - helm client environment information
- get - download extended information of a named release
- help - Help about any command
查看帮助文档 - history - fetch release history
- install - install a chart
helm install chart-name [可选参数],例如 helm install kubeapps --namespace kubeapps bitnami/kubeapps 可以用于安装kubeapps,制定ns为kubeapps
- lint - examine a chart for possible issues
- list - list releases
获取当前部署的charms$ helm list -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION kubeapps kubeapps 1 2020-12-22 18:11:22.574194371 +0800 CST deployed kubeapps-5.0.0 2.0.1 mysql-5730 default 1 2020-12-22 01:40:55.176205744 +0800 CST deployed mysql-1.6.9 5.7.30
- package - package a chart directory into a chart archive
- plugin - install, list, or uninstall Helm plugins
- pull - download a chart from a repository and (optionally) unpack it in local directory
- repo - add, list, remove, update, and index chart repositories
更新确保获取最新的charts $ helm repo update
- rollback - roll back a release to a previous revision
- search - search for a keyword in charts
查看repo 中可用的 charts$ helm search repo stable
- show - show information of a chart
- status - display the status of the named release
- template - locally render templates
- test - run tests for a release
- uninstall - uninstall a release
helm install release-name
- upgrade - upgrade a release
- verify - verify that a chart at the given path has been signed and is valid
- version - print the client version information
查看客户端版本信息
3 安装 kubeapps
- helm安装&端口转发
1) 添加kubeapps repo helm repo add bitnami https://charts.bitnami.com/bitnami 2)创建ns kubectl create namespace kubeapps 3)安装kubeapps helm install kubeapps --namespace kubeapps bitnami/kubeapps 输出: Kubeapps can be accessed via port 80 on the following DNS name from within your cluster: kubeapps.kubeapps.svc.cluster.local To access Kubeapps from outside your K8s cluster, follow the steps below: 2. Get the Kubeapps URL by running these commands: echo "Kubeapps URL: http://127.0.0.1:8080" kubectl port-forward --namespace kubeapps service/kubeapps 8080:80 3. Open a browser and access Kubeapps using the obtained URL. 4) 端口转发 此处添加 --address 0.0.0.0 参数,确保非本机也可以访问 kubectl port-forward --namespace kubeapps --address 0.0.0.0 service/kubeapps 8080:80
- 更新service
若使用 kubectl port-forward 转发后,可以直接通过转发的机器IP:8080端口来访问,实际中可以考虑使用k8s的service nodePort来实现外部访问,笔者习惯使用nodePort 来访问kubectl edit -n kubeapps service kubeapps 此处为vspecv中的内容,需要添加nodePort:32080 和type:NodePort spec: ports: - name: http protocol: TCP port: 80 targetPort: http nodePort: 32080 selector: app: kubeapps release: kubeapps clusterIP: 10.1.26.128 type: NodePort sessionAffinity: None externalTrafficPolicy: Cluster
- 获取key
$ kubectl create serviceaccount kubeapps-operator serviceaccount/kubeapps-operator created $ kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator clusterrolebinding.rbac.authorization.k8s.io/kubeapps-operator created 获取token $ kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{range .secrets[*]}{.name}{"\n"}{end}' | grep kubeapps-operator-token) -o jsonpath='{.data.token}' -o go-template='{ {.data.token | base64decode}}' && echo eyJhbGciOiJSUzI1NiIsImtpZCI6IkNTMnRQbUVjanYxT0NDb05WUFM5SU1Pd3l0YXBOYS05UTFURGxsS2dxY0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuLWtjdmdkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZDYwNzExZTMtNDY0My00N2E4LTkwZTktNzBkNjdmZDlmYzE2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.j-80jBt32_UZ5fHzgtAJPUeVfBsZQgWs1IopEdzU2n-p8AYohzYrh17NjGQcRqkjQaBRbxpHE3eNvLHyXUmMF8UZTVNlh-BpvnlXSqvSxV_JDxnOZ9TBQLFAP6bq13xoBlzZqZac4g12P_4yu0QXKp5I5aMezddytTtmR0O6yotxX5R-BJIcn-xoZiCAZK3rC1aQIxY3LT3msz4lihmhG2BgydcCxy5V16RFwQsuV7y0J4LQdQZUr_ppAIA0TgDVmB3NffxQ81CJRBusemYhLtKssBYkYYt23sQXaZ3sXWSlOeZBRUUPeox9aJmybx5s0ufi5UwPANjg2Dj7Kx8NJw
- 测试效果
通过 http://nodeIP:32080 来访问Kubeapps,输入步骤 3 中的 token即可登陆,主界面如下:
使用Kubeapps后,可以在Catalog 中搜索到常见的 helm 应用,修改相关参数即可快速部署应用了。
4 注意事项
- helm v2 版本需要 helm init来初始化, helm v3 取消了 init 命令,无需执行 init 开箱即可使用。
- 为了提高使用效率,可以把以下参数加到 .bashrc 中
source <(helm completion bash) helm repo add stable https://charts.helm.sh/stable & helm repo add bitnami https://charts.bitnami.com/bitnami &
5 说明
- 参考文档
1 helm 官方文档
2 helm github releases
3 kubeapp(github) getting-started - 环境说明
测试系统 ubuntu 18.04 server
测试helm 版本 helm-v3.4.2-linux-amd64
k8s 版本 1.19.4