K8s(18)——Helm的基本学习使用

目录

什么是helm

部署helm

helm chart

helm部署例子

helm部署storageclass

helm部署ingress-nginx

helm部署metrics-server

helm图形化

部署kubeapps

 kubeapps图形化部署mychart


什么是helm

helm是kubernetes生态系统中的一个软件包管理工具,类似ubuntu的apt,centos的yum或python的pip一样,专门负责管理kubernetes应用资源;使用helm可以对kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。

helm利用Chart来封装kubernetes原生应用程序的一些列yaml文件,可以在部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发。


即之前学过的所有的东西,都可以打包成一个helm,一键部署

部署helm

官网: Helm | 快速入门指南

Releases · helm/helm · GitHub

下载二进制文件,解压二进制文件

[root@k8s2 ~]# tar zxf helm-v3.11.0-linux-amd64.tar.gz

进入解压出来的目录,复制helm到/usr/local/bin,使其可执行

[root@k8s2 ~]# cd linux-amd64/

[root@k8s2 linux-amd64]# mv helm /usr/local/bin/

添加环境变量,重新应用,成功设置helm命令补齐

[root@k8s2 ~]# echo "source <(helm completion bash)" >> ~/.bashrc

[root@k8s2 ~]# source ~/.bashrc

[root@k8s2 ~]# helm version

查询官方应用中心

[root@k8s2 ~]# helm search hub nginx

添加第三方repo

[root@k8s2 ~]# helm repo add my-repo https://charts.bitnami.com/bitnami

"my-repo" has been added to your repositories

查看repo源

[root@k8s2 ~]# helm repo list

NAME URL

my-repo https://charts.bitnami.com/bitnami

拉取应用到本地

[root@k8s2 helm]# helm pull my-repo/nginx

解压

[root@k8s2 helm]# tar zxf nginx-13.2.23.tgz

进入解压得到的目录

[root@k8s2 helm]# cd nginx/

按需修改,大部分都是默认的

[root@k8s2 nginx]# vim values.yaml

指定仓库地址

不支持loadbalancer就改为ClusterIP

 启用ingress

 主机名

 

部署应用

[root@k8s2 nginx]# helm install myapp .

 测试

再次修改配置

[root@k8s2 nginx]# vim values.yaml

更新应用

[root@k8s2 nginx]# helm upgrade myapp .

查看应用

[root@k8s2 nginx]# helm list

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

myapp default 2 2023-02-02 14:40:39.212215274 +0800 CST deployed nginx-13.2.23 1.23.3

[root@k8s2 nginx]# helm history myapp

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION

1 Thu Feb 2 14:35:41 2023 superseded nginx-13.2.23 1.23.3 Install complete

2 Thu Feb 2 14:40:39 2023 deployed nginx-13.2.23 1.23.3 Upgrade complete

回滚应用

[root@k8s2 nginx]# helm rollback myapp 1

Rollback was a success! Happy Helming!

回收

[root@k8s2 helm]# helm list

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

myapp default 3 2023-02-02 14:42:47.257098415 +0800 CST deployed nginx-13.2.23 1.23.3

[root@k8s2 helm]# helm uninstall myapp

release "myapp" uninstalled

helm chart

helm提供了一个应用所需要的所有清单文件.比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件,把这三个文件打包到一起,就是一个应用程序的程序包,称之为Chart.

Chart是一个helm程序包,其实质只是一个模板,我们可以对这个模板进行赋值(value),形成我们自定义的清单文件,也就实现我们生产个性化的需求,这样的仓库叫Chart仓库,一个https/http服务器.

Helm 有两个重要的概念:chart 和 release

chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包

release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release

搭建一个Helm Chart

执行一下命令,自动生成一系列文件,结构如图

[root@k8s2 helm]# helm create mychart

编辑Chart.yaml文件,指定chart的版本为0.1.0,app版本为v1

 [root@k8s2 mychart]# vim Chart.yaml

编辑values.yaml 文件,指定镜像为myapp,版本为v1

 [root@k8s2 mychart]# vim values.yaml

 主机名

检测语法

[root@k8s2 helm]# helm lint mychart/

==> Linting mychart/

[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

打包

[root@k8s2 helm]# helm package mychart/

Successfully packaged chart and saved it to: /root/helm/mychart-0.1.0.tgz

添加本地仓库

harbor仓库中创建charts项目

 添加认证密钥

[root@k8s2 helm]# cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/

更新密钥

[root@k8s2 helm]# update-ca-trust

添加自己的私有仓库路径

[root@k8s2 ~]# helm repo add mychart https://reg.westos.org/chartrepo/charts

"mychart" has been added to your repositories

查看已经添加的仓库路径

[root@k8s2 ~]# helm repo list

NAME URL

my-repo https://charts.bitnami.com/bitnami

mychart https://reg.westos.org/chartrepo/charts

想上传我的mychart到仓库,但是默认没有push命令,需要手动添加push插件。

安装插件

在线安装

[root@k8s2 helm]# yum install -y git

[root@k8s2 helm]# helm plugin install https://github.com/chartmuseum/helm-push

Downloading and installing helm-push v0.10.3 ...

https://github.com/chartmuseum/helm-push/releases/download/v0.10.3/helm-push_0.10.3_linux_amd64.tar.gz

Installed plugin: cm-push

[root@k8s2 helm]# helm plugin list

NAME VERSION DESCRIPTION

cm-push 0.10.3 Push chart package to ChartMuseum

离线安装

获取plugin默认目录

[root@k8s2 helm]# helm env

创建插件目录

[root@k8s2 helm]# mkdir -p /root/.local/share/helm/plugins/helm-push/

解压插件

[root@k8s2 ~]# tar zxf helm-push_0.10.3_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/helm-push

[root@k8s2 helm]# helm cm-push -h

上传chart包到repo仓库

[root@k8s2 helm]# helm cm-push mychart-0.1.0.tgz mychart -u admin -p westos

Pushing mychart-0.1.0.tgz to mychart...

Done.

更新repo

刷新repo,就可查找到mychart包

[root@k8s2 helm]# helm repo update mychart

Hang tight while we grab the latest from your chart repositories...

...Successfully got an update from the "mychart" chart repository

Update Complete. ⎈Happy Helming!⎈

[root@k8s2 helm]# helm search repo mychart

NAME CHART VERSION APP VERSION DESCRIPTION

mychart/mychart 0.1.0 v1 A Helm chart for Kubernetes

安装应用

[root@k8s2 helm]# helm install myapp mychart/mychart

测试

[root@k8s1 harbor]# curl myapp.westos.org

Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

升级

重新打包应用

[root@k8s2 mychart]# vim Chart.yaml


镜像更改v2版本

 打包

[root@k8s2 helm]# helm package mychart

Successfully packaged chart and saved it to: /root/helm/mychart-0.2.0.tgz

上传

[root@k8s2 helm]# helm cm-push mychart-0.2.0.tgz mychart -u admin -p westos

Pushing mychart-0.2.0.tgz to mychart...

Done.

更新

[root@k8s2 helm]# helm repo update mychart

Hang tight while we grab the latest from your chart repositories...

...Successfully got an update from the "mychart" chart repository

Update Complete. ⎈Happy Helming!⎈

查看

[root@k8s2 helm]# helm search repo mychart

NAME CHART VERSION APP VERSION DESCRIPTION

mychart/mychart 0.2.0 v2 A Helm chart for Kubernetes

两个版本,-l参数可以查看到所有的版本

[root@k8s2 helm]# helm search repo mychart -l

NAME CHART VERSION APP VERSION DESCRIPTION

mychart/mychart 0.2.0 v2 A Helm chart for Kubernetes

mychart/mychart 0.1.0 v1 A Helm chart for Kubernetes

更新应用

[root@k8s2 helm]# helm upgrade myapp mychart/mychart

Release "myapp" has been upgraded. Happy Helming!

NAME: myapp

LAST DEPLOYED: Thu Feb 2 16:11:28 2023

NAMESPACE: default

STATUS: deployed

REVISION: 2

NOTES:

1. Get the application URL by running these commands:

http://myapp.westos.org/

测试,成功升级

[root@k8s1 harbor]# curl myapp.westos.org

Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

查看历史版本

[root@k8s2 helm]# helm history myapp

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION

1 Thu Feb 2 16:09:13 2023 superseded mychart-0.1.0 v1 Install complete

2 Thu Feb 2 16:11:28 2023 deployed mychart-0.2.0 v2 Upgrade complete

回滚应用版本

[root@k8s2 helm]# helm rollback myapp 1

Rollback was a success! Happy Helming!

查看历史版本

[root@k8s2 helm]# helm history myapp

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION

1 Thu Feb 2 16:09:13 2023 superseded mychart-0.1.0 v1 Install complete

2 Thu Feb 2 16:11:28 2023 superseded mychart-0.2.0 v1 Upgrade complete

3 Thu Feb 2 16:12:10 2023 deployed mychart-0.1.0 v1 Rollback to 1

回收

[root@k8s2 helm]# helm uninstall myapp

release "myapp" uninstalled

helm部署例子

helm部署storageclass

删除原有的部署

[root@k8s2 nfs]# kubectl delete -f deploy.yaml

添加repo仓库

[root@k8s2 helm]# helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

拉取下来

[root@k8s2 helm]# helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner

解压

[root@k8s2 helm]# tar zxf nfs-subdir-external-provisioner-4.0.17.tgz

进目录

[root@k8s2 helm]# cd nfs-subdir-external-provisioner/

根据需求修改以下地方

[root@k8s2 nfs-subdir-external-provisioner]# vim values.yaml

 为其创建一个ns

[root@k8s2 nfs-subdir-external-provisioner]# kubectl create ns nfs-client

从当前目录安装,名字为nfs-provisioner,安装的ns为nfs-client

[root@k8s2 nfs-subdir-external-provisioner]# helm install nfs-provisioner . -n nfs-client

helm部署ingress-nginx

回收原有部署

[root@k8s2 ingress]# kubectl delete -f deploy.yaml

添加repo源

[root@k8s2 helm]# helm repo add ingress-nginx Welcome - NGINX Ingress Controller

拉取镜像

[root@k8s2 helm]# helm pull ingress-nginx/ingress-nginx

解压并进入

[root@k8s2 helm]# tar zxf ingress-nginx-4.4.3.tgz

[root@k8s2 helm]# cd ingress-nginx/

修改

[root@k8s2 ingress-nginx]# vim values.yaml

仓库,1.6.1的版本需要自己去找,然后放仓库里

 默认类

 地址修改为自己的仓库

 为其创建ns

[root@k8s2 ingress]# kubectl create ns ingress-nginx

安装

[root@k8s2 ingress-nginx]# helm install ingress-nginx . -n ingress-nginx

helm部署metrics-server

回收原有部署

[root@k8s2 metrics]# kubectl delete -f components.yaml

添加repo

[root@k8s2 helm]# helm repo add metrics-server Kubernetes Metrics Server | metrics-server

拉取一下

[root@k8s2 helm]# helm pull metrics-server/metrics-server

解压进入目录

[root@k8s2 helm]# tar zxf metrics-server-3.8.3.tgz

[root@k8s2 helm]# cd metrics-server

按需修改

[root@k8s2 metrics-server]# vim values.yaml

加个选项,否则会出现证书问题

 创建ns

[root@k8s2 metrics]# kubectl create ns metrics-server

安装

[root@k8s2 metrics-server]# helm install metrics-server . -n metrics-server

 安装成功

helm图形化

部署kubeapps

上传所需镜像

 解压进入目录

[root@k8s2 helm]# tar zxf kubeapps-12.0.0.tgz

[root@k8s2 helm]# cd kubeapps/

创建ns并安装

[root@k8s2 kubeapps]# kubectl create ns kubeapps

[root@k8s2 kubeapps]# helm install kubeapps . -n kubeapps

授权

[root@k8s2 kubeapps]# kubectl create serviceaccount kubeapps-operator -n kubeapps

[root@k8s2 kubeapps]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator

获取token

[root@k8s2 kubeapps]# kubectl -n kubeapps create token kubeapps-operator

使用token登录 

设置context 

添加本地仓库域名解析

[root@k8s2 reg.westos.org]# kubectl -n kube-system edit cm coredns

添加repo仓库 

复制ca证书:/etc/docker/certs.d/reg.westos.org/ca.crt 

 kubeapps图形化部署mychart

查看到以前自己打包的mychart 

选择v1,点击部署

 成功部署

 可以进行更新,打开ingress,添加域名

更新版本,标签换为v2,再次更新 

版本回退

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值