zoukankan      html  css  js  c++  java
  • 第五篇 kubernetes 部署Helm包管理工具

    1.Kubernetes应用部署工具-Helm简介

    随着业务容器化与向微服务架构转变,通过分解巨大的单体应用为多个服务的方式,
    分解了单体应用的复杂性,使每个微服务都可以独立部署和扩展,实现了敏捷开发和快速迭代和部署。
    但任何事情都有两面性,虽然微服务给我们带来了很多便利,但由于应用被拆分成多个组件,导致服务数量大幅增加,
    对于Kubernetest编排来说,每个组件有自己的资源文件,并且可以独立的部署与伸缩,
    这给采用Kubernetes做应用编排带来了诸多挑战:
    
    1.管理、编辑与更新大量的K8s配置文件
    2.部署一个含有大量配置文件的复杂K8s应用
    3.分享和复用K8s配置和应用
    4.参数化配置模板支持多个环境
    5.管理应用的发布:回滚、diff和查看发布历史
    6.控制一个部署周期中的某一些环节
    7.发布后的验证
    
    而Helm恰好可以帮助我们解决上面问题!
    
    Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。
    通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。
    

    Helm产生原因

    利用Kubernetes部署一个应用,需要Kubernetes原生资源文件如deployment、replicationcontroller、service或pod 等。
    而对于一个复杂的应用,会有很多类似上面的资源描述文件,如果有更新或回滚应用的需求,
    可能要修改和维护所涉及的大量资源文件,且由于缺少对发布过的应用版本管理和控制,
    使Kubernetes上的应用维护和更新等面临诸多的挑战。
    

    Helm架构
    Helm基本架构如下:

    Helm用途

    #做为Kubernetes的一个包管理工具,Helm具有如下功能:
    1.创建新的chart
    2.chart打包成tgz格式
    3.上传chart到chart仓库或从仓库中下载chart
    4.在Kubernetes集群中安装或卸载chart
    5.管理用Helm安装的chart的发布周期
    
    #Helm有三个重要概念:
    
    chart:包含了创建Kubernetes的一个应用实例的必要信息
    config:包含了应用发布配置信息
    release:是一个chart及其配置的一个运行实例
    
    #Helm组件:Helm有以下两个组成部分:
    
    Helm Client是用户命令行工具,其主要负责如下:
    1.本地chart开发
    2.仓库管理
    3.与Tiller sever交互
    4.发送预安装的chart
    5.查询release信息
    6.要求升级或卸载已存在的release
    7.Tiller Server是一个部署在Kubernetes集群内部的server,其与Helm client、Kubernetes API server进行交互。
    
    Tiller server主要负责如下:
    1.监听来自Helm client的请求
    2通过chart及其配置构建一次发布
    3安装chart到Kubernetes集群,并跟踪随后的发布
    4.通过与Kubernetes交互升级或卸载chart
    
    简单的说,client管理charts,而server管理发布release。
    

    Helm实现

    #Helm client
    Helm client采用go语言编写,采用gRPC协议与Tiller server交互。
    
    #Helm server
    Tiller server也同样采用go语言编写,提供了gRPC server与client进行交互,利用Kubernetes client 库与Kubernetes进行通信,当前库使用了REST+JSON格式。
    Tiller server 没有自己的数据库,目前使用Kubernetes的ConfigMaps存储相关信息
    

    2.k8s 部署Helm包管理工具

    方式一:使用官方提供的脚本一键安装
    
    #curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
    #chmod 700 get_helm.sh
    # ./get_helm.sh
    
    方式二:手动下载安装
    #Helm client安装
    (1)#下载 Helm 2.17.0  的二进制安装包
    在hosts 中追加一条解析:
    216.58.199.16 kubernetes-charts.storage.googleapis.com
    
    # mkdir /root/k8s/helm
    # cd /root/k8s/helm/
    #wget https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz
    #ls
    helm-v2.17.0-linux-amd64.tar.gz
    
    
    (2)#解开压缩包
    #tar -zxvf helm-v2.17.0-linux-amd64.tar.gz
    
    (3)#helm二进制文件移到/usr/local/bin目录。
    #cp linux-amd64/helm /usr/local/bin/helm
    #helm help
    # chmod +x /usr/local/bin/helm 
    #设置命令自动补全
    # echo 'source <(helm completion bash)' >> /etc/profile
    #. /etc/profile 
    
    
    
    #Helm Tiller安装
    
    Helm Tiller是Helm的server,Tiller有多种安装方式,比如本地安装或以pod形式部署到Kubernetes集群中。
    本文以pod安装为例,安装Tiller的最简单方式是helm init, 该命令会检查helm本地环境设置是否正确,
    helm init会连接kubectl默认连接的kubernetes集群(可以通过kubectl config view查看),
    一旦连接集群成功,tiller会被安装到kube-system namespace中。
    
    执行helm init,该命令会在当前目录下创建helm文件夹即~/.helm,并且通过Kubernetes Deployment 部署tiller. 检查Tiller是否成功安装:
    
    #cd /root/k8s/helm
    
    创建RBAC角色并绑定
    #kubectl create serviceaccount --namespace kube-system tiller
    #kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    开始初始化安装
    #helm init --service-account=tiller   #Tiller server的环境初始化
    更换SA用户
    # kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
    


    # helm repo list
    NAME  	URL
    stable	https://charts.helm.sh/stable
    local 	http://127.0.0.1:8879/charts
    
    #Helm TILLER删除
    由于 Tiller的数据存储于Kubernetes ConfigMap中,所以删除、升降级Tiller,原Helm部署的应用数据并不会丢失。
    删除Tiller:
    # helm reset
    

    3.测试helm是否可以正常使用

    # helm search mysql      #搜索MySQL
    #查看到的是charts包文件,查出来的版本是helm的Charts包的版本
    # helm inspect stable/mysql    #查看其详细信息
    # helm fetch stable/mysql        #下载搜索到的包到本地
    # helm install stable/mysql       #在线安装这个MySQL
    

    4.Helm 常用操作

    查看版本 
    #helm version
    
    查看当前安装的charts
    #helm list
    
    查询 charts
    #helm search nginx
    
    下载远程安装包到本地。
    #helm fetch rancher-stable/rancher
    
    查看package详细信息
    #helm inspect chart
    
    安装charts
    #helm install --name nginx --namespaces prod bitnami/nginx
    
    查看charts状态
    #helm status nginx
    
    删除charts
    #helm delete --purge nginx
    
    增加repo
    #helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    #helm repo add --username admin --password password myps https://harbor.pt1.cn/chartrepo/charts
    
    更新repo仓库资源
    #helm repo update
    
    创建charts
    #helm create helm_charts
    
    测试charts语法
    #helm lint 
    
    打包charts
    #cd helm_charts && helm package ./
    
    查看生成的yaml文件
    #helm  template  helm_charts-0.1.1.tgz
    
    更新image
    #helm upgrade --set image.tag=‘v201908‘ test update myharbor/study-api-en-oral
    
    回滚relase
    #helm rollback 2
    
    自定义 package 的选项:
    查询支持的选项
    #helm inspect values stable/mysql
    
    自定义 password 持久化存储
    #helm install --name db-mysql --set mysqlRootPassword=anoyi  stable/mysql
    
    查询 charts
    #helm search mysql
    
    查询 package 详细信息
    #helm inspect stable/mysql
    
    部署 package
    #helm install stable/mysql
    
    查看服务状态
    #helm status existing-serval
    
    删除服务
    #helm delete --purge existing-serval
    -
    release "existing-serval" deleted
    -
    再次查看显示状态为删除
    #helm status existing-serval 
    -
    LAST DEPLOYED: Mon Aug 12 19:09:51 2019
    NAMESPACE: default
    STATUS: DELETED
    -
    部署之前可以自定义 package 的选项:
    查询支持的选项
    #helm inspect values stable/mysql
    
    自定义 password 持久化存储
    #helm install --name pttestdb --set mysqlRootPassword=test  stable/mysql
    
    查看密码变量
    #helm get values  pttestdb
    -
    mysqlRootPassword: test
    -
    

    本文至此就结束了!
    官网地址:https://helm.sh/zh/

  • 相关阅读:
    java 集合框架
    java 迭代器遍历List Set Map
    java 容器 List
    OpenLayer4实现卷帘效果
    python结合百度api进行地理编码和爬取POI点
    ArcGIS API For JS空间参考系的浅析
    OpenLayer4加载svg
    OpenLayer3动态点线和动态点的扩散实现
    LeaFlet学习之地图文字标注
    装饰器设计模式
  • 原文地址:https://www.cnblogs.com/wenyang321/p/14115394.html
Copyright © 2011-2022 走看看