k8s環境部署本地.net core web項目


    上一篇文章,我們部署了docker+k8s環境,簡單測試通過,但是,還沒能將我們自己的項目部署上去,繼續記錄部署踩坑過程。

一、准備工作

    1、當然是docker+k8s環境了,詳情請看上一篇文檔 https://www.cnblogs.com/CoderLinkf/p/12395710.html

    2、如果你部署好環境,重啟過,建議先kubeadm reset,重新關閉防火牆,swap重新init一下

systemctl stop firewalld
setenforce 0
swapoff -a
kubeadm init --apiserver-advertise-address=192.168.3.180 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.17.3 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

  別忘了改ip,接下來,重新安裝flannel,詳情請看上一篇文檔安裝,這里還沒有找到重啟后環境不變的方法,最后你得到下圖結果:

 

 同理,node節點也需要重新執行。

二、開始部署

  1、首先,將項目發布到文件系統,ftp到centos系統,這步不細說了

  2、DockerFile:放在項目保存的目錄下

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /dockerdemo
EXPOSE 80

COPY . .
ENTRYPOINT ["dotnet", "Application.web.dll"]

  3、拉取鏡像,記得cd到目錄下面,dockerdemo可以改成自己的項目

docker build -t dockerdemo .

  4、docker images,查看鏡像

 

  5、到此,部署了master節點的鏡像,接下來,同樣的操作,在node節點拉取鏡像(本地項目必須的)

  6、做完上面的工作,我們開始編寫web-pod.yaml,當然文件名不重要,重要的是.yaml內容

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web1
  labels:
    k8s-app: web1
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: web1
  template:
    metadata:
      labels:
        k8s-app: web1
    spec:
      containers:
      - name: web1
        image: dockerdemo
        imagePullPolicy: Never
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: web1
  name: web1
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    k8s-app: web1

  解釋一下:

  name可以改,

  replicas參數表示工作副本,運行成功后會運行相應的pod數量在節點中

  image:本地鏡像名稱

  imagePullPolicy:因為是在本地,所以不從pull拉取鏡像,Never(IfNotPresent:如果本地沒有,拉取pull鏡像;Always:總是從pull拉取)

  其他參數就不解釋了,可以了解一下https://www.bbsmax.com/A/obzbN4AyzE/

  當然了,yaml文件格式非常嚴格,一不小心就會驗證失敗,可以在https://www.json2yaml.com/convert-yaml-to-json進行驗證格式

  7、運行pod

kubectl create -f web-pod.yaml

  如果順利的話,執行

kubectl get pod -o wide

  可以看到

 

 這里的兩個,即上面配置的replicas效果

kubectl get pod,svc -o wide

  運行kubectl get pod,svc -o wide,如果出現下圖所示,狀態為running

 

  恭喜你,成功了,訪問圖上所示的鏈接http://192.168.3.180:30165/即可看到我們的網站

如果失敗了,可以查看pod的日志

kubectl describe pod web1-58f6d7d9b5-mlbx2

  這里的pod名,可以通過上面的kubectl get pods來查看

更復雜的日志:

kubectl create -f web-pod.yaml

三、更新迭代

  1、重新拉取鏡像

  項目的更新迭代很簡單,只需要重新發布,生成鏡像,這里注意生成鏡像要帶上版本號

docker build -t dockerdemo:v1 .

  冒號后面的即版本號,帶上版本號的原因是,在pod更新的時候,如果.yaml文件沒有改動,是不會觸發更新的。

    

 

 

  2、編輯.yaml文件,修改image

    

 

   3、保存更改,然后執行apply命令

kubectl apply -f web-pod.yaml

  4、更新完成,打開網頁,驗證一下吧,回退也可以回到上一個版本號,刪除沒用的鏡像:

docker rmi imagename

  5、第二種更新方法:做完第一步后,執行命令

kubectl set image deploy web1 web1=dockerdemo:v1

  其中,web1是我pod名稱,dockerdemo是鏡像,v1是版本

  6、第三種

  

 

   直接修改,即可自動更新 

  

 

 2020/3/10更新,更新腳本

  更新操作還是比較麻煩的,因此,做成腳本更容易執行,也更不易出錯

  這里需要建一個本地倉庫,可以看另一篇文檔https://www.cnblogs.com/CoderLinkf/p/12426498.html

  建完本地倉庫,可以將更新用到的命令寫成腳本:

  vim testupdate.sh

echo "開始更新"
echo "第一步 拉取鏡像"
docker build -t 192.168.3.181:5000/test:$1 ./test
echo "第二步 push到倉庫"
docker push 192.168.3.181:5000/test:$1
echo "第三步 修改pod鏡像"
kubectl set image deploy web1 web1=192.168.3.181:5000/test:$1

  test是拉取的鏡像,web1是添加的web1,這里的$1代表第一個參數,為版本號

  更新的時候,先文件發布到根目錄的test文件夾下

  執行 ./testupdate.sh v1.01,等待更新完成即可

  

  

 


免責聲明!

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



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