云原生技术kubernates 包管理 helm(第七集)
Posted 技术能量站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生技术kubernates 包管理 helm(第七集)相关的知识,希望对你有一定的参考价值。
1. 认识 helm
1.1 helm 是什么
Helm是GO语言编写的,是管理kubernetes集群中应用程序包的客户端工具。Helm是类似于centos上的yum工具或Ubuntu上的apt-get工具。
- 对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
- 对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
Helm中并不提供镜像,但资源清单中会指明相关的镜像仓库。您可以在 CNCF Helm 项目旅程报告中阅读详细的背景信息。
1.2 安装 helm
Helm 可以从源代码安装、从预构建的二进制版本和 包管理器等方式安装。
- 通过二进制版本安装
- 通过helm 自带的安装脚本安装
- 通过包管理器安装:Homebrew (macOS)、Chocolatey (Windows)等
- 从源代码(Linux、macOS)
具体安装方式可以参见官网:https://docs.helm.sh/docs/intro/install/
下面以macOS和windows为例安装 helm
(1) Homebrew (macOS)
Helm 社区的成员为 Homebrew 贡献了一个 Helm 公式构建。这个公式通常是最新的。
brew install helm
(2)从 Chocolatey (Windows)
Helm 社区的成员 为Chocolatey贡献了一个Helm 包构建 。这个包通常是最新的。
choco install kubernetes-helm
1.3 helm 三大概念
下面介绍 使用 Helm 管理 Kubernetes 集群上的包的基础知识。
helm 通过三大概念来管理 k8s 上的包:
- Chart:代表helm包,包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。
- Repository:用来存放和共享 charts 的地方。
- Release:运行在 Kubernetes 集群中的 chart 的实例,一个 chart 通常可以在同一个集群中安装多次,每一次安装都会创建一个新的 release。简单来说!!其实我们可以对比yum来理解
chart看作linux中rpm包
,repository看作repo仓库
,release就是我们的yum install
安装启动后的软件
。
再举个例子
chart看作docker镜像
,release看作 docker镜像运行的容器
,而Repository看作我们的docker Hub镜像仓库
。
1.4 helm 基本操作
下面操作 以nginx为例
Helm 自带一个强大的搜索命令,可以从两种来源中进行搜索:
- helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
- helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
从 Artifact Hub 中搜索所有的 nginx charts。
$ helm search hub nginx
URL CHART VERSION APP VERSION DESCRIPTION
https://artifacthub.io/packages/helm/wiremind/n... 2.1.1 An NGINX HTTP server
https://artifacthub.io/packages/helm/zrepo-test... 5.1.5 1.16.1 Chart for the nginx server
https://artifacthub.io/packages/helm/mirantis/n... 0.1.0 1.16.0 A NGINX Docker Community based Helm chart for K...
使用 helm repo add
命令,添加gitlab仓库。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories$ helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/nginx 10.2.1 1.21.6 NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller 9.1.27 1.2.0 NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel 1.0.5 0.4.7 NGINX Open Source for Intel is a lightweight se...
bitnami/kong 5.0.2 2.7.0 Kong is a scalable, open source API layer (aka ...
- 使用
helm search repo
命令,你可以从你所添加的仓库中查找chart的名字。 - 一旦你找到你想安装的 helm 包,便可以通过使用
helm install
命令来安装它。
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
$ helm install my-nginx bitnami/nginx --version 10.2.1
NAME: my-nginx
LAST DEPLOYED: Fri May 6 11:06:07 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 10.2.1
APP VERSION: 1.21.6
使用 helm status
来追踪 release 的状态、信息。
$ helm status my-nginx
NAME: my-nginx
LAST DEPLOYED: Fri May 6 11:06:07 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 10.2.1
APP VERSION: 1.21.6
查看helm安装,releases的列表[root@master helm]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 1 2022-05-06 11:06:07.215433713 +0800 CST deployed nginx-10.2.1 1.21.6
浏览器访问,验证nginx服务
查看nginx的svc
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 115d
my-nginx LoadBalancer 10.102.231.181 <pending> 80:30769/TCP 25m
2. 自定义 Charts模板
上述nginx安装只是使用仓库chart的默认配置。不利于个性化需求和生成环境的使用。我们也可以修改chart默认配置,也可以自己创建Charts模板。
2.1 创建一个chart模板
# helm create testnginx
Creating testnginx
2.2 Helm chart的目录结构如下:
# tree testnginx/
testnginx/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
- templates/目录是我们资源清单的yaml文件。
- values.yaml文件内容,定义一些template目录下yaml文件所引用的字段
- Chart.yaml文件是该chart的描述信息。charts/目录 可以 包含其他的chart(称之为 子chart)。
templates/ 目录下,会注意到一些文件:
- NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们。
- _helpers.tpl: 放置可以通过chart复用的模板辅助对象
我们删除templates/目录下的文件:
# rm -rf testnginx/templates/*
修改values.yaml文件
# cat values.yaml
name: app-nginx
image:
repository: 192.168.200.11/library/nginx
创建deploy.yaml文件,并引用values.yaml
文件的字段,之后只要我们修改values.yaml
文件,就可以达到改变templates/deploy.yaml
文件的效果。
# cat templates/deploy.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: .Values.name
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: web-nginx
image: .Values.image.repository
ports:
- name: http
containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: svc-nginx
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: nginx
type: NodePort
使用helm install
创建release
# helm install test-nginx testnginx/
NAME: test-nginx
LAST DEPLOYED: Fri May 6 14:52:43 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
检查服务
# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
test-nginx default 1 2022-05-06 14:52:43.081379354 +0800 CST deployed testnginx-0.1.0 1.16.0
# kubectl get deploy,pod
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/app-nginx 1/1 1 1 5m14s
NAME READY STATUS RESTARTS AGE
pod/app-nginx-57fbfbd5c5-g2sjq 1/1 Running 0 5m14s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 115d
service/svc-nginx NodePort 10.106.42.241 <none> 80:32755/TCP 5m14s
2.3 helm upgrade升级 release
当我们想给我们的服务升级版本时,就需要使用到helm upgrade 命令非常简便快捷
- 修改values.yaml文件切换版本# cat testnginx/values.yaml
name: app-nginx
image:
#repository: 192.168.200.11/library/nginx
repository: 192.168.200.11/library/nginx-2
# helm upgrade test-nginx testnginx/
Release "test-nginx" has been upgraded. Happy Helming!
NAME: test-nginx
LAST DEPLOYED: Fri May 6 15:26:08 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
2.4 helm rollback回滚
假如在一次发布过程中,发生了不符合预期的事情,就需要使用helm rollback 命令
回滚到之前的发布版本。
- 查看test-nginx历史版本:
[root@master helm]# helm history test-nginx
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Fri May 6 15:28:12 2022 superseded testnginx-0.1.0 1.16.0 Install complete
2 Fri May 6 15:28:56 2022 superseded testnginx-0.1.0 1.16.0 Upgrade complete# helm rollback test-nginx 1
回滚到版本1
以上是关于云原生技术kubernates 包管理 helm(第七集)的主要内容,如果未能解决你的问题,请参考以下文章
云原生 • Kubernetes一文掌握 k8s 包管理工具 Helm
云原生之kubernetes实战使用helm在k8s集群下部署DataEase可视化分析平台