zoukankan      html  css  js  c++  java
  • kubernetes集群系列资料16--helm介绍

    一、helm介绍

      没有helm之前,K8S部署应用时,需要一次部署deployment,svc等,步骤繁琐;且随着很多项目微服务话,复杂应用在容器中部署及管理显得很复杂,helm通过打包方式(类似Linux中yum将各种rpm包进行打包)支持发布的版本管理和控制,很大程度简化K8S应用的部署和管理。
      helm本质就是让K8S的应用管理可配置,能动态生成,通过动态生成K8S资源清单文件yaml(即yaml文件并不是一成不变的,可通过传递类似环境变量的数据来修改yaml文件),然后调用kubectl自动执行K8S资源部署。
      helm,是官方提供的类似yum的包管理器,是部署环境的流程封装,其有2个重要概念:chart和release。
        chart:是创建一个应用的信息集合,包括各种K8S对象的配置模板,参数定义,依赖关系,文档说明等。chart是应用部署的自包含逻辑单元。可以将chart想象成apt、yum中的软件安装包。
        release:是chart的运行实例,代表一个正在运行的应用。当chart被安装到K8S集群,旧生成一个release。chart能够多次安装到同一个集群,每次安装都是一个release。

    helm包含2个组件:helm客户端、tiller服务器。 helm客户端负责chart和release的创建和管理,并和tiller交互;tiller服务器运行在K8S集群中,它会处理helm客户端的请求,与K8S API server交互。   

    ##部署helm
    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
    tar -xzvf helm-v2.13.1-linux-amd64.tar.gz
    cd linux-amd64
    cp helm /usr/local/bin/
    chmod a+x /usr/local/bin/helm
    ll /usr/local/bin/helm
    ##部署tiller
    cat >rbac-config.yaml<<eof
    apiVersion: v1
    kind: ServiceAccount
    metadata:
        name: tiller
        namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
        name: tiller
    roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: cluster-admin
    subjects:
        - kind: ServiceAccount
          name: tiller
          namespace: kube-system
    eof
    kubectl apply -f rbac-config.yaml
    helm init --service-account tiller --skip-refresh #在K8S集群中部署tiller;
    kubectl get pod -n kube-system -l app=helm
    

     案例1:helm自定义模板

    ###helm自定义模板
    mkdir hello-world
    cd hello-world
    ##创建自描述文件chart.yaml,该文件必须有name和version字段;
    cat <<eof>chart.yaml
    name: hello-world
    version: 1.0.0  #可随便定义;
    eof
    ##创建模板文件,用于生成K8S资源清单manifests;
    mkdir templates  #严禁修改文件夹名称;
    cat <<eof>templates/deployment.yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
        name: hello-world
    spec:
        replicas: 1
        template:
            metadata:
                labels:
                    app: hello-world
            spec:
                containers:
                    - name: hello-world
                      image: hub.atguigu.com/library/nginx:1.21.0
                      ports:
                        - containerPort: 80
                          protocol: TCP
    eof
    cat <<eof> templates/service.yaml
    apiVersion: v1
    kind: Service
    metadata:
        name: hello-world
    spec:
        type: NodePort
        ports:
            - port: 80
              targetPort: 80
              protocol: TCP
        selector:
                app: hello-world
    eof
    ls
    helm install ./
    
    helm ls                     #列出已部署的release;此时版本为1;
    helm status knotted-cheetah     #查询名为knotted-cheetah的release状态;
    helm upgrade knotted-cheetah ./   #更新release版本,此时版本为2;
    helm ls
    helm history knotted-cheetah        #查看release的历史记录;
    
    #创建用于修改应用的配置文件values.yaml
    cat <<eof> values.yaml
    image:
        repository: hub.atguigu.com/library/httpd
        tag: '2.4.48'
    eof
    #利用values.yaml中的镜像替换原镜像
    cat <<eof> templates/deployment.yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
        name: hello-world
    spec:
        replicas: 1
        template:
            metadata:
                labels:
                    app: hello-world
            spec:
                containers:
                    - name: hello-world
                      image: {{ .Values.image.repository}}:{{ .Values.image.tag}}  #go语言的写法;
                      ports:
                        - containerPort: 80
                          protocol: TCP
    eof
    helm upgrade knotted-cheetah ./                     #按照当前目录下文件进行更新release;
    helm upgrade knotted-cheetah -f values.yaml ./      #指定按照values.yaml进行跟新;
    helm upgrade knotted-cheetah ./ --set image.tag="latest" #更新release指定tag值,其他字段也可人为指定;
    
    
    # helm delete knotted-cheetah  #删除release;
    # helm delete --purge knotted-cheetah #移除所有与指定release相关的K8S资源和该release的所有记录;
    # helm ls deleted #列出删除的release;
    helm rollback knotted-cheetah 1 #回滚至版本1;
    

    案例2:helm发布应用集群  

     

     

     

     

  • 相关阅读:
    C++中int与string的相互转换【转】
    C# 获取文件名及扩展名【转】
    k8s查看容器日志---查看运行中指定pod以及指定pod中容器的日志
    shell字符串截取
    Kubernetes集群之清除集群
    Expect Command And How To Automate Shell Scripts Like Magic
    CentOS 7搭建本地yum源和局域网yum源
    使用MobaXterm配置ssh隧道(port forwarding)
    重置jenkins用户名密码
    Kubernetes之Taints与Tolerations 污点和容忍
  • 原文地址:https://www.cnblogs.com/chalon/p/14980963.html
Copyright © 2011-2022 走看看