Docker系列(三):將.Net Core Api部署到Kubernetes (K8s)中


1.新建一個WebApi項目,並添加Dockerfile文件:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
Copy . .

RUN dotnet restore
RUN dotnet build -c Release -o /app

FROM build as publish
RUN dotnet publish -c Releease -o /app

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

編譯一下,然后通過Docker打包成鏡像:docker build -t wei/k8s-demo .

完成后通過docker images查看下:

 

 然后將其推送到Docker倉庫中,所以你需要去Docker官網注冊一個賬戶,注冊完成后進行登錄:docker login --username  xxx

xxx是你的用戶名,接着會讓你輸入密碼,驗證成功后會提示Login Succeeded

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

還有一個問題就是你的鏡像名字需要用你的Docker用戶名開頭,比如xxx/k8s-demo 這種,xxx是你Docker的用戶名,不然上傳會提示沒有權限:

 

 

鏡像推送到倉庫之后我們就需要編寫k8s的部署文件了 :deploy.yaml

 

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: k8s-demo
  name: k8s-demo
  namespace: netcore
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: k8s-demo
  template:
    metadata:
      labels:
        k8s-app: k8s-demo
    spec:
      containers:
      - name: k8s-demo
        image: xxx/k8s-demo
        ports:
        - containerPort: 80  

---
# ------------------- Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: k8s-demo
  name: k8s-demo
  namespace: netcore
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
  selector:
    k8s-app: k8s-demo

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

kubectl create namespace netcore

創建完成后可以通過以下命令進行查看:kubectl get namespace netcore

然后我們就可以運行我們的部署文件了:kubectl create -f deploy.yaml

 

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

我在這步遇到的問題是yaml的格式問題,因為縮進不符合要求,折騰了好久,這個對格式的要求很嚴格,完成之后我們可以通過以下命令查看:kubectl get svc -n netcore 

我上面圖中已經有了,結果顯示我的這個pod運行在31080端口,此時我們可以通過瀏覽器測試:

或者我們也可以通過k8s控制台查看,如果沒啟動代理的通過kubectl proxy命令啟動代理,然后訪問以下地址:

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=netcore

 

 將命名空間選到我們的netcore即可看到我們已經運行的服務k8s-demo,到此大功告成!!!

 

補充一下,當我們關機下次啟動會發現k8s處於stop狀態,這個時候我們需要重啟下Docker,並使用以下命令切換到對應的Kubernetes context :

kubectl config use-context docker-for-desktop


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM