Teknologian jakaminen

Käytännön kokemus Apache DolphinScheduler -sovelluksen käyttämisestä big data -alustan rakentamiseen ja käyttöönottoon sekä tehtävien lähettämiseen AWS:lle

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

kirjailijasta

Li Qingwang - Ohjelmistokehitysinsinööri, Cisco

esittely

Hei kaikki, nimeni on Li Qingwang, ohjelmistokehitysinsinööri Ciscosta. Tiimimme on käyttänyt Apache DolphinScheduleria rakentaakseen oman big datan ajoitusalustan lähes kolmen vuoden ajan. Alkuversiosta 2.0.3 nykypäivään olemme kasvaneet yhdessä yhteisön kanssa. Tänään jaetut tekniset ideat ovat toissijaisia ​​kehitysversioita, jotka perustuvat versioon 3.1.1, ja niihin on lisätty joitakin uusia ominaisuuksia, jotka eivät sisälly yhteisöversioon.

Tänään kerron, kuinka käytämme Apache DolphinScheduleria suuren dataalustan rakentamiseen ja tehtäviemme lähettämiseen ja käyttöönottamiseksi AWS:lle. Joitakin prosessin aikana kohtaamia haasteita ja ratkaisujamme.

Arkkitehtuurisuunnittelu ja säätö

Aluksi kaikki palvelumme on otettu käyttöön Kubernetesissa (K8s), mukaan lukien API, Alert ja komponentit, kuten Zookeeper (ZK), Master ja Worker.

tiedosto

Suuret tiedonkäsittelytehtävät

Olemme tehneet toissijaista kehitystä sellaisille tehtäville kuin Spark, ETL ja Flink:

  • ETL-tehtävät: Tiimimme on kehittänyt yksinkertaisen vedä ja pudota -työkalun, jonka avulla käyttäjät voivat luoda nopeasti ETL-tehtäviä.
  • Kipinätuki : Varhainen versio tuki vain Sparkia, joka toimii Yarnilla, ja teimme sen tukemaan K8s-käyttöä toissijaisen kehityksen kautta. Yhteisön uusin versio tukee tällä hetkellä Sparkia K8s:ssa.
  • *Flink toissijainen kehitys: Samoin olemme lisänneet Flink On K8s -suoratoistotehtävät sekä tuen SQL-tehtäville ja Python-tehtäville K8sissa.

Tukityö AWS:ssä

Liiketoiminnan laajentuessa ja tietokäytäntöjä vaaditaan, haasteena on, että datatehtäviä on suoritettava eri alueilla. Tämä edellyttää, että rakennamme arkkitehtuurin, joka tukee useita klustereita. Alla on yksityiskohtainen kuvaus ratkaisustamme ja toteutusprosessistamme.

tiedosto

Nykyinen arkkitehtuurimme koostuu keskitetystä ohjauspäätepisteestä, yhdestä Apache DolphinScheduler -palvelusta, joka hallitsee useita klustereita. Nämä klusterit on jaettu eri maantieteellisille alueille, kuten EU:hun ja Yhdysvaltoihin, paikallisten tietokäytäntöjen ja eristysvaatimusten noudattamiseksi.

Arkkitehtoninen säätö

Vastataksemme tähän tarpeeseen olemme tehneet seuraavat muutokset:

  • Pidä Apache DolphinScheduler -palvelua keskitetysti hallinnassa: DolphinScheduler-palvelumme on edelleen käytössä itse rakennetussa Cisco Webex DC:ssä, mikä säilyttää hallinnan keskittämisen ja johdonmukaisuuden.
  • Tukee AWS EKS -klusteria : Samalla laajensimme arkkitehtuurimme ominaisuuksia tukemaan useita AWS EKS -klustereita. Tällä tavalla EKS-klusterissa suoritettavien tehtävien uudet liiketoimintavaatimukset voidaan täyttää vaikuttamatta muiden Webex DC -klusterien toimintaan ja tietojen eristykseen.

tiedosto

Tämän suunnittelun avulla voimme vastata joustavasti erilaisiin liiketoiminnan tarpeisiin ja teknisiin haasteisiin varmistaen samalla tietojen eristämisen ja käytäntöjen noudattamisen.

Seuraavaksi esittelemme kuinka käsitellä Apache DolphinSchedulerin teknistä toteutusta ja resurssiriippuvuuksia suoritettaessa tehtäviä Cisco Webex DC:ssä.

tiedosto

Resurssiriippuvuudet ja tallennustila

Koska kaikki tehtävämme ovat Kubernetes (K8s), meidän on tärkeää:

Docker-kuva
  • varastointisijainti: Aiemmin kaikki Docker-kuvamme oli tallennettu Ciscon Docker-arkistoon.
  • Kuvanhallinta: Nämä kuvat tarjoavat tarvittavan toimintaympäristön ja riippuvuudet suorittamillemme erilaisille palveluille ja tehtäville.
Resurssitiedostot ja riippuvuudet
  • Jar-paketit ja asetustiedostot jne.: Käytämme Amazon S3 Bucketia resurssien tallennuskeskuksena käyttäjän Jar-paketin ja mahdollisten riippuvaisten määritystiedostojen tallentamiseen.
  • Tietoturvaresurssien hallinta: Sisältää tietokannan salasanat, Kafka-salaustiedot ja käyttäjäkohtaiset avaimet jne. Nämä arkaluontoiset tiedot tallennetaan Ciscon Holvipalveluun.

Suojattu käyttöoikeuksien ja oikeuksien hallinta

S3 Bucketin käyttöä varten meidän on määritettävä ja hallittava AWS-tunnistetiedot:

IAM-tilin määritys
  • Tunnistetietojen hallinta: Käytämme IAM-tilejä hallitaksemme pääsyä AWS-resursseihin, mukaan lukien pääsyavaimet ja salaiset avaimet.
  • K8s integraatio: Nämä valtuustiedot tallennetaan Kubernetes Secretiin, ja Api-Service viittaa niihin, jotta S3-säilöä voidaan käyttää turvallisesti.
  • Lupien valvonta ja resurssien eristäminen: IAM-tilien kautta voimme toteuttaa yksityiskohtaisen lupien hallinnan varmistaaksemme tietoturvan ja liiketoiminnan vaatimustenmukaisuuden.

IAM-tilin käyttöavaimien vanhenemisongelmat ja vastatoimenpiteet

Kun käytämme IAM-tilejä AWS-resurssien hallintaan, kohtaamme pääsyavaimen vanhenemisen ongelman. Tässä on lisätietoja siitä, kuinka vastaamme tähän haasteeseen.

Pääsyavaimen vanhenemisongelma
  • avainaika: IAM-tilin AWS-avain on yleensä asetettu vanhentumaan automaattisesti 90 päivän välein, mikä parantaa järjestelmän turvallisuutta.
  • tehtävän vaikutus: Kun avaimet vanhenevat, kaikkia tehtäviä, jotka käyttävät näitä avaimia käyttääkseen AWS-resursseja, ei voida suorittaa, mikä edellyttää meidän päivittävän avaimet ajoissa toiminnan jatkuvuuden ylläpitämiseksi.

Vastauksena tähän tilanteeseen määritämme tehtävän säännölliset uudelleenkäynnistykset ja määritämme vastaavan valvonnan. Jos AWS-tilillä on ongelma ennen vanhenemisaikaa, meidän on ilmoitettava vastaaville kehittäjillemme.

Tuki AWS EKS

Kun liiketoimintamme laajenee AWS EKS:ksi, meidän on tehtävä useita muutoksia olemassa olevaan arkkitehtuuriimme ja tietoturvatoimiimme. tiedosto

Esimerkiksi, kuten juuri mainittu Docker-kuva, laitoimme sen aiemmin Ciscon omaan Docker-varastoon, joten nyt meidän on asetettava Docker-kuva ECR:ään. tiedosto

Useiden S3-kauhan tuki

AWS-klusterien hajautetun luonteen ja eri yritysten tietojen eristysvaatimusten vuoksi meidän on tuettava useita S3-säilöjä vastataksemme eri klusterien tiedontallennustarpeisiin: tiedosto

  • Klusterin ja kauhan välinen vastaavuus: Jokainen klusteri käyttää vastaavaa S3-säilöään tietojen paikallisuuden ja yhteensopivuuden varmistamiseksi.
  • Muokkaa strategiaa: Meidän on mukautettava tallennustilan käyttökäytäntöämme tukemaan tietojen lukemista ja kirjoittamista useista S3-säilöistä.

Muutoksia salasananhallintatyökaluihin

Turvallisuuden parantamiseksi siirryimme Ciscon itse rakennetusta Vault-palvelusta AWS:n Secrets Manageriin (ASM):

  • ASM:n käyttö: ASM tarjoaa integroidumman ratkaisun AWS-resurssien salasanojen ja avainten hallintaan.

Olemme ottaneet käyttöön menetelmän käyttää IAM-roolia ja palvelutiliä parantaaksemme Podin turvallisuutta:

  • Luo IAM-rooli ja -käytäntö: Luo ensin IAM-rooli ja sido siihen tarvittavat käytännöt varmistaaksesi, että vain tarvittavat luvat myönnetään.
  • Sido K8s-palvelutili: Luo sitten Kubernetes-palvelutili ja liitä se IAM-rooliin.
  • Pod-käyttöoikeuksien integrointi: Kun käytät podia, liittämällä sen palvelutiliin, Pod voi hankkia tarvittavat AWS-tunnistetiedot suoraan IAM-roolin kautta ja siten käyttää tarvittavia AWS-resursseja.

Nämä säädöt eivät ainoastaan ​​paranna järjestelmämme skaalautuvuutta ja joustavuutta, vaan vahvistavat myös yleistä suojausarkkitehtuuria varmistaakseen, että toiminta AWS-ympäristössä on sekä tehokasta että turvallista. Samalla vältetään myös aiempi avainten automaattinen vanheneminen ja uudelleenkäynnistyksen tarve.

Optimoi resurssienhallinta- ja tallennusprosessit

Käyttöönottoprosessin yksinkertaistamiseksi aiomme työntää Docker-kuvan suoraan ECR:ään toissijaisen siirron sijaan:

  • työnnä suoraan: Muokkaa nykyistä pakkausprosessia niin, että Docker-kuva työnnetään suoraan ECR:ään rakentamisen jälkeen, mikä vähentää aikaviiveitä ja mahdollisia virhepisteitä.
Muutoksen toteutus
  • Kooditason säädöt: Olemme muokanneet DolphinScheduler-koodia, jotta se tukee useita S3-asiakkaita ja lisännyt välimuistin hallintaa useille S3-asiakkaille.
  • Resurssienhallinnan käyttöliittymän säädöt: Antaa käyttäjien valita erilaisia ​​AWS-säilön nimiä käyttöliittymän kautta tapahtuville toimille.
  • resurssien käyttöoikeus: Muokattu Apache DolphinScheduler -palvelu voi nyt käyttää useita S3-säilöjä, mikä mahdollistaa tietojen joustavan hallinnan eri AWS-klusterien välillä.

AWS-resurssien hallinta ja käyttöoikeuseristys

Integroi AWS Secrets Manager (ASM)

Olemme laajentaneet Apache DolphinScheduleria tukemaan AWS Secrets Manageria, jolloin käyttäjät voivat valita salaisuuksia eri klusterityypeistä:

tiedosto

ASM toiminnallinen integraatio
  • Käyttöliittymän parannuksia: DolphinSchedulerin käyttöliittymään lisätään erilaisten salatyyppien näyttö- ja valintatoiminnot.
  • Automaattinen avainten hallinta: Yhdistää tiedostopolun, joka tallentaa käyttäjän valitseman salaisuuden todelliseen Pod-ympäristömuuttujaan ajon aikana, mikä varmistaa avaimen turvallisen käytön.

Dynaaminen resurssien määritys- ja alustuspalvelu (Init Container)

Hallitaksemme ja alustaaksemme AWS-resursseja joustavammin otimme käyttöön palvelun nimeltä Init Container:

tiedosto

  • Resurssien veto: Init Container vetää automaattisesti käyttäjän määrittämät S3-resurssit ja sijoittaa ne määritettyyn hakemistoon ennen kuin Pod suoritetaan.
  • Avainten ja konfiguraatioiden hallinta: Määrityksen mukaan Init Container tarkistaa ja hakee salasanatiedot ASM:ssä, tallentaa ne sitten tiedostoon ja yhdistää ne ympäristömuuttujien kautta Podin käyttöön.

Terraformin soveltaminen resurssien luomiseen ja hallintaan

Olemme automatisoineet AWS-resurssien määritys- ja hallintaprosessin Terraformin avulla, mikä yksinkertaistaa resurssien allokointia ja käyttöoikeusasetuksia:

tiedosto

  • Automaattinen resurssien määritys: Luo Terraformilla tarvittavat AWS-resurssit, kuten S3 Bucket ja ECR Repo.
  • IAM-politiikka ja roolien hallinta: Luo automaattisesti IAM-käytännöt ja roolit varmistaaksesi, että jokaisella liiketoimintayksiköllä on pyynnöstä pääsy tarvitsemiinsa resursseihin.

Lupaeristys ja turvallisuus

Käytämme kehittyneitä käyttöoikeuksien eristysstrategioita varmistaaksemme, että eri liiketoimintayksiköt toimivat itsenäisissä nimiavaruuksissa, välttäen resurssien käyttöristiriidat ja turvallisuusriskit:

Toteutustiedot
  • Palvelutilin luominen ja sitominen: Luo itsenäinen palvelutili jokaiselle liiketoimintayksikölle ja sitoa se IAM-rooliin.
  • Nimitilan eristäminen: Jokainen palvelutilitoiminto käyttää vastaavia AWS-resurssejaan määritetyn nimitilan IAM-roolin kautta.

tiedosto

Parannuksia klusterin tukeen ja käyttöoikeuksien hallintaan

Klusterityyppiset laajennukset

Lisäsimme uuden kentän cluster type, tukemaan erityyppisiä K8S-klustereita, jotka eivät sisällä vain tavallisia Webex DC -klustereita ja AWS EKS -klustereita, vaan tukevat myös tiettyjä klustereita, joilla on korkeammat turvallisuusvaatimukset:

tiedosto

Klusterityyppien hallinta
  • Klusterin tyyppi -kenttä: by Introducedcluster typekentät, voimme helposti hallita ja laajentaa tukea eri K8S-klustereille.
  • Kooditason mukauttaminen: Tiettyjen klustereiden ainutlaatuisia tarpeita varten voimme tehdä kooditason muutoksia varmistaaksemme, että suojaus- ja määritysvaatimukset täyttyvät, kun töitä suoritetaan näissä klusteissa.

Parannettu käyttöoikeuksien valvontajärjestelmä (Auth-järjestelmä)

Kehitimme Auth-järjestelmän erityisesti hienorakeista käyttöoikeuksien valvontaa varten, mukaan lukien projektien, resurssien ja nimitilojen välisten käyttöoikeuksien hallinta:

Oikeuksien hallintatoiminto
  • Projekti- ja resurssioikeudet: Käyttäjät voivat hallita käyttöoikeuksia projektiulottuvuuden kautta, kun heillä on projektin käyttöoikeudet, he voivat käyttää kaikkia projektin resursseja.
  • nimitilan käyttöoikeuksien valvonta: Varmista, että tietty ryhmä voi suorittaa projektinsa töitä vain määritetyssä nimiavaruudessa, mikä varmistaa käynnissä olevien resurssien eristämisen.

Esimerkiksi ryhmä A voi suorittaa vain tiettyjä projektitöitä A-nimitilassaan. Esimerkiksi käyttäjä B ei voi suorittaa töitä käyttäjän A nimiavaruudessa.

AWS-resurssienhallinta- ja käyttöoikeussovellus

Käytämme Auth-järjestelmää ja muita työkaluja AWS-resurssien käyttöoikeuksien ja käyttöoikeuksien hallintaan, mikä tekee resurssien allokoinnista joustavampaa ja turvallisempaa:

tiedosto

  • Usean AWS-tilin tuki: Auth-järjestelmässä voit hallita useita AWS-tilejä ja sitoa erilaisia ​​AWS-resursseja, kuten S3 Bucket, ECR, ASM jne.
  • Resurssikartoitus ja lupasovellus: Käyttäjät voivat kartoittaa olemassa olevat AWS-resurssit ja hakea käyttöoikeuksia järjestelmään, jotta he voivat helposti valita resurssit, joita he tarvitsevat käytettäväksi suorittaessaan työtä.

Palvelu Tilinhallinta ja lupien sitominen

Palvelutilien ja niiden käyttöoikeuksien hallinnan parantamiseksi olemme ottaneet käyttöön seuraavat toiminnot:

tiedosto

Palvelutilin sitominen ja hallinta
  • Ainoa ero palvelutilin välillä: Sido palvelutili tietyn klusterin, nimitilan ja projektin nimen kautta sen ainutlaatuisuuden varmistamiseksi.
  • Lupasidonnainen käyttöliittymä: Käyttäjät voivat sitoa palvelutilin tiettyihin AWS-resursseihin, kuten S3, ASM tai ECR, käyttöliittymässä tarkan käyttöoikeuksien hallinnan saavuttamiseksi.

tiedosto

Yksinkertaista toimintaa ja resurssien synkronointia

Sanoin juuri paljon, mutta varsinainen toiminta on käyttäjille suhteellisen yksinkertaista. Koko sovellusprosessi on itse asiassa kertaluonteinen tehtävä parantaaksemme Apache DolphinSchedulerin käyttökokemusta AWS-ympäristössä. toimenpiteet toimintamenettelyjen yksinkertaistamiseksi ja resurssien synkronointikyvyn parantamiseksi.

tiedosto

Haluan tiivistää sen sinulle:

Yksinkertaistettu käyttöliittymä

DolphinSchedulerissa käyttäjät voivat helposti määrittää tietyn klusterin ja nimitilan, jossa heidän työnsä suoritetaan:

Klusterin ja nimitilan valinta
  • Klusterin valinta: Lähettäessään työtä käyttäjät voivat valita klusterin, jossa he haluavat työn suoritettavan.
  • nimitilan määritys: Valitusta klusterista riippuen käyttäjän on myös määritettävä nimitila, jossa työ suoritetaan.
Palvelutilin ja resurssien valinta
  • Palvelutilin näyttö: Sivu näyttää automaattisesti vastaavan palvelutilin valitun projektin, klusterin ja nimitilan perusteella.
  • Resurssien käyttöoikeuksien määritys: Käyttäjät voivat valita avattavasta luettelosta palvelutiliin liitetyn S3-ämpäri, ECR-osoitteen ja ASM-avaimen.

tulevaisuuden näkymät

Nykyisessä suunnittelussa on vielä joitain alueita, joita voidaan optimoida ja parantaa käyttäjien ilmoittamisen parantamiseksi ja käytön ja ylläpidon helpottamiseksi:

  • Kuvan työntöoptimointi: Harkitse Ciscon kuljetuspakkausprosessin ohittamista ja paketin työntämistä suoraan ECR:ään, erityisesti EKS-kohtaisten kuvamuutosten yhteydessä.
  • Yhden napsautuksen synkronointitoiminto: Suunnittelemme kehittävämme yhden napsautuksen synkronointitoiminnon, jonka avulla käyttäjät voivat ladata resurssipaketin S3-säilöön ja valita valintaruudun synkronoidaksesi sen automaattisesti muiden S3-säilöiden kanssa toistuvien latausten vähentämiseksi.
  • Kartoita automaattisesti Auth-järjestelmään: Kun Aws-resurssit on luotu Terraformin kautta, järjestelmä yhdistää nämä resurssit automaattisesti käyttöoikeuksien hallintajärjestelmään, jotta käyttäjät eivät syötä resursseja manuaalisesti.
  • Käyttöoikeuksien hallinnan optimointi: Automatisoidun resurssien ja käyttöoikeuksien hallinnan ansiosta käyttäjien toiminnasta tulee yksinkertaisempaa, mikä vähentää asennuksen ja hallinnan monimutkaisuutta.

Näillä parannuksilla odotamme auttavan käyttäjiä ottamaan käyttöön ja hallitsemaan työtään tehokkaammin Apache DolphinSchedulerin avulla, olipa kyseessä Webex DC tai EKS, ja samalla parantaa resurssienhallinnan tehokkuutta ja turvallisuutta.

Tämän artikkelin on kirjoittanut Beluga Open Source Technology Julkaisutuki saatavilla!