将 Swift 部署到 Kubernetes:面向初学者的基础指南

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

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

开始课程

将 Swift 部署到 Kubernetes:面向初学者的基础指南



Swift 通常与 iOS 和 macOS 开发紧密关联,但其服务器端能力(得益于 Vapor 和 Kitura 等框架)使得构建完整的后端解决方案成为可能。如果您已经编写了一个服务器端 Swift 应用程序,并希望确保其高可用性、可扩展性和易于管理性,Kubernetes (K8s) 是理想的选择。在本指南中,我们将逐步讲解将 Swift 应用程序部署到 Kubernetes 的过程,从容器化开始,到在集群中运行为止。本材料面向熟悉 Swift 基础知识但刚开始学习容器编排的开发者。



为什么 Swift 和 Kubernetes 是绝佳组合



Kubernetes 是一个用于自动化部署、扩展和管理容器化应用程序的系统。而 Swift 则编译为原生二进制文件,这使其成为在轻量级容器中运行的理想候选者。这种组合的主要优势包括:



  • 性能: Swift 应用程序不需要虚拟机(如 Java)或解释器(如 Python),从而降低了资源消耗。
  • 类型安全: Swift 编译器在构建阶段就能防止许多错误,这对于生产环境至关重要。
  • 生态系统: Vapor 框架提供了用于处理 HTTP、数据库和 WebSocket 的现成工具,简化了与 K8s 的集成。
  • 扩展性: Kubernetes 自动管理您的 Swift 服务器的副本,确保高可用性。


步骤 1:准备 Swift 应用程序进行容器化



在将应用程序部署到 Kubernetes 之前,需要将其打包到 Docker 镜像中。我们以 Vapor 框架为例。假设您有一个简单的应用程序 MySwiftApp,带有一个端点。



项目结构:

MySwiftApp/├── Sources/│   └── App/│       └── main.swift├── Package.swift└── Dockerfile


main.swift 代码(简单的 HTTP 服务器):

import Vapor

let app = Application()app.get("hello") { req in return "Hello from Swift on Kubernetes!"}try app.run()


Package.swift 文件:

// swift-tools-version:5.8import PackageDescription

let package = Package( name: "MySwiftApp", platforms: [.macOS(.v12)], dependencies: [ .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0") ], targets: [ .executableTarget( name: "App", dependencies: ["Vapor"] ) ])


现在,我们创建一个 Dockerfile 来构建和运行应用程序。使用多阶段构建以最小化镜像大小:



# ---- Build Stage ----FROM swift:5.8 as builderWORKDIR /appCOPY Package.swift Package.resolved ./RUN swift package resolveCOPY . .RUN swift build -c release --static-swift-stdlib

# ---- Run Stage ----FROM ubuntu:22.04WORKDIR /appCOPY --from=builder /app/.build/release/App .EXPOSE 8080CMD ["./App"]


构建镜像:

docker build -t my-swift-app:latest .


步骤 2:将镜像发布到容器仓库



为了与 Kubernetes 配合使用,镜像必须可以从仓库中获取。使用 Docker Hub 或任何其他仓库(GitHub Container Registry、GitLab、AWS ECR)。



docker tag my-swift-app:latest your-dockerhub-username/my-swift-app:latestdocker push your-dockerhub-username/my-swift-app:latest


将 your-dockerhub-username 替换为您的用户名。如果您使用私有仓库,请记得在 K8s 清单中配置 imagePullSecrets。

博客

书籍推荐