首页 > 其他分享 >66、K8S-部署管理-Helm-自定义helm项目

66、K8S-部署管理-Helm-自定义helm项目

时间:2023-04-13 19:11:06浏览次数:47  
标签:自定义 yaml nginx Values 66 nindent helm my

1、自定义helm项目管理-实践

1.1、自定义helm项目

1.1.1、创建存放的目录

mkdir -p /opt/custom_helm && cd /opt/custom_helm

1.1.2、创建helm项目

helm create nginx

1.2.3、目录的解析

custom_helm]# tree nginx/
nginx/                                - 自动生成的空chart,名称就是nginx
├── charts
├── Chart.yaml                        - 声明了当前Chart的名称、版本等基本信息,便于用户在仓库里浏览检索
├── templates                         - 存放各种资源清单文件
│   ├── deployment.yaml
│   ├── _helpers.tpl                  - 定制的模板功能文件,包含各种需要根据值结果进行调整的功能
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml                       - 存放各种定制的变量值,符合yaml格式语法

注意: Chart里面的nginx名称需要和生成的Chart文件夹名称一致。如果修改nginx,则需要一致的修改。

1.2、常见的语法-解析

1.2.1、{{- if  .Values.serviceAccount.create -}}

如果在项目的根目录下存在Values文件,并且里面的serviceAccount部分的create属性为true的话。

执行下面的操作
{{- 表达式 -}}, 横杠(-)表示去掉表达式输出结果前面和后面的空格,可以使用单个{{- 表达式 }}

# 点的说明
最左面的点(.): 代表全局作用域-项目根目录,中间的点:是对象中属性的引用方式。

1.2.2、{{ include "nginx.serviceAccountName" . }}

加载项目的templates/_helpers.tpl文件里面定义好的 nginxhelloworld.serviceAccountName内容


例如:
templates]# cat serviceaccount.yaml 
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "nginx.serviceAccountName" . }}
  labels:
    {{- include "nginx.labels" . | nindent 4 }}
  {{- with .Values.serviceAccount.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
{{- end }}

templates]# cat _helpers.tpl
...
{{/*
Create the name of the service account to use
*/}}
{{- define "nginx.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "nginx.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
...

1.2.3、 {{- toYaml . | nindent 4 }}

toYaml 表示将数据转为yaml格式,nindent表示不局限于4行,indent 4代表就是格式化转换为4行

1.2.4、{{- with .Values.imagePullSecrets }}

 with语法代表修改内容

1.3、修改模板-deployment.yaml

1.3.1、查询需要修改的模板

templates]# cat deployment.yaml 
...
spec:
  {{- if not .Values.autoscaling.enabled }}
  replicas: {{ .Values.replicaCount }}  # 设置容器数量
  {{- end }}
  selector:
    matchLabels:
      {{- include "nginx.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      {{- with .Values.podAnnotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      labels:
        {{- include "nginx.selectorLabels" . | nindent 8 }}
    spec:
      {{- with .Values.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      serviceAccountName: {{ include "nginx.serviceAccountName" . }}
      securityContext:
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
      containers:
        - name: {{ .Chart.Name }} # 设置容器的名字
          securityContext:
            {{- toYaml .Values.securityContext | nindent 12 }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" # 设置镜像下载地址
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: {{ .Values.service.port }}
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
            {{- toYaml .Values.resources | nindent 12 }}
...

1.3.2、修改Value.yaml【这里主要修改下载镜像为我们本地仓库的】

nginx]# vi values.yaml 
image:
  repository: 192.168.10.33:80/k8s/my_nginx
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "v1"
# 这里主要修改两点,仓库地址+版本

1.3.3、修改deployment.yaml【主要增加访问的首页】

nginx]# vi templates/deployment.yaml
...
spec:
...
  template:
    metadata:
...
    spec:
...
      containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.securityContext | nindent 12 }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
          - name: htmlBody:
value: {{ .Values.htmlBody }} lifecycle: postStart: exec: command: ["/bin/sh","-c","echo $htmlBody> /usr/share/nginx/html/index.html"] ports: - name: http containerPort: {{ .Values.service.port }} protocol: TCP

1.3.4、修改Value.yaml【配置htmlBody变量值内容】

nginx]# vi values.yaml 
# Default values for nginx.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1
htmlBody: "my nginx hello world"

1.3.5、检查语法是否正常

]# helm lint --strict /opt/custom_helm/nginx/
==> Linting /opt/custom_helm/nginx/
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

1.4、项目打包

1.4.1、开始打包

]# helm package /opt/custom_helm/nginx/ -d /opt/custom_helm/
Successfully packaged chart and saved it to: /opt/custom_helm/nginx-0.1.0.tgz # 保存的位置

注意:压缩包的版本号来自于Chart.yaml文件中的属性

1.4.2、版本号的修改

]# vi /opt/custom_helm/nginx/Chart.yaml 
...
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0 # 以这个为命名

1.5、本地安装定制镜像文件

1.5.1、注意事项【了解】

注意:必须在k8s的集群中来部署相关的应用,如果当前主机没有k8s的话,可以通过环境变量来进行指定k8s主机的地址位置。

export KUBERNETES_MASTER=http://master:6443

1.5.2、安装helm-nginx-0.1.0.tgz压缩包

]# helm install my-nginx-helm /opt/custom_helm/nginx-0.1.0.tgz 
NAME: my-nginx-helm
LAST DEPLOYED: Thu Apr 13 18:26:29 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=nginx,app.kubernetes.io/instance=my-nginx-helm" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

1.5.3、查询运行状态

]# kubectl get pods -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
my-nginx-helm-85b77648c9-m5n2c   1/1     Running   0          95s   10.244.4.16   node2   <none>           <none>

]# kubectl get svc
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
my-nginx-helm        ClusterIP   10.107.46.245   <none>        80/TCP    21s

~]# helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
my-nginx-helm   default         1               2023-04-13 18:26:29.102169531 +0800 CST deployed        nginx-0.1.0     1.16.0 

1.5.4、访问SVCIP地址测试

~]# curl 10.107.46.245
my nginx hello world

1.6、使用变量值设置页面内容

1.6.1、设置变量安装helm

helm install my-nginx-helm-add /opt/custom_helm/nginx-0.1.0.tgz --set htmlBody='my nginx test!'

1.6.2、查询svc

~]# kubectl get svc
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
my-nginx-helm-add    ClusterIP   10.110.16.246   <none>        80/TCP    12s

1.6.3、访问svc地址测试

~]# curl 10.110.16.246
my nginx test!

 

标签:自定义,yaml,nginx,Values,66,nindent,helm,my
From: https://www.cnblogs.com/ygbh/p/17314967.html

相关文章

  • AP6608高效率1.2MHz 2-24V 2A升压转换IC
    FEATURES•Integrated80mΩPowerMOSFET•2Vto24VInputVoltage•1.2MHzFixedSwitchingFrequency•Internal4ASwitchCurrentLimit•AdjustableOutputVoltage•InternalCompensation•Upto28VOutputVoltage•AutomaticPulseFrequencyModulatio......
  • adb命令获取android app FPS 执行命令后只出现一行16666666的解决方案
    一、问题描述使用命令command='adbshelldumpsysSurfaceFlinger--latency{}/{}#0'.format(package_name,activity)获取androidapp的fps数据,执行命令后街股票打印如下:  二、问题分析1、刚开始以为是命令里面的SurfaceView写的有问题,执行命令adbshelldumpsys......
  • 65、K8S-部署管理-Helm基础知识、安装、入门示例
    Kubernetes学习目录1、基础知识1.1、需求在kubernetes平台上,我们在部署各种各样的应用服务的时候,可以基于手工或者自动的方式对各种资源对象实现伸缩操作,尤其是对于有状态的应用,我们可以结合持久性存储机制实现更大场景的伸缩动作。但是,无论我们怎么操作各种资源对象,问......
  • django admin 自定义添加单独行 增加数据统计功能
    需求:需要在某个页面单独增加一行,以便统计这一行的金额进行汇总显示,具体操作如下不建议直接修改change_list.html,所以扩展template admin.py中对应的admin.ModelAdmin中添加:#1.如果你改了template的名称,这里可以对应修改,否则默认即可change_list_template='admin/chang......
  • django 1.8 官方文档翻译: 6-4-2 编写自定义的django-admin命令
    编写自定义的django-admin命令应用可以通过manage.py注册它们自己的动作。例如,你可能想为你正在发布的Django应用添加一个manage.py动作。在本页文档中,我们将为教程中的polls应用构建一个自定义的closepoll命令。要做到这点,只需向该应用添加一个management/commands目录。Django......
  • django 1.8 官方文档翻译: 2-5-7 自定义查找
    自定义查找NewinDjango1.7.Django为过滤提供了大量的内建的查找(例如,exact和icontains)。这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能。关于查找的API参考,详见查找API参考。一个简单的查找示例让我们从一个简单的自定义查找开始。我们会编写一个自定义查找ne,提供......
  • Cesium的搜索框如何自定义功能
    geocoder提供了地理编码功能用来搜索位置,但是在离线环境下无法使用。为了将这个搜索框用起来,添加根据坐标搜索的功能,可以这么写:viewer.geocoder._form.children[0].placeholder="请输入:经度,纬度";viewer.geocoder.autoComplete=false;functionmyGeocoder(){......
  • WPF 自定义控件 二次渲染 问题记录
    问题将多个自定义控件加载到到一个页面的Grid上显示。然后突然将一个控件从Grid里面清除,控件依然在后台处理数据。过段时间再加入Grid。然后一些已经改变的页面属性就消失了。原因经过查找是一旦控件再次加载,页面属性就会重置。这个有利也有弊端。1是可以利用这点重置页面2......
  • linux系统自定义登录提示信息
    配置说明这里对于centos7.x系统,可以直接编辑/etc/motd文件,增加定制的提示信息,并可以通过不同颜色展示。vim/etc/motd^[[32m设备IP地址:10.10.10.22^[[0m^[[32m使用人员:zhangshan^[[0m^[[31m注意:其它人员使用请和使用人确认^[[0m#注意,如果需要增加展示信息,可以......
  • 界面组件Telerik ASP.NET MVC使用指南 - 如何自定义网格过滤
    TelerikUIforASP.NETMVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验。它主要是针对专业级的ASP.NET开发,通过该产品的强大功能,开发者可以开发出功能丰富、适应标准广泛的响应式应用程序。在上文中(......