1,创建一个chart
[root@k8s-master ~]# helm create demo
[root@k8s-master ~]# cd demo/
[root@k8s-master demo]# ls
charts Chart.yaml templates values.yaml
2,修改默认的Chart.yaml
[root@k8s-master demo]# cat Chart.yaml
apiVersion: v2
appVersion: 0.1.0
description: java demo
name: demo
type: application
version: 0.1.0
3,删除默认的配置文件
[root@k8s-master demo]# cd templates/
[root@k8s-master templates]# ls
deployment.yaml _helpers.tpl ingress.yaml NOTES.txt serviceaccount.yaml service.yaml tests
[root@k8s-master templates]# rm -rf *
4,创建应用
[root@k8s-master templates]# kubectl create deployment web --image=lizhenliang/java-demo --dry-run -o yaml > deployment.yaml
5,创建service
[root@k8s-master templates]# kubectl expose deployment web --port=80 --target-port=8080 --dry-run -o yaml > service.yaml
6,创建ingress
[root@k8s-master templates]# cat ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rpdns.com
spec:
rules:
- host: paas.rpdns.com
http:
paths:
- backend:
serviceName: java-demo
servicePort: 80
#####################################################################################################
7,现在开始制作-创建模板
[root@k8s-master demo]# cat templates/_helpers.tpl
{{- define "demo.fullname" -}}
{{- .Chart.Name -}}-{{ .Release.Name }}
{{- end -}}
{{/*
公用标签
*/}}
{{- define "demo.labels" -}}
app: {{ template "demo.fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
{{- end -}}
{{/*
标签选择器
*/}}
{{- define "demo.selectorLabels" -}}
app: {{ template "demo.fullname" . }}
release: "{{ .Release.Name }}"
{{- end -}}
8,修改默认的values.yaml
[root@k8s-master demo]# cat values.yaml
image:
pullPolicy: IfNotPresent
repository: lizhenliang/java-demo
tag: latest
imagePullSecrets: []
ingress:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
enabled: true
host: example.ctnrs.com
tls:
secretName: example-ctnrs-com-tls
nodeSelector: {}
replicaCount: 3
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 100m
memory: 128Mi
service:
port: 80
type: ClusterIP
tolerations: []
9,修改应用,服务,代理的常量,采用变量的方式
[root@k8s-master demo]# cat templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "demo.fullname" . }}
labels:
{{- include "demo.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "demo.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "demo.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
[root@k8s-master demo]# cat templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ include "demo.fullname" . }}
labels:
{{- include "demo.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "demo.selectorLabels" . | nindent 4 }}
[root@k8s-master demo]# cat templates/ingress.yaml
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ include "demo.fullname" . }}
labels:
{{- include "demo.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Values.ingress.tls.secretName }}
{{- end }}
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
backend:
serviceName: {{ include "demo.fullname" . }}
servicePort: {{ .Values.service.port }}
{{- end }}
10,再加个说明
[root@k8s-master demo]# cat templates/NOTES.txt
访问地址:
{{- if .Values.ingress.enabled }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ .Values.ingress.host }}
{{- end }}
{{- if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "demo.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- end }}
11,查看项目编写的有没有问题
[root@k8s-master demo]# helm install java-demo --dry-run ../demo/
NAME: java-demo
LAST DEPLOYED: Tue May 5 16:01:31 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: demo/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: demo-java-demo
labels:
app: demo-java-demo
chart: "demo-0.1.0"
release: "java-demo"
spec:
type: ClusterIP
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
selector:
app: demo-java-demo
release: "java-demo"
---
# Source: demo/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-java-demo
labels:
app: demo-java-demo
chart: "demo-0.1.0"
release: "java-demo"
spec:
replicas: 3
selector:
matchLabels:
app: demo-java-demo
release: "java-demo"
template:
metadata:
labels:
app: demo-java-demo
release: "java-demo"
spec:
containers:
- name: demo
image: "lizhenliang/java-demo:latest"
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 100m
memory: 128Mi
---
# Source: demo/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-java-demo
labels:
app: demo-java-demo
chart: "demo-0.1.0"
release: "java-demo"
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
spec:
tls:
- hosts:
- example.ctnrs.com
secretName: example-ctnrs-com-tls
rules:
- host: example.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: demo-java-demo
servicePort: 80
NOTES:
访问地址:
https://example.ctnrs.com
12,运行项目,默认是没有暴露service 应用的
[root@k8s-master demo]# helm install java-demo ../demo/
NAME: java-demo
LAST DEPLOYED: Tue May 5 16:03:02 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
访问地址:
https://example.ctnrs.com
13,更新,暴露该应用
[root@k8s-master demo]# helm upgrade java-demo --set service.type=NodePort ../demo/
14,修改副本数
helm upgrade java-demo --set replicaCount=2 ../demo/
15,用模板创建nginx应用
[root@k8s-master demo]# helm install nginx --set image.repository=nginx,service.targetport=80 ../demo/ -n test
NAME: nginx
LAST DEPLOYED: Tue May 5 16:28:46 2020
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
访问地址:
https://example.ctnrs.com
################################################################################################
1.推送到harbor 仓库,脚本在harbor解压文件里面
./install.sh --with-chartmuseum
2、安装push插件
https://github.com/chartmuseum/helm-push
```shell
helm plugin install https://github.com/chartmuseum/helm-push
```
如果网络下载不了,也可以直接解压包:
tar zxvf helm-push_0.7.1_linux_amd64.tar.gz
mkdir /root/.local/share/helm/plugins/helm-push -p
mv plugin.yaml bin/ /root/.local/share/helm/plugins/helm-push/
3、添加repo
[root@k8s-master helm]# helm repo add --username admin --password Harbor12345 myrepo http://10.1.1.11/chartrepo/library
"myrepo" has been added to your repositories
4、推送与安装Chart
[root@k8s-master demo]# helm push demo-0.1.0.tgz --username=admin --password=Harbor12345 http://10.1.1.11/chartrepo/library
Pushing demo-0.1.0.tgz to http://10.1.1.11/chartrepo/library...
Done.
5,查看源
[root@k8s-master demo]# helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
myrepo http://10.1.1.11/chartrepo/library
6,更新源
[root@k8s-master demo]# helm repo update
7,下载
[root@k8s-master demo]# helm install web10 myrepo/demo
[root@k8s-master demo]# helm list