1. 程式人生 > >Docker系列(三):將.net core api部署到Kubernetes (K8s)中

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,到此大功告成!!!