С появлением микросервисов приложения необходимо было развертывать в нескольких контейнерах. Это вызвало необходимость оркестровки контейнеров, балансировки нагрузки, автоматического восстановления и мониторинга, что экспоненциально увеличило популярность Kubernetes.
Но разработчики пренебрегли. Развертывание в контейнерах и Kubernetes не является частью цикла программирования редактирования, сборки, запуска и тестирования. Разработчики любят кодирование и в идеале должны сосредоточиться на решении проблем бизнеса. DevOps был введен, чтобы заполнить этот пробел, но на практике эти два мира совершенно разные. Ballerina — язык программирования с открытым исходным кодом и платформа для разработчиков приложений облачной эпохи — стремится соединить эти два мира и улучшить опыт разработчиков.
Балерина Кубернетес Аннотация
Разработчики предпочитают оставаться в своих IDE вместо того, чтобы писать файлы Docker, генерировать образы Docker и писать файлы YAML Kubernetes. Но запуск их приложения в Kubernetes и тестирование производственного поведения очень важны. К сожалению, запуск приложения в кластере Kubernetes имеет довольно крутое обучение.
Модель аннотации Ballerina Kubernetes была создана для решения этой проблемы. Простой пример «Привет, мир» может быть использован для понимания этих концепций, но эти аннотации также могут быть использованы в сложных примерах. Давайте посмотрим на сервис ниже, написанный на балерине:
Джава
xxxxxxxxxx
1
import ballerina/http;
2
import ballerina/log;
3
4
service hello on new http:Listener(8080) {
5
resource function hi(http:Caller caller, http:Request request) {
6
var result = caller->respond("Hello World!\n");
7
if result is error {
8
log:printError("Error occurred while sending response");
9
}
10
}
11
}
Вам также может понравиться:
Начало работы с балериной .
В примере программы есть HTTP-сервис «привет». В рамках сервиса есть функция «привет». Сервис hello прослушивает порт 8080, и когда мы вызываем ресурс hi, он возвращает HTTP-ответ «Hello World». Когда исходный код скомпилирован, он сгенерирует JAR. Это позволит пользователям запускать программу с помощью java -jar
команды.
Оболочка
xxxxxxxxxx
1
$> ballerina build hello.bal
2
Compiling source
3
hello.bal
4
Generating executables
5
hello.jar
6
$> java -jar hello.jar
7
[ballerina/http] started HTTP/WS listener 0.0.0.0:8080
8
$> curl http://localhost:8080/hello/hi
9
Hello World!
Чтобы аннотировать приведенный выше исходный код аннотациями Ballerina Kubernetes, необходимо импортировать модуль ballerina / kubernetes . Затем необходимо добавить следующие аннотации:
Джава
xxxxxxxxxx
1
import ballerina/http;
2
import ballerina/log;
3
import ballerina/kubernetes;
4
5
Service { :
6
name: "hello-world",
7
serviceType: "NodePort"
8
}
9
Deployment { :
10
name: "hello-world"
11
}
12
service hello on new http:Listener(8080) {
13
resource function hi(http:Caller caller, http:Request request) {
14
var result = caller->respond("Hello World!\n");
15
if result is error {
16
log:printError("Error occurred while sending response");
17
}
18
}
19
}
Добавленные выше две аннотации с несколькими свойствами: @kubernetes:Deployment
и @kubernetes:Service
. Как показано ниже, после компиляции кода компилятор Ballerina сгенерирует Dockerfile, образ Docker и все необходимые артефакты, необходимые для развертывания приложения.
Оболочка
xxxxxxxxxx
1
$> ballerina build hello.bal
2
Compiling source
3
hello.bal
4
5
Generating executables
6
hello.jar
7
8
Generating artifacts...
9
10
@kubernetes:Service - complete 1/1
11
@kubernetes:Deployment - complete 1/1
12
@kubernetes:Docker - complete 2/2
13
@kubernetes:Helm - complete 1/1
14
15
Run the following command to deploy the Kubernetes artifacts:
16
kubectl apply -f /Users/lakmal/hello/kubernetes
17
18
Run the following command to install the application using Helm:
19
helm install --name hello-world /Users/lakmal/hello/kubernetes/hello-world
20
21
$> docker images |grep hello
22
hello latest 278a34c943fd 10 minutes ago 109MB
kubectl
Команда может быть использована для развертывания приложения в кластер Kubernetes.
Оболочка
xxxxxxxxxx
1
$> kubectl apply -f /Users/lakmal/Documents/work/demo/DevWeekTX/kubernetes
2
service/hello-world created
3
deployment.apps/hello-world created
4
5
$> kubectl get all
6
NAME READY STATUS RESTARTS AGE
7
pod/hello-world-6ff4b986f7-68b47 1/1 Running 0 15s
8
9
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
10
service/hello-world NodePort 10.103.148.96 <none> 8080:31686/TCP 15s
11
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21d
12
13
NAME READY UP-TO-DATE AVAILABLE AGE
14
deployment.apps/hello-world 1/1 1 1 15s
15
16
NAME DESIRED CURRENT READY AGE
17
replicaset.apps/hello-world-6ff4b986f7 1 1 1 15s
Поскольку в аннотации serviceType
было установлено NodePort
значение @kubernetes:Service
, создается NordPort
служба типа Kubernetes. Доступ к приложению можно получить через NodePort
, как показано ниже:
Оболочка
xxxxxxxxxx
1
$> curl http://localhost:31686/hello/hi
2
Hello World!
В приведенном выше примере использование аннотаций Ballerina не прерывает работу разработчика. Все, что нужно сделать разработчику, это написать аннотации, а остальное позаботится компилятор. Балерина Аннотация Kubernetes считывает исходный код, заполняет правильные значения и генерирует проверенные артефакты Kubernetes, следуя при этом рекомендациям.
Значения по умолчанию можно переопределить, задав их как свойства аннотации. IDE может даже предложить, что поместить и куда поместить в исходный код. Например, см. Следующие предложения IDE под @kubernetes:Deployment
аннотацией:
Аннотации балерины могут создавать артефакты для всех основных типов:
@kubernetes:Deployment{}
,@kubernetes:Service{}
,@kubernetes:Ingress{}
,@kubernetes:HPA{}
,@kubernetes:Secret{}
,@kubernetes:ConfigMap{}
,@kubernetes:PersistentVolumeClaim{}
,@kubernetes:ResourceQuota{}
,@kubernetes:Job{}
,
Он также поддерживает генерацию артефактов Istio и OpenShift:
@istio:Gateway{}
,@istio:VirtualService{}
,@openshift:Route{}
,
Более подробную информацию об этом можно найти по адресу https://github.com/ballerinax/kubernetes .
Расширение компилятора балерины
Это только начало того, что Балерина потенциально может сделать с Kubernetes и облачными сервисами. Больше можно сделать, написав расширения для компилятора Ballerina. Его расширяемая архитектура и поддержка подключаемых расширений компилятора позволяют при необходимости выполнять дополнительную проверку или обработку. Расширение компилятора может использовать метаданные, предоставленные посредством аннотаций, чтобы ввести дополнительное поведение в процесс компиляции.
Следующая диаграмма показывает высокоуровневую архитектуру компилятора Ballerina:
Интерфейс компилятора Ballerina имеет несколько этапов. На этапе обработки аннотаций запускаются все расширения аннотаций, определенные в исходном коде. В зависимости от реализации расширения он может генерировать необходимые артефакты.
Это пошаговое руководство помогает пользователям разрабатывать собственные расширения компилятора для удовлетворения уникальных требований: https://ballerina.io/learn/how-to-extend-ballerina/ .
Резюме
Ballerina создана для того, чтобы понимать все основные конструкции и платформы Kubernetes, такие как Openshift, Istio, Helm Chart и K-native. Его мощная возможность аннотации в Kubernetes позволяет разработчикам сосредоточиться на создании функций, не беспокоясь о сложностях развертывания, таких как создание файлов Docker и артефактов YAML. Это помогает повысить производительность и улучшить опыт разработчиков, гарантируя, что их цикл разработки не будет прерван во время развертывания.