Spring Cloud Kubernetes

Convention over configuration

Deni Husni Fahri Rizal
Apr 16 · 3 min read
Image for post
Image for post

Seperti telah dijelaskan, spring cloud dan kubernates memiliki cara yang berbeda dalam memberikan solusi terhadap cara implementasi microservice arsitektur. Agar lebih jelas pemahamannya atau untuk sekadar refresh dapat dibaca terlebih dahulu dari artikel sebelumnya Spring Cloud dan Kubernates.

Spring cloud kubernetes dibuat dengan alasan atau motivasi sebagai berikut.

Secara singkatnya spring cloud kubernetes memberikan cara intergrasi dengan Kubernates Master Api agar bisa melakukan discovery, config, dan loadbalancing dengan pendekatan spring cloud (spring cloud way).

Berikut adala beberapa fitur utama dari spring cloud kubernetes.

  1. Service Discovery pada spring cloud Kubernetes.
  2. Management konfigurasi dan injection modul kubernetes ConfigMaps dan secrest ke pod aplikasi dengan cara melakukan konfigurasi di Spring Cloud Kubernetes Config.
  3. Load balancing dengan Spring Cloud Kubernetes Ribbon.
  4. Kubernetes Awareness yang dapat digunakan dalam tahap development untuk proses debugging dan troubleshooting.
  5. Health checking dengan Spring Cloud Kubernetes Ood Health Indicator.

Berikut adalah contoh diagram dari implementasi spring cloud kubernetes.

Image for post
Image for post

Setup Environment Development

Akan tetapi, di level development kita tetap musti memiliki kuberantes mungkin single node sudah cukup yang dapat kita install di local kita. Untuk itu, kita dapat menggunakan Minikubes dan install single node kubernates. Untuk proses bagaimana cara install minikube dapat dipelajari dari web site Minikubes untuk kubernetes.

Spring Boot Starter

Agar aplikasi spring boot kita dapat menggunakan kemampuan spring cloud kubernates maka perlu menambahkan beberapa libary sebagai berikut.

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>

Discovery Client digunakan unutuk resolves service names ke Kubernetes Services.

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
</dependency>

Load application properties dari Kubernetes ConfigMaps and Secrets. Reload application properties ketika pada ConfigMap or Secret terjadi perubahan.

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
</dependency>

Ribbon client-side load balancer dengan daftar server didapatkan dari Kubernetes Endpoints.

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-all</artifactId>
</dependency>

Semua fitur dari Spring Cloud Kubernetes.

Service Discovery atau Discovery Client pada Kubernetes

DiscoperyClient ini memberikan kepada kita kemampuan untuk melakukan pencarian endpoint-endpoint kubernates atau service kubernates berdasarkan namanya. Service ini biasanya dieskpose oleh Kubernetes Api sebagai sekelompok endpoint dalam http atau https agar bisa diakses dari spring boot sebagai pod.

DiscoperyClient juga digunakan oleh Spring Cloud Kubernetes Ribbon untuk mendapatkan daftar dari endpoint terdifinisi agar bisa di load balancing. Konsepnya sama seperti gabungan antara Ribbon dan Service Discovery pada implementasi microservice di luar kubernetes.

Untuk mengaktifkan fitur ini, pada spring boot yang sudah ditambahkan library spring cloud kubernates, kita tinggal menambahkan kode berikut.

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

Untuk dapat mengakses DiscoperyClient pada setiap level kode kita, dapat dengan bantuan IOC dengan menginject objectnya seperti berkut.

@Autowired
private DiscoveryClient discoveryClient;

Apabila kita menginginkan DiscoveryClient aktif dari semua namespace maka perlu menambahkan properties berikut.

spring.cloud.kubernetes.discovery.all-namespaces=true

Apabila karena alasan tertentu kita membutuhkan disable terhadap DiscoveryClient maka dapat dilakukan dengan settingan konfigurasi sebagai berikut.

spring.cloud.kubernetes.discovery.enabled=false

Beberapa komponen dari spring cloud menggunakan DiscoveryClient untuk mendapatkan informasi dari local service (spring service) sehingga kita perlu menyelaraskan dengan settingan pada spring.application.name. Akan tetapi, perlu diperhatikan bahwa perubahan pada spring.application.name tidak akan mempengaruhi pada nama service di kubernates.

Spring cloud kubernetes dapat memonitor terhadap perubahan dan update dari katalog kubernates service dan melakukan update pada DiscoperyClient. Agar hal ini bisa dijalankan maka kita perlu menambahkan @EnableScheduling.

@SpringBootApplication
@EnableDiscoveryClient
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

Untuk pembahasan selanjutnya mengenai fitur-fitur lainnya dari spring cloud kubernetes akan kita bahas pada penjelasan artikel selanjutnya.

The Legend

Better Code, Better Architecture, and Better Process

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store