iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
DevOps

DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署系列 第 12

Day 12 - [實作] 在 Kubernetes 中佈署應用:使用 Docker Desktop

  • 分享至 

  • xImage
  •  

今天我們將探討如何利用 Docker Desktop 來佈署容器化應用程式至Kubernetes。Docker Desktop 是一個方便且常見的工具,它讓我們在本機測試和開發 Kubernetes 應用,而不需要額外的雲端服務。對於想要在本機探索 Kubernetes 的開發者來說,這是一個非常好的起手方式。


使用的工具

  1. Docker Desktop(需啟用 Kubernetes,下面有安裝步驟)
  2. Kubectl(Kubernetes 命令列工具)

Kubernetes 的簡介

Kubernetes (K8s) 是一個開源的平台,用來自動化應用程式的佈署、擴展和管理。它提供了容器化(containerized)應用程式的功能,能夠管理應用程式的可擴展性和容錯能力,讓你的應用程式更具延展性,能快速響應變化。Kubernetes 的核心功能包括:

  • 自動化佈署:簡化並自動化應用的佈署和更新。
  • 擴展性:根據流量的需求,自動擴展或縮減應用程式。
  • 高可用性:確保應用程式持續運行,並在失敗時自動恢復。

kubernetes-architecture
圖片來源


安裝 Docker Desktop 步驟

若要使用本機環境進行 Kubernetes 的操作,Docker Desktop 是一個非常方便的工具,內建支援 Kubernetes。以下是安裝 Docker Desktop 並啟用 Kubernetes 的步驟:

步驟 1:下載並安裝 Docker Desktop

  1. 前往 Docker Desktop 下載頁面
  2. 根據你的作業系統選擇下載對應版本(Windows 或 macOS)。
  3. 下載完成後,執行安裝程序,並根據指示完成安裝。

https://ithelp.ithome.com.tw/upload/images/20240926/20169492vvZAg0Wuiq.png

步驟 2:啟用 Kubernetes

  1. 安裝完成後,開啟 Docker Desktop。
  2. 點擊右上角的設定圖示,進入 Settings
  3. 在左側選單中,選擇 Kubernetes,勾選 Enable Kubernetes 選項。
  4. 點擊 Apply & Restart,Docker Desktop 將會自動啟用 Kubernetes 功能。

https://ithelp.ithome.com.tw/upload/images/20240926/20169492ipbBLN3MHd.png

步驟 3:驗證 Kubernetes 啟動狀態

安裝與啟用完成後,開啟命令提示字元 (CMD) 或 PowerShell,輸入以下命令來檢查 Kubernetes 是否已正確啟動:

kubectl version --client

如果看到 Kubernetes 的客戶端版本資訊,表示 Kubernetes 已成功啟用。

https://ithelp.ithome.com.tw/upload/images/20240926/20169492LeITJI80Gs.png


佈署應用至 Kubernetes 的步驟

以下是如何使用 Docker Desktop 的 Kubernetes 來佈署應用程式的步驟:

步驟 1:準備 Docker 映像(Image)

首先,確保你已經在本機編寫好 Dockerfile 並能成功構建 Docker 映像。

Dockerfile

# 使用 Python 3.9 的官方映像作為基礎映像
FROM python:3.9-slim

# 設定工作目錄
WORKDIR /app

# 將當前目錄的內容複製到容器中的 /app 目錄
COPY . /app

# 安裝應用程式依賴
RUN pip install --no-cache-dir -r requirements.txt

# 暴露應用程式運行的連接埠
EXPOSE 5000

# 定義容器啟動時執行的命令
CMD ["python", "app.py"]
  • FROM python:3.9-slim:

    使用 Python 3.9 的官方映像作為基礎映像。這是比較輕量級的 slim 版本,適合運行應用程式而非完整開發環境。

  • WORKDIR /app:

    設定容器的工作目錄為 /app,應用程式的所有操作將在此目錄中進行。

  • COPY . /app:

    將當前目錄中的所有文件複製到容器的 /app 目錄中,這包括應用程式的所有檔案。

  • RUN pip install --no-cache-dir -r requirements.txt:

    使用 pip 安裝應用程式所需的依賴項,這些依賴項會在 requirements.txt 中指定。--no-cache-dir 參數是為了減少 Docker 映像的大小,避免緩存安裝包。

  • EXPOSE 5000:

    告訴 Docker 容器應用程式將使用連接埠 5000,這在 Kubernetes 或其他容器管理系統中設定服務時很有用。

  • CMD ["python", "app.py"]:

    定義容器啟動時要執行的命令,這裡是執行 Python 應用程式 app.py。

使用以下命令來構建 Docker 映像:

docker build -t myapp:v1 .

這會構建一個名稱為 myapp 且版本為 v1 的映像。

https://ithelp.ithome.com.tw/upload/images/20240926/20169492TbD7Y5yY7g.png

https://ithelp.ithome.com.tw/upload/images/20240926/20169492VV6IjPabIR.png

步驟 2:建立 Kubernetes 佈署配置檔

接著,我們需要撰寫 Kubernetes 的佈署配置檔,這個文件會告訴 Kubernetes 如何佈署應用程式。

deployment.yaml

apiVersion: apps/v1  # 指定 API 版本為 apps/v1,這是用來定義 Deployment 資源的 API 版本
kind: Deployment  # 資源的類型,這裡是 Deployment,表示應用的佈署
metadata:
  name: myapp-deployment  # 佈署的名稱,用來識別這個 Deployment 資源
spec:  # 定義佈署的具體配置
  replicas: 2  # 指定應用程式運行的副本數量,也就是要啟動兩個容器實例
  selector:  # 用來選擇哪個 Pod 會與這個佈署匹配,根據標籤匹配
    matchLabels:
      app: myapp  # 與 Pod 中的 labels 相匹配,選擇 app: myapp 的 Pod
  template:  # 定義 Pod 的樣板,告訴 Kubernetes 如何創建 Pod
    metadata:
      labels:
        app: myapp  # 定義 Pod 的標籤,標籤用來與 selector 進行匹配
    spec:  # 定義 Pod 的具體配置
      containers:  # 容器定義,這裡定義了在 Pod 中運行的容器
      - name: myapp  # 容器的名稱,這裡是 myapp
        image: myapp:v1  # 使用的 Docker 映像名稱,這裡使用本地或映像庫中的 myapp:v1
        ports:
        - containerPort: 5000  # 暴露容器的 5000 連接埠,應用程式在這個連接埠上運行

這個檔案定義了一個應用佈署,指定使用本機的 myapp:v1 映像,主要用來告訴 Kubernetes 如何管理應用程式的 Pod 副本,並確保應用程式能夠正常運行。透過指定 Docker 映像與配置,Kubernetes 將自動化應用的佈署過程,並在需要時調整副本數量。

  • apiVersion: apps/v1:

    指定 Kubernetes API 版本。apps/v1 是用來處理 Deployment 資源的標準 API 版本。

  • kind: Deployment:

    表示這個資源的類型是 Deployment,Kubernetes 會依照這個佈署應用程式,並管理應用程式的生命周期和擴展。

  • metadata.name: myapp-deployment:

    定義佈署的名稱 myapp-deployment。這個名稱在 Kubernetes 叢集中是唯一的,可以用來查詢或管理這個 Deployment。

  • spec.replicas: 2:

    指定運行這個應用程式的實例數量,這裡設定為 2,表示 Kubernetes 會啟動兩個副本,分別運行應用程式的兩個容器。

  • spec.selector.matchLabels:

    用來選擇符合條件的 Pod,這裡匹配標籤 app: myapp,用來確保 Kubernetes 管理的 Pod 與這個 Deployment 是一致的。

  • template:

    用來定義 Pod 的樣板,告訴 Kubernetes 如何為這個 Deployment 創建 Pod。

  • template.metadata.labels:

    定義 Pod 的標籤,這裡的標籤是 app: myapp,這個標籤將會用來與 Deployment 的 selector 進行匹配。

  • template.spec.containers:

    定義 Pod 中要運行的容器。這裡只有一個名為 myapp 的容器,並使用 myapp:v1 映像來啟動應用程式。

  • containerPort: 5000:

    指定容器運行的應用程式連接埠為 5000,這告訴 Kubernetes 這個應用程式的服務將在這個連接埠上進行通訊。

步驟 3:佈署應用

運行以下命令將 deployment.yaml 佈署到 Docker Desktop 的 Kubernetes 叢集上:

kubectl apply -f deployment.yaml

步驟 4:檢查佈署狀態

使用以下命令來檢查應用是否成功佈署:

kubectl get pods

你應該能夠看到應用的兩個pod正在運行。

https://ithelp.ithome.com.tw/upload/images/20240926/20169492w34CfyGgRh.png


結語&預告

今天我們學習了如何安裝 Docker Desktop 並啟用其內建的 Kubernetes,接著展示了如何將本機的容器化應用程式佈署到 Kubernetes 叢集中。這樣的流程讓我們能夠在本機測試 Kubernetes 佈署,為日後的雲端佈署打下基礎~

明天我們會試著把容器佈署至 Azure Kubernetes Service (AKS) 上,敬請期待!


上一篇
Day 11 - [實作] DevOps 測試自動化:多階段測試整合至 Azure DevOps Pipeline
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言