GNU/Linux >> Znalost Linux >  >> Linux

Kompletní průvodce pro začátečníky nasazením clusteru Kubernetes na CentOS (a dalším Linuxu)

Doufám, že jste obeznámeni se základními pojmy Kubernetes, jako je uzel, služba, cluster, protože tyto věci zde nebudu vysvětlovat.

Toto je podrobný návod, který vám ukáže, jak nasadit cluster Kubernetes připravený pro produkci.

Výroba připravena? Ano, příklady používají ukázkovou doménu, takže pokud vlastníte doménu, můžete ji nakonfigurovat na veřejné infrastruktuře. Můžete jej také použít pro místní testování. Je to opravdu na vás.

V příkladech jsem použil CentOS Linux, ale měli byste být schopni používat jakékoli jiné distribuce Linuxu. Kromě instalačních příkazů by měly být ostatní kroky použitelné pro všechny.

Budu používat tento jednoduchý shluk jednoho hlavního/řídícího uzlu a dvou pracovních uzlů:

Tutoriál je rozdělen do dvou hlavních částí.

První část je v podstatě nezbytným předpokladem a zabývá se přípravou vašich strojů provedením následujících věcí:

  • Nakonfigurujte správně názvy hostitelů na všech hostitelích
  • Vypněte swap na všech uzlech
  • Přidat pravidla brány firewall
  • Konfigurace IPtables
  • Zakažte SELinux

Druhá část je skutečné nasazení clusteru Kubernetes a skládá se z následujících kroků:

  • Nakonfigurujte úložiště Kubernetes
  • Nainstalujte kubelet, kubeadm, kubectl a docker
  • Povolte a spusťte službu kubelet a docker
  • Povolit dokončování bash
  • Vytvořte cluster pomocí kubeadm
  • Nastavení sítě podu
  • Připojte se k Worker Nodes
  • Otestujte cluster vytvořením testovacího modulu

Část 1:Příprava vašich systémů na nasazení clusteru Kubernetes

Potřebujete 3 servery běžící na virtuálních počítačích nebo na holém kovu nebo na cloudové platformě jako Linode, DigitalOcean nebo Azure.

Mám spuštěné 3 CentOS VM s následujícími podrobnostmi:

  • Hlavní uzel Kubernetes – 172.42.42.230 kmaster-centos7.example.com/kmaster-centos7
  • pracovní uzel Kubernetes 1 – 172.42.42.231 kworker-centos71.example.com/kworker-centos71
  • pracovní uzel Kubernetes 2 – 172.42.42.232 kworker-centos72.example.com/kworker-centos72

Zkontrolujte prosím IP adresy svých počítačů a podle toho je změňte.

Krok 1. Správná konfigurace názvů hostitelů ve všech systémech

IP adresu a odpovídající informace o subdoméně můžete přidat změnou záznamů DNS vaší domény.

V případě, že nemáte přístup k DNS, aktualizujte soubor /etc/hosts na hlavním a pracovním uzlu o následující informace:

[[email protected] ~]# cat /etc/hosts
127.0.0.1       kmaster-centos7.example.com     kmaster-centos7
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.42.42.230 kmaster-centos7.example.com   kmaster-centos7
172.42.42.231 kworker-centos71.example.com  kworker-centos71
172.42.42.232 kworker-centos72.example.com  kworker-centos72
[[email protected] ~]#

Odešlete příkaz ping na pracovní uzly, abyste ověřili, že změny hostitelského souboru fungují správně.

Krok 2. Vypněte swap (z důvodu výkonu)

Plánovač Kubernetes určí nejlepší dostupný uzel, na který se mají nově vytvořené moduly nasadit. Pokud je na hostitelském systému povoleno odkládání paměti, může to vést k problémům s výkonem a stabilitou v Kubernetes.

Z tohoto důvodu Kubernetes vyžaduje, abyste zakázali swap na všech uzlech:

swapoff -a

Krok 3. Přidejte pravidla brány firewall

Uzly, kontejnery a pody musí být schopny komunikovat napříč clusterem, aby mohly plnit své funkce. Firewalld je v CentOS ve výchozím nastavení povolen, takže by bylo rozumné otevřít požadované porty.

Na hlavním uzlu potřebujete tyto porty:

  • 6443:Kubernetes API server:používá všichni
  • 2379–2380:rozhraní API klienta serveru etcd:používá kube-apiserver, etcd
  • 10250:Kubelet API:Používá Self, Control plane
  • 10251:plánovač kube:používá sám
  • 10252:kube-controller-manager:používá sám

Na pracovních uzlech jsou vyžadovány tyto porty:

  • 10250:Kubelet API:Používá Self, Control plane
  • 30000–32767:Služby NodePort:používají všichni

Příkaz firewall-cmd otevře port 6443 tímto způsobem:

firewall-cmd --permanent --add-port=6443/tcp

Na hlavním a pracovním uzlu použijte výše uvedený příkaz k otevření požadovaných portů, které byly zmíněny v této části.

Pro rozsah portů můžete nahradit číslo portu rozsahem jako firewall-cmd --permanent --add-port=2379-2380/tcp .

Jakmile přidáte nová pravidla brány firewall na každý počítač, znovu načtěte bránu firewall:

firewall-cmd --reload

Krok 4. Konfigurace iptables

Na hlavním a pracovním uzlu se ujistěte, že br_netfilter je načten modul jádra. To lze provést spuštěním lsmod | grep br_netfilter . Chcete-li jej načíst explicitně, zavolejte sudo modprobe br_netfilter .

Nastavte net.bridge.bridge-nf-call-iptables na „1“ ve vašem konfiguračním souboru sysctl. To zajišťuje, že pakety jsou správně zpracovávány tabulkami IP během filtrování a předávání portů.

[[email protected] ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF

Spusťte tento příkaz, aby se změny projevily:

sysctl --system

Krok 5. Zakažte SELinux (pro Red Hat a CentOS)

Základní kontejnery by byly vyžadovány pro přístup k hostitelskému souborovému systému. CentOS je dodáván s SELinux (security vylepšený Linux) povoleným v režimu vynucení. To může blokovat přístup k hostitelskému souborovému systému.

Můžete buď deaktivovat SELinux, nebo jej nastavit do permisivního režimu, který účinně deaktivuje jeho bezpečnostní funkce.

[[email protected] ~]# setenforce 0
[[email protected] ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
[[email protected] ~]#

Část 2:Nasazení Kubernetes Cluster

Nyní, když jste nakonfigurovali správná nastavení na vašem hlavním a pracovním uzlu, je čas zahájit nasazení clusteru.

Krok 1. Konfigurace úložiště Kubernetes

Balíčky Kubernetes nejsou dostupné z oficiálních úložišť CentOS 7. Tento krok je třeba provést na hlavním uzlu a na každém pracovním uzlu.

Zadejte následující a po přidání obsahu je ověřte.

[[email protected] ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Aktualizujte a ověřte, že je repo Kubernetes přidáno do seznamu úložišť:

[[email protected] ~]# yum update -y
[[email protected] ~]# yum repolist | grep -i kubernetes
!kubernetes                         Kubernetes                               570

Krok 2. Instalace kubelet, kubeadm, kubectl a Docker

kubelet, kubeadm, kubectl jsou vyžadovány tři základní balíčky spolu s modulem runtime kontejneru (což je zde docker), aby bylo možné používat Kubernetes.

Nainstalujte tyto balíčky na každý uzel:

yum install -y kubelet kubeadm kubectl docker

Krok 3. Povolení a spuštění služeb kubelet a docker

Nyní, když jste nainstalovali požadované balíčky, povolte (aby se spouštěl automaticky při každém spuštění) kubelet a docker na každém uzlu.

Povolit kubelet na každém uzlu:

[[email protected] ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

Povolit ukotvitelný panel na každém uzlu:

[[email protected] ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Měli byste také spustit tyto služby, aby mohly být okamžitě použity:


[[email protected] ~]# systemctl start kubelet
[[email protected] ~]# systemctl start docker.service

Krok 4. Povolte dokončování bash (pro snazší život s Kubernetes)

Povolte dokončení bash na všech uzlech, abyste nemuseli ručně zadávat všechny příkazy úplně. Karta to udělá za vás.

[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(kubeadm completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(docker completion bash)" >> ~/.bashrc

Krok 5. Vytvoření clusteru pomocí kubeadm

Inicializujte cluster provedením následujícího příkazu:

kubeadm init --apiserver-advertise-address=172.42.42.230 --pod-network-cidr=10.244.0.0/16

Poznámka: Vždy je dobré nastavit --apiserver-advertise-address konkrétně při spouštění clusteru Kubernetes pomocí kubeadm. IP adresa, na které bude API server inzerovat, že naslouchá. Pokud není nastaveno, použije se výchozí síťové rozhraní.

Totéž s --pod-network-cidr. Zadejte rozsah IP adres pro síť pod. Pokud je nastaveno, řídicí rovina automaticky přidělí CIDR pro každý uzel.

Další možnosti naleznete na tomto odkazu.

Na konci výstupu příkazu kube-init můžete vidět kroky ke spuštění clusteru:

...
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
  
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
    --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22
```

**Manage cluster as regular user:
**In the above kube-init command output you can clearly see that to start using your cluster, you need to run the following commands as a regular user:

```bash
[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[[email protected] ~]#

Tyto příkazy byste měli spouštět jeden po druhém, abyste spustili cluster Kubernetes:

[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config

Krok 6. Nastavení sítě podů

Síť pod je překryvná síť mezi pracovními uzly. Pomocí sítě podů spolu kontejnery na různých uzlech komunikují.

Existuje několik dostupných možností sítě Kubernetes. K instalaci síťového doplňku flanel pod použijte následující příkaz:

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
clusterrole.rbac.authorization.k8s.io/flannel created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[[email protected] ~]#

Zkontrolujte stav clusteru a ověřte, že hlavní uzel (řídicí rovina) je ve stavu připravenosti.

[[email protected] ~]# kubectl get nodes
NAME                          STATUS   ROLES    AGE   VERSION
kmaster-centos7.example.com   Ready    master   2m    v1.19.2

Zkontrolujte také všechny moduly běžící ve všech jmenných prostorech.

kubectl get pods --all-namespaces

Krok 7. Připojte pracovní uzly ke clusteru

Podívejte se na výstup, který jste získali v kroku 5, a zkopírujte doporučené příkazy. Spusťte jej na každém pracovním uzlu a připojte jej ke clusteru:

kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
>     --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22

Znovu zkontrolujte stav clusteru, abyste viděli, že všechny pracovní uzly se úspěšně připojily ke clusteru a jsou připraveny obsluhovat pracovní zátěže.

[[email protected] ~]# kubectl get nodes -o wide
NAME                           STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
kmaster-centos7.example.com    Ready    master   9m17s   v1.19.2   172.42.42.230   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos71.example.com   Ready    <none>   7m10s   v1.19.2   172.42.42.231   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos72.example.com   Ready    <none>   7m8s    v1.19.2   172.42.42.232   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1

Ověřte všechny pody běžící ve všech jmenných prostorech:

kubectl get pods -o wide --all-namespaces

Krok 8. Otestujte cluster vytvořením testovacího modulu

Nyní, když máte vše na svém místě, je čas cluster otestovat. Vytvořte pod:

[[email protected] ~]# kubectl run mypod1 --image=httpd --namespace=default --port=80 --labels app=fronend
pod/mypod1 created

Nyní ověřte stav pod:

[[email protected] ~]# kubectl get pods  -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE                           NOMINATED NODE   READINESS GATES
mypod1   1/1     Running   0          29s   10.244.1.2   kworker-centos71.example.com   <none>           <none>
[[email protected] ~]#

Nyní máte plně funkční cluster Kubernetes spuštěný a spuštěný na CentOS!

Doufám, že se vám návod líbí. Pokud máte dotazy nebo návrhy, zanechte prosím komentář a já vám rád pomůžu.

A staňte se členem Linux Handbook, abyste si mohli užívat exkluzivní obsah pouze pro členy.


Linux
  1. Průvodce pro začátečníky oprávněními pro Linux

  2. Průvodce pro začátečníky firewallem v Linuxu

  3. Kompletní průvodce LVM v Linuxu pro začátečníky

  1. Kompletní průvodce používáním balíčků Snap v Ubuntu a dalších distribucích Linuxu

  2. Co je Kubernetes? Kompletní průvodce

  3. Kompletní průvodce Manjaro 17.05 (GNOME Edition), jeho funkce a kroky instalace

  1. Jak používat příkazy Najít a najít v Linuxu:Průvodce pro začátečníky

  2. Linux Commands - Kompletní průvodce

  3. Kompletní průvodce instalací Linuxu na Chromebook