1. 首页 > KubeSphere教程 > 正文

KubeSphere教程FG027-KubeSphere自定义应用模板制作与发布实战

本教程详细介绍KubeSphere中自定义应用模板制作与发布的实战操作,包括基础概念、生产环境规划、具体实施方案和实战案例。风哥教程参考KubeSphere官方文档KubeSphere容器平台使用指南、KubeSphere应用管理等相关内容。

目录大纲

Part01-基础概念与理论知识

1.1 自定义应用模板核心概念

自定义应用模板是指根据业务需求,创建可重复使用的应用部署模板。它包括:

  • 应用配置:应用的基本配置信息,如名称、版本、描述等
  • 资源定义:应用所需的Kubernetes资源,如Deployment、Service、ConfigMap等
  • 参数配置:应用的可配置参数,如镜像版本、资源限制、环境变量等
  • 依赖管理:应用的依赖关系,如存储、服务等

1.2 应用模板结构

应用模板的基本结构包括:

  • Chart.yaml:应用模板的元数据,如名称、版本、描述等
  • values.yaml:应用模板的默认参数值
  • templates/:存放Kubernetes资源模板文件
  • charts/:存放依赖的子图表
  • README.md:应用模板的说明文档

1.3 应用模板发布流程

应用模板的发布流程包括:

  • 制作模板:创建应用模板的文件结构和内容
  • 测试模板:在测试环境中验证模板的可用性
  • 打包模板:将模板打包成Helm Chart
  • 发布模板:将模板发布到应用商店或私有仓库
  • 使用模板:从应用商店或私有仓库中部署应用

Part02-生产环境规划与建议

2.1 模板设计规划

在实施自定义应用模板制作与发布时,模板设计规划是非常重要的:

  • 模板结构设计:设计清晰、合理的模板结构
  • 参数设计:设计可配置的参数,提高模板的灵活性
  • 资源配置:合理配置应用的资源需求
  • 依赖管理:明确应用的依赖关系

2.2 存储规划

存储规划对于自定义应用模板制作与发布也非常重要: 风哥提示:

  • 模板存储:选择安全、可靠的存储介质,如Git仓库、Helm仓库等
  • 存储容量:根据模板数量和大小,规划足够的存储容量
  • 存储访问:确保模板存储的访问权限控制,防止未授权访问
  • 版本管理:对模板进行版本管理,便于回滚和升级

2.3 权限规划

权限规划是自定义应用模板制作与发布的重要组成部分:

  • 模板创建权限:控制谁可以创建和修改模板
  • 模板发布权限:控制谁可以发布模板
  • 模板使用权限:控制谁可以使用模板
  • 权限审计:对模板的操作进行审计

Part03-生产环境项目实施方案

3.1 应用模板制作

应用模板制作的步骤:

  • 创建模板目录结构:创建符合Helm Chart规范的目录结构
  • 编写Chart.yaml:填写应用模板的元数据
  • 编写values.yaml:设置应用模板的默认参数值
  • 编写模板文件:创建Kubernetes资源模板文件
  • 编写README.md:编写应用模板的说明文档

3.2 应用模板测试

应用模板测试的步骤:

  • 本地测试:使用Helm命令在本地测试模板
  • 集群测试:在Kubernetes集群中测试模板
  • 参数测试:测试不同参数值对应用的影响
  • 功能测试:测试应用的功能是否正常

3.3 应用模板发布

应用模板发布的步骤:

  • 打包模板:使用Helm命令打包模板
  • 上传模板:将打包好的模板上传到Helm仓库或应用商店
  • 验证发布:验证模板是否成功发布
  • 更新模板:根据需要更新模板的版本

Part04-生产案例与实战讲解

4.1 自定义应用模板制作实战

下面我们来实战演示自定义应用模板制作: 学习交流加群风哥微信: itpux-com

# 创建模板目录结构
mkdir -p fgedu-app/templates
# 目录创建成功
# 编写Chart.yaml
cat > fgedu-app/Chart.yaml << EOF
apiVersion: v2
name: fgedu-app
version: 1.0.0
description: A custom application template for fgedu
type: application
appVersion: “1.0.0”
EOF
# 文件创建成功
# 编写values.yaml
cat > fgedu-app/values.yaml << EOF
replicaCount: 3

image:
repository: nginx
tag: 1.19.10,
pullPolicy: IfNotPresent

service:
type: ClusterIP
port: 80

resources:
requests:
cpu: “100m”
memory: “100Mi”
limits:
cpu: “500m”
memory: “500Mi”

ingress:
enabled: false
hosts:
– host: chart-example.local
paths:
– path: /
pathType: ImplementationSpecific
EOF
# 文件创建成功

# 编写Deployment模板
cat > fgedu-app/templates/deployment.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include “fgedu-app.fullname” . }}
namespace: {{ .Release.Namespace }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include “fgedu-app.name” . }}
template:
metadata:
labels:
app: {{ include “fgedu-app.name” . }}
spec:
containers:
– name: {{ .Chart.Name }}
image: “{{ .Values.image.repository }}:{{ .Values.image.tag }}”
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
– containerPort: 80
resources:
requests:
cpu: {{ .Values.resources.requests.cpu }}
memory: {{ .Values.resources.requests.memory }}
limits:
cpu: {{ .Values.resources.limits.cpu }}
memory: {{ .Values.resources.limits.memory }}
EOF
# 文件创建成功
# 编写Service模板
cat > fgedu-app/templates/service.yaml << EOF
apiVersion: v1
kind: Service
metadata:
name: {{ include “fgedu-app.fullname” . }}
namespace: {{ .Release.Namespace }}
spec:
type: {{ .Values.service.type }}
ports:
– port: {{ .Values.service.port }}
targetPort: 80
selector:
app: {{ include “fgedu-app.name” . }}
EOF# 文件创建成功
# 编写_helpers.tpl
cat > fgedu-app/templates/_helpers.tpl << EOF
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define “fgedu-app.fullname” -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix “-” -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix “-” -}}
{{- else -}}
{{- printf “%s-%s” .Release.Name $name | trunc 63 | trimSuffix “-” -}}
{{- end -}}
{{- end -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define “fgedu-app.chart” -}}
{{- printf “%s-%s” .Chart.Name .Chart.Version | replace “+” “_” | trunc 63 | trimSuffix “-” -}}
{{- end -}}

{{/*
Common labels
*/}}
{{- define “fgedu-app.labels” -}}
helm.sh/chart: {{ include “fgedu-app.chart” . }}
{{ include “fgedu-app.selectorLabels” . }}
{{- if .Chart.AppVersion -}}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end -}}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}

{{/*
Selector labels
*/}}
{{- define “fgedu-app.selectorLabels” -}}
app.kubernetes.io/name: {{ include “fgedu-app.name” . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
EOF
# 文件创建成功

# 编写README.md
cat > fgedu-app/README.md << EOF
# fgedu-app

A custom application template for fgedu

## Introduction

This is a custom application template for fgedu, based on Nginx.

## Prerequisites

– Kubernetes 1.16+
– Helm 3.0+

## Installation

“`bash
helm install fgedu-app ./fgedu-app
“`

## Configuration,

The following table lists the configurable parameters of the fgedu-app chart and their default values.

| Parameter | Description | Default |
| ——— | ———– | ——- |
| `replicaCount` | Number of replicas | 3 |
| `image.repository` | Image repository | nginx |
| `image.tag` | Image tag | 1.19.10 |
| `image.pullPolicy` | Image pull policy | IfNotPresent |
| `service.type` | Service type | ClusterIP |
| `service.port` | Service port | 80 |
| `resources.requests.cpu` | CPU request | 100m |
| `resources.requests.memory` | Memory request | 100Mi |
| `resources.limits.cpu` | CPU limit | 500m |
| `resources.limits.memory` | Memory limit | 500Mi |
| `ingress.enabled` | Enable ingress | false |
| `ingress.hosts` | Ingress hosts | chart-example.local |
EOF
# 文件创建成功

4.2 应用模板测试与调试实战

下面我们来实战演示应用模板测试与调试: 学习交流加群风哥QQ113257174 更多视频教程www.fgedu.net.cn

# 检查模板语法
helm lint fgedu-app
==> Linting fgedu-app
Lint PASSED
1 chart(s) linted, 0 chart(s) failed
# 模板渲染测试
helm template fgedu-app-test fgedu-app

# Source: fgedu-app/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: fgedu-app-test-fgedu-app
namespace: default
spec:
type: ClusterIP
ports:
– port: 80
targetPort: 80
selector:
app: fgedu-app

# Source: fgedu-app/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: fgedu-app-test-fgedu-app
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: fgedu-app
template:
metadata:
labels:
app: fgedu-app
spec:
containers:
– name: fgedu-app
image: “nginx:1.19.10”
imagePullPolicy: IfNotPresent
ports:
– containerPort: 80
resources:
requests:
cpu: 100m
memory: 100Mi,
limits:
cpu: 500m
memory: 500Mi
# 安装模板测试
helm install fgedu-app-test fgedu-app –namespace fgedu –create-namespace
NAME: fgedu-app-test
LAST DEPLOYED: Sun Oct 1 10:00:00 2023
NAMESPACE: fgedu
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods –namespace fgedu -l “app=fgedu-app” -o jsonpath=”{.items[0].metadata.name}”)
kubectl port-forward $POD_NAME 8080:80 –namespace fgedu
echo “Visit http://127.0.0.1:8080 to use your application”
# 验证应用部署
kubectl get pods -n fgedu
NAME READY STATUS RESTARTS AGE
fgedu-app-test-fgedu-app-5f984b76c5-4x7k8 1/1 Running 0 5m
fgedu-app-test-fgedu-app-5f984b76c5-7q2xz 1/1 Running 0 5m
fgedu-app-test-fgedu-app-5f984b76c5-9p8kf 1/1 Running 0 5m
# 卸载测试应用
helm uninstall fgedu-app-test –namespace fgedu
release “fgedu-app-test” uninstalled

4.3 应用模板发布与使用实战

下面我们来实战演示应用模板发布与使用: 更多学习教程公众号风哥教程itpux_com

# 打包模板
helm package fgedu-app
Successfully packaged chart and saved it to: /root/fgedu-app-1.0.0.tgz
# 上传模板到Helm仓库
helm push fgedu-app-1.0.0.tgz oci://registry.fgedu.net.cn/helm-charts
Pushed: registry.fgedu.net.cn/helm-charts/fgedu-app:1.0.0
Digest: sha256:abcdef1234567890
# 添加Helm仓库
helm repo add fgedu https://registry.fgedu.net.cn/helm-charts
“fgedu” has been added to your repositories
# 更新Helm仓库
helm repo update
Hang tight while we grab the latest from your chart repositories…
…Successfully got an update from the “fgedu” chart repository
Update Complete. ⎈ Happy Helming!⎈
# 搜索模板
helm search repo fgedu-app
NAME CHART VERSION APP VERSION DESCRIPTION
fgedu/fgedu-app 1.0.0 1.0.0 A custom application template for fgedu
# 使用模板部署应用
helm install fgedu-app-prod fgedu/fgedu-app –namespace fgedu –create-namespace
NAME: fgedu-app-prod,
LAST DEPLOYED: Sun Oct 1 10:30:00 2023
NAMESPACE: fgedu
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods –namespace fgedu -l “app=fgedu-app” -o jsonpath=”{.items[0].metadata.name}”)
kubectl port-forward $POD_NAME 8080:80 –namespace fgedu
echo “Visit http://127.0.0.1:8080 to use your application”
# 验证应用部署
kubectl get pods -n fgedu
NAME READY STATUS RESTARTS AGE
fgedu-app-prod-fgedu-app-5f984b76c5-2v3b4 1/1 Running 0 5m
fgedu-app-prod-fgedu-app-5f984b76c5-5c6d7 1/1 Running 0 5m
fgedu-app-prod-fgedu-app-5f984b76c5-8e9f0 1/1 Running 0 5m

Part05-风哥经验总结与分享

5.1 常见问题与解决方案

在实施自定义应用模板制作与发布时,常见的问题及解决方案: from K8S+DB视频:www.itpux.com

  • 模板语法错误:检查模板文件的语法,确保符合Helm Chart规范
  • 参数配置错误:检查values.yaml文件,确保参数配置正确
  • 依赖管理错误:检查依赖的子图表是否正确
  • 权限问题:确保有足够的权限创建和发布模板

5.2 最佳实践建议

自定义应用模板制作与发布的最佳实践:

  • 遵循Helm Chart规范:确保模板符合Helm Chart的标准规范
  • 使用版本控制:对模板进行版本控制,便于管理和回滚
  • 提供详细的文档:编写清晰、详细的模板说明文档
  • 测试充分:在发布前充分测试模板的可用性
  • 定期更新:根据业务需求和技术发展,定期更新模板

5.3 性能优化技巧

自定义应用模板制作与发布的性能优化技巧:

  • 优化模板结构:保持模板结构清晰、简洁
  • 合理配置资源:根据应用的实际需求,合理配置资源参数
  • 使用变量:使用变量提高模板的灵活性和可维护性
  • 模块化设计:将复杂的模板拆分为多个模块,提高可维护性
  • 缓存优化:使用缓存减少模板渲染的时间

在制作自定义应用模板时,一定要遵循Helm Chart的标准规范,提供详细的文档,并在发布前充分测试模板的可用性,确保模板能够正常部署和运行。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息