发布dotNetCore程序到Kubernetes
上一篇《Mac中搭建Kubernetes》介紹了怎樣在Mac中搭建單節點的Kubernetes,本文將編寫一個dotNetCore的示例程序,并發布到Kubernetes中。
環境
基本步驟
創建dotnetCore示例項目;
本地搭建私有registry,或者使用DockerHub,本文采用搭建私有倉庫的方式;
將dotnetCore示例項目發布到私有倉庫中;
發布私有倉庫鏡像到Kubernetes
創建示例項目
1、在命令行執行命令創建一個名為k8s-netcore-demo的項目
dotnet?new?webApp?-o?k8s-netcore-demo?--no-httpsno-https2、將示例程序運行起來
cd?k8s-netcore-demodotnet?rundotnet?run
運行正常的話,訪問http://localhost:5000會出現下圖界面
搭建私有倉庫
docker?pull?registrydocker?run?-d?-p?8888:5000?--restart=always?registrydocker?run?-d?-p?8888:5000?--restart=always?registry
發布netcore程序到私有倉庫
1、發布netcore程序
dotnet?publish2、在publish目錄中創建Dockfile文件,文件內容如下:
FROM?microsoft/dotnet:2.1-aspnetcore-runtimeCOPY?.?/appWORKDIR?/appEXPOSE?80/tcpENTRYPOINT?["dotnet",?"k8s-netcore-demo.dll"]2.1-aspnetcore-runtimeCOPY?.?/app
WORKDIR?/app
EXPOSE?80/tcp
ENTRYPOINT?["dotnet",?"k8s-netcore-demo.dll"]
3、將netcore程序編譯成Docker鏡像
docker?build?-t?k8s-netcore-demo?.4、將鏡像發布到私有倉庫
docker?tag?k8s-netcore-demo?localhost:8888/k8s-netcore-demodocker?push?localhost:8888/k8s-netcore-demo8888/k8s-netcore-demodocker?push?localhost:8888/k8s-netcore-demo
默認情況下,你執行docker push時會出現下面錯誤
在Mac中的Docker中做如下設置即可解決
設置好重啟Docker之后,再次執行docker push,可以正常將鏡像推送到私有倉庫中。
推送完成后,瀏覽器中訪問http://localhost:8888/v2/_catalog,如果如下圖所示,說明推送成功了。
發布鏡像到Kubernetes
1、創建Kubernetes的部署文件deploy.yaml,部署文件為yaml文件格式。文件內容如下:
apiVersion:?apps/v1kind:?Deploymentmetadata:??name:?k8s-netcore-demo??namespace:?k8s-netcore??labels:????k8s-app:?k8s-netcore-demospec:??replicas:?2??selector:????matchLabels:??????k8s-app:?k8s-netcore-demo??template:????metadata:??????labels:????????k8s-app:?k8s-netcore-demo????spec:??????containers:??????-?name:?k8s-netcore-demo????????image:?localhost:8888/k8s-netcore-demo????????ports:????????-?containerPort:?80??---#?-------------------?Service?-------------------?#kind:?ServiceapiVersion:?v1metadata:??labels:????k8s-app:?k8s-netcore-demo??name:?k8s-netcore-demo??namespace:?k8s-netcorespec:??type:?NodePort??ports:????-?port:?80??????targetPort:?80??selector:????k8s-app:?k8s-netcore-demokind:?Deployment
metadata:
??name:?k8s-netcore-demo
??namespace:?k8s-netcore
??labels:
????k8s-app:?k8s-netcore-demo
spec:
??replicas:?2
??selector:
????matchLabels:
??????k8s-app:?k8s-netcore-demo
??template:
????metadata:
??????labels:
????????k8s-app:?k8s-netcore-demo
????spec:
??????containers:
??????-?name:?k8s-netcore-demo
????????image:?localhost:8888/k8s-netcore-demo
????????ports:
????????-?containerPort:?80??
---
#?-------------------?Service?-------------------?#
kind:?Service
apiVersion:?v1
metadata:
??labels:
????k8s-app:?k8s-netcore-demo
??name:?k8s-netcore-demo
??namespace:?k8s-netcore
spec:
??type:?NodePort
??ports:
????-?port:?80
??????targetPort:?80
??selector:
????k8s-app:?k8s-netcore-demo
上面配置文件中屬性的含義不用先去弄清楚,保證程序能夠正常跑起來是關鍵。
2、因為在deploy.yaml文件中指定了namespace,所以先創建一個名為k8s-netcore的namespace
kubectl?create?namespace?k8s-netcore3、執行deploy.yaml文件
kubectl?create?-f?deploy.yaml?--validate#加上?--validate?參數,當yaml文件有錯誤時,會給出提示--validate#加上?--validate?參數,當yaml文件有錯誤時,會給出提示
4、使用kubectl get命令查看創建情況
kubectl?get?deploy?-n?k8s-netcore5、查看資源情況
上圖中可以看出,暴露出來的端口為32527,瀏覽器中訪問http://localhost:32527,如下圖:
6、啟動代理,在Dashboard中查看運行情況
kubectl?proxy怎樣訪問Dashboard,可以查看《Mac中搭建Kubernetes》中相關介紹。
本文中用到的命令
#創建dotNetCore項目dotnet?new?webApp?-o?k8s-netcore-demo?--no-https#將dotNetCore程序構建為鏡像docker?build?-t?k8s-netcore-demo?.#創建namespacekubectl?create?namespace?k8s-netcore#部署Kuberneteskubectl?create?-f?deploy.yaml?--validate#查看指定命名空間的部署情況kubectl?get?deploy?-n?k8s-netcore#查看指定命名空間的資源情況kubectl?get?svc?-n?k8s-netcoredotnet?new?webApp?-o?k8s-netcore-demo?--no-https
#將dotNetCore程序構建為鏡像
docker?build?-t?k8s-netcore-demo?.
#創建namespace
kubectl?create?namespace?k8s-netcore
#部署Kubernetes
kubectl?create?-f?deploy.yaml?--validate
#查看指定命名空間的部署情況
kubectl?get?deploy?-n?k8s-netcore
#查看指定命名空間的資源情況
kubectl?get?svc?-n?k8s-netcore
總結
命令不用刻意去記,練習多了自然就記住了;
部署程序Kubernetes中,先需要將鏡像發布到倉庫中,自己部署的私有倉庫和公有云倉庫都可以;
通過本文的操作步驟,可以將程序發布到Kubernetes中運行起來,這樣可以對Kubernetes有一個主觀的認識,接下來就可以循序漸進的對Kubernetes進行深入的學習。
總結
以上是生活随笔為你收集整理的发布dotNetCore程序到Kubernetes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub推出包管理服务,npm与Nu
- 下一篇: 官博翻译 | .NET Core 即 .