歡迎光臨
每天分享高質量文章

發佈dotNetCore程式到Kubernetes

上一篇《Mac中搭建Kubernetes》介紹了怎樣在Mac中搭建單節點的Kubernetes,本文將編寫一個dotNetCore的示例程式,併發布到Kubernetes中。

環境

  • Mac:10.13.6
  • Docker:2.0.0.3 (31259)
  • Kubernetes:1.10.11
  • netCore:2.1

基本步驟

  1. 創建dotnetCore示例專案;
  2. 本地搭建私有registry,或者使用DockerHub,本文采用搭建私有倉庫的方式;
  3. dotnetCore示例專案發佈到私有倉庫中;
  4. 發佈私有倉庫鏡像到Kubernetes

創建示例專案

1、在命令列執行命令創建一個名為k8s-netcore-demo的專案

dotnet new webApp -o k8s-netcore-demo --no-https
  • webApp:創建一個webApp型別的專案
  • -o:創建專案到指定目錄
  • –no-https:不啟用https

2、將示例程式運行起來

cd k8s-netcore-demo
dotnet run

運行正常的話,訪問http://localhost:5000會出現下圖界面

搭建私有倉庫

docker pull registry
docker run -d -p 8888:5000 --restart=always registry

發佈netcore程式到私有倉庫

1、發佈netcore程式

dotnet publish

2、在publish目錄中創建Dockfile檔案,檔案內容如下:

FROM microsoft/dotnet:2.1-aspnetcore-runtime
COPY . /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-demo
docker 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/v1
kind: 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

上面配置檔案中屬性的含義不用先去弄清楚,保證程式能夠正常跑起來是關鍵。

  • 所有配置為k8s-netcore-demo的地方是構建的鏡像的名稱
  • image的值為localhost:8888/k8s-netcore-demo,這個是鏡像發佈到本地倉庫中的地址;
  • namespace的值配置為創建的namespace的名稱。

2、因為在deploy.yaml檔案中指定了namespace,所以先創建一個名為k8s-netcore的namespace

kubectl create namespace k8s-netcore

3、執行deploy.yaml檔案

kubectl create -f deploy.yaml --validate
#加上 --validate 引數,當yaml檔案有錯誤時,會給出提示

4、使用kubectl get命令查看創建情況

kubectl get deploy -n k8s-netcore

5、查看資源情況

kubectl get svc -n k8s-netcore

上圖中可以看出,暴露出來的端口為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 .
#創建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

總結

  1. 命令不用刻意去記,練習多了自然就記住了;
  2. 部署程式Kubernetes中,先需要將鏡像發佈到倉庫中,自己部署的私有倉庫和公有雲倉庫都可以;
  3. 通過本文的操作步驟,可以將程式發佈到Kubernetes中運行起來,這樣可以對Kubernetes有一個主觀的認識,接下來就可以循序漸進的對Kubernetes進行深入的學習。


    已同步到看一看
    赞(0)

    分享創造快樂