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