Helm: erinevus redaktsioonide vahel

Allikas: Kuutõrvaja
Mine navigeerimisribaleMine otsikasti
Jj (arutelu | kaastöö)
Resümee puudub
Jj (arutelu | kaastöö)
Resümee puudub
10. rida: 10. rida:
  Creating mychart
  Creating mychart


Tekkinud failistruktuur sisaldab näidet ngixi paigaldamiseks, kuid see ei tundu parim näide millest alustada oma isikliku helmi loomist, kuna
sisaldab kohati liiga palju muutujaid ning keerukust.


Tekkinud failistruktuur sisaldab näidet ngixi paigaldamiseks ning selle modfitseerimisest on ka hea esmalt alustada, kuna nginx on paljude
helmide jaoks oluline proxy komponent.


Olulisemad failid mis tekivad on järgnevad
Olulisemad failid mis tekivad on järgnevad
25. rida: 25. rida:
olla kokku seatud näiteks nginx ja postgres. Üldiselt on soovitatud aga tekitada kõrvale teine deployment fail
olla kokku seatud näiteks nginx ja postgres. Üldiselt on soovitatud aga tekitada kõrvale teine deployment fail


Lisame testiks nginx confi nginx/templates/cm.yaml
===Helmi loomine===


apiVersion: v1
Tekitame keerukama lahenduse. Nginxi ja postgresi conteinerid
data:
  nginx.conf: |
    events {
      worker_connections  1024;
    }
    http {
      server {
        listen 80;
        location / {
          return 200 "===============================\n\n  This is your helm deploy!  \n\n===============================\n";
        }
      }
    }
kind: ConfigMap
metadata:
  name: nginx-config


Järgmisena peame selle defineerima oma rakenduse failis templates/deployment.yaml volumes ja volumemounts
Loome templates/nginx_workload.yaml faili mis tekitab nginx konteineri ning haagib sinna volumeMounts käsuga külge files
kaustas oleva nginx.conf faili


<source lang=yaml>
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
       containers:
       containers:
         - name: {{ .Chart.Name }}
         - name: nginx
           image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
           image: nginx:latest
          imagePullPolicy: {{ .Values.image.pullPolicy }}
           ports:
           ports:
             - name: http
             - name: http
               containerPort: 80
               containerPort: 80
               protocol: TCP
               protocol: TCP
          ...
           volumeMounts:
           volumeMounts:
             - name: config
             - name: nginx
               mountPath: /etc/nginx/nginx.conf
               mountPath: /etc/nginx/nginx.conf
               subPath: nginx.conf
               subPath: nginx.conf
       volumes:
       volumes:
       - name: config
       - name: nginx
         configMap:
         configMap:
           name: nginx-config
           name: nginx-config
</source>


Soovides tekitada konteinerile püsiva volume, nt postgresi andmete hoidmiseks, tuleb tekitada presistent storage. Selleks peame esiteks teadma mis
Selleks, et nginx.confi oleks võimalik mountida tuleb see siduda configmapiga. Selleks
tüüpi presistent storaget kasutab meie k8s cluster ja tekitada vastavalt sellele claimi mis eraldab meile storagest soovitud suurusega jaotise. Antud näites on meil kasutuses longhorni andmesalvestuslahendus
tuleb luua eraldi fail templates/nginx_config.yaml
 
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |-
{{ .Files.Get "files/nginx.conf" | indent 4}}


Tekitame claimi faili templates/volume.yaml järgneva sisuga
Selleks, et saaksime nginxi 80 pordile ligi pääseda tuleb luua eraldi service kirje templates/nginx_service.yaml mis hangib
k8s käest sisemise IP aadressi ning seob selle 80 pordi selector sektsioonis nginx appiga


apiVersion: v1
apiVersion: v1
kind: PersistentVolumeClaim
kind: Service
metadata:
metadata:
  name: longhorn-postgres-data
  name: nginx
spec:
  labels:
  accessModes:
spec:
    - ReadWriteOnce
  type: ClusterIP
  storageClassName: longhorn
  ports:
  resources:
    - port: http
    requests:
      targetPort: 80
      storage: 10Gi
      protocol: TCP
      name: http
  selector:
    app: nginx


Volume templates/deployment.yaml failis defineerimiseks
Postgresi konteineri tekitamine käib samamoodi. Esmalt loome deployment tüüpi faili mis tekitab konteineri templates/postgresql_workload.yaml
Erinev on siin see, et postgres vajab erinevalt nginxist ka püsivat kettapinda kuhu oma andmebaas tekitada ja seetõttu peame tekitama
talle presistent storage claimi, mis palub clustril eraldada sinna seadistatud storage mehanismilt kettaruumi.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: waldur-db
  labels:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
        - name: db
          image: bitnami/postgresql:latest
          volumeMounts:
            - name: waldur-postgres-data
              mountPath: /var/lib/postgresql/data
              subPath: data
          env:
          - name: POSTGRESQL_USERNAME
            value: "test"
          - name: POSTGRES_PASSWORD
            value: "test"
          - name: POSTGRESQL_DATABASE
            value: "test"
          ports:
            - name: postgres
              containerPort: 5432
              protocol: TCP
       volumes:
       volumes:
       - name: postgres-data
       - name: postgres-data
89. rida: 136. rida:
           claimName: longhorn-postgres-data
           claimName: longhorn-postgres-data


Ja konteinerile külge monteerimiseks
Soovides tekitada konteinerile püsiva volume, nt postgresi andmete hoidmiseks, tuleb tekitada presistent storage. Selleks peame esiteks teadma mis
tüüpi presistent storaget kasutab meie k8s cluster ja tekitada vastavalt sellele claimi mis eraldab meile storagest soovitud suurusega jaotise.
Antud näites on meil kasutuses longhorni andmesalvestuslahendus ja küsime sealt 10G suuruse lõigu.


          volumeMounts:
Tekitame claimi faili templates/postgres_volume.yaml järgneva sisuga
            - name: postgres-data
 
              mountPath: /var/lib/postgresql/data
apiVersion: v1
              subPath: data
kind: PersistentVolumeClaim
metadata:
  name: longhorn-postgres-data
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 10Gi
 
Samuti peame ka postgresile tekitama service kirje, kus sisemine IP seotakse postgres rakenduse 5432 pordiga
 
apiVersion: v1
kind: Service
metadata:
  name: db
  labels:
spec:
  type: ClusterIP
  ports:
    - port: 5432
      targetPort: 5432
      protocol: TCP
      name: postgres
  selector:
    app: db
 
===Testimine===


Testimiseks kas kõik on korras saab kasutada käsku
Testimiseks kas kõik on korras saab kasutada käsku


  helm template waldur
  helm template waldur
===Repositooriumi loomine===


Chartide repositoorium koosneb pakitud chartidest ja index.yaml mis sisaldab kõikide chartide nimesid
Chartide repositoorium koosneb pakitud chartidest ja index.yaml mis sisaldab kõikide chartide nimesid

Redaktsioon: 1. september 2019, kell 09:34

Paigaldamine skriptiga suvalisele Linuxile

$ curl -LO https://git.io/get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh

Helmi failistruktuuri loomiseks

$ helm create mychart
Creating mychart

Tekkinud failistruktuur sisaldab näidet ngixi paigaldamiseks, kuid see ei tundu parim näide millest alustada oma isikliku helmi loomist, kuna sisaldab kohati liiga palju muutujaid ning keerukust.


Olulisemad failid mis tekivad on järgnevad

test/Chart.yaml - See fail sisaldab nime, versiooninumbrit, kirjeldust ning linke ja ikooni
test/templates/ingress.yaml
test/templates/deployment.yaml - Siin failis on kogu dockeri rakenduse paigaldamise loogika
test/templates/service.yaml - deploymendis tekittud podi sidumine tcp pordiga
test/values.yaml - Muutujad, mida saab deploymentsi ja teiste templatede jaoks seadistada

Soovides konteinereid juurde luua, näiteks lisada nginxile veel postgresi võib tekitada sama pod-i ehk deploymendi sisse teisegi konteineri. Nii võivad olla kokku seatud näiteks nginx ja postgres. Üldiselt on soovitatud aga tekitada kõrvale teine deployment fail

Helmi loomine

Tekitame keerukama lahenduse. Nginxi ja postgresi conteinerid

Loome templates/nginx_workload.yaml faili mis tekitab nginx konteineri ning haagib sinna volumeMounts käsuga külge files kaustas oleva nginx.conf faili

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          volumeMounts:
            - name: nginx
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf
      volumes:
      - name: nginx
        configMap:
          name: nginx-config

Selleks, et nginx.confi oleks võimalik mountida tuleb see siduda configmapiga. Selleks tuleb luua eraldi fail templates/nginx_config.yaml

apiVersion: v1 kind: ConfigMap metadata:

 name: nginx-config

data:

 nginx.conf: |-

Mall:.Files.Get "files/nginx.conf"

Selleks, et saaksime nginxi 80 pordile ligi pääseda tuleb luua eraldi service kirje templates/nginx_service.yaml mis hangib k8s käest sisemise IP aadressi ning seob selle 80 pordi selector sektsioonis nginx appiga

apiVersion: v1 kind: Service metadata:

 name:  nginx
 labels:

spec:

 type: ClusterIP
 ports:
   - port: http
     targetPort: 80
     protocol: TCP
     name: http
 selector:
   app: nginx

Postgresi konteineri tekitamine käib samamoodi. Esmalt loome deployment tüüpi faili mis tekitab konteineri templates/postgresql_workload.yaml Erinev on siin see, et postgres vajab erinevalt nginxist ka püsivat kettapinda kuhu oma andmebaas tekitada ja seetõttu peame tekitama talle presistent storage claimi, mis palub clustril eraldada sinna seadistatud storage mehanismilt kettaruumi.

apiVersion: apps/v1 kind: Deployment metadata:

 name: waldur-db
 labels:

spec:

 replicas: 1
 selector:
   matchLabels:
     app: db
 template:
   metadata:
     labels:
       app: db
   spec:
     containers:
       - name: db
         image: bitnami/postgresql:latest
         volumeMounts:
           - name: waldur-postgres-data
             mountPath: /var/lib/postgresql/data
             subPath: data
         env:
         - name: POSTGRESQL_USERNAME
           value: "test"
         - name: POSTGRES_PASSWORD
           value: "test"
         - name: POSTGRESQL_DATABASE
           value: "test"
         ports:
           - name: postgres
             containerPort: 5432
             protocol: TCP
     volumes:
     - name: postgres-data
       persistentVolumeClaim:
         claimName: longhorn-postgres-data

Soovides tekitada konteinerile püsiva volume, nt postgresi andmete hoidmiseks, tuleb tekitada presistent storage. Selleks peame esiteks teadma mis tüüpi presistent storaget kasutab meie k8s cluster ja tekitada vastavalt sellele claimi mis eraldab meile storagest soovitud suurusega jaotise. Antud näites on meil kasutuses longhorni andmesalvestuslahendus ja küsime sealt 10G suuruse lõigu.

Tekitame claimi faili templates/postgres_volume.yaml järgneva sisuga

apiVersion: v1 kind: PersistentVolumeClaim metadata:

 name: longhorn-postgres-data

spec:

 accessModes:
   - ReadWriteOnce
 storageClassName: longhorn
 resources:
   requests:
     storage: 10Gi

Samuti peame ka postgresile tekitama service kirje, kus sisemine IP seotakse postgres rakenduse 5432 pordiga

apiVersion: v1 kind: Service metadata:

 name: db
 labels:

spec:

 type: ClusterIP
 ports:
   - port: 5432
     targetPort: 5432
     protocol: TCP
     name: postgres
 selector:
   app: db

Testimine

Testimiseks kas kõik on korras saab kasutada käsku

helm template waldur

Repositooriumi loomine

Chartide repositoorium koosneb pakitud chartidest ja index.yaml mis sisaldab kõikide chartide nimesid

helm package nginx
mv nginx-0.1.0.tgz nginx
helm repo index nginx --url http://zoo.tartu.ee/charts/nginx/

Uue versiooninumbriga paki tekitamiseks

# helm package nginx --version 1.1.1

Misjärel on tarvilik genereerida ka index uuesti

https://linchpiner.github.io/k8s-multi-container-pods.html