helm 使用

Helm是什么

没有使用Helm之前,在Kubernetes部署应用,我们要依次部署deployment、service等,步骤比较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂。
helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。
Helm本质就是让k8s的应用管理(Deployment、Service等)可配置,能动态生成。通过动态生成K8S资源清单文件(deployment.yaml、service.yaml)。然后kubectl自动调用K8S资源部署。
Helm是官方提供类似于YUM的包管理,是部署环境的流程封装,Helm有三个重要的概念:chart、release和Repository

  • chart是创建一个应用的信息集合,包括各种Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。可以将chart想象成apt、yum中的软件安装包。
  • release是chart的运行实例,代表一个正在运行的应用。当chart被安装到Kubernetes集群,就生成一个release。chart能多次安装到同一个集群,每次安装都是一个release【根据chart赋值不同,完全可以部署出多个release出来】。
  • Repository用于发布和存储 Chart 的存储库。

Helm包含两个组件:Helm客户端和Tiller服务端,如下图所示:

image.png

Helm安装

1.用二进制版本安装

每个Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。

  1. 下载 需要的版本
  2. 解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
  3. 在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

然后就可以执行客户端程序并 添加稳定仓库: helm help.

2.使用脚本安装

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

3.启动服务并开启chart支持

1.参考地址:https://blog.csdn.net/submarineas/article/details/112788040 开启https、设置证书位置
2.生成证书:
openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650
-subj “/C=CN/ST=Beijing/L=Beijing/O=chinatelecom/OU=ecloudcaas/CN=192.168.56.11”
-key ca.key
-out ca.crt

openssl genrsa -out 192.168.56.11.key 4096

openssl req -sha512 -new
-subj “/C=CN/ST=Beijing/L=Beijing/O=chinatelecom/OU=ecloudcaas/CN=192.168.56.11”
-key 192.168.56.11.key
-out 192.168.56.11.csr

openssl x509 -req -sha512 -days 3650
-extfile v3.ext
-CA ca.crt -CAkey ca.key -CAcreateserial
-in 192.168.56.11.csr
-out 192.168.56.11.crt

openssl x509 -inform PEM -in 192.168.56.11.crt -out 192.168.56.11.cert

cp 192.168.56.11.cert /etc/docker/cert/192.168.56.11/
cp 192.168.56.11.key /etc/docker/cert/192.168.56.11/
cp ca.crt /etc/docker/cert/192.168.56.11/

3.启动服务加上后缀
./install.sh –with-notary –with-clair –with-chartmuseum
4.添加repo
helm repo add –ca-file /etc/docker/certs.d/ca.crt –username admin –password harbor myrepo https://192.168.56.11/chartrepo/demo

Helm使用

1.常用命令

char 管理

1 create:根据给定的name创建一个新chart
2 fetch:从仓库下载chart,并(可选项)将其解压缩到本地目录中
3 inspect:chart详情
4 helm package [CHART_PATH] [...] [flags]  :打包chart目录到一个chart归档
5 lint:语法检测
6 verify:验证位于给定路径的chart已被签名且有效

release 管理

1 get:下载一个release
2 delete:根据给定的release name,从Kubernetes中删除指定的release
3 install:安装一个chart
4 list:显示release列表  
5 upgrade:升级release  helm upgrade mytest-app01 .
6 rollback:回滚release到之前的一个版本  helm rollback <RELEASE> [REVISION] [flags]
7 status:显示release状态信息
8 history:Fetch release历史信息

helm常见操作

# 添加仓库
helm repo add elastic https://helm.elastic.co
#查看helm仓库列表
helm repo list
# 创建chart【可供参考,一般都是自己手动创建chart】
helm create CHART_PATH
# 根据指定chart部署一个release
helm install --name RELEASE_NAME CHART_PATH
# 根据指定chart模拟安装一个release,并打印处debug信息
helm install --dry-run --debug --name RELEASE_NAME CHART_PATH
# 列出已经部署的release
helm list
# 列出所有的release
helm list --all
# 查询指定release的状态
helm status Release_NAME
# 回滚到指定版本的release,这里指定的helm release版本
helm rollback Release_NAME REVISION_NUM
# 查看指定release的历史信息
helm history Release_NAME
# 对指定chart打包
helm package CHART_PATH    如:helm package my-test-app/
# 对指定chart进行语法检测
helm lint CHART_PATH
# 查看指定chart详情
helm inspect CHART_PATH
# 从Kubernetes中删除指定release相关的资源【helm list --all 中仍然可见release记录信息】
helm delete RELEASE_NAME
# 从Kubernetes中删除指定release相关的资源,并删除release记录
helm delete --purge RELEASE_NAME

实例

[root@k8s-master my-test-app]# tree
.
├── Chart.yaml
├── my-app-chart-0.1.0.tgz
├── templates
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

Chart.yaml

[root@k8s-master my-test-app]# cat Chart.yaml 
apiVersion: v1
appVersion: v2.2
version: 0.1.0
name: my-app-chart
description: my test app
keywords:
- myapp
maintainers:
- email: zhang@test.com
  name: zhang

values.yaml

[root@k8s-master my-test-app]# cat values.yaml 
deployname: my-test-app02
replicaCount: 2
images:
  repository: registry.cn-beijing.aliyuncs.com/google_registry/myapp
  tag: v3

templates

[root@k8s-master templates]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.deployname }}
  labels:
    app: mytestapp-deploy
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: mytestapp
      env: test
  template:
    metadata:
      labels:
        app: mytestapp
        env: test
        description: mytest
    spec:
      containers:
      - name: myapp-pod
        image: {{ .Values.images.repository }}:{{ .Values.images.tag }}
        imagePullPolicy: IfNotPresent
        ports:
          - containerPort: 80
apiVersion: v1
kind: Service
metadata:
  name: my-test-app
  namespace: default
spec:
  type: NodePort
  selector:
    app: mytestapp
    env: test
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP

上传chart包

curl –request POST –form chart=@cat tgz.txt –user admin:harbor https://192.168.56.11/api/chartrepo/demo/charts –cacert /etc/docker/certs.d/ca.crt

下载chart包,并进行部署

安装
helm install myapp myrepo/${CHART_NAME} –version ${CHART_VERSION}.$BUILD_NUMBER -f ../helmValue/dev.yaml

更新
helm upgrade myapp myrepo/${CHART_NAME} –version ${CHART_VERSION}.$BUILD_NUMBER -f ../helmValue/dev.yaml


   转载规则


《helm 使用》 by XieJiayi is licensed under a 知识共享署名 4.0 国际许可协议 许可协议。转载请注明来源
  目录