切換語言為:簡體

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

  • 爱糖宝
  • 2024-11-25
  • 2004
  • 0
  • 0

前言

  • 隨著容器化技術的普及,部署 Web 應用到 Kubernetes(K8s)已經成為現代開發中常見的實踐。本教程將從零開始,引導您構建並部署一個簡單的 Java Spring Boot Web 應用到 Kubernetes 叢集,覆蓋從程式碼開發到容器化再到叢集部署的完整流程。

  • 本文一共包含三個部分:使用 Java Spring Boot 構建一個簡單的 Hello World Web 應用、編寫 Dockerfile 構建映象將應用容器化、使用 labs.play-with-k8s.com 快速體驗 Kubernetes 的部署與執行。

構建一個 hello world web 應用

  • 我們可以使用 Spring Initializr 快速生成一個 Spring Boot 專案,也可以使用 ide 腳手架工具幫助我們快速構建一個簡單的 Hello World Web 應用,此部分內容比較簡單大家可以選擇合適的方式構建。

專案結構

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

專案核心檔案

HelloWorldController.java
package org.demo.springwebwithk8s.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @RestController
    public class HelloController {
        @GetMapping("/")
        public String sayHello() {
            return "Hello world!";
        }
    }
}


application.properties
spring.application.name=spring-web-with-k8s
server.port=8080

啟動專案 檢查專案是否構建成功

  • 啟動專案,使用 curl 命令訪問 http://localhost:8080,檢查是否正常輸出 "Hello world!"

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

  • 正常輸出 "Hello world!" ,專案構建成功。

容器化我們的應用

  • 容器化是將應用打包為一個可以在任何地方執行的輕量級環境。下面我們將我們構建的 hello world 應用打包成 Docker 映象。

編寫 Dockerfile

# 使用的基礎映象
FROM openjdk:17-jdk-alpine

# 定義環境變數 注意地址是否和本地 jar 包地址是否一致
ARG JAR_FILE=target/spring-web-with-k8s-0.0.1-SNAPSHOT.jar

# 將應用的 jar 檔案複製到容器中
COPY ${JAR_FILE} app.jar

# 暴露埠
EXPOSE 8080

# 定義執行命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

構建 docker 映象

docker build -t hello-world-app:1.0 .

docker build: 命令用於根據 Dockerfile 構建 Docker 映象。
-t: 表示為構建的映象指定一個標籤(tag)。

hello-world-app:1.0:
hello-world-app: 映象名稱,用於標識你的應用映象。
1.0: 映象的版本號,可以幫助區分同一應用的不同版本。

.: 指定 Dockerfile 所在的路徑。在當前目錄(.)中尋找 Dockerfile。

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

  • 檢測映象是否正常構建

docker run -d -p 8080:8080  --name hello-world-app hello-world-app:1.0

docker run: 命令用於執行一個容器。
-d: 後臺執行容器(Detached 模式)。
--name hello-world-app: 為容器指定一個名字 hello-world-app,方便後續管理(例如檢視狀態、停止容器等)。
-p 8080:8080: 埠對映,將宿主機的 8080 埠對映到容器的 8080 埠。
hello-world-app:1.0: 指定執行的映象名稱和版本號,表示基於這個映象建立並執行容器。

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

推送 docker 映象倉庫

  • 本文以 hub.docker.com 為例

# Docker Hub 要求推送的映象以 username/repository:tag 格式命名。為本地映象打上 Docker Hub 所需的標籤
docker tag hello-world-app:1.0 your-dockerhub-username/hello-world-app:1.0

docker push your-dockerhub-username/hello-world-app:1.0

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

使用 labs.play-with-k8s.com 構建 Kubernetes 叢集並部署應用

  • 最後,我們使用 labs.play-with-k8s.com 快速部署我們的應用到 Kubernetes 叢集中。

構建 Kubernetes 叢集環境

  • 首先建立三臺伺服器例項,構建 Kubernetes 叢集

  • 初始化 master 節點並初始化網路

kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

  • 將另外兩臺伺服器例項新增入叢集

kubeadm join 192.168.0.6:6443 --token y18e92.u3f9xgtio2vifvkb \
        --discovery-token-ca-cert-hash sha256:85d66d0f4ae5122084bf0149029b9a9e374007cf6ae91913cab9cdf6b6f66789

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

  • 叢集搭建結果檢視

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

編寫部署檔案

  • 在 Kubernetes 中,部署檔案(YAML 檔案)是 Kubernetes 物件的宣告式配置。等價於使用 kubectl 命令列工具逐步手動建立、管理和配置這些物件的命令。透過部署檔案,你可以用一種宣告式的方式告訴 Kubernetes 需要什麼樣的資源,而 Kubernetes 會自動實現和維持這些需求。

  • hello-world-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: hello-world-service
spec:
  selector:
    app: hello-world
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image: your-dockerhub-username/hello-world-app:1.0
        ports:
        - containerPort: 8080

  • 部署 kubectl apply -f hello-world-deployment.yaml

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

  • 訪問是否部署成功

小白如何從 0 到 1 掌握部署一個 Web 應用到 Kubernetes 中

總結

  • 本文我們從零開始構建並部署了一個 Java Spring Boot Web 應用到 Kubernetes 叢集,完整經歷了以下步驟:

應用開發:我們使用 Spring Boot 構建了一個簡單的 "Hello World" 應用,奠定了部署的基礎。
應用容器化:透過編寫 Dockerfile,將 Spring Boot 應用打包成 Docker 映象,為跨平臺部署和環境一致性提供支援。
Kubernetes 部署:利用 labs.play-with-k8s.com,快速構建 Kubernetes 叢集,成功部署和執行了容器化的 Web 應用。

  • 本文只是一篇 Kubernetes 最基礎的入門介紹教程,隨著實際專案需求的擴充套件,我們可以進一步學習 Kubernetes 的更多功能,例如 水平擴充套件(Scaling)、配置管理(ConfigMaps 和 Secrets)、日誌與監控 等,構建更加複雜和健壯的分散式應用系統。


下一個

沒有更多了...

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.