Günümüzde artık Kubernetes Microservice ve CLoud teknolojiler oldukça yaygınlaşmış durumdadır, her ne kadar Database Adminler olarak bu alandan uzak dursak ta artık bu alandan daha fazla kaçamayacağımız aşikar olmuş durumda. Bir çok Database platformu özellikle Big Data ve Analitik işlerde kullanılan database ler, ETL toolları vs.. Bir çok komponent Docker ve Kubernetes desteği bulunmaktadır, bunlarla ilgili bir çok blog ve örnek mevcuttur, ancak klasik Oracle DBA ler halen Onprem ısrarı olduğu tartışılmaz bir gerçek olarak karşımızda durmakta.
Bu yazımda Oracle Database ile Docker, Kubernetes ilişki ne durumdadır, aynı zamanda örnek kurulumlar ve OraOperator hakkında bilgiler verilecek ve örnek uygulmalara yer verilecektir.
Oracle veritabanları uzun zamandır Docker Container desteği bulunmaktadır (Nisan 2017) Maria Colgan reported “Oracle Database 12c now available on Docker” in April 2017 Ocak 2023 ten sonra ise artık Oracle 19c (19.16) Oracle RAC içinde production desteği bulunmaktadır.
Microservice mimarisinin bu kadar yaygınlaştığı ve uygulmaların sanallaştığı bir ortamda veritabanları da bu süreçten kendini kurtaramıyor, ayrıca Storage dünyasındaki gelişmelerde bu durumun hızını ve ivmesini bu yönede tetikliyor. artık S3 storage lar büyük IT firmalarında hemen hemen hepsinde mevcut ve çok hızlı işlem kabiliyetlerine sahip bu durum dedike kaynaklardan hızlıca scale olabilen uygulamalara hatta şu an tam olgunlaşmasada yer yer veritabanlarına bu yapının uygulanmasını ve bu yöne evrilmeyi tetkliyor.
saniyeler içinde bir RAC vertbanına sahip olmak ve bura üzerinde çalışıp ihtiyaç bittiğinde kapatarak kaynakları sisteme vermek bana oldukça faydalı geldi bilmiyorum siz ne dersiniz 🙂
Konu ile ilgili Oracle MOS Koyanakları;
- Oracle Support for Database Running on Docker (Doc ID 2216342.1)
- Oracle RAC on Docker – Released Versions and Known Issues (Doc ID 2488326.1)
https://container-registry.oracle.com/ adresinde bir çok image bulunmakta bu image ları kullanarak hızlı bir şekilde Database veya herhangi bir uygulamayı ayağa kaldırabiliriz.
Burada bir çok image bulabilmek mümkündür.
Podman veya Docker için eğer kendi imagelarımız ile çalışmayıp bu adresteki hazır image ları kullanacaksak, çalışabilmesi için öncelikle https://container-registry.oracle.com adresine girip ilgili sekmesinden giriş yaparak gerekli kabulleri yapıp ardından docker login ile aşağıdaki gibi login olmamız gerekmekte
[root@troug01 ~]# docker login container-registry.oracle.com
Username: y.farukcevik@gmail.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Kuberntes için en az 1.21 versiyonu olması gerekmektedir. eğer bir kubernetes ortamınız yok ve kurulum yapacaksanız aşağıdaki yazıdan faydalanabilir siniz.
- admin
- Ekim 31, 2024
HOW TO INSTALL KUBERNETES ON RHEL8
Kubernetes cluster’ı nasıl kuracağınızı adım adım inceleyeceğiz. Bu yapıda bir adet master node ve iki adet worker node bulunacak. Aşağıdaki…
KUBERNETES AND ORACLE DATABASE OraOperator
- Nisan 24, 2024
Install Crunchy PostgreSQL Operator On Minikube
- Haziran 8, 2023
INSTALL KUERNETES CLUSTER ON CENTOS 7 WITH KUBEADM
- Ağustos 31, 2021
Helm kurulu değilse helm kurmamız gerekmektedir.
helm version
-bash: helm: command not found
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
[WARNING] Could not find git. It is required for plugin installation.
Downloading https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
helm version
version.BuildInfo{Version:"v3.14.4", GitCommit:"81c902a123462fd4052bc5e9aa9c513c4c8fc142", GitTreeState:"clean", GoVersion:"go1.21.9"}
Öncelikle bir StorageClas varmı kontrol edelim yoksa aşağıdaki yaml ile ekleyebiliriz.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: low-latency
annotations:
storageclass.kubernetes.io/is-default-class: "false"
provisioner: csi-driver.example-vendor.example
reclaimPolicy: Retain # default value is Delete
allowVolumeExpansion: true
mountOptions:
- discard # this might enable UNMAP / TRIM at the block storage layer
volumeBindingMode: WaitForFirstConsumer
parameters:
guaranteedReadWriteLatency: "true" # provider-specific
kubectl apply -f storageclass.yaml
kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
low-latency csi-driver.example-vendor.example Retain WaitForFirstConsumer true 20s
Oracle Container Registery e login olacak bir secret credential oluşturmalıyız.
kubectl create secret docker-registry regcred --docker-server=container-registry.oracle.com --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
docker login container-registry.oracle.com
Username: <SSO email>
Password: <SSO password>
Login Succeeded
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
# kubectl create namespace oracle-namespace
namespace/oracle-namespace created
# kubectl create secret generic regcred --from-file=.dockerconfigjson=$HOME/.docker/config.json --type=kubernetes.io/dockerconfigjson -n oracle-namespace
secret/regcred created
kubectl config set-context --current --namespace=oracle-namespace
GitHub git clone ile imagelarımızı clonlayalım
# git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 17643, done.
remote: Counting objects: 100% (2177/2177), done.
remote: Compressing objects: 100% (487/487), done.
remote: Total 17643 (delta 1829), reused 1846 (delta 1676), pack-reused 15466
Receiving objects: 100% (17643/17643), 15.19 MiB | 32.89 MiB/s, done.
Resolving deltas: 100% (10387/10387), done.
https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/helm-charts/oracle-db/README.md
Bu adreste helm ile bu veritabanlarının nasıl kubernetes ortamına deploy olacağı açıklanmış buradakki yaml üzerinde ben kendi ortamıma göre ilgili değişklikleri yaparak aşağıdaki gibi deployu gerçekleştirdim
# helm package docker-images/OracleDatabase/SingleInstance/helm-charts/oracle-db
Successfully packaged chart and saved it to: /root/oracle-db-1.0.0.tgz
--dry-run opsiyonu ile validate edilir sorun yoksa deplya geçilebilir
# helm install db19c -f values.yaml oracle-db-1.0.0.tgz --dry-run
# helm install db19c -f values.yaml oracle-db-1.0.0.tgz
NAME: db19c
LAST DEPLOYED: Wed Apr 24 09:24:58 2024
NAMESPACE: oracle-namespace
STATUS: deployed
REVISION: 1
NOTES:
#
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
#
# ===========================================================================
# == Add below entries to your tnsnames.ora to access this database server ==
# ====================== from external host =================================
ORCLCDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip-address>)(PORT=<port>))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<ORACLE_SID>)))
ORCLPDB1=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip-address>)(PORT=<port>))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<ORACLE_PDB>)))
#
#ip-address : IP address of any of the Kubernetes nodes
#port : Service Port that is mapped to the port 1521 of the container.
#
Application details
====================
IP and port can be found using the following:
export NODE_PORT=$(kubectl get --namespace oracle-namespace -o jsonpath="{.spec.ports[0].nodePort}" services db19c-oracle-db)
export NODE_XDB_PORT=$(kubectl get --namespace oracle-namespace -o jsonpath="{.spec.ports[1].nodePort}" services db19c-oracle-db)
export NODE_IP=$(kubectl get nodes --namespace oracle-namespace -o jsonpath="{.items[0].status.addresses[0].address}")
echo listener at $NODE_IP:$NODE_PORT
echo XDB at $NODE_IP:$NODE_XDB_PORT
Oracle Databases SID, PDB name can be figured out by :
ORACLE_SID=$(kubectl get -o jsonpath="{.spec.template.spec.containers[?(.name == 'oracle-db')].env[?(.name == 'ORACLE_SID')].value }" deploy db19c-oracle-db)
ORACLE_PDB=$(kubectl get -o jsonpath="{.spec.template.spec.containers[?(.name == 'oracle-db')].env[?(.name == 'ORACLE_PDB')].value }" deploy db19c-oracle-db)
List Charts
# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
db19c oracle-namespace 1 2024-04-24 08:40:09.105979261 +0000 UTC deployed oracle-db-1.0.0
Kubernetes Deployments
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
Bir yanıt yazın