Nová verze Kubernetes je venku, takže jsme tu s dalším článkem Kubernetes. S Kubernetes 1.5 je kubeadm stále ve verzi alfa a nedoporučuje se jej používat v produkci, protože stále nepodporuje nástroj pro vyrovnávání zatížení. Chystáme se nainstalovat známý online obchod s ponožkami jako demo a k odhalení služby použijeme nodeport.
Instalace Kubernetes 1.5 na všechny uzly
Pojďme přidat úložiště kubernetes pro CentOS:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetesbaseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0EOF
Po přidání repo musíme SElinux vypnout, protože si s kubernetes moc dobře nehraje. Chcete-li jej dočasně vypnout, zadejte
setenforce 0
Aby přetrvával i po restartu, použijte nano k úpravě konfiguračního souboru SElinux takto:
nano /etc/selinux/config
a ujistěte se, že je linka SELINUX nastavena na povolenou nebo zakázanou:
SELINUX=disabled
Uložte soubor a můžeme pokračovat v instalaci požadovaných balíčků.
yum install docker kubelet kubeadm kubectl kubernetes-cni
Chcete-li povolit automatické spouštění dockeru při spouštění, spusťte tento příkaz:
systemctl enable docker
A chcete-li jej spustit hned, spusťte následující.
systemctl start docker
Dále udělejme totéž pro kubelet
systemctl enable kubelet
systemctl start kubelet
Nastavení clusteru
První věc, kterou musíme udělat, je rozhodnout o masteru našeho nového clusteru. Pokud jsou všechny uzly nastaveny tak, jak je uvedeno výše, spustíme náš určený hlavní uzel následujícím příkazem.
kubeadm init
Všimněte si, že tento příkaz nemůžete spustit dvakrát, před druhým spuštěním budete muset cluster zrušit. Výstup bude podobný tomuto:
[root@centos-01 kubernetes]# kubeadm init
[kubeadm] WARNING: kubeadm is in alpha, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] WARNING: firewalld is active, please ensure ports [6443 9898 10250] are open or your cluster may not function correctly
[init] Using Kubernetes version: v1.5.1
[tokens] Generated token: "9a6b48.b4011ffeeb237381"
[certificates] Generated Certificate Authority key and certificate.
[certificates] Generated API Server key and certificate
[certificates] Generated Service Account signing keys
[certificates] Created keys and certificates in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 105.821991 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node is ready after 4.505809 seconds
[apiclient] Creating a test deployment
[apiclient] Test deployment succeeded
[token-discovery] Created the kube-discovery deployment, waiting for it to become ready
[token-discovery] kube-discovery is ready after 68.003359 seconds
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns
Your Kubernetes master has initialized successfully!
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node:
kubeadm join --token=9a6b48.b4011ffeeb237381 45.55.128.42
Instalace sítě pod a přidání uzlů do clusteru
Ve výše uvedené části jsme inicializovali cluster master a v posledním řádku jsme dostali příkaz s tokenem, který použijeme k přidání uzlů. Ale než to uděláme, musíme nainstalovat síť pod.
kubectl apply -f https://git.io/weave-kube
Existuje mnoho způsobů, jak mít síť podů, ale výše uvedený je možná ten nejjednodušší. Používá Container Network Interface nebo CNI, což je navrhovaný standard pro síťové kontejnery v Linuxu.
Dále můžeme přidat uzly do clusteru spuštěním tohoto příkazu na všech uzlech
kubeadm join --token=bb6fc2.be0345f5b02a32a0 45.55.128.42
Token je vyčištěn, takže jste nemohli přidávat uzly do mého clusteru. Dále umožňuje, aby pody běžely na hlavním a ne pouze na uzlech.
kubectl taint nodes --all dedicated-
Poté můžeme zkontrolovat uzly a zjistit, zda jsou všechny online.
kubectl get nodes
Příklad instalace mikroslužeb
Existuje jednoduchý příklad mikroslužeb, který použijeme k testování našeho clusteru. Je to online obchod s ponožkami.
Nejprve přidáme jmenný prostor sock shop
kubectl create namespace sock-shop
A pak vytvoříme službu
kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
Poté musíme nějakou dobu počkat, než se vytvoří kontejnery, a pak se můžeme pokusit navštívit nový web. Abychom jej mohli navštívit, musíme znát jeho adresu. Pojďme prozkoumat službu
kubectl describe svc front-end -n sock-shop
Poskytne vám výstup podobný tomuto
Name: front-end
Namespace: sock-shop
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 10.104.11.202
Port: <unset> 80/TCP
NodePort: <unset> 31500/TCP
Endpoints: 10.32.0.4:8079
Session Affinity: None
No events.
Tučný řádek je zvýrazněn mnou, protože potřebujeme číslo portu, který služba používá. Potřebujeme zkombinovat číslo portu s adresou jednoho z našich uzlů a dostaneme se na web.
Závěr
Úspěšně jsme tedy nastavili cluster Kubernetes 1.5 s kubeadm na CentOS 7. V našem případě se jedná o cluster se třemi uzly, ale kubeadm vám umožňuje snadno škálovat cluster přidáním nových uzlů. Ujistěte se, že váš token bude soukromý, protože s tokenem a veřejnou IP může kdokoli přidávat uzly do vašeho clusteru. Tímto tento článek končíme, děkujeme za přečtení a přejeme hezký den.