Helm 部署 java 项目到 K8S

部署流程

  1. 准备 jar 包
  2. 使用 Dockerfile 构建镜像
  3. 上传镜像到仓库(Harbor)
  4. 使用 Helm 模板部署 jar 到 K8S

本文着重讲解第四步,如何制作 Helm 模板

 

模板目录

如图所示,整个模板有两大部分组成

在这里插入图片描述

第一部分是外层:

  • Chart.yml:模板基础信息,例如名称、版本等
  • values.yaml:模板的默认传入值

第二部分是 templates:

  • _helpers.tpl:此文件中定义一些可重用的模板片断,可在任何资源定义模板中使用
  • deployment.yaml:部署 deployment
  • service.yaml:定义服务端口
  • ingress.yaml:定义访问域名

 

文件解析

Deployment

  • metadata.labels:添加标签,用于识别的唯一标识
  • replicas:需要构建多少个
  • spec.selector.matchLabels:和 metadata.labels 对应
  • spec.template.metadata:和 metadata.labels 对应
  • containers.image:镜像路径
  • containers.imagePullPolicy:镜像拉取策略,Always:总是拉取;IfNotPresent:默认值,本地有则使用本地镜像,否则拉取;Never:只用本地镜像,不拉取
  • containers.ports.containerPort:pod 暴露的端口号
  • testchart.env:定义运行环境
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}
  labels:
    app: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
        - name: {{ .Values.name }}
          image: "{{ .Values.image.name }}"
          imagePullPolicy: IfNotPresent
          ports:
          - name: tcp-{{ .Values.service.port }}
            containerPort: {{ .Values.service.port }}
            protocol: TCP
{{- if .Values.env.enabled -}}
{{ include "testchart.env" . | indent 10 }}
{{- end }}

 

Service

  • spec.ports.port:设置为80,引用服务时就不需填写端口号
  • spec.selector:匹配标签,和 Deployment 的 metadata.labels 对应
  • spec.type:Service 的类型,ClusterIP、NodePort、LoaderBalancer
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.name }}
spec:
  ports:
    - name: tcp-{{ .Values.service.port }}
      port: 80
      protocol: TCP
      targetPort: {{ .Values.service.port }}
  selector:
    app: {{ .Values.name }}
  type: {{ .Values.service.type }}

 

Ingress

  • spec.rules.host:配置域名
  • spec.rules.http.paths.backend.serviceName:对应 Service 名称
{{- $hostName := .Values.hostname -}}
{{- $env := .Values._env.name -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Values.name }}-ingress-http
spec:
  rules:
  - host: {{ $hostName }}.{{ $env }}.api.com
    http:
      paths:
      - backend:
          serviceName: {{ .Values.name }}
          servicePort: 80
  {{- if .Values.env.enabled -}}

 

_helpers.tpl

  • env:容器运行前需设置的环境变量列表
  • JAVA_OPTS:设置 JVM 相关运行参数的变量
{{- define "testchart.env" }}
env:
  - name: JAVA_OPTS
    value: -Dspring.profiles.active={{ .Values.env.active }}
{{- end }}

 

Chart.yaml

apiVersion: v1
name: helm-chart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.16.0

 

values.yaml

name: demo

replicaCount: 1

_env:
  name: dev
  
hostname: xxx

image:
  name: xxxxxx:v1
  pullPolicy: IfNotPresent

env:
  enabled: true
  active: "dev"

service:
  type: ClusterIP
  port: 8080

 

部署命令

登录 harbor

helm repo add --username admin --password Harbor12345 harbor http://192.168.140.01/chartrepo/xxx

配置集群访问的文件 kubeconfig

export KUBECONFIG=~/kubeconfig
chmod g-r ~/kubeconfig
chmod o-r ~/kubeconfig

部署

 helm  install -f values.yaml  xxxname harbor/helmname
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值