Günümüzde yazılım geliştirme süreçleri oldukça karmaşık hale gelmiştir. Büyük ölçekli projelerde, birçok farklı bileşenin bir arada çalışması gerektiğinden, geliştiricilerin işi daha da zorlaşır. Bu nedenle, geliştiricilerin uygulamalarını gerekli testlerden geçirerek güvenli ve hatasız bir şekilde sunmaları önemlidir. Bu amaçla, remote (uzaktan) debug işlemi oldukça önemlidir.
Bu makalede, Kubernetes ve Spring Boot kullanarak remote(uzaktan) debugging yapmanın önemine değineceğiz. Ayrıca, bu işlemi nasıl gerçekleştireceğimizi adım adım açıklayacağız.
Kubernetes Nedir?
Kubernetes, açık kaynaklı bir container yönetim platformudur. Yani, birçok farklı container’ın aynı ortamda çalışmasını sağlar. Kubernetes, otomatik ölçeklendirme, yük dengeleme ve hata toleransı gibi birçok özellik sunar. Bu nedenle, büyük ölçekli uygulamaların yönetimi için sıklıkla tercih edilir.
Spring Boot Nedir?
Spring Boot, Java tabanlı bir web uygulama geliştirme çerçevesidir. Spring Boot, birçok yerleşik özellik ve kütüphane içerir ve böylece birçok görevi kolaylaştırır. Örneğin, veritabanı bağlantısı veya HTTP istekleri gibi görevleri tek bir yapı içinde yapabilirsiniz. Bu nedenle, Spring Boot, hızlı ve efektif bir şekilde web uygulamaları geliştirmek için sıklıkla tercih edilir.
Uzaktan Debugging Nedir?
Uzaktan debugging, bir uygulamada ortaya çıkan hataları tespit etmek için kullanılan bir tekniktir. Uzaktan debugging sayesinde, geliştiriciler uygulamanın başka bir bilgisayarda veya uzak bir sunucuda çalıştığı durumlarda hataları tespit edebilirler.
Uzaktan debugging, geliştiricilere uygulamanın gerçek dünya koşullarında nasıl davrandığını anlamalarına yardımcı olur. Bu nedenle, uzaktan debugging, geliştirme sürecinin önemli bir parçasıdır.
Kubernetes ve Spring Boot ile Uzaktan Debugging Nasıl Yapılır?
Adım 1: Gereksinimleri Karşılamak
Uzaktan debugging yapmak için öncelikle gereksinimleri karşılamamız gerekiyor. Bunlar:
- Bir Kubernetes kümesi
- Bir Spring Boot uygulaması
- Bir IDE (Integrated Development Environment)
Adım 2: Spring Boot Uygulamasını Hazırlama
Uzaktan debugging yapmak için öncelikle Spring Boot uygulamamızı hazırlamamız gerekiyor. Bunun için, uygulamamızın yapılandırma dosyasına aşağıdaki satırları eklememiz gerekiyor:
spring:
devtools:
remote:
secret: mysecretpassword
Bu satırlar, Spring Boot uygulamamızın uzaktan debugging yaparken kullanacağı şifreyi belirler. Şifrenizi uygun bir şekilde değiştirmeniz önemlidir.
Daha sonra, uygulamanızı kapatmadan Maven veya Gradle gibi bir yapılandırma aracı kullanarak uygulamanızı yeniden derlemeniz gerekiyor.
Adım 3: Docker Image Hazırlama
Spring Boot uygulamamızı Docker image’ına dönüştürmemiz gerekiyor. Bunu yapmak için, Spring Boot uygulamamızın yapılandırma dosyasında belirlediğimiz şifreyi Dockerfile dosyasına eklememiz gerekiyor. Ayrıca Dockerfile dosyasına aşağıdaki satırları da eklemeliyiz:
FROM openjdk:11-jre-slim
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Xdebug", "-Xrunjdwp:transport=dt_socket,address=*:5005,server=y,suspend=n","-jar","/app.jar"]
Bu satırlar, Docker image’ının OpenJDK 11 ve Spring Boot uygulamamızı içereceğini söyler. Ayrıca, uygulamanın 5005 portunda uzaktan debugging yapılacağını belirtir.
Dockerfile dosyasına ihtiyaç duyduğumuz tüm özellikleri ekledikten sonra, Docker image’imizi oluşturabiliriz. Bunun için, aşağıdaki komutu kullanabilirsiniz:
docker build -t spring-boot-app .
Bu komut, Dockerfile dosyasının bulunduğu dizinde çalıştırılmalıdır. Ayrıca, Docker image’ın adı “spring-boot-app” olarak belirlenir.
Adım 4: Kubernetes Deployment Nesnesi Oluşturma (bknz: Kubernetes Komponentleri)
Uzaktan debugging yapmak için Kubernetes nesnesi oluşturmamız gerekiyor. Bunu yapmak için, deployment.yaml adlı bir dosya oluşturuyoruz ve içeriği aşağıdaki gibi olacak şekilde yapılandırıyoruz:
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-app
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-app
template:
metadata:
labels:
app: spring-boot-app
spec:
containers:
- name: spring-boot-app
image: spring-boot-app
ports:
- containerPort: 8080
volumeMounts:
- name: app-secret
mountPath: /mnt/secrets
readOnly: true
volumes:
- name: app-secret
secret:
secretName: spring-boot-secret
Bu dosya, Kubernetes kümemizde bir deployment oluşturacaktır. Bu deployment, tek bir replica ile çalışacak ve Spring Boot uygulamasını içeren Docker image’ını kullanacaktır. Ayrıca, deployment, 8080 portunu dinleyecek ve “app-secret” adlı bir volume kullanarak Spring Boot uygulamasındaki gizli bilgilere erişecektir.
Adım 5: Secret Nesnesi Oluşturma (bknz: Kubernetes Secret Nedir? Örneklerle Secret Kullanımı)
Uygulamadaki gizli bilgilere erişmek için bir Secret nesnesi oluşturmamız gerekiyor. Bunun yapmak için, secret.yaml adlı bir dosya oluşturuyoruz ve içeriği aşağıdaki gibi olacak şekilde yapılandırıyoruz:
apiVersion: v1
kind: Secret
metadata:
name: spring-boot-secret
type: Opaque
data:
application.properties: c3VwZXJfc2VjcmV0cGFzc3dvcmQ=
Bu dosya, Kubernetes kümemizde bir Secret nesnesi oluşturacaktır. Bu Secret nesnesi, Spring Boot uygulaması tarafından kullanılan “application.properties” dosyasındaki gizli bilgileri içerecektir. Bu gizli bilgiler Base64 formatında kodlanmıştır.
Adım 6: Kubernetes Yaml Yüklenmesi
Kubernetes nesnelerimizi oluşturduk. Şimdi, bu nesneleri Kubernetes kümemize yükleyebiliriz. Bunun için, aşağıdaki komutları sırasıyla çalıştırmanız gerekiyor:
kubectl apply -f secret.yaml
kubectl apply -f deployment.yaml
Bu komutlar, önce Secret nesnesini oluşturacak ve sonra Deployment nesnesini oluşturacaktır.
Adım 7: Remote (Uzaktan) Debugging
Artık uygulamamızı uzaktan debugging yapmak için hazırız. Bunu yapmak için, IntelliJ IDEA’da “Run” menüsünden “Edit Configurations” seçeneğini seçin ve “Remote” başlığı altındaki “Spring Boot” konfigürasyonunu düzenleyin.
Düzenleme ekranında, “Host” alanına Kubernetes kümenizin IP adresini girin ve “Port” alanına 5005’i girin. Ayrıca, “Environment” sekmesinde, “SPRING_PROFILES_ACTIVE” adlı bir değişken oluşturun ve değeri “debug” olarak ayarlayın.
Tüm yapılandırmaları tamamladıktan sonra, uzaktan debugging işlemi için uygulamanızı çalıştırabilirsiniz. Bunun için, IntelliJ IDEA’da “Run” menüsünden “Debug ‘Spring Boot'” seçeneğini seçin.
Spring Boot uygulamalarını nasıl Kubernetes üzerinde çalıştırabileceğinizi anlattık. Ayrıca, uygulamanızı remote (uzaktan) debugging yapmak için nasıl hazırlayacağınızı da öğrendiniz.
Yazılım geliştirme sürecinde, uygulamanızı doğru şekilde yapılandırmak ve ayarlamak oldukça önemlidir. Bu sayede, uygulamanızı sorunsuz bir şekilde çalıştırabilir ve hataları daha kolay tespit edebilirsiniz. Kubernetes gibi modern araçlar kullanarak, uygulamanızı daha güvenli ve ölçeklenebilir hale getirebilirsiniz.