Blog

Kubernetes Windowsissa

OCT 4, 2017

Arvio Windows-minionien lisäämisestä AWS:n Kubernetes-klustereihin

Sami Alajrami

Sami is a DevOps consultant in our Oslo office. He comes from Palestine and has a PhD in Computing Science from Newcastle University. Sami’s previous work focused on cloud-based software development, model-based engineering, and safety-critical systems. He’s also an INTJ.

Kubernetes 1.5:n alpha-julkaisussa otettiin käyttöön Windows-konttien tuki. Beta-version ollessa aivan nurkan takana päätimme testata Windows-tukea. Onko se jo riittävän kypsä tuotantoympäristöihin?

Dockerin kaltaisista konttiratkaisuista on tullut suosittu ohjelmistokehityksen ja käyttöönoton trendi. Ne mahdollistavat sovellusten toimittamisen helposti ”minne tahansa” ilman huolta ympäristön määrityksistä. Kubernetes (eli k8s) auttaa hallitsemaan kontitettujen sovellusten elinkaarta tarjoamalla orkestrointikehyksen, johon kuuluvat esimerkiksi automaattinen skaalaus, kunnon tarkistus ja palautuminen.

Toinen ohjelmistokehityksen ajankohtainen trendi ovat mikropalvelut, joissa sovellukset jaetaan pienempiin, kevyisiin ja hajautettuihin (kontitettuihin) palveluihin. Koska kontit ovat lähtöisin Linuxista, Docker (ja siten myös k8s) tuki aluksi vain Linuxia. Halusimme tai emme, käytössä on kuitenkin yhä paljon Windows-kohtaisia sovelluksia, niin perinteisiä kuin uusiakin. Lisäksi mikropalveluarkkitehtuurissa osa palveluista saattaa edellyttää Windows-ympäristöä. Tämän vuoksi Microsoft teki yhteistyötä Docker Inc.:n kanssa tuodakseen Windows-kontit Windows Server 2016:n julkaisun yhteydessä.

Windows-konttien on edelleen toimittava Windows-hosteilla. Jos siis haluat hyödyntää k8s:n tehoa osittain tai kokonaan Windowsissa toimivien konttisovellusten hallinnassa, k8s-klusterissasi on oltava Windows-noodeja. Siksi perustettiin Windows Special Interest Group (SIG) tukemaan Windows-minionien (noodien) lisäämistä Kubernetes-klustereihin. Kubernetes 1.5:ssä Windows-tuki oli alpha-julkaisussa, ja tavoitteena oli beta-julkaisu Kubernetes 1.8:n ilmestyessä. Miljoonan dollarin kysymys on kuitenkin: onko se riittävän kypsä tuotantoympäristöihin?

Alpha-julkaisuun liittyy julkaisuilmoituksessa mainittuja rajoituksia. Ensinnäkin Windows ei tue verkkojen nimiavaruuksia, joten saman podin kontit eivät voi kommunikoida localhostin kautta. Tämä rajoittaa podin konttien määrän yhteen. Lisäksi DNS-toiminnallisuutta ei ollut toteutettu täysin, eikä UDP:tä tuettu kontin sisällä.

Alpha-julkaisun testaaminen AWS:ssä Kopsin avulla

K8S on Windows

Testasimme k8s:n Windows-tuen alpha-julkaisua Kopsilla luodussa klusterissa AWS:ssä. Kops helpottaa k8s-klusterin käyttöönottoa ja hallintaa AWS:ssä. Kops tukee Linux-pohjaisen klusterin luomista sekä masterille että minioneille, joten Windows-minionit on lisättävä klusteriin manuaalisesti noudattamalla k8s:n ohjetta. Ohje opastaa määrittämään verkon, rakentamaan kubelet- ja kube-proxy-binäärit Windowsille sekä käynnistämään ne. Kun Windows-minionit on onnistuneesti liitetty k8s-klusteriin, voit ohjata k8s-ajastinta sijoittamaan tietyt podit (konttien loogiset ryhmät) Windows-minioneille NodeSelectorin avulla.

Alpha-julkaisun käyttäminen Kopsin kanssa AWS:ssä tuo mukanaan useita haasteita, minkä vuoksi se ei sovellu hyvin tuotantokäyttöön:

  • k8s-klusterin pilviresurssien manuaalinen muokkaaminen, esimerkiksi Windows EC2 -instanssien käynnistäminen klusterin VPC:ssä, luo riippuvuuksia, joista klusterinhallintatyökalu, kuten Kops, ei ole tietoinen. Tämä voi vaikuttaa klusterinhallintatyökalun toimintaan. Esimerkiksi klusterin poistaminen Kopsilla epäonnistuu, jos olet lisännyt Windows-minioneja manuaalisesti, koska Kops ei tunne AWS:n pilviresurssien välisiä riippuvuuksia.

  • Virallisessa ohjeessa ehdotettu käyttöönottoprosessi on hauras, ja verkkoasetukset voivat mennä helposti sekaisin. Eikä siinä vielä kaikki: sinun on myös arvattava Pod CIDR -alue, jonka master varaa Windows-minionillesi ennen kuin se todella määritetään. Ei kovin mukavaa!

  • Koska Windows-tuki k8s:ssä on suhteellisen uusi, se kehittyy ja muuttuu edelleen. SIG-ryhmä ottaa esimerkiksi nyt käyttöön uuden tavan lisätä Windows-minioneja k8s-klusteriin. Se hyödyntää verkotuksessa OVN:ää. Vaikka tässä ohjeessa OVN huolehtii verkotuksesta, se sisältää silti useita vaiheita OVS/OVN:n käyttöönottoon ja määrittämiseen – ei vain Windows-minioneilla, vaan myös masterilla ja Linux-minioneilla. Siksi OVN-lähestymistapaa ei voi käyttää yhdessä Kopsin kaltaisten k8s-hallintatyökalujen kanssa.

  • Myös myöhemmin tänä vuonna julkaistava Windows Server 2017 tuo mukanaan parannuksia konttiverkotukseen, joiden luvataan parantavan Windows-tukea k8s-klustereissa.

Johtopäätös

Nykytilanteessa Windows-tuki k8s-klustereissa kehittyy, mutta se ei ole vielä valmis tuotantoympäristöihin – etenkään, jos haluat käyttää klusterinhallintatyökalua. Mitä siis tehdä, jos Kubernetes-klustereissa tarvitaan silti Windows-minioneja? Vaihtoehtoja on kaksi:

  1. Voit siirtää klusterisi Azure-pilveen ja hyödyntää sen hiljattain lisättyä Azure Container Service -ominaisuutta, jonka avulla voit ottaa käyttöön Kubernetes-klustereita Windows-minioneilla.

  2. Jos tarvitset Windows-minioneja vain täydentämään k8s-klusteriin käyttöönotettuja olemassa olevia sovelluksia, esimerkiksi Windows-slavejen hostaamiseen Jenkinsille, käynnistä Windows-instanssit (virtuaalikoneet) k8s-klusterien ulkopuolella erillisessä VPC:ssä. Anna sitten k8s-klusteriin käyttöönotettujen sovellusten käyttää näitä Windows-instansseja. Esittelemme tämän lähestymistavan tulevassa kirjoituksessa, jossa otamme Jenkins masterin käyttöön k8s-klusterissa ja Windows-slavet yhdistävät masteriin toisesta VPC:stä.

Kuluneen vuoden aikana Windows-tuki Dockerin ja k8s:n ympärillä on kehittynyt nopeasti, ja Microsoft kumppaneineen vaikuttaa olevan päättänyt viedä sitä vielä pidemmälle. Seuraamme tilannetta tulevien kuukausien aikana, kun Windows Server 2017 julkaistaan ja Windows-tuki k8s:ssä kypsyy.

  • Pilvi

Subscribe to our newsletter