Helm - Kubernetes服务编排的利器

Helm介绍

  在Kubernetes中部署容器云应用(容器或微服务编排)是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过Helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用。同时,也可以通过Helm进行容器云应用的分享。

  Helm的整体架构如下图(图片来源-Kubernetes中文社区)所示:

  

  Helm架构由Helm客户端、Tiller服务器端和Chart仓库所组成;Tiller部署在Kubernetes中,Helm客户端从Chart仓库中获取Chart安装包,并将其安装部署到Kubernetes集群中。

Helm是管理Kubernetes包的工具,Helm能提供以下能力:

  • 创建新的charts
  • 将charts打包成tgz文件
  • 与chart仓库交互
  • 安装和卸载Kubernetes的应用
  • 管理使用Helm安装的charts的生命周期

在Helm中,有三个需要了解的重要概念:

  • chart:是创建Kubernetes应用实例的信息集合
  • config:创建发布对象的chart的配置信息
  • release:chart的运行实例,包含特定的config

安装Helm

注:有些文件或镜像在国内可能无法下载,可以通过此地址获取:https://pan.baidu.com/s/1yVUCz7wGYie8hkzQaNc3eg

1. 在Master中下载安装Helm的客户端,可根据需要下载对应的版本,这里使用的版本是2.8.2。

curl -LO https://storage.googleapis.com/kubernetes-helm/helm-v2.8.2-linux-amd64.tar.gz

tar xzf helm-v2.8.2-linux-amd64.tar.gz

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

helm version查看信息:

服务端Tiller还未安装,因此无法获取信息。

注:如果helm-v2.8.2-linux-amd64.tar.gz无法下载,可以从上面的链接中获取。

2. 安装Tiller。

helm init

注:如果初始化失败,可以把上面的链接中的.helm目录拷贝到master的root目录下。tiller的镜像文件也可以从目录获取。

如果出现了“Error:Get https://10.96.0.1:443/version:dial tcp 10.96.0.1:443:i/o timeout.”的问题,可以参考我的回答来解决:

https://github.com/kubernetes/helm/issues/3347#issuecomment-385468128

使用helm version查看Helm版本,如下表示客户端、服务端都安装完成:

Kubernetes 1.6+版本加入了RBAC的机制,因此需要添加Role Binding:

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

准备Java微服务

1. 打包jar

mvn package

2. 准备Dockerfile

FROM java:8u111-jre
RUN mkdir /app
COPY . /app
WORKDIR /app
CMD ["java","-Xmx4g","-Djava.security.egd=file:/dev/./urandom","-jar","hello-1.0.0.jar"]

3. 拷贝打包好的jar包以及Dockerfile到node虚拟机

4. 打包docker镜像

docker build -t hello:1.0.0 .

准备.Net Core微服务

1. 发布项目

dotnet publish -c Release

2. 准备Dockerfile

FROM microsoft/aspnetcore:2.0
COPY . /app
WORKDIR /app

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "HelloTest.dll"]

3. 拷贝打包好的程序包以及Dockerfile到node虚拟机

4. 打包docker镜像

docker build -t hello-test:1.0.0 .

使用Helm部署蓝图(Chart)

这里演示如何通过helm完成上面两个微服务的部署。

1. 创建chart

helm create hello-test

2. 在templates目录中放入相应的部署脚本

3. 打包chart

helm package hello-test

4. 检查chart

helm lint hello-test

缺少chart的图标,但不影响,可以忽略。

5. 调试chart

helm install ./hello-test-0.1.0.tgz --debug --dry-run

调试模式不会真的部署,通过helm list来查看:

6. 通过chart部署release

helm install --name hello-test ./hello-test-0.1.0.tgz

helm ls

kubectl get po

查看结果

java服务:

.Net Core服务(调用java服务):

7. 删除release

helm delete hello-test

kubectl get po

helm ls -a

hello-test还在,但状态是DELETED,表示可以重用。如果想彻底删除,可以通过helm delete hello-test --purge来删除

使用.Net Core来进行部署

使用的组件是:https://github.com/qmfrederik/helm/

1. 核心代码:

[Route("api/releases")]
public class ReleaseController : Controller
{
    [HttpPost("{name}")]
    public async Task<IActionResult> Install(string name, IFormFile file)
    {
        var client = await GetClient();

        using (var stream = new MemoryStream())
        {
            await file.CopyToAsync(stream);
            var chart = ChartPackage.Open(stream);
            var release = await client.InstallRelease(chart.Serialize(), string.Empty, name, true);
            return Ok(release.Manifest);
        }
    }

    [HttpDelete("{name}/{purge}")]
    public async Task<IActionResult> Uninstall(string name, bool purge)
    {
        var client = await GetClient();
        var result = await client.UninstallRelease(name, purge);
        return Ok(result.Info);
    }

    [HttpPut("{name}")]
    public async Task<IActionResult> Update(string name, IFormFile file)
    {
        var client = await GetClient();

        using (var stream = new MemoryStream())
        {
            await file.CopyToAsync(stream);
            var chart = ChartPackage.Open(stream);
            var release = await client.UpdateRelease(chart.Serialize(), string.Empty, name);
            return Ok(release.Manifest);
        }
    }

    [HttpPut("{name}/{version}")]
    public async Task<IActionResult> Rollback(string name, int version)
    {
        var client = await GetClient();
        var result = await client.RollbackRelease(name, version);
        return Ok(result.Info);
    }

    private static async Task<TillerClient> GetClient()
    {
        var kubeconfig = System.IO.File.ReadAllText("admin.conf");
        var config = KubernetesClientConfiguration.BuildConfigFromConfigFile(kubeconfig: kubeconfig);
        var kubernetes = new Kubernetes(config);

        var locator = new TillerLocator(kubernetes);
        var endPoint = await locator.Locate();
        var client = new TillerClient(endPoint.ToString());
        return client;
    }
}

注:这里需要获取Kubernetes的admin.config的证书,该证书在master节点上:/etc/kubernetes/admin.conf。

2. 参考上述准备.Net Core微服务的步骤,完成helm-client的镜像打包及部署。

注:需要把admin.conf拷贝到镜像中:

3. 准备yaml文件helm-client.yaml并完成部署

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: helm-client
  labels:
    app: helm-client
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: helm-client
    spec:
      nodeSelector:
        kubernetes.io/role: node
      containers:
      - name: helm-client
        image: helm-client:1.0.0
        ports:
        - containerPort: 5000

---

kind: Service
apiVersion: v1
metadata:
  name: helm-client
  labels:
    app: helm-client
  namespace: default
spec:
  selector:
    app: helm-client
  type: NodePort
  ports:
  - name: helm-client
    nodePort: 30000
    port: 5000
    protocol: TCP
    targetPort: 5000

4. 检查效果

安装:

删除:

源码地址

https://github.com/ErikXu/HelmTutorial

原文地址:https://www.cnblogs.com/Erik_Xu/p/8893725.html

时间: 2024-08-04 05:35:46

Helm - Kubernetes服务编排的利器的相关文章

Kubernetes服务编排的利器——Helm

博文大纲:一.Helm简介二.Helm组件及相关术语1)Helm2)Tiller3)Chart4)Repoistory5)Release三.Helm工作原理四.部署Helm1)安装Helm客户端2)安装Tiller server3)配置Helm仓库4)测试Helm是否可 一.Helm简介 很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具.采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用:用户则可以以简单的方

Helm - Kubernetes包管理专家

What is Helm? - The package manager for kubernetes, Helm is the best way to find, share, and use software built for kubernetes. Helm helps you manage Kubernetes applications - Helm Charts helps you define, install, and upgrade even the most complex K

Kubernetes 系列(二):Kubernetes 服务暴露介绍

一.Kubernetes 服务暴露介绍 从 kubernetes 1.2 版本开始,kubernetes提供了 Ingress 对象来实现对外暴露服务:到目前为止 kubernetes 总共有三种暴露服务的方式: LoadBlancer Service NodePort Service Ingress 1.1.LoadBlancer Service LoadBlancer Service 是 kubernetes 深度结合云平台的一个组件:当使用 LoadBlancer Service 暴露服务

来自京东、唯品会对微服务编排、API网关、持续集成的实践分享(上)

架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第三期:微服务.微服务架构以其高度的弹性.灵活性和效率的巨大提升,快速受到各领域架构师和技术决策者的关注.它的基本理念是将一个肥大的系统拆分成若干小的服务组件,组件之间的通讯采用轻量的协议完成.我们本期小组交流会来探讨一下,现在互联网公司的微服务实践情况. 嘉宾:京东章耿.原唯品会石廷鑫.七牛陈爱珍 本文是对此次交流的整理,分了上下两篇文章. 第一轮:自由交流 京东章耿:大家好,我是京东基础架构部平台中间件的章耿,主要负责京东的

Docker之Compose服务编排

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Compose是Fig的升级版,Fig已经不再维护.Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用. 服务编排工具使得Docker应用管理更为方便快捷. Compose网站:https://docs.docker.com/compos

(转)Docker之Compose服务编排

转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Compose是Fig的升级版,Fig已经不再维护.Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用. 服务编排工具使得Docker应用管理

Docker Compose 1.18.0 之服务编排详解

一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose,不再需要使用shell脚本来启动容器.在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 服务编排工具使得Docker应用管理更为方便快捷. Docker Compose网站:https://docs.docke

阿里云宣布推出Serverless Kubernetes服务 30秒即可完成应用部署

摘要: 阿里云宣布推出Serverless Kubernetes服务,容器服务新增Serverless形态. 5月2日,阿里云宣布推出Serverless Kubernetes服务,容器服务新增Serverless形态.开发者可在5秒内创建集群.30秒部署应用上线.用户无需管理集群基础设施,还可根据应用实际消耗资源按量付费,此举意在进一步降低容器技术的使用门槛,简化容器平台运维的复杂度.该服务即日起开启公测. 阿里云是国内最大规模的容器公共云平台,为数千多家企业提供容器平台.新推出的Server

BoCloud博云获得CNCF Kubernetes服务提供商认证

近日,BoCloud博云正式获得 CNCF 和 Linux 基金认证的 Kubernetes 服务提供商资质(KCSP),此认证证明BoCloud博云在 Kubernetes 社区从事活动(包括积极贡献代码).支持企业最终用户的商业模式.以及将工程师派驻客户现场这三面具有相应的技术实力. KCSP 计划(全称 Kubernetes Certified Service Provider)是由 CNCF 和 Linux 基金会发起,旨在对在 Kubernetes 的企业应用中拥有丰富经验的服务商进行