k8s~helm的charts裏的模版介紹deploymeny_service_ingress

在k8s裏對應用進行部署,主要也就是無狀態應用deployment,服務發現service和反向代理ingress了,因此此次主要來介紹它們,若是對yaml語法不清楚的同窗還須要看個人上一篇文章。<k8s~helm裏的yaml的介紹>html

無狀態應用Deployment模版

apiVersion: apps/v1beta2
kind: Deployment                                                   -無狀態應用
metadata:
  name: {{ include "admin.appname" . }}-api-app                    -應用名稱
  labels:
    app: {{ include "admin.appname" . }}-api-app                   -應用標籤
spec:
  replicas: {{ .Values.apiAppReplicaCount }}                       -副本集數,就是要開多少個應用
  selector:
    matchLabels:
      app: {{ include "admin.appname" . }}-api-app                 -映射
  template:
    metadata:
      labels:
        app: {{ include "admin.appname" . }}-api-app               -映射標籤
        release: {{ .Release.Revision | quote }}                   -版本號
    spec:
      volumes:
        - configMap:
            defaultMode: 420
            name: {{ .Values.configItemName }}                     -配置項名稱,這個是在上面配置項配置的時候的名稱
          name: volume-{{ include "admin.appname" . }}-api-app     -配置項名稱,這個是引入以後的別名
        {{ if .Values.isDev -}}                                    -開發環境多引入一個數據卷
        - hostPath:
            path: {{ .Values.volumes.devWwwPath }}          -數據卷位置
            type: ''
          name: {{ .Values.volumes.devWwwName }}           -數據卷名稱
        {{- end }}
      imagePullSecrets:                                            -鏡像密碼
        - name: {{ .Values.image.imagePullSecrets }}
      dnsPolicy: ClusterFirst
      schedulerName: default-scheduler
      containers:
        - name: {{ include "admin.appname" . }}-api-app                        -容器名稱
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"      -鏡像地址跟標籤
          command:
            - /scripts/start.sh                                                -啓動腳本
          volumeMounts:
            - mountPath: /alidata/config                                       -配置項路徑
              name: volume-{{ include "admin.appname" . }}-api-app             -配置項名稱,跟上面的對應
            {{ if .Values.isDev -}}                                            -開發環境額外配置數據卷
            - mountPath: {{ .Values.volumes.devWwwRealPath }}                  -引入的數據卷配置到容器哪一個位置
              name: {{ .Values.volumes.devWwwName }}                           -數據卷名稱
            {{- end }}
          env:                                                                 -配置環境變量
            - name: ADMIN_CONSOLE_URL
              value: {{ .Values.consoleHost }}
          imagePullPolicy: Always                                              -老是拉去鏡像
          ports:
            - containerPort: 80                                                -暴露的端口
              name: http                                                       -名字隨便取,不一樣端口的別同樣就行
              protocol: TCP
       - containerPort: 8080
              name: http2
              protocol: TCP
          strategy:                                                            -發佈策略
            type: RollingUpdate                                                -滾動升級,下面是按什麼比例滾動升級
            rollingUpdate:
              maxUnavailable: 25%
              maxSurge: 25%
          livenessProbe:                                                       -存活檢測
            failureThreshold: 3
            initialDelaySeconds: 3
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
            httpGet:
              path: /
              scheme: HTTP
              port: 80
          readinessProbe:                                                      -就緒檢測
            failureThreshold: 3
            initialDelaySeconds: 3
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
            httpGet:
              path: /
              scheme: HTTP
              port: 80
          resources:                                                           -下面配置了資源限制,好比多少個cpu,多少內存等
{{ toYaml .Values.appResources | indent 12 }}

服務發現svc(service.yaml)模版

服務配置,主要是跟應用暴露的端口進行綁定,通常應用也只會暴露80端口,提供新的端口給外部訪問,也可供路由Ingress訪問nginx

apiVersion: v1
kind: Service
metadata:
  name: {{ include "admin.appname" . }}-api-svc               -名稱
spec:
  type: ClusterIP
  ports:
    - port: 80                                                -暴露的端口
      targetPort: http                                        -目標端口
      protocol: TCP
      name: http
    - port: 8080
      targetPort: 8080
    name: http2
  selector:
    app: {{ include "admin.appname" . }}-api-app             -綁定的無狀態應用

路由ingress

下面配置路由,主要跟上面配置的服務綁定,通常不讓服務直接暴露使用,這裏多用了一層路由,主要是路由有負載灰度的做用,並且只提供一個IP(通常一個集羣只有一個路由IP)api

{{- if eq .Values.isRelease false -}}                    -非灰度環境就配置路由
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ include "admin.appname" . }}-api-ingress                   -路由名稱
  annotations:
    nginx.ingress.kubernetes.io/service-weight: ''                    -權重之類的,這裏筆者沒用到
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'                 -是否強制http跳https,true的話就強制跳
    {{ if .Values.isProd -}}                                          -這裏是灰度判斷,若是帶有環境環境的cookie就把請求轉發到灰度環境的服務上
    nginx.ingress.kubernetes.io/service-match: '{{ include "admin.release.appname" . }}-api-svc: cookie("admin_gray_tag", "release")'
    {{- end }}
spec:
  tls:
    - hosts:
        - {{ .Values.apiHost }}                                       -域名綁定
      secretName: {{ .Values.hostTls }}                               -TLs配置
  rules:
    - host: {{ .Values.apiHost }}                                     -域名配置跳轉規則
      http:
        paths:
          - path: /
            backend:
              serviceName: {{ include "admin.appname" . }}-api-svc    -綁定的服務的名稱
              servicePort: 80
          {{ if .Values.isProd -}}
          - path: /
            backend:
              serviceName: {{ include "admin.release.appname" . }}-api-svc    -綁定的灰度服務的名稱
              servicePort: 80
          {{- end }}
{{- end -}}

CI/CD中調用Helm命令進行部署

APPNAME=admin
helm --kubeconfig k8s.conf upgrade -i \
        --set-file configDatas.XXX=XXXX.txt \
        --set apiAppResources.requests.cpu=1 \
        ${APPNAME} ./chart
  1. --kubeconfig:後面帶上k8s的配置,這裏阿里雲的集羣裏面能夠找到,有內網跟外網兩個,隨便用哪一個都行
  2. upgrade:表示升級,後面的 -i 表示沒有建立過的話就建立,有的話就更新
  3. --set-file:這裏主要是爲了配置配置項跟數據字典索用到的,以文件的形式配置
  4. --set:這個就比較重要了,咱們在values.yaml裏面的全部配置均可以用這個命令進行修改,用這個能夠作到無環境化
相關文章
相關標籤/搜索