‫Ik zal eerlijk zijn.
‫Toen ik Kubernetes YAML voor het eerst zag, was
‫ik echt geïntimideerd.
‫Het leek veel complexer dan het Compose-formaat.
‫Dat is niet voor niets.
‫Het voegt tonnen flexibiliteit toe, en nog veel meer dingen
‫die je ermee kunt doen. Maar dat heeft een prijs.
‫Dat is de drempel over om de basis te leren en deze
‫bestanden te maken. Toen je voor het eerst
‫naar deze bestanden begon te kijken, kwam er zoveel bij kijken dat ik niet eens zeker wist
‫wat er aan de hand was toen ik deze bestanden voor het eerst vasthield.
‫Ik begrijp het helemaal als je je een
‫beetje in de war voelt terwijl we er doorheen
‫gaan, probeer deze video's gewoon opnieuw te bekijken, want ik ga proberen dit
‫op te splitsen op een manier die volgens mij het beste is
‫om Kubernetes YAML te leren.
‫Ten eerste kunnen we dit technisch in JSON schrijven,
‫maar YAML is meestal gemakkelijker voor mensen om
‫te manipuleren en te lezen, en
‫JSON is beter voor computers.
‫Wat er op de achtergrond gebeurt, is dat de standaard voor ons mensen
‫is om de YAML te schrijven en dat vervolgens om
‫te zetten in JSON. Technisch gezien zou je de JSON
‫kunnen schrijven, maar de standaard met Kubernetes voor mensen
‫om te schrijven is YAML.
‫Zoals ik al eerder zei, je kunt deze
‫bestanden mixen of matchen. Je kunt veel verschillende bronnen in een enkel bestand hebben
‫en dan het tegenovergestelde doen van dat waar je een
‫enkel bestand per bron hebt.
‫Maakt niet echt uit. Het is aan jou.
‫De opdrachten werken op dezelfde manier.
‫We noemen dit manifesten.
‫De volledige beschrijving van een resource
‫is een manifest en dat manifest heeft vereisten.
‫Je zult die vereisten zien als voor root-sleutels in
‫het YAML-bestand.
‫Root betekent dat ze helemaal aan het begin van de regel staan.
‫Dat begint bij de API-versie.
‫Er is soort.
‫Er zijn metagegevens. En er zijn specificaties.
‫Je moet die dus in elk bestand zien om deze
‫bronnen te laten werken. En laten we eens kijken naar enkele
‫snelle voorbeelden vanaf de opdrachtregel.
‫Als u zich in uw Docker Mastery-repo bevindt, ziet u een
‫k8s-yaml-map waar ik enkele van deze
‫voorbeelden hier heb geplaatst.
‫Als je die map niet ziet, moet je misschien een
‫git-pull doen om de laatste updates voor de
‫repo te krijgen. Als je een aantal wijzigingen hebt aangebracht in de repo van
‫het volgen van deze cursus, is dat prima.
‫Je kunt ofwel een git-stash gebruiken om die wijzigingen tijdelijk weg te
‫bergen en dan de git-pull doen.
‫Of u kunt het gewoon naar een
‫andere map kopiëren. Kloon het gewoon
‫op een andere locatie voor dit deel van de cursus,
‫omdat dit Kubernetes-spul nieuwer is dan het originele materiaal.
‫Dus sommigen van jullie komen hier misschien later op terug
‫en hebben niet de laatste updates.
‫Het eerste voorbeeld hier is slechts een eenvoudige pod.
‫Dit is waarschijnlijk de eenvoudigste YAML die we kunnen maken.
‫Zoals ik eerder in deze cursus al zei, je zult
‫niet zoveel pods maken, want dat is gewoon creëren
‫als een docker-run.
‫Dat is niet echt iets wat je gaat willen doen.
‫Het heeft geen rollende updates. Het
‫is geen implementatie, toch. Als u ooit problemen moet oplossen,
‫of als u gewoon iets eenvoudigs lokaal moet uitvoeren, kunt u dit doen.
‫U zult merken dat het dezelfde vier vereisten heeft.
‫De API-versie, het soort, de metadata
‫en de specificatie.
‫Welke dat zijn, bespreken we in de volgende lezing.
‫Voor nu wil ik dat je ziet
‫hoe dit soort pod is. Dan heeft
‫metadata het attribuut name.
‫Die sleutel is de vereiste sleutel van
‫alle YAML-objecten.
‫Ze moeten allemaal die naam hebben, net zoals docker run een
‫naam moet hebben. Alle Docker-objecten moeten een naam hebben.
‫Hetzelfde met Kubernetes. De specificatie hier is het vlees.
‫Daar komen we zo op. Laten we nog eens kijken
‫naar een implementatie.
‫Hier is een enkele implementatie
‫met twee replica's van dezelfde container. Het is waarschijnlijk twee keer
‫zo groot, maar met een goede reden.
‫Want als je erover nadenkt, maak
‫je die implementatiebron en dan is dat
‫de ReplicaSet. Dan is dat het maken van de pods.
‫Het spec-gebied wordt
‫een beetje ingewikkelder omdat het meer dingen
‫doet die we moeten definiëren. Je zult ook merken dat onze
‫API-versie iets anders is, omdat dat
‫gerelateerd is aan het soort, en het soort in dit geval
‫is een implementatie. Het is zo'n middel dat middelen betekent.
‫En de API-versie is de versie van de
‫API voor dat soort. De rest hier is hopelijk een
‫beetje logisch voor je.
‫Het lijkt een beetje op Compose-bestanden, maar het
‫formaat is duidelijk anders.
‫Dus ik begrijp dat het verwarrend kan zijn, vooral als
‫je heen en weer werkt tussen Compose en Kubernetes.
‫In dit voorbeeld heb ik de service
‫en de implementatie,
‫voor hetzelfde type implementatie, gecombineerd in één bestand.
‫Dit is hoe je meerdere manifesten in een enkel bestand zou hebben terwijl je de
‫drie streepjes gebruikt om die twee
‫uit elkaar te halen. Dat is
‫een soort YAML-ding dat Kubernetes zal vertellen dat dit
‫object uniek is. Dan is het
‫volgende deel een nieuw object. Je kunt er zoveel hebben
‫als je wilt totdat het zo onhandelbaar wordt dat je het gewoon moet uitbreken.
‫U zult met dit eerste deel zien dat de API-versie
‫V1 van het soort serviceresource is.
‫Het woord soort hier zou waarschijnlijk gewoon hulpbron kunnen zijn, maar
‫ze hebben het vriendelijk genoemd.
‫Metadata hier weer. Ik moet een naam hebben.
‫De specificatie en dat zullen totaal anders zijn op basis van de
‫bron die u aan het maken bent.
‫Dan een soortgelijke implementatie als wat we eerder hadden, in
‫dit geval heb ik drie replica's en het heeft een
‫iets andere naam, maar verder is het
‫dezelfde Nginx.
‫Alleen al door daar naar te kijken, denk je, wauw. Ik heb sjablonen
‫nodig die ik ga opslaan, dus ik weet hoe ik moet
‫beginnen, want dit lijkt behoorlijk ingewikkeld.
‫Er is geen enkele pagina met documenten
‫die dit allemaal beschrijft voor alle verschillende tientallen en
‫tientallen brontypen, en hoe ze allemaal moeten worden ingesteld.
‫Dat is helaas iets dat we kregen met Compose
‫waar het een mooie single was, hoewel lang.
‫webpagina op de Docker-documenten voor het
‫volledige Compose-formaat. In dit geval krijgen we
‫dat niet met Kubernetes, simpelweg omdat er te veel complexiteit is,
‫en het is niet allemaal op één plek.
‫Het is niet eens één app. Je kunt eigenlijk meer resourcetypes toevoegen door
‫meer dingen toe te voegen die CRD's worden genoemd, waar we
‫het later over zullen hebben.
‫Daar kunnen we op ingaan. Dat betekent in feite dat
‫u Kubernetes kunt uitbreiden met meer resourcetypen.
‫Meer dingen van derden, die zelfs meer opties aan
‫deze YAML zouden toevoegen. Dat is uniek voor Kubernetes.
‫Swarm en Docker laten dat niet toe.
‫Hun indeling is zo ingesteld dat deze behoorlijk
‫uitbreidbaar is, afhankelijk van wat er in uw cluster is geïnstalleerd.