- Voorbereiding
- Hallo wereld
- Extern publiceren
- Persistente volumes
- Databases
- Geautomatiseerd uitrollen
- Applicatie publiceren
- Web Application Firewall
Databases
Haven biedt de mogelijkheid om geautomatiseerd databases aan te maken. We gebruiken in deze toelichting hiervoor twee verschillende operators: KubeDB en de Postgres Operator. De operators automatiseren verschillende beheertaken waaronder het maken van backups, monitoring en failover.
KubeDB
KubeDB beheert Elasticsearch, Memcached, MongoDB, MySQL, PostgreSQL en Redis databases.
Aan de hand van het volgende voorbeeld kun je eenvoudig een MySQL database aanmaken.
We kijken eerst welke versies er op dit moment beschikbaar zijn met:
$ kubectl get mysqlversions
NAME VERSION DB_IMAGE DEPRECATED AGE
5 5 kubedb/mysql:5 true 57d
5-v1 5 kubedb/mysql:5-v1 true 57d
5.7 5.7 kubedb/mysql:5.7 true 57d
5.7-v1 5.7 kubedb/mysql:5.7-v1 true 57d
5.7-v2 5.7.25 kubedb/mysql:5.7-v2 57d
5.7.25 5.7.25 kubedb/mysql:5.7.25 57d
8 8 kubedb/mysql:8 true 57d
8-v1 8 kubedb/mysql:8-v1 true 57d
8.0 8.0 kubedb/mysql:8.0 true 57d
8.0-v1 8.0.3 kubedb/mysql:8.0-v1 57d
8.0-v2 8.0.14 kubedb/mysql:8.0-v2 57d
8.0.14 8.0.14 kubedb/mysql:8.0.14 57d
8.0.3 8.0.3 kubedb/mysql:8.0.3 57d
Versies waar het veld deprecated op true staat kunnen niet aangemaakt worden. Maak voor een eenvoudige database het volgende bestand:
eerste-database-mysql.yaml
apiVersion: kubedb.com/v1alpha1
kind: MySQL
metadata:
name: eerste-database
namespace: default
spec:
version: "8.0.14"
storageClassName: cinder
storageType: Durable
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Hier specificeer je de versie van MySQL en de grootte van de onderliggende storage. Maak de database vervolgens aan met:
$ kubectl apply -f eerste-database-mysql.yaml
De status van de database kan nu opgehaald worden met:
$ kubectl get mysql
NAME VERSION STATUS AGE
eerste-database 8.0.14 Creating 8s
Na een minuut is de database beschikbaar:
NAME VERSION STATUS AGE
eerste-database 8.0.14 Running 44s
KubeDB heeft zelf een service en een secret aangemaakt voor deze database:
$ kubectl get service,secret
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/eerste-database ClusterIP 100.68.141.225 <none> 3306/TCP 57s
service/eerste-database-gvr ClusterIP None <none> 3306/TCP 58s
NAME TYPE DATA AGE
secret/eerste-database-auth Opaque 2 57s
secret/eerste-database-snapshot-token-5hkv8 kubernetes.io/service-account-token 3 58s
secret/eerste-database-token-49dp2 kubernetes.io/service-account-token 3 58s
Een applicatie kan nu verbinding maken met deze database door te verbinden met de host eerste-database. De inloggegevens voor de database zijn automatisch gegenereerd door KubeDB en te vinden in de secret eerste-database-auth.
Meer informatie over onder andere het gebruik van andere databases en backups kun je vinden in de handleiding van KubeDB.
Postgres Operator
De Postgres Operator is gespecialiseerd in het beheren van Postgres databases en wordt aangeraden wanneer je een Postgres database of cluster wil uitrollen. Maak voor een eenvoudige database het volgende bestand:
eerste-database-postgresql.yaml
apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
name: eerste-database
spec:
teamId: "acid"
volume:
size: 1Gi
numberOfInstances: 2
users:
# database eigenaar
zalando:
- superuser
- createdb
#databases: naam->eigenaar
databases:
foo: zalando
postgresql:
version: "12"
Maak vervolgens de database aan met:
$ kubectl apply -f eerste-database-postgresql.yaml
Bekijk de status van de database met:
$ kubectl get postgresql
NAME TEAM VERSION PODS VOLUME CPU-REQUEST MEMORY-REQUEST AGE STATUS
acid-eerste-database acid 12 2 1Gi 49s Creating
Na ongeveer een minuut is de database beschikbaar:
$ kubectl get postgresql
NAME TEAM VERSION PODS VOLUME CPU-REQUEST MEMORY-REQUEST AGE STATUS
acid-eerste-database acid 12 2 1Gi 92s Running
De Postgres Operator heeft verschillende services en secrets aangemaakt:
$ kubectl get service,secret
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/acid-eerste-database ClusterIP 100.64.25.253 <none> 5432/TCP 2m47s
service/acid-eerste-database-config ClusterIP None <none> <none> 2m19s
service/acid-eerste-database-repl ClusterIP 100.65.114.120 <none> 5432/TCP 2m47s
NAME TYPE DATA AGE
secret/postgres.acid-eerste-database.credentials.postgresql.acid.zalan.do Opaque 2 2m47s
secret/standby.acid-eerste-database.credentials.postgresql.acid.zalan.do Opaque 2 2m47s
secret/zalando.acid-eerste-database.credentials.postgresql.acid.zalan.do Opaque 2 2m47s
Je kunt verbinden met de database via de hostname acid-eerste-database. De inloggegevens zijn te vinden in de secret postgres.acid-eerste-database.credentials.postgresql.acid.zalan.do.
Meer informatie over de Postgres Operator kun je vinden in de handleiding.