12/08/2018, 15:27

Deploy ứng dụng Kotlin trên Docker và Kubernetes

Tổng quát Kotlin là một ngôn ngữ lập trình mới từ JetBrains. Được xuất hiện lần đầu tiên vào năm 2011 khi JetBrains công bố dự án của họ có tên "Kotlin". Kotlin là một ngôn ngữ nguồn mở. Về cơ bản giống như Java, C và C ++ - Kotlin cũng là "ngôn ngữ lập trình tĩnh". Các ngôn ngữ lập trình kiểu ...

Tổng quát

Kotlin là một ngôn ngữ lập trình mới từ JetBrains. Được xuất hiện lần đầu tiên vào năm 2011 khi JetBrains công bố dự án của họ có tên "Kotlin". Kotlin là một ngôn ngữ nguồn mở. Về cơ bản giống như Java, C và C ++ - Kotlin cũng là "ngôn ngữ lập trình tĩnh". Các ngôn ngữ lập trình kiểu tĩnh là những ngôn ngữ mà các biến không cần phải được định nghĩa trước khi chúng được sử dụng.

Tiền đề

Kubernetes - Kubernetes là một nền tảng nguồn mở tự động hóa hoạt động của container và Minikube là lựa chọn tốt nhất để test Kubernetes.

Kubectl - Kubectl là giao diện dòng lệnh để quản lý Kubernetes cluster từ xa hoặc trên local.

Shared Persistent Persistent - Shared Persistent Storage là lưu trữ có thể đính vào container Kubernetes để không mất dữ liệu ngay cả khi container mất đi. Chúng ta sử dụng GlusterFS như một kho dữ liệu cho các ứng dụng container Kubernetes.

Kotlin Application Source Code - Mã nguồn ứng dụng là mã nguồn mà chúng ta muốn chạy bên trong một container kubernetes.

Dockerfile - Dockerfile chứa một loạt các lệnh để xây dựng ứng dụng Kotlin.

Container-Registry - Container Registry là một kho hình ảnh trực tuyến cho các hình ảnh container.

Tạo một Dockerfile

Cùng xem xét ví dụ dưới đây. Trong đó sử dụng maven 3 như một builder cho các ứng dụng Kotlin và OpenJDK 8 như một môi trường phát triển cơ bản. Alpine Linux được sử dụng do kích thước rất nhỏ gọn của nó.

FROM maven:3-alpine

MAINTAINER XenonStack

# Creating Application Source Code Directory
RUN mkdir -p /usr/src/app

# Setting Home Directory for containers
WORKDIR /usr/src/app

# Copying src code to Container
COPY . /usr/src/app

# Building From Source Code
RUN mvn clean package

# Setting Persistent drive
VOLUME ["/kotlin-data"]

# Exposing Port
EXPOSE 8082

# Running Kotlin Application
CMD ["java", "-jar", "target/<name of your kotlin jar>.jar"]

Building Kotlin Application Image

$ docker build -t <name of your Kotlin application>:<version of application>

Xuất bản Hình ảnh Container   Bây giờ chúng ta xuất bản hình ảnh chứa ứng dụng Kotlin vào bất kỳ container nào như Docker Hub, AWS ECR, Google Container Registry, Private Docker Registry.

Tạo một tài khoản trên Docker Hub và tạo ra một Public / Private Repository cho tên ứng dụng.

Để đăng nhập vào tài khoản docker hub, hãy thực hiện lệnh dưới đây.

$ docker login

Bây giờ chúng ta cần retag hình ảnh ứng dụng Kotlin và đẩy chúng vào docker hub container registry.

Để retag

$ docker tag <name of your application>:<version of your application>   <your docker hub account >/<name of your repository >:<version of your application>

Để push image

$ docker push <your docker account >/<name of your repository >:<version of your application>

Tạo file deploy cho Kubernetes

Deploy ứng dụng trên Kubernetes dễ dàng bằng việc sử dụng file deploy và service theo định dạng JSON hoặc YAML

File deploy

Ví dụ dưới đây cho file "<tên ứng dụng>.deployment.yml" của ứng dụng python container

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: <name of application>
  namespace: <namespace of Kubernetes>
spec:
  replicas: 1
  template:
	metadata:
  	labels:
   	k8s-app: <name of application>
	spec:
  	containers:
  	- name: <name of application>
    	image: <image name >:<version tag>
    	imagePullPolicy: "IfNotPresent"
    	ports:
    	- containerPort: 8082
    	volumeMounts:
       	- mountPath: /kotlin-data
         	name: <name of application>
  	volumes:
    	- name: <name of application>
       emptyDir: {}

File service

Ví dụ dưới đây cho file "<tên ứng dụng>.service.yml" của ứng dụng python container

apiVersion: v1
kind: Service
metadata:
  labels:
	k8s-app: <name of application>
  name: <name of application>
  namespace: <namespace of Kubernetes>
spec:
  type: NodePort
  ports:
  - port: 7102
  selector:
	k8s-app: <name of application>

Chạy ứng dụng Kotlin trên Kubernetes

Kotlin Application Container có thể deploy hoặc kubernetes Dashboard hoặc Kubectl (dòng lệnh)

Như dưới đây

$ kubectl create -f <name of application>.deployment.yml
$ kubectl create -f <name of application>.service.yml

Deploy thành công

Xác thực

Có thể xác thực việc deploy app bằng Kubectl hoặc Kubernetes Dashboard.

Ví dụ

$ kubectl get po --namespace=<namespace of kubernetes> | grep <application name>

Kết quả

< name of your application >-1349584344-uah2u 1/1 Running 0 22d 10.233.84.18 k8-master

Testing

Lấy External Node Port bằng cách sử dụng câu lệnh dưới đây. nó có phạm vi từ 30000 đến 65000

$ kubectl get svc --namespace=<namespace of kubernetes> | grep <application name>

mở browser và nhập 1 trong 2 URL dưới đây

http://<địa chỉ ip của kubernetes master >: <Số chỉ cổng của application service>

http://<địa chỉ cluster >: <số chỉ cổng của application>

The End

Tham khảo https://www.xenonstack.com/blog/deploying-kotlin-application-on-docker-kubernetes

0