k8s_制作Chart_Harbor存储Chart

 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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值