1. 程式人生 > 其它 >Net Core 微服務 - 如何將.Net Core Web Api服務部署到Kubernetes (K8s)中

Net Core 微服務 - 如何將.Net Core Web Api服務部署到Kubernetes (K8s)中

1.新建一個WebApi專案



預設的web api專案包含一個預設的api:/weatherforecast

2. 新建一個Dockerfile檔案

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["CoreApi.csproj", "."]
RUN dotnet restore "./CoreApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "CoreApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "CoreApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "CoreApi.dll"]

3. 通過Dockerfile生成Docker映象檔案

在Dockerfile所在目錄開啟命令列工具執行如下命令(注意YourUserName是你在Docker官網註冊的賬戶名):

docker build -t YourUserName/coreapi1 .

4. 將剛生成的Docker映象推送到Docker倉庫中

你需要去Docker官網註冊一個賬戶,註冊完成後進行登入:docker login --username YourUserName

YourUserName是你註冊的使用者名稱,接著會讓你輸入密碼,驗證成功後會提示Login Succeeded

將映象推送到倉庫這個步驟是不能省略的,因為編寫K8s部署檔案的時候,需要從倉庫拉取映象,因為伺服器在國外,所以會有點慢。

還有一個問題就是你的映象名字需要用你的Docker使用者名稱開頭,比如YourUserName/coreapi1,YourUserName是你Docker的使用者名稱,不然上傳會提示沒有許可權。

5. 編寫k8s的部署檔案 k8s-deploy.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: k8s-apidemo
  name: k8s-apidemo
  namespace: coreapi
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s
-app: k8s-apidemo template: metadata: labels: k8s-app: k8s-apidemo spec: containers: - name: k8s-apidemo image: YourUserName/coreapi1 ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: labels: k8s-app: k8s-apidemo name: k8s-apidemo namespace: coreapi spec: type: NodePort ports: - nodePort: 31001
port: 80 targetPort: 80 selector: k8s-app: k8s-apidemo

需要說明兩個問題,標紅的image就是我們推送到倉庫的映象,namespace是資源空間名稱,也就是我們當前這個pod要執行的資源空間,所以我們需要建立一下這個資源空間:

kubectl create namespace coreapi

建立完成後可以通過以下命令進行檢視:kubectl get namespace coreapi

6. 執行我們的部署檔案k8s-deploy.yaml

kubectl create -f k8s-deploy.yaml

如果我們沒有建立資源空間coreapi,執行以上命令就會看到如下錯誤:

正常情況下會有兩個提示,分別是deployment.apps/k8s-apidemo created 和 service/k8s-apidemo created

完成之後我們可以通過以下命令檢視:kubectl get svc -n coreapi -o wide

結果顯示我的這個pod執行在31001埠,此時我們可以通過瀏覽器測試:

OK. 部署成功了!!!