WordPress internet üzerinde bloglar ve web siteleri yayınlamak için kullanılan en popüler içerik yönetim sistemlerinden biridir. Ayrıca Docker imajı olarak DockerHub kayıt defterinde de mevcuttur. Bu Docker imajını, Kubernetes kümesi üzerinde güvenilir ve ölçeklenebilir bir web sitesi platformu oluşturmak için kullanabilirsiniz. WordPress'i Kubernetes üzerinde dağıtmak, CI/CD hattını uygulamanıza yardımcı olur ve yeni güncellemelerin yayınlanması için gereken süreyi azaltır. Web sitesi trafiğindeki artışları yönetmek için WordPress web sitesinin yatay ölçeklendirmesini de etkinleştirebilirsiniz.
Bu kılavuz, WordPress ve MySQL veritabanını, Kubernetes kümesi üzerinde bir Persistent Volume ile nasıl dağıtacağınızı gösterecektir.
Önkoşullar
- Kubernetes (k8s) ve nesneleri hakkında temel bir anlayış. Kubernetes ekosistemine ayrıntılı bir genel bakış için bu kılavuza.
- başvurun. Bir Kubernetes kümesi kurulmuş ve çalışıyor olmalıdır. Ubuntu 20.04 üzerinde Kubernetes kümesini kurmak için bu öğreticiyi.
takip edin. Kubernetes Kümesini Doğrulayın
Başlamadan önce, Kubernetes kümesinin durumunu doğrulamanız önerilir. Kubernetes'i doğrulamak için kubectl komutunu kullanabilirsiniz.
|
1 |
kubectl get nodes |
Her şey yolundaysa, aşağıdaki çıktıyı almalısınız.

MySQL için bir Secret Oluşturun
Bir Secret, parola veya anahtar gibi hassas verileri depolamanıza olanak tanıyan bir nesnedir. Bu yazıda, MySQL parolasını depolamak için Secret kullanacağız.
İlk olarak, aşağıdaki komutu kullanarak base64 kodlu bir parola oluşturun.
|
1 |
echo -n 'your_secure_password' | base64 |
Aşağıdaki çıktıda gizli parolanızı alacaksınız.
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Ardından, MySQL ve WordPress için bir secret.yaml dosyası oluşturun.
|
1 |
nano secret.yaml |
Aşağıdaki yapılandırmayı ekleyin.
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Dosyayı kaydedip kapatın. Ardından, aşağıdaki komutu kullanarak yukarıdaki yapılandırmayı Kubernetes kümesine uygulayın.
|
1 |
kubectl apply -f secret.yaml |
Aşağıdaki çıktıyı alacaksınız.
|
1 |
secret/mysql-pass created |
MySQL ve WordPress için bir PersistentVolume Oluşturun
MySQL ve WordPress verilerini depolamak için bir PersistentVolume da oluşturmanız gerekecektir.
Bir pvc-mysql-wp.yaml dosyası oluşturalım.
|
1 |
nano pvc-mysql-wp.yaml |
Aşağıdaki yapılandırmaları ekleyin.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi |
İşiniz bittiğinde dosyayı kaydedip kapatın.
Ardından, aşağıdaki komutu kullanarak Kubernetes kümesinde hem MySQL hem de WordPress için PersistentVolume'ları oluşturun.
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
Aşağıdaki çıktıda her iki PersistentVolume'u da görmelisiniz.
|
1 2 |
persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created |
Şimdi aşağıdaki komutu kullanarak her iki PersistentVolume'u da doğrulayabilirsiniz.
|
1 |
kubectl get pv |
Aşağıdaki çıktıyı görmelisiniz.
|
1 2 3 |
AD KAPASİTE ERİŞİM MODLARI GERİ KAZANIM POLİTİKASI DURUM TALEP DEPOLAMA SINIFI NEDEN YAŞ pvc-873a458352594103 40Gi RWO Delete Bound default/wp-pv-talep sizin-blok-depolama 3s pvc-de7d7de5e53a40e8 40Gi RWO Delete Bound default/mysql-pv-talep sizin-blok-depolama 3s |
MySQL Deployment Oluşturun
Ardından, MySQL docker imajını indirmek, bir konteyner oluşturmak ve PersistentVolume'u şu adrese bağlamak için bir MySQL deployment yapılandırma dosyası oluşturun: /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
Aşağıdaki yapılandırmayı ekleyin.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim |
İşiniz bittiğinde dosyayı kaydedip kapatın. Ardından, yukarıdaki yapılandırmayı Kubernetes kümesine dağıtın.
|
1 |
kubectl apply -f mysql-deployment.yaml |
Aşağıdaki çıktıyı görmelisiniz.

Aşağıdaki komutu kullanarak MySQL dağıtımını doğrulayabilirsiniz.
|
1 |
kubectl get deployments |
Aşağıdaki çıktıda MySQL dağıtımının durumunu görmelisiniz.

WordPress Dağıtımı Oluşturun
Şimdi, WordPress görüntüsünü indirmek, bir konteyner oluşturmak ve PersistentVolume'u web sitesi veri dosyaları için /var/www/html dizinine bağlamak üzere bir WordPress dağıtım yapılandırma dosyası oluşturun. Bu dosya aynı zamanda veritabanına erişmek için WORDPRESS_DB_HOST ve WORDPRESS_DB_PASSWORD ortam değişkenlerini de oluşturur.
|
1 |
nano wordpress-deployment.yaml |
Aşağıdaki yapılandırmayı ekleyin.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: apps/v1 # 1.9.0 öncesi sürümler için apps/v1beta2 kullanın kind: Deployment metadata: name: wordpress labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: frontend strategy: type: Recreate template: metadata: labels: app: wordpress tier: frontend spec: containers: - image: wordpress:4.8-apache name: wordpress env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html volumes: - name: wordpress-persistent-storage persistentVolumeClaim: claimName: wp-pv-claim |
İşlemi tamamladıktan sonra dosyayı kaydedin. Ardından, aşağıdaki komutu kullanarak yukarıdaki yapılandırmayı Kubernetes kümesine uygulayın.
|
1 |
kubectl apply -f wordpress-deployment.yaml |
Aşağıdaki çıktıda başarılı bir dağıtım mesajı görmelisiniz.
|
1 2 |
service/wordpress created deployment.apps/wordpress created |
WordPress dağıtımını doğrulamak için aşağıdaki komutu çalıştırın.
|
1 |
kubectl get deployments |
Aşağıdaki çıktıda WordPress dağıtımının durumunu görmelisiniz.

WordPress Web Arayüzüne Erişin
WordPress paneline erişmek için LoadBalancer'ın harici IP'sine ve port numarasına ihtiyacınız olacak. Bu bilgiyi aşağıdaki komutu kullanarak alabilirsiniz.
|
1 |
kubectl get svc |
Aşağıdaki çıktıda LoadBalancer IP'sini ve Portunu alacaksınız.
|
1 2 3 4 |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m wordpress LoadBalancer 10.100.80.70 78.141.194.181 80:31624/TCP 3m6s wordpress-mysql ClusterIP None <none> 3306/TCP 4m14s |
WordPress pod'larınız hakkında detaylı bilgi almak için aşağıdaki komutu çalıştırın.
|
1 |
kubectl describe svc wordpress |
Aşağıdaki çıktıda WordPress'in detaylı bilgilerini almalısınız.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Name: wordpress Namespace: default Labels: app=wordpress Annotations: <none> Selector: app=wordpress,tier=frontend Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31624/TCP Endpoints: 10.244.23.66:80 Session Affinity: None External Traffic Policy: Cluster |
Şimdi web tarayıcınızı açın ve şu URL'yi kullanarak WordPress kurulum sayfasına erişin: http://78.141.194.181:3162. Aşağıdaki ekranda WordPress kurulum sayfasını görmelisiniz.

Dilinizi seçin ve kurulum işlemini tamamlamak için gerekli adımları uygulayın.
Sonuç
Bu yazıda, Kubernetes kümesinde kalıcı birim (persistent volume) ile MySQL ve WordPress'in nasıl dağıtılacağını açıkladık. Ayrıca WordPress dağıtımınızı web sitesi trafiğinize göre ölçeklendirebilirsiniz. Artık geliştirme ihtiyaçlarınıza bağlı olarak yukarıdaki dağıtımı kullanabilirsiniz.
Ayrıca, blogumuzda bulabileceğiniz Docker ve Kubernetes odaklı diğer öğreticilerimize de göz atın:
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.