zoukankan      html  css  js  c++  java
  • 第十一章 Helm-kubernetes的包管理器(上)

    Helm - K8s的包管理器

    11.1 Why Helm

      K8s能够很好的组织和编排容器,但它缺少一个更高层次的应用打包工具,Helm就是干这个的。

      比如对于一个MySQL服务,K8s需要部署如下对象:

      (1)Service,让外界能访问MySQL

      (2)Secret,定义MySQL的密码

      (3)PersisentVolumeClaim,为MySQL申请持久化存储空间。

      (4)Deployment,部署MySQL Pod,并使用上面的这些支持对象。

    可以将上面这些配置保存到文件中,或几种写进一个文件,然后通过kubectl apply -f 部署。

      如果服务少,这样问题也不大,但是如果是微服务架构,服务多达数十个甚至上百个,这种组织和管理应用的方式就不好使了:

      (1)很难管理、编辑和维护如此多的服务。每个服务有若干个配置,缺乏更高层次的工具将这些配置组织起来。

      (2)不容易将这些服务作为一个整体统一发布。部署人员需要首先理解应用都包含哪些服务,然后按照逻辑顺序依次执行kubectl apply, 缺少一种工具定义应用与服务,已经服务之间的依赖。

      (3)不能高效的共享和重用服务。比如两个应用都用到MySQL服务,但是配置参数不一样,这两个应用只能分别复制一套标准MySQL配置文件,修改后通过kubectl apply部署。也就是不支持参数化配置和多环境部署。

      (4)不支持应用级别的版本管理。虽然可以通过kubectl rollout undo进行回滚,但这只针对单个deployment,不支持整个应用的的回滚。

      (5)不支持对部署的应用状态进行验证。比如是否能通过预定义账号访问MySQL。虽然K8s有健康检查,但那时针对单个容器,我们需要应用(服务)级别的健康检查。

      Helm能够解决上面这些问题。

    11.2 Helm架构

      Helm有两个重要概念:chart和release

    • chart: 是创建一个应用的信息集合,包括各种k8s对象的配置模板、参数定义、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元。可以将char想象成apt、yum中的软件安装包
    • release: 是chart的运行实例,代表了一个正在运行的应用当chart被安装到k8s集群,就生成一个release。chart能够多次安装到同一个集群,每次安装都是一个release。

       Helm是包管理工具,这里的包就是指char。 Helm能够:

    • 从零创建新chart。
    • 与存储chart的仓库交互。拉取、保存、和更新chart
    • 在k8s集群中安装和卸载release.
    • 更新、回滚和测试release。

    Helm包含两个组件:Helm客户端和Tiller服务器,

    Helm客户端,用户可以

    • 在本地开发chart
    • 管理chart仓库
    • 与Tiller服务器交互
    • 在远程K8s集群上安装chart
    • 查看release信息。
    • 升级或卸载已有的release

    Tiller服务器运行在K8s集群中,它会处理Helm客户端的请求,与k8s的 API Server交互。Tiller服务器负责:

    • 监听来自Helm客户端的请求
    • 通过chart创建release
    • 在k8s中安装chart,并跟踪release状态
    • 通过API server升级或卸载已有的release

    简单说: Helm客户端负责管理chart,Tiller服务器负责管理release。

    11.3 安装Helm 

      11.3.1 Helm客户端

      因为我的环境已经安装过了,就没写,以后补充

    kubeusr@GalaxyKubernetesMaster:~$ helm version
    Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}

      11.3.2 Tiller服务器

      运行helm init就可以

      如下查看Tiller的Service、deployment和Pod

    kubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system svc tiller-deploy
    NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)     AGE
    tiller-deploy   ClusterIP   10.111.0.95   <none>        44134/TCP   131d
    
    kubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system deployment tiller-deploy
    NAME            DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    tiller-deploy   1         1         1            1           131d
    
    kubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system pod tiller-deploy-895d57dd9-bjlwf
    NAME                            READY     STATUS    RESTARTS   AGE
    tiller-deploy-895d57dd9-bjlwf   1/1       Running   0          40d

     11.4 使用Helm

      helm search                 # 查看当前可以安装的chart 

    kubeusr@GalaxyKubernetesMaster:~$ helm repo list             # 查看仓库
    NAME    URL 
    stable  https://kubernetes-charts.storage.googleapis.com     # stable是官方仓库
    local   http://127.0.0.1:8879/charts                         # local是用户存放自己开发的chart的本地仓库

      可以通过helm repo add 添加更多个仓库。

      支持关键字搜索:

    kubeusr@GalaxyKubernetesMaster:~$ helm search mysql
    NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
    stable/mysql                            0.10.1          5.7.14          Fast, reliable, scalable, and easy to use open-source rel...
    stable/mysqldump                        1.0.0           5.7.21          A Helm chart to help backup MySQL databases using mysqldump
    stable/prometheus-mysql-exporter        0.1.0           v0.10.0         A Helm chart for prometheus mysql exporter with cloudsqlp...
    stable/percona                          0.3.2           5.7.17          free, fully compatible, enhanced, open source drop-in rep...
    stable/percona-xtradb-cluster           0.2.0           5.7.19          free, fully compatible, enhanced, open source drop-in rep...
    stable/phpmyadmin                       1.1.2           4.8.2           phpMyAdmin is an mysql administration frontend
    stable/gcloud-sqlproxy                  0.5.0           1.11            Google Cloud SQL Proxy
    stable/mariadb                          5.0.9           10.1.36         Fast, reliable, scalable, and easy to use open-source rel...

    安装chart也很简单,执行如下命令就可以安装MySQL:

    kubeusr@GalaxyKubernetesMaster:~$ helm install stable/mysql             # 安装MySQL
    NAME:   invisible-stingray                         # release的名字, 如果不用-n指定名字,这里就随机生成。
    LAST DEPLOYED: Wed Jan  2 03:19:02 2019            
    NAMESPACE: default                                 # 命名空间,可以通过--namespace指定
    STATUS: DEPLOYED                                   # 状态是DEPLOYED, 表示已经将chart部署到集群
    
    RESOURCES:                                         # 当前release包含的资源,POD, secret,configmap, persistentVolumeClaim
    ==> v1/Pod(related)
    NAME                                      READY  STATUS   RESTARTS  AGE
    invisible-stingray-mysql-8787ff6c8-dh8bh  0/1    Pending  0         0s
    
    ==> v1/Secret
    NAME                      TYPE    DATA  AGE
    invisible-stingray-mysql  Opaque  2     0s
    
    ==> v1/ConfigMap
    NAME                           DATA  AGE
    invisible-stingray-mysql-test  1     0s
    
    ==> v1/PersistentVolumeClaim
    NAME                      STATUS   VOLUME  CAPACITY  ACCESS MODES  STORAGECLASS  AGE
    invisible-stingray-mysql  Pending  0s
    
    ==> v1/Service
    NAME                      TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)   AGE
    invisible-stingray-mysql  ClusterIP  10.107.208.222  <none>       3306/TCP  0s
    
    ==> v1beta1/Deployment
    NAME                      DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
    invisible-stingray-mysql  1        1        1           0          0s
    
    NOTES:                                             # 显示的是release的使用方法
    MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
    invisible-stingray-mysql.default.svc.cluster.local
    
    To get your root password run:
    
        MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default invisible-stingray-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)
    
    To connect to your database:
    
    1. Run an Ubuntu pod that you can use as a client:
    
        kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il
    
    2. Install the mysql client:
    
        $ apt-get update && apt-get install mysql-client -y
    
    3. Connect using the mysql cli, then provide your password:
        $ mysql -h invisible-stingray-mysql -p
    
    To connect to your database directly from outside the K8s cluster:
        MYSQL_HOST=127.0.0.1
        MYSQL_PORT=3306
    
        # Execute the following command to route the connection:
        kubectl port-forward svc/invisible-stingray-mysql 3306
    
        mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

     helm list显示已经部署的release,helm delete可以删除release

    kubeusr@GalaxyKubernetesMaster:~$ helm list --namespace default
    NAME                    REVISION        UPDATED                         STATUS          CHART           APP VERSION     NAMESPACE
    invisible-stingray      1               Wed Jan  2 03:19:02 2019        DEPLOYED        mysql-0.10.1    5.7.14          default
    vehement-lambkin        1               Wed Jan  2 03:18:15 2019        DEPLOYED        mysql-0.10.1    5.7.14          default
    kubeusr@GalaxyKubernetesMaster:~$ helm delete invisible-stingray

      

      

     

      

      

     

  • 相关阅读:
    java 三目运算符
    增强for 可以用于ArrayList
    shell SORT
    BASH if/while/until loop
    设置临时环境变量
    2015年创业中遇到的技术问题:121-130
    2015年创业中遇到的技术问题:121-130
    JDK8新特性之Lambda表达式
    使用Html5开发Android和iOS应用:HBuilder、Html5Plus、MUI
    使用Html5开发Android和iOS应用:HBuilder、Html5Plus、MUI
  • 原文地址:https://www.cnblogs.com/liufei1983/p/10208846.html
Copyright © 2011-2022 走看看