Kubernetes-Helms调研

1 分钟阅读

Contact me

或者用邮件交流 jacky.wucheng@foxmail.com

一、概念

Helm是Kubernetes生态中的一个资源管理器,类似于debian上的apt和centos上的yum用来管理软件包,而Helm用来管理Kubernetes集群里运行的软件资源。

该软件资源用Chart这个概念来表述,其中包含了运行一个应用所需要的镜像、依赖和资源定义等一系列定义文件,用来描述一整套软件服务。

另外一个概念叫Release,指的是根据Chart在Kubernetes集群上运行的一个实例。在同一个集群上,一个 Chart 可以安装多次,每次安装都会创建一个新的 release。

二、意义

要在Kubernetes上安装配置一套复杂的service,需要编写一大堆定义文件,为了解决这些文件的重复定义和管理问题,把这些文件集成到Chart包里统一管理,提升了重用性和管理效率。

三、原理

Helm包含2个组件

  • tiller:Server端,运行在Kubernetes集群里面,用来统一管理Chart。
  • helm:客户端,用来跟tiller通信。

Chart至少需要包含两样东西:

  • 包描述文件Chart.yaml
  • 若干个模板,包含了Kubernetes manifest files

Repository:用于发布和存储 Chart 的仓库。

helm架构

官方的架构描述可以参考 https://docs.helm.sh/architecture/

四、使用

1、helm命令的使用

安装方法参考 这里

快速入门:Quick Start Guide

默认情况下helm会从<gcr.io/kubernetes-helm/tiller>下载镜像安装tiller服务,然后将https://kubernetes-charts.storage.googleapis.com作为默认的镜像下载地址,因国内无法访问”gcr.io”, “storage.googleapis.com” 这些域名,所以用阿里云的镜像作为代替

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.5.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

repository信息被保存在 ~/.helm/repository/repositories.yaml

安装tiller组件

helm init,安装
helm init --upgrade 安装,如果已经安装就升级

查询repository里所有chart

helm search

更新所有chart列表

helm repo update 

查询所有已安装的chart

helm list 

查看chart详细信息

helm inspect stable/mysql

查看chart自定义项

helm inspect values stable/mysql

查询服务列表

helm ls

查询某服务的状态

helm status mysql-test

安装mysql

helm install --name mysql-test stable/mysql
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-test-mysql.default.svc.cluster.local

To get your root password run:

    kubectl get secret --namespace default mysql-test-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 mysql-test-mysql -p

安装nginx-ingress

$ helm install stable/nginx-ingress
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w yodeling-quail-nginx-ingress-controller'

An example Ingress that makes use of the controller:

  apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    name: example
    namespace: foo
  spec:
    rules:
      - host: www.example.com
        http:
          paths:
            - backend:
                serviceName: exampleService
                servicePort: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
        - hosts:
            - www.example.com
          secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls

2、chart的编写

参考这里:Charts

社区开源的chart资源在:https://kubeapps.com/

五、开发

helm client-side plugin 开发:helm plugins 开发手册,该插件在helm client端执行,插件代码不属于helm的自身代码仓库。

现有的一些插件:

  • https://github.com/kubernetes/helm/blob/master/docs/related.md#helm-plugins
  • https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories

开发插件可以如下几个插件作为上手对象

模板开发参考:Developing Templates

最佳实践:Best Practices

六、参考资料