Blog

Gradle-build-välimuistisolmujen käyttöönotto Azure Kubernetes Servicessä (AKS)

SEP 19, 2024

Tässä blogikirjoituksessa esittelen Gradlen build cache -solmujen kokoonpanon, jonka avulla voit lyhentää projektisi build-aikaa. Artikkelin sisällöstä on erityisesti hyötyä pienemmissä tiimeissä, jotka käyttävät muita kuin enterprise-tason Gradle-projekteja.

Alexandra Sedova

Alexandra is a build and infrastructure engineer with extensive experience across diverse industries. She is experienced in cloud migrations and Kubernetes deployments and is an advocate for the "as code" approach and DevOps best practices. Her project work expands proof of concepts, assessments, tool migrations, building new CI/CD pipelines, setting up release processes, driving digital transformations, and initiating "open source" development communities within organizations.

Build engineerinä kohtasin useita Gradle build -välimuistiin liittyviä haasteita, jotka edellyttivät yksinkertaista ja kustannustehokasta vaihtoehtoa Gradle Enterpriselle. Ratkaisun tuli tarjota:

  • Build-aikojen lyheneminen tehokkaan välimuistituksen avulla.

  • Helppo skaalaus projektin kasvaessa.

  • Yhdenmukaiset buildit eri ympäristöissä.

  • Budjettiystävällinen ratkaisu.

  • Täysi hallinta välimuisti-infrastruktuuriini.

Huomaa, että kuvattu AKS:ään toteutettu ratkaisu soveltui organisaatiollemme (Eficode), mutta sitä voi helposti muokata toiselle alustalle sopivaksi.

Mikä on Gradle build -välimuisti?

Gradle build -välimuisti on tehokas ominaisuus, joka tallentaa ja hyödyntää aiempien buildien tuloksia uudelleen. Se lyhentää merkittävästi seuraavien buildien kestoa, mikä on erityisen hyödyllistä CI/CD -ympäristöissä, joissa buildeja suoritetaan useita.

Projektin yleiskatsaus

Projektimme tarjoaa luotettavan ja skaalautuvan ratkaisun Gradle build -välimuistisolmujen käyttöönottoon AKS:ssä. Löydät sen avoimen lähdekoodin version täältä. Keskeisiä komponentteja ovat:

  • Kubernetes StatefulSet, jossa on kaksi build-välimuistisolmun replikkaa.

  • Kubernetes Service välimuistin julkaisemiseen.

  • Ingress Controller ulkoista käyttöä varten.

  • AzureFile pysyvää tallennusta varten.

Edellytykset

Tarvitset tämän ratkaisun toteuttamiseen:

  • Azure Kubernetes Service -klusterin.

  • Kubernetes CLI:n (kubectl).

  • Azure CLI:n (az).

  • Docker CLI:n.

Toteutusvaiheet

Valitsimme AzureFilen pysyvälle taltiolle, sillä pidimme sitä yksinkertaisimpana ratkaisuna AKS:lle. Projektisi, tiimisi tai organisaatiosi tarpeiden mukaan kannattaa harkita myös muuta vaihtoehtoa.

Azure-tiedostojaon määrittäminen

Aloitimme luomalla Azure-tiedostojaon välimuistisolmujemme pysyvää tallennusta varten. Tähän sisältyi tallennustilin ja tiedostojaon luominen sekä tarvittavien Kubernetes-salaisuuksien määrittäminen.

Seuraavaksi otimme StatefulSetin ja palvelun käyttöön Kubernetesin manifesteilla. StatefulSet varmisti, että välimuistisolmuillamme oli pysyvät verkkoidentiteetit ja jatkuva tallennustila.

kubectl apply -f gradle-cache-stateful-set.yamlkubectl apply -f service.yaml

Ingressin määrittäminen

Määritimme Ingress-resurssin hallitsemaan ulkoista pääsyä välimuistisolmuihimme. Näin kehittäjämme pystyivät käyttämään välimuistia Kubernetes-klusterin ulkopuolelta. Esimerkissä käytimme yksinkertaisuuden vuoksi Ingress-luokkana webapprouting.kubernetes.azure.comia, koska välimuistisolmujen käyttöön ei ollut tiukkoja vaatimuksia. Sinä saatat kuitenkin suosia varsinaista HTTPS-palvelinta.

Voit rajoittaa tai määrittää käyttäjäpääsyn tarjoamalla solmulle mukautetun konfiguraation polkuun «config-dir»/config.yaml, mutta tähän liittyy joitakin haasteita.

Halusimme valmiiksi määritetyn käyttäjäpääsyn alusta alkaen, joten asetimme config.yaml-tiedoston salaisuudeksi. Jos haluat liittää salaisuuden tai config mapin build-välimuistisolmun konfiguraatiotiedostoksi, sen on oltava kirjoitettavissa.

Salaisuudet tai config mapit voi liittää luku- ja kirjoitustilassa, mutta se edellyttää feature gaten poistamista käytöstä. Muutos olisi tällöin globaali, joten sitä ei suositella.

Suolattujen hajautettujen salasanojen luomiseen käytimme tätä komentoa:

docker run --interactive --tty gradle/build-cache-node:19.0 hashTätä konfiguraatiota varten loimme Kubernetes-salaisuuden:

Build-välimuistisolmun käyttäminen

Jos haluat käyttää välimuistipalvelinta, etsi Ingressisi ulkoinen IP-osoite:

Voit sitten siirtyä siihen selaimellasi: http://<external-ip>:5071

Määritä Gradle-projektisi käyttämään välimuistisolmua

Vaihtoehtoiset tallennusratkaisut

Valitsimme toteutukseemme Azure file sharen, mutta eri ympäristöihin ja vaatimuksiin sopii useita vaihtoehtoisia tallennusratkaisuja. Esimerkiksi Amazon Elastic File System sopii tiimeille, jotka käyttävät AWS:ää, ja Google Cloud Filestore GKE:lle. Lisäksi saatavilla on useita pilvipalveluntarjoajista riippumattomia vaihtoehtoja, kuten Rook, Longhorn ja OpenEBS.

Kun valitset vaihtoehtoista ratkaisua, huomioi seuraavat tekijät, jotta se sopii pilvipalveluntarjoajaasi tai on-premise-infrastruktuuriisi:

  • Suorituskykyvaatimukset.

  • Skaalautuvuustarpeet.

  • Datan replikointi- ja varmuuskopiointiominaisuudet.

  • Kustannukset.

  • Helppo hallinta ja integroitavuus nykyisiin työkaluihin.

Projektissamme Azuren file share tarjosi sopivan tasapainon yksinkertaisuuden, suorituskyvyn ja Azure-pohjaiseen infrastruktuuriimme integroitavuuden välillä. Gradle build -välimuistisolmun käyttöönotto AKS:ssä paransi merkittävästi build-aikojamme ja CI/CD:n yleistä tehokkuutta. Jokaisella ratkaisulla on kuitenkin omat vahvuutensa, ja paras valinta riippuu lopulta käyttötapauksestasi ja ympäristöstäsi.

Hyödyntämällä Kubernetes StatefulSetejä ja Azuren vankkaa pilvi-infrastruktuuria pystyimme luomaan build-välimuistitarpeisiimme skaalautuvan, pysyvän ja turvallisen ratkaisun.

Toivon, että tämä blogikirjoitus toimii hyödyllisenä lähteenä tiimillesi, kun optimoitte Gradle-buildien käyttöä Kubernetes-ympäristössä. Tutustu vapaasti toteutuksen kaikkiin yksityiskohtiin GitHub-repositoriossamme.

  • Software development
  • DevOps
  • Cloud native

Subscribe to our newsletter