sql >> Databáze >  >> RDS >> Database

Jak nainstalovat Kubernetes pomocí Kubeadm

Kubernetes byl představen v dřívějším článku „Začínáme s Kubernetes na Amazon Web Services (AWS). O Kubernetes se také hovořilo v jiném článku „Použití Kubernetes (K8s) na IBM Bluemix. Kubernetes lze pro účely vývoje nainstalovat na holý kov na téměř jakýkoli operační systém včetně Fedory, CentOS, Ubuntu a CoreOS.

Problém

Instalace Kubernetes na holý kov zahrnuje spuštění několika příkazů pro nastavení hlavního uzlu, pracovních uzlů, sítě podů atd.

Řešení

Kubernetes 1.4 představuje nový nástroj s názvem kubeadm pro bootstraping clusteru Kubernetes. kubeadm bootstraps cluster Kubernetes se dvěma příkazy. Po instalaci Docker, kubectl a kubelet lze hlavní uzel spustit pomocí kubeadm init a pracovní uzly přidané pomocí kubeadm join .

V tomto článku použijeme následující postup k instalaci a zavedení clusteru Kubernetes a následnému testování clusteru:

  1. Spusťte tři nové instance Ubuntu na Amazon EC2.
  2. Na všechny instance Ubuntu nainstalujte Docker, kubeadm, kubectl a kubelet.
  3. Z jedné z instancí Ubuntu inicializujte Kubernetes cluster Master pomocí následujícího příkazu:
    kubeadm init
  4. Použijte zásady sítě Calico Pod kubeadm/calico.yaml .
  5. Připojte se k dalším dvěma instancím Ubuntu (uzlům) s master pomocí kubeadm join --token= .
  6. Na hlavním serveru jsou tři uzly uvedeny s „kubectl get nodes“.
  7. Spusťte aplikaci na hlavním serveru:
    kubectl -s http://localhost:8080 run nginx
       --image=nginx
       --replicas=3 --port=80
    
  8. Seznam podů:
    kubectl get pods -o wide
  9. Odinstalujte cluster Kubernetes.
    kubeadm reset

Tento článek má následující sekce:

  • Nastavení prostředí
  • Instalace Docker, kubeadm, kubectl a kubelet na každého hostitele
  • Inicializace hlavního serveru
  • Instalace sítě Calico Pod Network
  • Připojování uzlů ke klastru
  • Instalace ukázkové aplikace
  • Odinstalace clusteru
  • Omezení
  • Další vývoj v kubeadm
  • Závěr

Nastavení prostředí

kubeadm Tento nástroj vyžaduje následující počítače, na kterých běží jeden z Ubuntu 16.04+, HypriotOS v1.0.1+ nebo CentOS 7.

  • Jeden počítač pro hlavní uzel
  • Jeden nebo více počítačů pro pracovní uzly

Na každém z počítačů je vyžadováno alespoň 1 GB paměti RAM. Použili jsme tři stroje Ubuntu běžící na Amazon EC2 k zavedení clusteru s jedním hlavním uzlem a dvěma pracovními uzly. Tři počítače Ubuntu jsou zobrazeny na obrázku 1.


Obrázek 1: Stroje Ubuntu

Instalace Docker, kubeadm, kubectl a kubelet na každého hostitele

V této části nainstalujeme Docker, kubelet, kubectl a kubeadm na každý ze tří počítačů. Nainstalované součásti jsou popsány v tabulce 1.

Komponenta Popis
Docker Běh kontejneru. Verze 1.11.2 je doporučená a v1.10.3 a v1.12.1 jsou také v pořádku. Vyžadováno na všech počítačích v clusteru.
kubelet Základní komponenta Kubernetes, která běží na všech počítačích v clusteru. Spouští kontejnery a moduly. Vyžadováno na všech počítačích v clusteru.
kubectl Nástroj příkazového řádku pro správu clusteru. Vyžadováno pouze na hlavním uzlu, ale užitečné, pokud je nainstalováno na všech uzlech.
kubeadm Nástroj pro zavedení clusteru. Vyžadováno na všech počítačích v clusteru.

Tabulka 1: Komponenty k instalaci

Získejte veřejnou IP adresu každého ze tří počítačů a přihlaste se pomocí SSH:

ssh -i "docker.pem" [email protected]
ssh -i "docker.pem" [email protected]
ssh -i "docker.pem" [email protected]

Příkazy k instalaci binárních souborů musí být spuštěny jako root; proto nastavte uživatele na root.

sudo su -

Na každém z počítačů spusťte následující příkazy:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg
   | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

První příkaz stáhne požadované balíčky pro Kubernetes, jak ukazuje výstup na obrázku 2.


Obrázek 2: Stahování balíčků pro Kubernetes

Příkaz 2 stáhne seznamy balíčků z repozitářů a aktualizuje je nejnovějšími verzemi balíčků.

apt-get update

Výstup je znázorněn na obrázku 3.


Obrázek 3: Aktualizace balíčků úložiště

Dále nainstalujte Docker:

# Install docker if you don't have it already.
apt-get install -y docker.io

Docker se nainstaluje, jak je znázorněno na výstupu příkazu na obrázku 4.


Obrázek 4: Instalace Docker

A následně nainstalujte kubelet (základní komponenta Kubernetes), kubeadm (bootstrapping nástroj), kubectl (nástroj pro správu clusteru) a kubernetes-cni (síťový plugin):

apt-get install -y kubelet kubeadm kubectl kubernetes-cni

Výstup z předchozích příkazů je znázorněn na obrázku 5.


Obrázek 5: Instalace kubelet, kubeadm, kubectln a kubernetes-cni

Inicializace hlavního serveru

Dále inicializujte hlavní server, na kterém běží databáze etcd a server API. Kubelet spustí Pods pro spuštění těchto komponent. Spusťte následující příkaz, který automaticky zjistí adresy IP:

kubeadm init

Jak je znázorněno na výstupu příkazu, nejprve se provedou některé předletové kontroly k ověření stavu systému. Následně je vygenerován hlavní/tokenový token, který má být použit jako vzájemný ověřovací klíč pro pracovní uzly, které se chtějí připojit ke clusteru. Dále se vygeneruje klíč a certifikát certifikační autority podepsaný svým držitelem, který poskytne identitu každému z uzlů v klastru pro komunikaci s klienty. Pro API server je vytvořen klíč a certifikát API serveru pro komunikaci s klienty. A util/kubeconfig je vytvořen soubor pro připojení kubelet k serveru API a dalšímu util/kubeconfig je vytvořen soubor pro administraci. Následně je vytvořena konfigurace API klienta. Výstup z kubeadm init příkaz je znázorněn na obrázku 6.


Obrázek 6: Spuštění kubeadm init

Všechny součásti řídicí roviny jsou připraveny. První uzel je připraven a je provedeno testovací nasazení. Také se vytvoří základní doplňkové komponenty kube-discovery, kube-proxy a kube-dns, jak je znázorněno na výstupu příkazu na obrázku 7. Hlavní server Kubernetes se úspěšně inicializuje. Je vygenerován příkaz s následující syntaxí; musí být spuštěn na počítačích (uzlech), které se mají připojit ke clusteru.

kubeadm join -token=<token> <IP Address of the master node>

Předchozí příkaz musí být zkopírován a uchován pro následné použití na pracovních uzlech.


Obrázek 7: Hlavní inicializace Kubernetes

Ve výchozím nastavení nejsou hlavní uzly plánovatelné a lze je naplánovat pomocí „vyhrazené“ poskvrny. Hlavní uzel lze nastavit jako plánovatelný pomocí následujícího příkazu:

kubectl taint nodes --all dedicated-

kubeadm příkaz podporuje některé další možnosti (viz Tabulka 2), které jsme nemuseli použít, ale bylo možné je použít k přepsání výchozího příkazu.

Parametr příkazu Popis Výchozí
--skip-preflight-checks Přeskočí kontroly před výstupem Provádějí se předletové kontroly
--use-kubernetes-version Nastaví verzi Kubernetes k použití v1.5.1
--api-advertise-addresses Příkaz kubeadm init auto detekuje a používá IP adresu výchozího síťového rozhraní a používá ji ke generování certifikátů pro server API. Tento konfigurační parametr lze použít k přepsání výchozího nastavení jednou nebo více IP adresami, na kterých má být server API ověřen. Automatická detekce
--api-external-dns-names Tento konfigurační parametr lze použít k přepsání výchozího síťového rozhraní jedním nebo více názvy hostitelů, na kterých má být server API ověřen. Musí být použit pouze jeden z IP adres nebo externích DNS jmen.
--cloud-provider Určuje poskytovatele cloudu.

Cloud-manager podporuje „aws“, „azure“, „cloudstack“, „gce“, „mesos“, „openstack“, „ovirt“, „rackspace“ a „vsphere“. Konfigurace poskytovatele cloudu může být poskytnuta v souboru /etc/kubernetes/cloud-config. Použití cloudového poskytovatele má také výhodu v používání trvalých svazků a vyrovnávání zátěže.

Žádná automatická detekce poskytovatele cloudu
--pod-network-cidr Přiděluje rozsahy sítě (CIDR) každému uzlu a je užitečný pro určitá síťová řešení, včetně poskytovatelů Flannel a Cloud.
--service-cidr Přepíše podsíť, kterou Kubernetes používá k přidělování IP adres podům. Soubor /etc/systemd/system/kubelet.service.d/10-kubeadm.conf musí být také upraven. 10.96.0.0/12
--service-dns-domain Přepíše příponu názvu DNS pro přiřazování služeb názvům DNS; má formát ..svc.cluster.local . Soubor /etc/systemd/system/kubelet.service.d/10-kubeadm.conf musí být také upraven. cluster.local
--token Udává token, který se má použít pro vzájemnou autentizaci mezi hlavním serverem a uzly připojujícími se ke clusteru. Automaticky generované

Tabulka 2: Možnosti příkazu Kubeadm

Instalace sítě Calico Pod Network

Aby mohly Pody mezi sebou komunikovat, musí být nainstalován síťový doplněk Pod. Calico poskytuje instalační konfiguraci hostovanou na kubeadm ve formě ConfigMap na http://docs.projectcalico.org/master/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml, kterou v této části použijeme k instalaci sítě Pod. Spuštěním následujícího příkazu na hlavním uzlu nainstalujte síť pod:

kubectl apply -f
   http://docs.projectcalico.org/master/getting-started/
   kubernetes/installation/hosted/kubeadm/calico.yaml

Případně si stáhněte calico.yaml a zkopírujte do hlavního uzlu:

scp -i "docker.pem" calico.yaml [email protected]:~

Následně spusťte následující příkaz:

kubectl apply -f calico.yaml

Calico a jeden uzel etcd cluster se nainstalují, jak je znázorněno na obrázku 8.


Obrázek 8: Instalace Calico Policy

Následně vypište všechny pody ve všech jmenných prostorech Kubernetes.

kubectl get pods --all-namespaces

kube-dns Modul musí být spuštěný, jak je uvedeno na obrázku 9.


Obrázek 9: Výpis podů ve všech jmenných prostorech

Připojování uzlů ke klastru

V této části připojíme pracovní uzly ke clusteru pomocí kubeadm join příkaz, který má následující syntaxi:

kubeadm join --token=<token> <master-ip>

Volitelně připojení kubeadm příkaz lze spustit pomocí --skip-preflight-checks možnost přeskočit předběžné ověření.

připojení ke kubeadm příkaz používá dodaný token ke komunikaci se serverem API a získává kořenový certifikát CA a vytváří pár lokálních klíčů. Následně je na API server odeslán požadavek na podpis certifikátu (CSR) k podepsání a místní kubelet je nakonfigurován pro připojení k API serveru.

Spusťte připojení ke kubeadm příkaz zkopírovaný z výstupu kubeadm init na každém z počítačů Ubuntu, které se mají připojit ke clusteru.

Nejprve se SSH přihlaste k instanci/instancím Ubuntu:

ssh -i "docker.pem" [email protected]

a

ssh -i "docker.pem" [email protected]

Následně spusťte kubeadm join příkaz. Nejprve se provedou některé předletové kontroly. Poskytnutý token je ověřen. Dále se používá zjišťování uzlů. Je vytvořen klient pro zjišťování informací o clusteru a informace jsou požadovány ze serveru API. Je přijat objekt informací o clusteru a podpis je ověřen pomocí daného tokenu. Informační podpis a obsah klastru jsou shledány platnými a zjišťování uzlu je dokončeno. Následně se provede bootstrapping uzlů, ve kterém jsou pro navázání spojení použity koncové body API https://10.0.0.129:6443. Následně je pomocí klienta API vytvořen požadavek na podepsání certifikátu (csr), aby se získal jedinečný certifikát pro uzel. Jakmile je ze serveru API přijat podepsaný certifikát, vygeneruje se konfigurační soubor kubelet. Zpráva „Node join Complete“ uvedená na obrázku 10 označuje, že se uzel připojil ke clusteru.


Obrázek 10: Připojení uzlu ke clusteru

Podobně spusťte stejný příkaz na druhém počítači Ubuntu. Druhý uzel se také připojí ke shluku, jak ukazuje výstup na obrázku 11.


Obrázek 11: Připojení druhého uzlu ke clusteru

Na hlavním uzlu spusťte následující příkaz pro zobrazení uzlů:

kubectl get nodes

Hlavní uzel a dva pracovní uzly by měly být uvedeny, jak je znázorněno na obrázku 12.


Obrázek 12: Výpis uzlů clusteru Kubernetes

Instalace ukázkové aplikace

Dále cluster otestujeme. Spuštěním následujícího příkazu spusťte nginx cluster podů sestávající ze tří replik:

kubectl -s http://localhost:8080 run nginx
   --image=nginx
   --replicas=3 --port=80

Seznam nasazení:

kubectl get deployments

Seznam modulů v celém clusteru:

kubectl get pods -o wide

Vystavte nasazení jako službu typu LoadBalancer :

kubectl expose deployment nginx --port=80 --type=LoadBalancer

Seznam služeb:

kubectl get services

Výstup z předchozích příkazů označuje nginx bylo vytvořeno nasazení a tři moduly běží napříč dvěma pracovními uzly v clusteru. Vytvoří se také služba s názvem „nginx“, jak je znázorněno na obrázku 13.


Obrázek 13: Spuštění clusteru nginx Pod

Zkopírujte IP clusteru služby. Spusťte příkaz curl pro vyvolání služby:

curl 10.0.0.99

Označení HTML ze služby získá výstup, jak je znázorněno na obrázku 14.


Obrázek 14: Vyvolání služby nginx

Odinstalace clusteru

Chcete-li odinstalovat cluster nainstalovaný kubeadm, spusťte následující příkaz:

kubeadm reset

Cluster se odinstaluje, jak je znázorněno na obrázku 15.


Obrázek 15: Odinstalace/resetování clusteru Kubernetes

Omezení

kubeadm má několik omezení a doporučuje se pouze pro vývojářské použití. Omezení kubeadm jsou následující;

  • Podporováno je pouze několik OS:Ubuntu 16.04+, CentOS 7, HypriotOS v1.0.1+.
  • Nevhodné pro produkční použití.
  • Integrace poskytovatelů cloudu je experimentální.
  • Vytvoří se klastr pouze s jedním hlavním serverem s jednou databází etcd. Vysoká dostupnost není podporována, což znamená, že hlavní server je jediným bodem selhání (SPOF).
  • Funkce HostPort a HostIP nejsou podporovány.
  • Některé další známé problémy při použití kubeadm s RHEL/CentOS 7 a VirtualBox.

Další vývoj v kubeadm

kubeadm je ve verzi alpha v Kubernetes v 1.5 a je v beta verzi od Kubernetes 1.6. Drobné opravy a vylepšení pokračují v kubeadm s každou novou verzí Kubernetes:

  • S Kubernetes 1.7 se při upgradu z verze 1.6 na verzi 1.7 přepisují úpravy interních prostředků clusteru nainstalované pomocí kubeadm.
  • V Kubernetes 1.8, výchozí token Bootstrap vytvořený pomocí kubeadm init se stane neplatným a bude odstraněn po 24 hodinách od vytvoření, aby se omezilo vystavení cenného pověření. připojení ke kubeadm příkaz deleguje bootstrapping TLS na samotný kubelet namísto reimplementace procesu. Bootstrap KubeConfig soubor je zapsán do /etc/kubernetes/bootstrap-kubelet-conf s připojit se ke kubeadm .

Závěr

V tomto článku jsme použili funkci nástroje kubeadm dostupnou od Kubernetes v1.4 k zavedení clusteru Kubernetes. Nejprve se nainstalují požadované binární soubory pro Docker, kubectl, kubelet a kubeadm. Následně kubeadm init příkaz se používá k inicializaci hlavního uzlu v clusteru. Nakonec připojení ke kubeadm příkaz se používá ke spojení pracovních uzlů s clusterem. Ukázka nginx je spuštěna aplikace pro testování clusteru.


  1. Jak vypočítat medián v PostgreSQL

  2. Vytváření jednoduché webové aplikace s Bottle, SQLAlchemy a Twitter API

  3. Jak vytvořit databázi v SQL?

  4. Nejlepší užitečné dotazy AWR pro upgrade R12.2/R12.1