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.