k8s-helm

        Helm类似与linux下面的yum,Helm是一个用于kubernetes的包管理器,每一个包为一个chart,一个chart是一个目录,常常会对目录进行打包压缩,形成一个${name}-version.tgz的格式进行传输和存储。

  • 对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
  • 对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。

Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能

1、helm组件

        Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

1.1、Tiller

        Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。

1.2、Chart

        Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件

1.3、Repoistory

        Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository

1.4、Release

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release

2、helm安装

  • 下载helm
    1
    2
    # wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.3-linux-amd64.tar.gz
    # tar zxf helm-v2.14.3-linux-amd64.tar.gz && mv linux-amd64/{helm,tiller} /usr/bin

2.1、创建分蘖服务帐户

1
2
# kubectl create serviceaccount tiller --namespace kube-system
serviceaccount/tiller created

2.2、授予分蘖集群管理员角色

1
2
# kubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding.rbac.authorization.k8s.io/tiller-admin-binding created

2.2、安装tiller

1
# helm init --service-account tiller --upgrade -i docker.io/sapcc/tiller:v2.14.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
2.2.1、检查是否安装成功
1
2
3
4
5
6
# kubectl -n kube-system get pods|grep tiller
tiller-deploy-75b8f8575d-fplck 1/1 Running 0 17h

# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
  • 错误: 这里安装完成后执行helm version提示错误,内容如下:
    E0904 18:51:07.730671 22845 portforward.go:391] an error occurred forwarding 38767 -> 44134: error forwarding port 44134 to pod b52064300cfa79e6d83795535584f89c97c33dc91ea39c024492b7b40e3fb68e, uid : unable to do port forwarding: socat not found.这个错误需要在客户端安装一个socat插件
  • 在node安装socat

    1
    # yum install -y socat
  • 修改helm第三方存储库(可选)

    1
    2
    3
    4
    5
    6
    # helm repo add stable https://burdenbear.github.io/kube-charts-mirror/
    # helm repo list
    NAME URL
    local http://127.0.0.1:8879/charts
    monocular https://helm.github.io/monocular
    stable https://burdenbear.github.io/kube-charts-mirror/

3、测试和启动本地helm web

1
2
3
4
5
# helm list
# helm search
# helm search mysql --versions
# helm repo list
# helm serve --address 0.0.0.0:8879 &

img

4、helm web ui

        helm安装以后,经常使用helm cli命来进行部署还是比较吃力的,而且对于有些人不喜欢cli的来说,是一个非常痛苦的事情,这里介绍一款kubeapps,Kubeapps是一个基于Web的UI,用于在Kubernetes集群中部署和管理应用程序。 Kubeapps允许您:

  • 从图表存储库中浏览和部署Helm图表
  • 检查,升级和删除群集中安装的基于Helm的应用程序
  • 添加自定义和私有图表存储库(支持ChartMuseum和JFrog Artifactory)
  • 从服务目录和可用的Service Brokers浏览和配置外部服务
  • 使用服务目录绑定将基于Helm的应用程序连接到外部服务
  • 基于Kubernetes基于角色的访问控制的安全身份验证和授权

4.1、安装kubeapps

使用Helm图表安装最新版本的Kubeapps

1
2
# helm repo add bitnami https://charts.bitnami.com/bitnami
# helm install --name kubeapps --namespace kubeapps bitnami/kubeapps

4.2、启动kubeappsDashboard

安装Kubeapps后,运行以下命令从系统安全访问Kubeapps Dashboard

1
2
3
# export POD_NAME=$(kubectl get pods --namespace kubeapps -l "app=kubeapps" -o jsonpath="{.items[0].metadata.name}")
# kubectl port-forward -n kubeapps $POD_NAME --address 0.0.0.0 8081:8080 &
# 把容器的8080 映射到本地的8081端口,用于浏览器访问

img

4.3、创建token

访问仪表板需要Kubernetes API令牌才能通过Kubernetes API服务器进行身份验证

1
2
3
4
5
6
7
8
# 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='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode

img

4.3.1、创建token访问脚本

每次访问kubeapps的token 都要输入一长串,这里我们写一个shell脚本,放在/usr/bin目录,需要的时候执行命令即可,这样方便用于记

1
2
3
4
# vim /usr/bin/kubeapps
#!/bin/bash
kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode
# chmod +x /usr/bin/kubeapps
坚持原创技术分享,您的支持将鼓励我继续创作!
0%