Kubernetes – какво представлява и как да стартирате приложението? Ръководство за GCP

24/06/2020

Все повече информационни системи се създават с употреба на контейнери. Контейнеризацията се състои в поставяне на части от дадено приложение (неговите процеси, зависимости, библиотеки, конфигурационни файлове и локална база данни) в няколко или повече „сбирки“, наречени контейнери. Контейнеризацията обединява в себе си предимствата на виртуализацията и поддържането на системата от физически сървър. Т.е. осигурява мащабност, бърза и лека преносимост на софтуера и подялба на инстанциите като запазва голямата производителност.

Ако няколко десетки контейнера могат да се управляват ръчно, то самото управление става доста проблематично със стотиците или хилядите разпръснати и динамично управлявани контейнери. Решението за това е оркестрацията, т.е. въвеждане на автоматизация, групово управление и мониторинг на контейнерите. Най-популярният инструмент за оркестрация е Kubernetes.

Какво представлява Kubernetes?

Kubernetes е платформа с отворен код (open source), която служи за управление на контейнери в голям мащаб. 

Името ѝ идва от гръцката дума – „κυβερνήτης“ и означава „руля“, „кормило“, което отлично предава целта на платформата. Kubernetes също така се нарича и K8s – това е съкращение, в което осемте букви „ubernete“ са заменени от цифрата „8“.

Инструментът е създаден от Google преди близо 20 години за обслужване на производственото натоварване във фирмата. През 2014 г. проектът е предоставен на организацията Cloud Native Computing Foundation и е обнародван – и до този момент платформата продължава да се развива от организации, а също така от фирми и специалисти, които ползват Kubernetes (в проектите с отворен код (open source) могат да участват също и потребителите).

K8s подпомага автоматизацията на внедряването, мащабирането на приложенията, управлението на контейнерите, извършва мониторинг на процесите и промените. Собствениците на приложения и екипите за разработки, които използват платформата, могат да се съсредоточат повече върху развитието на своя продукт, отколкото върху дейностите по DevOps (управление на инфраструктурата и приспособяване на продукта към нейните изисквания). Kubernetes дава възможност за управление на клъстери (групи от съдействащи един с друг сървъри), така че от потребителската перспектива те да изглеждат – по-опростени – като една машина. K8s освобождава разработчика от задължението да приспособява приложението към изискванията на инфраструктурата – специалистът възлага стартирането на приложението, а Kubernetes може самостоятелно да раздели услугите между клъстерите и сървърите и да ги насочи към съответните контейнери. Kubernetes притежава собствена форма за load-balancing, т.е. техники за разпръсване (балансиране) на натоварването между много машини.

K8s се поддържа от повечето публични облаци, в това число от Google Cloud Platform.

Вижте:
Какво представлява Google Cloud Platform и по какъв начин подпомага бизнеса?

Централизация

Платформата Kubernetes дава възможност за управление на всички клъстери, сървъри и контейнери от едно място, без значение от това къде се намират машините или частите на приложението. Подпомага груповото планиране, внедряване, мащабиране и управление на жизнените цикли на елементите.

Мащабност

В основата на K8s стои мащабността – инструментът е създаден от Google с цел да задейства милиарди контейнери седмично. Независимо от количеството извършвани дейности, използвани машини или притежавани контейнери, няма нужда от разширяване или намаляване на екипа по DevOps. Възможно е също хоризонтално мащабиране и намаляване на нуждата от ресурси посредством команди, чрез интерфейса на потребителя или автоматично, въз основа на натоварването на процесора.

Различни инфраструктурни решения

Kubernetes действа заедно с инфраструктурата на физическите сървъри, с облачни и хибридни решения (свързване на локалния център с облака). Поддържа се от различни доставчици на публични облачни услуги, в това число Google Cloud Platform, Amazon Web Services или Microsoft Azure.

Съгласуваност между средите

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

Предотвратяване на аварии и самостоятелен ремонт

K8s въвежда промените постепенно, като същевременно извършва мониторинг на състоянието на всяка инстанция. Ако се случи нещо непредвидено, Kubernetes автоматично връща промените назад. В случай, че при някой от контейнер се случи авария, инструментът го заменя с друг, като същевременно работи по възстановяване на дейностите или премахване на излишните елементи.

Постоянно развитие на платформата

Kubernetes е проект с отворен код. С неговото развитие са ангажирани не само собствениците, но също и хората, ползващи платформата ежедневно: разработчици, специалисти по DevOps, фирми за програмиране. Те създават нови елементи или предлагат въвеждане на подобрения на съществуващите процеси и инструменти.

Примери за използване на Kubernetes

Платформата се използва охотно от фирмите, притежаващи разработени уебсайтове, управляващи голямо количество данни, фокусирани върху плавното и бързо развитие.

  • ЦЕРН (CERN -The European Organization for Nuclear Research) (Европейската организация за ядрени изследвания) в момента съхранява около 300 петабайта данни, а техният брой продължава да се увеличава (приема се, че в рамките на няколко години данните в ЦЕРН ще бъдат 10 пъти повече). Освен това организацията има сезонно увеличение на натоварването и трябва да има големи възможности за мащабност. ЦЕРН използва хибридна инфраструктура – ежедневно данните се съхраняват и обработват в локалните сървъри, а при нужда мащабира решението в облака. Въвеждането на оркестрация на контейнерите посредством Kubernetes позволи на организацията напълно да автоматизира обслужването на приложенията, да опрости процеса на внедряване и ускоряване на технологичното развитие, по-точно посредством съкращаване на времето за добавяне на клъстер от 3 часа на 15 минути, а на нов възел (машините в клъстера) от 30 минути на 2 минути.
  • Nokia създава продукти и решения, свързани с телекомуникационната мрежа и предоставя решения на много оператори. Партньорските фирми на Nokiа притежават различни инфраструктурни решения: едни ползват локални центрове за данни (физически сървъри), други виртуални машини или облаци, трети ползват хибридни решения. Целта на Nokiа е да предложи на партньорите си напълно ефективно действащи решения, без необходимост от приспособяване на продукта всеки път спрямо друга инфраструктура. Ползвайки Kubernetes те са в състояние да създават продукти, които могат да се задействат във всяка среда. K8s помага също за добавянето на нови функционалности и извършване на тестове без разделяне на целева среда, което позволява да се спестят по няколкостотин часа при всяко внедряване.
  • Adidas развива своя уебсайт за електронна търговия, използвайки възможностите, които дава Kubernetes. Преди компанията да започне да използва K8s, въвеждането на промени ставаше доста трудно, а въведенията често оставаха на етап DevOps – напр. разработчиците, за да получат достъп до виртуалните машини, трябваше да чакат от 30 минути до една седмица. След въвеждането на контейнеризицията на уебсайта и стартиране на Kubernetes, разработчиците могат да се фокусират върху създаването на нови функционалности, вместо върху стриктното приспособяване на системата спрямо изискванията на инфраструктурата или чакане на поддръжка от страна на DevOps. Преди това нови издания се правеха на всеки 4-6 седмици, сега се извършват по няколко пъти на ден.

Възможностите на Kubernetes използват също Booking.com, BlaBlaCar, група ING или Zalando.

Основи на Kubernetes на Google Cloud Platform – ръководство

Първата стъпка е мястото в конзолата на Google Облак: https://console.cloud.google.com/.

Създаваме нов проект (правим го посредством кликване върху наименованието на проекта до надписа „Google Cloud Platform“ в левия горен ъгъл).

Google Cloud Platform - tworzenie nowego projektu

Вписваме името на проекта и кликваме върху Create.

Google Cloud Platform - tworzenie nowego projektu

Влизайки отново в списъка с проекти (бутонът до надписа „Google Cloud Platform“) получаваме ID на проекта. Той ще ни е необходим за следващите етапи.

Google Cloud Platform - tworzenie nowego projektu

Отваряме Cloudshell (в десния горен ъгъл).

Kubernetes tutorial - cloudshell

С помощта на командата настройваме проекта, по който ще работим:

gcloud config set project k8s-demo-281313

Не забравяйте да запишете ID на своя проект в командата– може да се различава от подадения пример.

Kubernetes tutorial - ustawienia projektu

След това нагласяме региона, в който искаме да въведем приложението:

gcloud config set compute/zone europe-west3-c

тук: https://cloud.google.com/about/locations#europe

Kubernetes tutorial - ustawienie regionu

Създаваме клъстер с използване на командата:

gcloud container clusters create my-cluster--num-nodes=1

Флагчето –num-nodes дава възможност да настроим броя node’s (физически или виртуални машини) в клъстера. Повече информация за флагчето ще намерите в линка: https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#–num-nodes

Тази операция може да отнеме няколко минути.

След приключване на операцията получаваме таблица в Cloudshell, която представя параметрите на клъстера.

Kubernetes tutorial - parametry klastra

Сега използваме командата:

gcloud container clusters get-credentials my-cluster

Командата актуализира файла kubeconfig със съответните референции и информация за по нататъшната работа с клъстера.

Kubernetes tutorial - aktualizacja pliku o referencje i informacje

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

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

Флагчето –image показва линка за контейнеризация на приложението в услугата Container Registry (GCR). Услугата Container Registry дава възможност за съхранение на контейнеризираните изображения на приложението. Повече информация за функциите на GCR можете да откриете в линка: https://cloud.google.com/container-registry

Тук се намира изходния код на приложението hello-app, което въвеждаме в: https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/master/hello-app/main.go

Можем да въведем нашето приложение посочвайки контейнеризираното изображение от Container Registry.

Kubernetes tutorial - contaner registry

Сега трябва да разкрием приложението (expose). За тази цел използваме командата:

kubectl expose deployment hello-server --type LoadBalancer \
--port 80 --target-port 8080

Повече информация за командата kubectl можете да откриете в линка: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose

Флагчето –type  отговаря за посочване на типа въведение (ClusterIP, NodePort, LoadBalancer или ExternalName). В този случай създаваме LoadBalancer, който ще направи приложението достъпно чрез интернет.

Флагчето –port посочва порта, от който приложението трябва да се обслужва.

Флагчето –target-port посочва порта в контейнера, към който услугата трябва да насочва движението.

След това вписваме командата: 

1 kubectl get service hello-server

Благодарение на това получаваме публичен IP клъстер, в който въвеждаме приложението:

Kubernetes tutorial - IP klastra

Ето резултата:

Kubernetes tutorial - hello world

За да премахнете клъстера и да върнете назад въведенията, трябва да използвате командите:

kubectl delete service hello-server
gcloud container clusters delete my-cluster

Kubernetes tutorial - usuniecie klastra

И само толкова за основите на Kubernetes!

Kubernetes на Google Cloud Platform – спечелете ваучер за 500$ (824 BGN)

Ако искате да проверите възможностите на Kubernetes, а освен това да се запознаете с Google Cloud Platform – мащабна инфраструктура в облака с множество технологични предложения – се свържете с нас. Като официален Google Cloud Premier Partner Ви гарантираме ваучер в размер на 500$ (824 лева) за стартиране на GCPпълна техническа поддръжка и възможност за разплащане за облачните услуги в лева.