将 Kotlin 部署到 Kubernetes:基础指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在Kubernetes上部署Kotlin:基础指南



现代开发离不开容器化和编排。Kubernetes (K8s) 已成为管理微服务的标准,而Kotlin则是构建可靠后端应用最流行的语言之一。在本指南中,我们将从简单的Kotlin应用开始,逐步完成其在Kubernetes集群中的完整部署。您将学习如何将代码打包成Docker镜像、编写清单文件以及配置服务访问。



1. 准备Kotlin应用



以Ktor(一个轻量级Kotlin框架)上的简单REST API为例。创建Main.kt文件:



import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.http.*import io.ktor.server.response.*

fun main() { embeddedServer(Netty, port = 8080) { routing { get("/") { call.respondText("Hello from Kotlin on K8s!", ContentType.Text.Plain) } get("/health") { call.respondText("OK", ContentType.Text.Plain) } } }.start(wait = true)}


此代码在8080端口启动服务器,包含两个端点:根端点和健康检查端点。确保在build.gradle.kts中添加了Ktor和Netty依赖。



2. 构建Docker镜像



要在Kubernetes中部署,应用必须打包到容器中。在项目根目录创建Dockerfile:



FROM gradle:8.5-jdk21 AS buildWORKDIR /appCOPY build.gradle.kts settings.gradle.kts ./COPY src ./srcRUN gradle build --no-daemon

FROM openjdk:21-jdk-slimWORKDIR /appCOPY --from=build /app/build/libs/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


构建分两个阶段:首先使用Gradle编译,然后将JAR文件复制到纯净镜像中。使用以下命令构建镜像:



docker build -t my-kotlin-app:1.0 .


要发布到仓库(例如Docker Hub),执行:



docker tag my-kotlin-app:1.0 yourusername/my-kotlin-app:1.0docker push yourusername/my-kotlin-app:1.0


3. Kubernetes清单文件



现在创建用于集群部署的YAML文件。从deployment.yaml开始:



apiVersion: apps/v1kind: Deploymentmetadata:  name: kotlin-appspec:  replicas: 2  selector:    matchLabels:      app: kotlin-app  template:    metadata:      labels:        app: kotlin-app    spec:      containers:      - name: kotlin-app        image: yourusername/my-kotlin-app:1.0        ports:        - containerPort: 8080        livenessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 3          periodSeconds: 5


此清单创建两个应用副本,并添加存活和就绪检查。接下来是service.yaml:



apiVersion: v1kind: Servicemetadata:  name: kotlin-app-svcspec:  selector:    app: kotlin-app  ports:  - port: 80    targetPort: 8080  type: ClusterIP


服务将80端口的流量转发到容器的8080端口。如果需要外部访问,请将类型改为NodePort或LoadBalancer。



4. 配置Ingress并部署



要路由外部请求,请使用Ingress控制器。创建ingress.yaml:



apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: kotlin-app-ingress  annotations:    nginx.ingress.kubernetes.io/rewrite-target: /spec:  rules:  - host: kotlin.example.com    http:                

博客

书籍推荐