Как да

Инсталирайте Kubernetes Cluster на CentOS 7 с kubeadm

Инсталирайте Kubernetes Cluster на CentOS 7 с kubeadm

Това ръководство ще ви научи как да разположите минимално жизнеспособния клъстер Kubernetes на CentOS 7 с помощта на инструмента kubeadm. Kubeadm е инструмент за команден ред, създаден, за да помогне на потребителите да заредят клъстер Kubernetes, който отговаря на най-добрите практики. Този инструмент поддържа функции за управление на жизнения цикъл на клъстера, като маркери за зареждане и надстройки на клъстера.

За инсталация на Debian: Внедрете Kubernetes Cluster на Debian 10 с Kubespray

Следващите раздели ще обсъдят подробно процеса на разполагане на минимален клъстер Kubernetes на сървъри CentOS 7. Тази инсталация е за единична контролна равнина клъстер. Имаме други ръководства за разполагане на високодостъпен клъстер Kubernetes с RKE и Kubespray.

Стъпка 1: Подгответе сървърите Kubernetes

Минималните сървърни изисквания за сървърите, използвани в клъстера, са:

Тъй като тази настройка е предназначена за целите на разработката, имам сървър с подробности по-долу

Тип сървърИме на хост на сървъраСпецификации
Учителюk8s-master01.computingforgeeks.com4GB RAM, 2vcpus
Работникk8s-worker01.computingforgeeks.com4GB RAM, 2vcpus
Работникk8s-worker02.computingforgeeks.com4GB RAM, 2vcpus

Влезте във всички сървъри и актуализирайте операционната система.

sudo yum -y актуализация && sudo systemctl рестартиране

Стъпка 2: Инсталирайте kubelet, kubeadm и kubectl

След като сървърите се рестартират, добавете хранилището Kubernetes за CentOS 7 към всички сървъри.

sudo tee / etc / yum.репо сделки.г / кубернети.репо<

След това инсталирайте необходимите пакети.

sudo yum -y инсталиране epel-release vim git curl wget kubelet kubeadm kubectl --disableexcludes = kubernetes

Потвърдете инсталацията, като проверите версията на kubectl.

$ kubectl версия - клиентска версия на клиента: версия.Информация Основно: "1", второстепенно: "18", GitVersion: "v1.18.3 ", GitCommit:" 2e7996e3e2712684bc73f0dec0200d64eec7fe40 ", GitTreeState:" clean ", BuildDate:" 2020-05-20T12: 52: 00Z ", GoVersion:" go1.13.9 ", Компилатор:" gc ", Платформа:" linux / amd64 "

Стъпка 3: Деактивирайте SELinux и Swap

Ако имате SELinux в режим на налагане, изключете го или използвайте Permissive mode.

sudo setenforce 0 sudo sed -i 's / ^ SELINUX =.* / SELINUX = разрешително / g '/ etc / selinux / config

Изключете суап.

sudo sed -i '/ swap / s / ^ \ (.* \) $ / # \ 1 / g '/ etc / fstab sudo swapoff -a

Конфигурирайте sysctl.

sudo modprobe наслагване sudo modprobe br_netfilter sudo tee / etc / sysctl.г / кубернети.конф<

Стъпка 4: Инсталирайте изпълнението на контейнера

За да стартира контейнери в Pods, Kubernetes използва време на изпълнение на контейнера. Поддържаните времена за изпълнение на контейнера са:

ЗАБЕЛЕЖКА: Трябва да изберете по едно време за изпълнение.

Инсталиране на време за изпълнение на Docker:

# Инсталирайте пакети sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https: // изтегляне.докер.com / linux / centos / docker-ce.repo sudo yum update -y && yum install -y containerd.io-1.2.13 docker-ce-19.03.8 docker-ce-cli-19.03.8 # Създайте необходимите директории sudo mkdir / etc / docker sudo mkdir -p / etc / systemd / system / docker.обслужване.d # Създайте конфигурационен файл на демона json sudo tee / etc / docker / daemon.json <

Инсталиране на CRI-O:

# Уверете се, че сте заредили модули sudo modprobe overlay sudo modprobe br_netfilter # Настройте необходимите sysctl параметри sudo tee / etc / sysctl.г / кубернети.конф<

Инсталиране на Containerd:

# Конфигурирайте постоянно зареждане на модули sudo tee / etc / modules-load.г / контейнерd.конф < / etc / containerd / config.toml # restart containerd sudo systemctl рестартиране на containerd sudo systemctl активиране на containerd 

За да използвате systemd cgroup драйвер, задайте плъгини.кри.systemd_cgroup = вярно в / etc / containerd / config.toml. Когато използвате kubeadm, конфигурирайте ръчно драйвера cgroup за kubelet

Стъпка 5: Конфигурирайте Firewalld

Ако имате активна услуга за защитна стена, има няколко разрешени порта.

Главни портове на сървъра:

sudo firewall-cmd --add-port = 6443,2379-2380,10250,10251,10252,5473,179,5473 / tcp - постоянна sudo firewall-cmd --add-port = 4789,8285,8472  / udp - постоянна sudo firewall-cmd --reload

Портове на Worker Node:

sudo firewall-cmd --add-port = 10250,30000-32767,5473,179,5473 / tcp --перманентна sudo firewall-cmd --add-port = 4789,8285,8472 / udp - постоянна sudo firewall-cmd --reload

Стъпка 6: Инициализирайте възела на контролната равнина

Влезте в сървъра, който ще се използва като главен и се уверете, че br_netfilter модулът е зареден:

$ lsmod | grep br_netfilter br_netfilter 22256 0 мост 151336 2 br_netfilter, ebtable_broute

Активирайте услугата kubelet.

sudo systemctl активира kubelet

Сега искаме да инициализираме машината, която ще изпълнява компонентите на контролната равнина, която включва и т.н (базата данни на клъстера) и API сървъра.

Издърпайте изображенията на контейнера:

$ sudo kubeadm config images pull [config / images] Изтеглени k8s.gcr.io / kube-apiserver: v1.18.3 [config / images] Изтеглени k8s.gcr.io / kube-controller-manager: v1.18.3 [config / images] Изтеглени k8s.gcr.io / kube-график: v1.18.3 [config / images] Изтеглени k8s.gcr.io / kube-proxy: v1.18.3 [config / images] Изтеглени k8s.gcr.io / пауза: 3.2 [config / images] Изтеглени k8s.gcr.io / etcd: 3.4.3-0 [config / images] Изтеглени k8s.gcr.io / coredns: 1.6.7

Това са основните kubeadm init опции, които се използват за зареждане на клъстер.

--контролна равнина-крайна точка : задайте споделената крайна точка за всички възли на контролната равнина. Може да бъде DNS / IP --pod-network-cidr : Използва се за задаване на CIDR на добавка за мрежа Pod --cri-socket : Използвайте, ако имате повече от едно време за изпълнение на контейнера, за да зададете пътя на сокета по време на изпълнение --apiserver-advertise-address : Задайте рекламен адрес за API сървъра на конкретния възел на контролната равнина

Задайте DNS име на крайна точка на клъстера или добавете запис към / etc / hosts файл.

172. $ sudo vim / etc / hosts.29.20.5 k8s-клъстер.computingforgeeks.com

Създаване на клъстер:

sudo kubeadm init \ --pod-network-cidr = 192.168.0.0/16 \ --control-plane-endpoint = k8s-клъстер.computingforgeeks.com 

Забележка: Ако 192.168.0.0/16 вече се използва във вашата мрежа, трябва да изберете различен CIDR на подмрежата, като замените 192.168.0.0/16 в горната команда.

Сокети за изпълнение на контейнера:

ВреметраенеПът към сокета на домейн на Unix
Докер/ var / run / docker.чорап
контейнер/ run / containerd / containerd.чорап
CRI-O/ var / run / crio / crio.чорап

По желание можете да предадете Socket файл за изпълнение и да рекламирате адрес в зависимост от вашата настройка.

Ето изхода на моята команда за инициализация.

... [init] Използване на Kubernetes версия: v1.18.3 [предполет] Провеждане на проверки преди полет [ПРЕДУПРЕЖДЕНИЕ Защитна стена]: защитната стена е активна, моля, уверете се, че портовете [6443 10250] са отворени или вашият клъстер може да не функционира правилно [предпечат] Издърпване на изображения, необходими за настройване на клъстер Kubernetes [предполет] може да отнеме минута или две, в зависимост от скоростта на вашата интернет връзка [предпечат] Можете също да извършите това действие предварително, като използвате 'kubeadm config images pull' [kubelet-start] Писане на файл на среда на kubelet с флагове в файл "/ var / lib / kubelet / kubeadm-flags.env "[kubelet-start] Записване на конфигурация на kubelet във файл" / var / lib / kubelet / config.yaml "[kubelet-start] Стартиране на kubelet [certs] Използване на папка certificateDir" / etc / kubernetes / pki "[certs] Използване на съществуващ сертификат ca [сертификати] Използване на съществуващ сертификат на apiserver и ключ на диска [certs] Използване на съществуващ apiserver- kubelet-клиентски сертификат и ключ на диск [сертификати] Използване на съществуващ сертификат на фронтен прокси-ca [сертификати] Използване на съществуващ сертификат и ключ на преден прокси-клиент на ключ [сертификати] Използване на съществуващ сертификат на etcd / ca [сертификати] Използване на съществуващ etcd / сертификат на сървър и ключ на диск [сертификати] Използване на съществуващ сертификат на etcd / peer и ключ на диск [сертификати] Използване на съществуващ сертификат на etcd / healthcheck-клиент и ключ на диск [сертификати] Използване на съществуващ сертификат и ключ на apiserver-etcd-client на диск [сертификати] Използване на съществуващия ключ "sa" [kubeconfig] Използване на папка kubeconfig "/ etc / kubernetes" [kubeconfig] Използване на съществуващ файл kubeconfig: "/ etc / kubernetes / admin.conf "[kubeconfig] Използване на съществуващ файл kubeconfig:" / etc / kubernetes / kubelet.conf "[kubeconfig] Използване на съществуващ файл kubeconfig:" / etc / kubernetes / manager-manager.conf "[kubeconfig] Използване на съществуващ файл kubeconfig:" / etc / kubernetes / Scheduler.conf "[control-plane] Използване на манифест папка" / etc / kubernetes / manifests "[control-plane] Създаване на статичен манифест на Pod за" kube-apiserver "[control-plane] Създаване на статичен манифест на Pod за" kube-controller-manager " W0611 22:34:23.276374 4726 манифеста.go: 225] режимът за разрешаване по подразбиране на kube-apiserver е "Node, RBAC"; използване на "Node, RBAC" [контролна равнина] Създаване на статичен манифест на Pod за "kube-планировщик" W0611 22:34:23.278380 4726 манифеста.go: 225] режимът за разрешаване по подразбиране на kube-apiserver е "Node, RBAC"; използване на "Node, RBAC" [etcd] Създаване на статичен манифест на Pod за локален etcd в "/ etc / kubernetes / manifests" [wait-control-plane] Изчаква се kubelet да зареди контролната равнина като статични Pods от директорията "/ etc / kubernetes / манифести ". Това може да отнеме до 4m0s [apiclient] Всички компоненти на контролната равнина са здрави след 8.008181 секунди [upload-config] Съхраняване на конфигурацията, използвана в ConfigMap "kubeadm-config" в "kube-system" пространство от имена [kubelet] Създаване на ConfigMap "kubelet-config-1.18 "в пространството от имена kube-система с конфигурацията за кубелетите в клъстера [upload-certs] Пропускане на фаза. Моля, вижте --upload-certs [mark-control-plane] Маркиране на възела k8s-master01.computingforgeeks.com като контролна равнина чрез добавяне на етикета "node-role.кубернети.io / master = "" [mark-control-plane] Маркиране на възела k8s-master01.computingforgeeks.com като контролна равнина чрез добавяне на taints [node-role.кубернети.io / master: NoSchedule] [bootstrap-token] Използване на токен: zoy8cq.6v349sx9ass8dzyj [bootstrap-token] Конфигуриране на маркери за bootstrap, информация за клъстер ConfigMap, RBAC Роли [bootstrap-token] конфигурирани RBAC правила, за да позволят на Node Bootstrap маркери да получат възли [bootstrap-token] конфигурирани RBAC правила, за да позволят Node Bootstrap жетони в CSS поръчка за възли да получават дългосрочни идентификационни данни на сертификата [bootstrap-token] конфигурирани RBAC правила, за да позволят на csrapprover контролера автоматично да одобрява CSR от Node Bootstrap Token [bootstrap-token] конфигурирани RBAC правила, за да позволи въртене на сертификати за всички клиентски сертификати на възела в клъстера [bootstrap-token] Създаване на "cluster-info" ConfigMap в пространството от имена "kube-public" [kubelet-finalize] Актуализиране "/ etc / kubernetes / kubelet.conf ", за да сочи към въртящ се сертификат и ключ на клиента kubelet [добавки] Приложен основен добавка: CoreDNS [добавки] Приложен основен допълнение: kube-прокси Вашата контролна равнина Kubernetes се инициализира успешно! За да започнете да използвате вашия клъстер, трябва да стартирате следното като обикновен потребител: mkdir -p $ HOME /.kube sudo cp -i / etc / kubernetes / admin.conf $ HOME /.kube / config sudo chown $ (id -u): $ (id -g) $ HOME /.kube / config Сега трябва да разположите под мрежа към клъстера. Изпълнете "kubectl apply -f [podnetwork].yaml "с една от опциите, изброени на: https: // kubernetes.io / docs / концепции / клъстер-администрация / добавки / Вече можете да се присъедините към произволен брой възли на контролната равнина, като копирате сертифициращи органи и ключове за акаунти на услуги на всеки възел и след това изпълнявате следното като root: kubeadm join k8s-cluster.computingforgeeks.com: 6443 --token zoy8cq.6v349sx9ass8dzyj \ --discovery-token-ca-cert-hash sha256: 14a6e33ca8dc9998f984150bc8780ddf0c3ff9cf6a3848f49825e53ef1374e24 \ --control-plane След това можете да се присъедините към произволен брой работни възли, като стартирате kube на всеки клъстер като следващ kube.computingforgeeks.com: 6443 --token zoy8cq.6v349sx9ass8dzyj \ --discovery-token-ca-cert-hash sha256: 14a6e33ca8dc9998f984150bc8780ddf0c3ff9cf6a3848f49825e53ef1374e24 

Конфигурирайте kubectl, като използвате команди в изхода:

mkdir -p $ НАЧАЛО /.kube sudo cp -i / etc / kubernetes / admin.conf $ HOME /.kube / config sudo chown $ (id -u): $ (id -g) $ HOME /.kube / конфиг

Проверете състоянието на клъстера:

$ kubectl клъстер-информация Главният Kubernetes работи на https: // k8s-клъстер.computingforgeeks.com: 6443 KubeDNS работи на https: // k8s-клъстер.computingforgeeks.com: 6443 / api / v1 / namespaces / kube-system / services / kube-dns: dns / proxy За по-нататъшно отстраняване на грешки и диагностика на клъстерни проблеми, използвайте 'kubectl cluster-info dump'.

Допълнителни главни възли могат да бъдат добавени с помощта на командата в инсталационния изход:

kubeadm се присъедини към k8s-клъстера.computingforgeeks.com: 6443 \ --token zoy8cq.6v349sx9ass8dzyj \ --discovery-token-ca-cert-hash sha256: 14a6e33ca8dc9998f984150bc8780ddf0c3ff9cf6a3848f49825e53ef1374e24 \ --control-plane 

Стъпка 7: Инсталирайте мрежов плъгин

В това ръководство ще използваме Calico. Можете да изберете други поддържани мрежови приставки.

kubectl приложи -f https: // docs.projectcalico.org / манифести / калико.ямъл

Трябва да видите следния изход.

configmap / calico-config създаде дефиниция по избор.разширения.k8s.io / bgpconfigurations.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / bgppeers.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / блокафинности.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / клъстерни информации.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / felixconfigurations.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / globalnetworkpolities.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / globalnetworksets.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / hostendpoints.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / ipamblocks.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / ipamconfigs.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / ipamhandles.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / ippools.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / kubecontrolersconfigurations.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / мрежови политики.черд.projectcalico.org създаде дефиниция по избор.разширения.k8s.io / мрежови набори.черд.projectcalico.org създаде клъстеррол.rbac.упълномощаване.k8s.io / calico-kube-controllers създадоха свързване на клъстери.rbac.упълномощаване.k8s.io / calico-kube-controllers създадоха клъстеррол.rbac.упълномощаване.k8s.io / calico-node създаде свързване на клъстери.rbac.упълномощаване.k8s.io / calico-node създаде daemonset.apps / calico-node създаден serviceaccount / calico-node създаден разполагане.apps / calico-kube-controllers създаден serviceaccount / calico-kube-controllers създаден

Потвърдете, че всички шушулки работят:

$ kubectl get pods --all-namespaces NAMESPACE ИМЕ ГОТОВ СТАТУС ВЪЗСТАНОВЯВА ВЪЗРАСТ kube-system calico-kube-controllers-76d4774d89-nfqrr 1/1 Running 0 2m52s kube-system calico-node-kpprr 1/1 Running 0 2m52s kube-system coredns-66bff467f8-9bxgm 1/1 Работеща 0 7m43s kube-система coredns-66bff467f8-jgwln 1/1 Работеща 0 7m43s kube-system etcd-k8s-master01.computingforgeeks.com 1/1 Работи 0 7m58s kube-system kube-apiserver-k8s-master01.computingforgeeks.com 1/1 Работи 0 7m58s kube-system kube-controller-manager-k8s-master01.computingforgeeks.com 1/1 Изпълнение 0 7m58s kube-system kube-proxy-bt7ff 1/1 Изпълнение 0 7m43s kube-system kube-scheduler-k8s-master01.computingforgeeks.com 1/1 Работещи 0 7m58s

Потвърдете, че главният възел е готов:

$ kubectl вземете възли -широко ИМЕ СТАТУТ РОЛИ ВЪЗРАСТ ВЕРСИЯ ВЪТРЕШЕН-IP ВЪНШЕН-IP ОС-ИЗОБРАЖЕНИЕ КЕРНЕЛ-ВЕРСИЯ КОНТЕЙНЕР-RUNTIME k8s-master01.computingforgeeks.com Готов майстор 8m38s v1.18.3 95.217.235.35  CentOS Linux 7 (Core) 3.10.0-1127.10.1.el7.x86_64 докер: // 19.3.8

Стъпка 8: Добавете работни възли

Когато контролната равнина е готова, можете да добавите работни възли към клъстера за изпълнение на планирани работни натоварвания.

Ако адресът на крайната точка не е в DNS, добавете запис към / etc / hosts.

172. $ sudo vim / etc / hosts.29.20.5 k8s-клъстер.computingforgeeks.com

Дадената команда за присъединяване се използва за добавяне на работен възел към клъстера.

kubeadm се присъедини към k8s-клъстера.computingforgeeks.com: 6443 \ --token zoy8cq.6v349sx9ass8dzyj \ --discovery-token-ca-cert-hash sha256: 14a6e33ca8dc9998f984150bc8780ddf0c3ff9cf6a3848f49825e53ef1374e24 

Изход:

[preflight] Четене на конфигурация от клъстера ... [preflight] FYI: Можете да разгледате този конфигурационен файл с 'kubectl -n kube-system get cm kubeadm-config -oyaml' [kubelet-start] Изтегляне на конфигурация за кубелета от " kubelet-config-1.18 "ConfigMap в пространството от имена на системата kube [kubelet-start] Записване на конфигурация на kubelet във файл" / var / lib / kubelet / config.yaml "[kubelet-start] Писане на файл на средата на kubelet с флагове в файл" / var / lib / kubelet / kubeadm-flags.env "[kubelet-start] Стартиране на kubelet [kubelet-start] Изчаква се kubelet да изпълни TLS Bootstrap ... Този възел се присъедини към клъстера: * Искане за подписване на сертификат беше изпратено до apiserver и бе получен отговор. * Kubelet беше информиран за новите подробности за сигурната връзка. 

Изпълнете командата по-долу на контролната равнина, за да видите дали възелът се е присъединил към клъстера.

$ kubectl получи възли ИМЕ СЪСТОЯНИЕ РОЛИ ВЪЗРАСТ ВЕРСИЯ k8s-master01.computingforgeeks.com Готов майстор 18м v1.18.3 k8s-работник01.computingforgeeks.com Готови  98s v1.18.3

Ако маркерът за присъединяване изтече, вижте нашето ръководство за това как да се присъедините към работни възли.

Присъединете се към новия Kubernetes Worker Node към съществуващ клъстер

Стъпка 9: Разполагане на приложение на клъстер

Трябва да потвърдим, че клъстерът ни работи, като разположим приложение.

kubectl се прилага -f https: // k8s.io / examples / pods / command.ямъл

Проверете дали шушулката е започнала

$ kubectl get pods ИМЕ ГОТОВ СТАТУС ВЪЗСТАНОВЯВА ВЪЗРАСТ command-demo 0/1 Завършен 0 40s

Стъпка 10: Инсталирайте таблото за управление Kubernetes (по избор)

Таблото за управление на Kubernetes може да се използва за разполагане на контейнерирани приложения в клъстер Kubernetes, отстраняване на неизправности в контейнеризираното ви приложение и управление на ресурсите на клъстера.

Обърнете се към нашето ръководство за инсталиране: Как да инсталирате таблото за управление Kubernetes с NodePort

Ръководства за съхранение:

Постоянно съхранение на Ceph за Kubernetes с Cephfs

Постоянно съхранение за Kubernetes с Ceph RBD

Как да конфигурирам Kubernetes Dynamic Volume Provisioning с Heketi & GlusterFS

Курсове за обучение: Kubernetes за абсолютно начинаещите - практическиKubernetes за абсолютните начинаещи - практически $ 12.06156 долара.75в наличност КУПЕТЕ СЕГАУдеми.comСертифициран администратор на Kubernetes (CKA) с практически тестовеСертифициран администратор на Kubernetes (CKA) с практически тестове $ 12.06156 долара.75в наличност КУПЕТЕ СЕГАУдеми.com

Подобни ръководства за внедряване на Kubernetes:

Как да скриете името на вашата WiFi мрежа от други
Как да скриете вашата WiFi мрежа, за да попречите на другите да я виждат:- Искали ли сте някога вашият WiFi да бъде невидим, така че никой да не може ...
Как да накарате вашите програми за Windows да се отварят максимално всеки път
Как да настроите програми за Windows да стартират максимално всеки път:- Може да има някои любими програми за всички. Може да бъде такова разочаровани...
Как да намерите броя на абонатите на Feedburner за всеки блог
В тази статия ще ви кажа как да разберете колко абонати на блогове са броени в няколко лесни стъпки. На първо място, ако искате да знаете броя на абон...

Уебсайт, посветен на джаджи, операционни системи и съвременни технологии. Много интересни статии и полезни съвети