云原生k8s之Helm 工具安装

141 阅读2分钟

1、安装 helm 命令行工具

cd /opt
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz

tar -zxvf helm-v2.13.1-linux-amd64.tar.gz

cp linux-amd64/helm /usr/local/bin/

image.png

2、使用 helm 安装 Chart

#添加常用的 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/incubator

image.png

#更新 charts 列表
helm repo update          
helm repo list

image.png

#查看 stable 仓库可用的 charts 列表
helm search repo stable

image.png

#删除 incubator 仓库
helm repo remove incubator

#查看 chart 信息
helm show chart stable/mysql     //查看指定 chart 的基本信息
helm show all stable/mysql	//获取指定 chart 的所有信息

image.png

#安装 chart
helm install my-redis bitnami/redis [-n default]   //指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace

helm install bitnami/redis --generate-name    //不指定 release 的名字时,需使用 –generate-name 随机生成一个名字

image.png

#查看所有 release
helm ls 
helm list

#查看指定的 release 状态
helm status my-redis               

#删除指定的 release
helm uninstall my-redis 

image.png

image.png

3、Helm 自定义模板

charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

#拉取 chart
mkdir /opt/helm
cd /opt/helm

helm pull stable/mysql

tar xf mysql-1.6.9.tgz

yum install -y tree
tree mysql

image.png

image.png

#创建自定义的 chart
helm create nginx

tree nginx

image.png

修改 chart
vim nginx/Chart.yaml
apiVersion: v2
name: nginx001                     #chart名字
description: A Helm chart for Kubernetes
type: application               #chart类型,application或library
version: 0.1.0                  #chart版本
appVersion: 1.16.0              #application部署版本


vim nginx/values.yaml
replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  tag: "latest"                 #设置镜像标签

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  create: true
  annotations: {}
  name: ""

podAnnotations: {}

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: true                 #开启 ingress
  className: ""
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: www.nmixx.com         #指定ingress域名
      paths:
        - path: /
          pathType: Prefix      #指定ingress路径类型
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

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: {}

image.png

image.png

#打包 chart
helm lint nginx        #检查依赖和模版配置是否正确

helm package nginx     #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz

image.png

#部署 chart
helm install nginx ./nginx --dry-run --debug    #使用 --dry-run 参数验证 Chart 的配置,并不执行安装

helm install nginx ./nginx -n default           #部署 chart,release 版本默认为 1
或者
helm install nginx ./nginx-0.1.0.tgz

#可根据不同的配置来 install,默认是 values.yaml
helm install nginx ./nginx -f ./nginx/values-prod.yaml

helm ls

image.png

image.png

#部署 ingress
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 apply -f mandatory.yaml
kubectl apply -f service-nodeport.yaml

kubectl get pod,svc -n ingress-nginx

image.png

image.png

修改/etc/hosts后访问测试

image.png

#修改为 NodePort 访问后,升级
vim nginx/values.yaml
service:
  type: NodePort
  port: 80
  nodePort: 30080

ingress:
  enabled: false

vim nginx/templates/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 }}              #指定 nodePort
  selector:
    {{- include "nginx.selectorLabels" . | nindent 4 }}

升级 release,release 版本加 1
helm upgrade nginx nginx 

kubectl get svc

image.png

image.png

image.png

#根据 release 版本回滚
helm history nginx              #查看 release 版本历史

helm rollback nginx 1           #回滚 release 到版本1

helm history nginx           #nginx release 已经回滚到版本 1

image.png