在没有helm之前,我们要部署一个服务,deployment、service ingress
的作用通过打包的方式。把deployment、service ingress打包在一块,一键式部署服务。类似于yum功能。是官方提供的类似安装仓库的功能,可以实现一键化部署应用
helm的概念
由三个部分组成
chart:helm的软件包,部署包,service ingress,是一些定义好的yaml资源,类似于yum的rpm包
Release:可以理解为版本,也可以理解为在安装过程中,给部署的应用起一个名字,
Repository:仓库,提供一个人服务器,这个服务器当中包含chart这些资源,yaml资源的保存地址。
一般使用的是helm3
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
添加helm的自动补全功能,方便后续使用
vim /etc/bashrc
source <(helm completion bash)
使用 helm 安装 Chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubato
更新和查看 charts 列表
helm repo update
helm repo list
查看 stable 仓库可用的 charts 列表
helm search repo stable
删除 incubator 仓库
helm repo remove incubator
查看 chart 信息
helm show chart stable/mysql
helm show all stable/mysql #获取指定 chart 的所有信息
安装 chart
helm install my-redis bitnami/nginx
my-nginx: bitnami仓库名,nginx就是chart一些列yaml资源的集合。
helm uninstall my-nginx #删除
helm install bitnami/nginx --generate-name
--generate-name #随机生成一个rmlist的名称
helm ls #查看安装的所有版本
helm pull stable/mysql
tar -xf mysql-1.6.9.tgz
tree nginx
nginx/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
charts:用于存储依赖环境,如果这个chart依赖于其他的chart,依赖文件保存这个目录
chart.yaml:helm chart的元数据文件,包含了这个chart的名称,版本,维护者信息等等
templates:包含清单模板的目录
deployment.yaml:部署应用的模板文件
heplers.tpl:帮助文档,告诉用户如何来定义模板的值
hpa.yaml:定义了应用程序副本数的扩缩容行为
ingress.yaml:定义了外部流量如何转发到应用程序
HOSTs.txt:注意事项
serviceaccount.yaml:应用程序的服务账号
service.yaml:集群内部的访问
tests test-connection.yaml:测试的目录和文件,部署完chart之后,用测试的文件
values.yaml:核心文件,自定义的值,都是通过values.yaml。把我们的数据覆盖到安装的chart
vim nginx/Chart.yaml
apiVersion: v2
name: nginx
chart名字
description: A Helm chart for Kubernetes
type: application
chart类型,application或library
version: 0.1.0
chart版本
appVersion: 1.16.0
application部署版本
vim values.yaml
image:
repository: nginx
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: ""
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true #开启ingress
# runAsNonRoot: true #
# runAsUser: 1000
service:
type: ClusterIP
port: 80
ingress:
enabled: false
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: www.lucky.com #指定域名
paths:
- path: /
pathType: Prefix
#指定ingress路径类型
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
helm lint nginx #检查依赖和模版配置是否正确
helm package nginx #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz
helm install nginx ./nginx --dry-run --debug #使用 --dry-run 参数验证 Chart 的配置,并不执行安装
helm install nginx ./nginx -n default #部署 chart,release 版本默认为 1
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx 0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
kubectl apppy -f mandatory.yaml
kubectl apppy -f service-nodeport.yaml
访问域名
vim values.yaml
service:
type: NodePort
port: 80
nodePort: 30000
ingress:
enabled: false
className: ""
annotations: {}
vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ include "nginx.fullname" . }}
labels:
{{- include "nginx.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
nodePort: {.Values.service.nodePort}
selector:
{{- include "nginx.selectorLabels" . | nindent 4 }}
helm upgrade nginx-22 nginx
helm history nginx1-22 #查看 release 版本历史
helm rollback nginx1-22 1 #回滚 release 到版本1
harbor端
vim harbor.yml
harbor_admin_password: 123456
chart:
absolute_url: enabled
#在chart当中使用绝对路径的url,https://hub.test.com/charts 相对路径: /charts
./install.sh
master上
mkdir -p ~/.local/share/helm/plugins/helm-push
tar -xf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
docker login -u admin -p 123456 https://hub.test.com
helm package nginx
docker push nginx-0.2.0.tgz oci://hub.test.com/charts --insecure-skip-tls-verify
拉取chart包测试:?
rm -rf nginx
helm pull oci://hub.test.com/charts/nginx --version 0.2.0 --insecure-skip-tls-verify
helm install nginx-22 ./nginx-0.2.0.tgz
helm就是一个部署微服务的工具,可以跳过繁琐的自定义yaml过程,一键式的拉取和部署所有自定义或者模板定义的服务
helm repo add 仓库名 url地址 添加仓库
helm repo update 不加仓库名 就是更新所有仓库
helm repo list 仓库列表
hele repo remove 仓库名称 删除
helm show chart stable/nginx 可以查看指定仓库chart信息
helm show all stable/nginx 查看所有信息
helm install nginx-11 stable/nginx -n lucky-cloud 指定命名空间 安装chart,安装官网默认版本
helm uninstall nginx-11 删除安装好的chart
helm list 查看已经安装的chart
自定义模板
helm create nginx 创建一个自定义的chart模板
values.yaml:这里的值回传给templates里面的yaml文件
helm install nginx-11 ./nginx
helm install nginx-11 ./nginx-0.1.0/tgz
如何打包创建好的chart
helm package nginx
回滚
helm history nginx-11
helm rollback nginx-11 1