Helm
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