kube1:~/webd-k8s# mkdir -p uni-webd-chart/templates/ mv -v my-webd-deployment.yaml uni-webd-chart/templates/ mv -v my-webd-service.yaml uni-webd-chart/templates/
... kube1:~/webd-k8s# helm upgrade -i my-gowebd uni-webd-chart/ -n my-ns --create-namespace
kube1:~/webd-k8s# helm upgrade -i my-htwebd uni-webd-chart/ -n my-ns --create-namespace
kube1:~/webd-k8s# helm upgrade -i my-pywebd uni-webd-chart/ -n my-ns --create-namespace
... server# curl http://pywebd.corpX.un
kube1:~/webd-k8s# helm template -f env.yaml my-pywebd uni-webd-chart/ #--debug kube1:~/webd-k8s# helm upgrade -i my-pywebd uni-webd-chart/ -f env.yaml -n my-ns --create-namespace kube1:~/webd-k8s# curl https://pywebd.corpX.un -kv
... kube1:~/webd-k8s# curl https://pywebd.corpX.un
... kube1:~/webd-k8s# curl http://pywebd.corpX.un
... kube1:~/webd-k8s# curl https://pywebd.corpX.un
kube1:~/webd-k8s# cat uni-webd-chart/Chart.yaml
apiVersion: v2 name: webd-chart version: 0.1.0
kube1:~/webd-k8s# cat uni-webd-chart/values.yaml
#hostname: webd
#replicaCount: 2
#image:
# repository: gitlab.corpX.un:5000/student/webd
# tag: ver1.1
#env:
# PYWEBD_DOC_ROOT: /var/www/
# PYWEBD_PORT: 4443
service:
port: 80
# targetPort: 4080
# type: LoadBalancer
# ip: 192.168.X.65
ingress:
enabled: false
className: nginx
hosts:
- hostTemplate: "{{ .Values.hostname }}.{{ .Values.domain }}"
##- host: webd.corpX.un
##- host: corpX.un
tls: []
# tls:
# - secretName: webd-tls
# hosts:
# - "{{ .Values.hostname }}.{{ .Values.domain }}"
## - webd.corpX.un
## - corpX.un
certificate:
enabled: false
secretName: webd-tls
dnsNames:
- "{{ .Values.hostname }}.{{ .Values.domain }}"
##- webd.corpX.un
##- "*.corpX.un"
issuerRef_name: freeipa-dns-clusterissuer
issuerRef_kind: ClusterIssuer
volumes: []
#volumes:
#- name: secret-tls-volume
# secret:
# secretName: pywebd-tls
volumeMounts: []
#volumeMounts:
#- name: secret-tls-volume
# subPath: tls.crt
# mountPath: /etc/pywebd/pywebd.crt
#- name: secret-tls-volume
# subPath: tls.key
# mountPath: /etc/pywebd/pywebd.key
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-webd-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-dep
spec:
selector:
matchLabels:
app: {{ .Release.Name }}-lab
replicas: {{ default 1 .Values.replicaCount }}
template:
metadata:
labels:
app: {{ .Release.Name }}-lab
spec:
containers:
- name: my-webd
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default "latest" }}"
{{- with .Values.env }}
env:
{{- range $key, $val := . }}
- name: {{$key}}
value: {{$val|quote}}
{{- end}}
{{- end}}
{{- with .Values.volumeMounts }}
volumeMounts:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.volumes }}
volumes:
{{- toYaml . | nindent 6 }}
{{- end }}
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-webd-service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-svc
spec:
selector:
app: {{ .Release.Name }}-lab
ports:
- protocol: TCP
port: {{ .Values.service.port }}
{{- if hasKey .Values.service "targetPort" }}
targetPort: {{ .Values.service.targetPort }}
{{- end }}
type: {{ .Values.service.type | default "ClusterIP" }}
{{- if and (hasKey .Values.service "ip") (eq .Values.service.type "LoadBalancer") }}
loadBalancerIP: {{ .Values.service.ip }}
{{- end }}
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-ingress.yaml
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}-ingress
spec:
ingressClassName: {{ .Values.ingress.className }}
rules:
{{- range .Values.ingress.hosts }}
{{- /* - host: {{ .host }} */}}
- host: {{ tpl .hostTemplate $ }}
http:
paths:
- backend:
service:
name: {{ $.Release.Name }}-svc
port:
number: {{ default $.Values.service.port $.Values.service.targetPort}}
path: /
pathType: Prefix
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ tpl . $ | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
{{- end }}
kube1:~/webd-k8s# cat env.yaml
domain: corpX.un
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-certificate.yaml
{{- if .Values.certificate.enabled -}}
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: {{ .Release.Name }}-cert
spec:
secretName: {{ .Values.certificate.secretName }}
dnsNames:
{{- range .Values.certificate.dnsNames }}
- {{ tpl . $ | quote }}
{{- end }}
issuerRef:
name: {{ .Values.certificate.issuerRef_name }}
kind: {{ .Values.certificate.issuerRef_kind }}
privateKey:
rotationPolicy: Always
{{- end }}
kube1:~/webd-k8s# ###cp uni-webd-chart/values.yaml apps/gowebd/values.yaml kube1:~/webd-k8s# ###cp uni-webd-chart/values.yaml apps/pywebd/values.yaml kube1:~/webd-k8s# vim uni-webd-chart/values.yaml
Комментируем для документации, для демонстрации наследования можно оставить то, что часто используется по умолчанию
kube1:~/webd-k8s# cat apps/gowebd/values.yaml
hostname: gowebd
replicaCount: 2
image:
repository: gitlab.corpX.un:5000/student/gowebd
tag: ver1.1
ingress:
enabled: true
tls:
- secretName: gowebd-tls
hosts:
- "{{ .Values.hostname }}.{{ .Values.domain }}"
certificate:
enabled: true
secretName: gowebd-tls
kube1:~/webd-k8s# helm template my-gowebd uni-webd-chart/ -f apps/gowebd/values.yaml -f env.yaml kube1:~/webd-k8s# helm upgrade -i my-gowebd uni-webd-chart/ -f env.yaml -f apps/gowebd/values.yaml -n my-ns --create-namespace
kube1:~/webd-k8s# cat apps/pywebd/values.yaml
hostname: pywebd
image:
repository: gitlab.corpX.un:5000/student/pywebd
tag: ver1.2
env:
PYWEBD_DOC_ROOT: /var/www/
PYWEBD_PORT: 4443
service:
# port: 80
port: 443
targetPort: 4443
type: LoadBalancer
ip: 192.168.X.65
certificate:
enabled: true
secretName: pywebd-tls
volumes:
- name: secret-tls-volume
secret:
secretName: pywebd-tls
volumeMounts:
- name: secret-tls-volume
subPath: tls.crt
mountPath: /etc/pywebd/pywebd.crt
- name: secret-tls-volume
subPath: tls.key
mountPath: /etc/pywebd/pywebd.key
kube1:~/webd-k8s# helm template my-pywebd uni-webd-chart/ -f apps/pywebd/values.yaml -f env.yaml kube1:~/webd-k8s# helm upgrade -i my-pywebd uni-webd-chart/ -f env.yaml -f apps/pywebd/values.yaml -n my-ns --create-namespace
Развернем через ArgoCD
kube1:~/webd-k8s# cat apps/apwebd/values.yaml
hostname: apwebd
image:
repository: gitlab.corpX.un:5000/student/apwebd
tag: ver1.1
env:
APWEBD_HOSTNAME: "apwebd.corpX.un"
KEYCLOAK_HOSTNAME: "keycloak.corpX.un"
REALM_NAME: "corpX"
ingress:
enabled: true
tls:
- secretName: apwebd-tls
hosts:
- "{{ .Values.hostname }}.{{ .Values.domain }}"
certificate:
enabled: true
secretName: apwebd-tls
kube1:~/webd-k8s# cat argocd/application.yaml
kube1:~/webd-k8s# cat apps/htwebd/values.yaml
hostname: htwebd
replicaCount: 2
image:
repository: httpd
lifecycle:
postStart:
- /bin/sh
- -c
- cd /usr/local/apache2/htdocs/ && echo \"<h1>Hello from htwebd on $(hostname) ver1.1</h1>\" > index.html
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-webd-deployment.yaml
...
image: ...
{{- with .Values.lifecycle.postStart }}
lifecycle:
postStart:
exec:
command:
{{- range . }}
- "{{ . }}"
{{- end }}
{{- end }}
...
kube1:~/webd-k8s# cp -v my-httproute.yaml uni-webd-chart/templates/ kube1:~/webd-k8s# cp -v my-gateway.yaml uni-webd-chart/templates/ kube1:~/webd-k8s# cat uni-webd-chart/values.yaml
...
gateway:
enabled: false
className: traefik
httpPort: 8000
httpsPort: 8443
hostTemplate: "{{ .Values.hostname }}.{{ .Values.domain }}"
# secretName: webd-tls
...
kube1:~/webd-k8s# cat apps/htwebd/values.yaml
... gateway: enabled: true secretName: htwebd-tls certificate: enabled: true secretName: htwebd-tls
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-gateway.yaml
{{- if .Values.gateway.enabled -}}
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: {{ .Release.Name }}-gateway
spec:
gatewayClassName: {{ .Values.gateway.className }}
listeners:
- name: http
port: {{ .Values.gateway.httpPort }}
protocol: HTTP
- name: https
hostname: {{ tpl .Values.gateway.hostTemplate $ }}
protocol: HTTPS
port: {{ .Values.gateway.httpsPort }}
tls:
mode: Terminate
certificateRefs:
- kind: Secret
name: {{ .Values.gateway.secretName }}
{{- end }}
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-httproute.yaml
{{- if .Values.gateway.enabled -}}
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: {{ .Release.Name }}-httproute
spec:
hostnames:
- {{ tpl .Values.gateway.hostTemplate $ }}
parentRefs:
- name: {{ .Release.Name }}-gateway
rules:
- matches:
- path:
type: Exact
value: /
backendRefs:
- name: {{ .Release.Name }}-svc
port: {{ .Values.service.port }}
{{- end }}
kube1:~/webd-k8s# helm upgrade -i my-htwebd uni-webd-chart/ -f env.yaml -f apps/htwebd/values.yaml -n my-ns --create-namespace