k8s笔记7--快速入门helm

1 简介

Helm 是K8S中查找、分享、使用软件的最佳方式,它是k8s的包管理器,可以在CNCF Helm Project Journey report 中详细的背景信息。

Helm 有3个核心概念,它们分别是Chart、Repository 和 Release:

  1. Chart 是一个 Helm 软件包。在k8s 内部,它包含了运行一个应用、工具、服务的全部资源的定义。可以把它等价为K8s中 Homebrew 的 formula、Apt 的dpkg、Yum 的RPM文件。
  2. Repository 用于收集和分享 Charts。它类似于 Perl’s CPAN archive 或者 Fedora 的包数据库,但它专用于K8S。
  3. Release 是运行在K8S集群中的一个chart 实例,一个chart 可以被多次安装到同一个集群中,每次安装的时候都会创建一个新的release。以mysql chart为例子,若需要在k8s中安装2个数据库,则需要安装对应的mysql chart两次;每次安装都会生成一个release,每个release都具备其自己唯一的名称。

2 安装&常用命令

2.1 安装

  1. 下载并解压安装包
    1) 下载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 来安装
    
    更多安装方法参考:docs/intro/install
    2. 测试
    查看repo 中可用的 charts
    $ helm search repo stable  
    
    在这里插入图片描述

2.2 常见命令

当前helm包括了24个一级子命令,大致如下,以下对一些常见的命令加以介绍,后续会根据使用情况持续在此处更新。

  1. completion - generate autocompletions script for the specified shell
    实现 bash 下 helm 命令的自动补全功能
    $ source <(helm  completion bash)
    
  2. create - create a new chart with the given name
  3. dependency - manage a chart’s dependencies
  4. env - helm client environment information
  5. get - download extended information of a named release
  6. help - Help about any command
    查看帮助文档
  7. history - fetch release history
  8. install - install a chart
    helm install chart-name [可选参数],例如
    helm install kubeapps --namespace kubeapps bitnami/kubeapps 可以用于安装kubeapps,制定ns为kubeapps
    
  9. lint - examine a chart for possible issues
  10. 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 
    
  11. package - package a chart directory into a chart archive
  12. plugin - install, list, or uninstall Helm plugins
  13. pull - download a chart from a repository and (optionally) unpack it in local directory
  14. repo - add, list, remove, update, and index chart repositories
    更新确保获取最新的charts
    $ helm repo update
    
  15. rollback - roll back a release to a previous revision
  16. search - search for a keyword in charts
    查看repo 中可用的 charts
    $ helm search repo stable  
    
  17. show - show information of a chart
  18. status - display the status of the named release
  19. template - locally render templates
  20. test - run tests for a release
  21. uninstall - uninstall a release
    helm install release-name 
    
  22. upgrade - upgrade a release
  23. verify - verify that a chart at the given path has been signed and is valid
  24. version - print the client version information
    查看客户端版本信息

3 安装 kubeapps

  1. 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
    
  2. 更新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
    
  3. 获取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
    
  4. 测试效果
    通过 http://nodeIP:32080 来访问Kubeapps,输入步骤 3 中的 token即可登陆,主界面如下:
    在这里插入图片描述
    使用Kubeapps后,可以在Catalog 中搜索到常见的 helm 应用,修改相关参数即可快速部署应用了。
    在这里插入图片描述

4 注意事项

  1. helm v2 版本需要 helm init来初始化, helm v3 取消了 init 命令,无需执行 init 开箱即可使用。
  2. 为了提高使用效率,可以把以下参数加到 .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. 参考文档
    1 helm 官方文档
    2 helm github releases
    3 kubeapp(github) getting-started
  2. 环境说明
    测试系统 ubuntu 18.04 server
    测试helm 版本 helm-v3.4.2-linux-amd64
    k8s 版本 1.19.4

猜你喜欢

转载自blog.csdn.net/u011127242/article/details/111501682