Kubernetes 与 Helm:使用同一个 Chart 部署多个应用

k8s 集群搭建好了,准备将 docker swarm 上的应用都迁移到 k8s 上,但需要一个一个应用写 yaml 配置文件,不仅要编写 deployment.yaml 还要编写 service.yaml ,而很多应用的配置是差不多的,这个繁琐工作让人有些望而却步。

k8s 有没有针对这个问题的解救之道呢?发现了救星 Helm —— k8s 应用程序包管理器,实际操作体验一下。

首先在 k8s master 节点上安装 helm ,用下面的1行命令就可以搞定。

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

接下来创建一个 chart (chart 就是 helm 的包包)

helm create cnblogs-chart

注:准备基于这个 chart 部署多个不同的应用。

helm 会创建一个文件夹,我们来看看文件夹中的内容:

cnblogs-chart
├── charts
├── Chart.yaml
├── templates
│?? ├── deployment.yaml
│?? ├── _helpers.tpl
│?? ├── ingress.yaml
│?? ├── NOTES.txt
│?? ├── serviceaccount.yaml
│?? ├── service.yaml
│?? └── tests
│??     └── test-connection.yaml
└── values.yaml

关于这些文件的用途,详见园子里的博文 kubernetes实战篇之helm示例yaml文件详细介绍

下面根据我们的部署场景修改 chart 中的这些配置文件,由于我们想使用同一个 chart 部署很多个应用,需要尽可能减少重复配置,所以在配置时会更多地基于约定。假设我们部署的应用名称是 cache-api ,那 helm 的 release 名称也用 cache-api ,docker 镜像的名称也用 cache-api ,deployment 与 service 的名称也用 cache-api ,ConfigMap 的名称是 cache-api-appsettings 。

修改 templates 中的配置(共享公用配置)

1)修改 deployment.yaml 中的配置

  • metadata.name 的值修改为 .Release.Name
  • containers.name 的值改为 .Release.Name
  • containers. image 的值改为 {{ .Release.Name }}:{{ .Values.image.version }}
  • 添加 containers. workingDir 容器工作目录配置
  • 添加 containers.command 容器启动命令配置
  • 添加 containers.env 环境变量配置
  • matchLabelslabels 的值都改为 {{ .Release.Name }}
  • 添加将 configMap 安装为 volume 的配置用于应用读取 appsettings.Production.json 。
metadata:
  name: {{ .Release.Name }}
  labels:
    name: {{ .Release.Name }}
spec:
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
  spec:
    containers:
      - name: {{ .Release.Name }}
        image: "{{ .Release.Name }}:{{ .Values.image.version }}"
        workingDir: /app
        command:
            - sh
            - run.sh
        env:
            - name: TZ
              value: "Asia/Shanghai"
         volumeMounts:
            - name: appsettings
              mountPath: /app/appsettings.Production.json
              subPath: appsettings.Production.json
              readOnly: true
          volumes:
        - name: appsettings
          configMap:
            name: "{{ .Release.Name }}-appsettings"

2)修改 service.yaml

也是用约定的应用名称 name: {{ .Release.Name }}

kind: Service
metadata:
  name: {{ .Release.Name  }}
  labels:
    name: {{ .Release.Name }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app: {{ .Release.Name }}

修改 values.yaml 中的配置(共享默认配置)

  • image.pullPolicy 修改为 Always
  • 添加 image.version 并设置为 latest
  • imagePullSecrets 中添加 secret 名称。
  • serviceAccount.create 设置为 false 。
  • resourceslimitsrequests 中设置 CPU 与内存限制。
replicaCount: 1

image:
  repository: {}
  version: latest
  pullPolicy: Always

imagePullSecrets:
  - name: regcred
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  create: false
  name:

podSecurityContext: {}
securityContext: {}

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false

resources:
  limits:
    cpu: 2
    memory: 2G
  requests:
     cpu: 100m
     memory: 64Mi

nodeSelector: {}
tolerations: []
affinity: {}

验证配置

运行下面的命令验证配置是否正确

helm install cache-api --set image.version=1.0 --dry-run --debug .

部署应用

如果配置验证通过,就可以用下面的命令部署应用了。

helm install cache-api --set image.version=1.0 .

查看已部署的应用。

helm ls
NAME        NAMESPACE   REVISION    UPDATED                                 STATUS      CHART               APP VERSION
cache-api   production  1           2020-01-22 17:17:30.414863452 +0800 CST deployed    cnblogs-chart-0.1.0 1

原文地址:https://www.cnblogs.com/dudu/p/12221724.html

时间: 2024-10-08 21:13:51

Kubernetes 与 Helm:使用同一个 Chart 部署多个应用的相关文章

kubernetes 的helm 部署

kubernetes 的helm 部署 标签(空格分隔):kubernetes系列 一:什么是 Helm 二:Helm部署 一:什么是 Helm 在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment.svc 等,步骤较繁琐.况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理 Helm 本质就是让 K8s 的应用管理(Depl

Kubernetes如何加速UCloud内部代码部署的CI/CD流程

UCloud内部长期使用 Gitlab 来管理代码.虽然Gitlab作为一套开源平台已很优秀,但我们对于其能为CI/CD提供的敏捷性并不十分满意,内部实践中的代码发布周期仍需按天计算.为此,我们打造了一个基于Kubernetes的内部容器服务平台(名为KUN),用于托管内部服务,并将Gitlab对接到KUN平台,从而借助Kubernetes的云原生优势,获得更好的CI/CD效果.这套系统运行一年内,Gitlab的Pipeline一共触发了994次,执行了约20000+次Job,在测试环境和正式环

Kubernetes 集群的两种部署过程(daemon部署和容器化部署)以及glusterfs的应用!

ClusterIp:通过VIP来访问, NodePort: 需要自己搭建负载据衡器 LoadBalancer:仅仅用于特定的云提供商 和 Google Container Engine https://www.nginx.com/blog/load-balancing-kubernetes-services-nginx-plus/ port:相当于服务端口(对及集群内客户访问) targetPort: 相当于pods端口 nodePort: 宿主机端口(也是服务端口,只不过是对集群外客户访问)

宝塔面板 + Rancher + 阿里云镜像仓库 + +Docker + Kubernetes,添加集群、部署 web 应用

目录 一,安装宝塔面板(V 6.8) 二,使用宝塔安装 Docker,配置阿里云容器服务 三,安装 Rancher (Server) 四,管理 Rancher.添加集群 五,添加 Rancher 应用.服务,与 Nginx 六,ASP.NET Core 应用部署 七,相关文章推荐 前言: 本文使用 Centos 7.x 进行操作,Rancher 官方推荐使用 Ubuntu. Docker 对内核要求 大于 3.10,你可以使用 uname -r 检测系统内容版本. 通过 Rancher,可以很方

kubernetes 1.14.2 kubeadm 方式部署

kubernetes 1.14.2 kubeadm方式部署 主机 192.168.100.111 k8s-master192.168.100.112 k8s-node1192.168.100.113 k8s-node2 基本环境 systemctl stop firewalld ystemctl disable firewalld sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0 swapoff -a vim /etc

基于 Kubernetes v1.14.0 之 CoreDNS部署

1.部署容器前说明: 1.1.如果没有特殊指明,本文档的所有操作均在 k8s-operation 节点上执行: kuberntes 自带插件的 manifests yaml 文件使用 gcr.io 的 docker registry,国内被墙,需要手动替换为其它 registry 地址: 1.2.由于k8s-master 没有部署容器服务于路由服务,但是k8s-master 又要访问容器网络跟k8s集群网络,1.在上级路由器写入静态路由让其能访问容器网络与k8s集群网络.2.在k8s-maste

同一个tomcat部署多个项目导致启动失败

内容描述在同一个tomcat部署多个打包成war包的项目导致启动失败,报错如下: 报错信息 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 24-Dec-2018 15:43:04.190 严重 [localhost-startStop-1] org.springframework.boot.SpringApplica

使用 Helm Chart 部署及卸载 istio

部署 istio 1.添加 istio 官方的 helm 仓库 helm repo add istio https://storage.googleapis.com/istio-release/releases/1.3.3/charts/ 2.是否添加成功 helm search repo istio NAME CHART VERSION APP VERSION DESCRIPTION istio/istio 1.3.3 1.3.3 Helm chart for all istio compon

Kubernetes安装helm

1.下载helm二进制安装包 https://get.helm.sh/helm-v2.16.0-linux-amd64.tar.gz 将helm目录下的helm文件拷贝到/usr/local/bin/helm 2.helm 服务端安装Tiller Tiller 是以 Deployment 方式部署在 Kubernetes 集群中的,只需使用以下指令便可简单的完成安装. helm init 由于 Helm 默认会去 storage.googleapis.com 拉取镜像,如果你当前执行的机器不能访