日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

推送到 Nexus 仓库->部署为 k8s 服务实践">构建 dotnet&vue 应用镜像->推送到 Nexus 仓库->部署为 k8s 服务实践

發(fā)布時(shí)間:2024/1/2 vue 42 coder
生活随笔 收集整理的這篇文章主要介紹了 推送到 Nexus 仓库->部署为 k8s 服务实践">构建 dotnet&vue 应用镜像->推送到 Nexus 仓库->部署为 k8s 服务实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

前面分享了 k8s 的部署安裝,本篇來點(diǎn)實(shí)操,將會(huì)把一個(gè) .net core + vue 的項(xiàng)目(zhontai),打包構(gòu)建成 docker 鏡像,推送到 nexus 鏡像倉(cāng)庫(kù),并部署到 k8s 中

準(zhǔn)備

要實(shí)現(xiàn)項(xiàng)目的部署,除了準(zhǔn)備要部署的環(huán)境(k8s),還需要準(zhǔn)備項(xiàng)目所用到的各中間件,本文旨在分享部署的一個(gè)整體流程,對(duì)項(xiàng)目中所使用到的各中間件(mysql,redis 等)的安裝使用可自行在本 DevOps 系列文章中找到

  • 一個(gè) .net core+vue 的項(xiàng)目

    • 使用 zhontai 項(xiàng)目,之前也有做分享,文章介紹
    • 后端 Admin.Core v3.7.1
    • 前端 admin.ui.plus v2.2.0
  • Nexus 的安裝部署,文章介紹

    • 做為鏡像倉(cāng)庫(kù)使用,將項(xiàng)目打包鏡像及項(xiàng)目鏡像推送到倉(cāng)庫(kù),k8s 也從此倉(cāng)庫(kù)拉取鏡像
    • 版本為 v3.61 ,安裝地址為 192.168.0.214:8081,并使用局域網(wǎng)域名解析,
    • 在目標(biāo)機(jī)器先登錄能夠拉取推送鏡像,參考
    • 拉取鏡像地址:https://nexus.devops.test.com
    • 推送鏡像地址:https://push.nexus.devops.test.com
  • Docker 的安裝部署,文章介紹

    • 使用 doker 拉取 sdk、nodejs 鏡像進(jìn)行打包,構(gòu)建 k8s 所需要的項(xiàng)目鏡像
    • 版本:v24.0.6
  • K8S 的安裝與部署,文章介紹

    • 部署項(xiàng)目服務(wù)
    • 使用 ingress 解析域名到服務(wù)
  • 部署前后端項(xiàng)目到 K8S,本文介紹

使用 Docker 打包應(yīng)用鏡像

不管什么語言,基本都可以使用這個(gè)打包流程,將官方鏡像打包推送到私有鏡像倉(cāng)庫(kù)個(gè)人認(rèn)為是必要的,不然如果一旦遠(yuǎn)端的鏡像失效,又需要重新拉取鏡像時(shí)就會(huì)很尬尷。

  1. 準(zhǔn)備打包所需鏡像

    1. 獲取基礎(chǔ)打包鏡像(dotnet 獲取 sdk 鏡像,vue 獲取 node 鏡像)
    2. 基于基礎(chǔ)鏡像,安裝所需軟件,設(shè)置默認(rèn)配置,復(fù)制默認(rèn)文件,封裝項(xiàng)目的打包鏡像
    3. 掛載項(xiàng)目到 sdk 鏡像進(jìn)行打包,打包后獲取構(gòu)建完成的產(chǎn)物
  2. 準(zhǔn)備運(yùn)行所需的基礎(chǔ)鏡像

    1. 獲取運(yùn)行時(shí)鏡像(.net core 獲取 runtime 鏡像,vue 獲取 nginx 鏡像)
    2. 基于運(yùn)行時(shí)鏡像,將打包構(gòu)建完從的產(chǎn)物添加到鏡像,構(gòu)建項(xiàng)目鏡像
    3. 推送項(xiàng)目鏡像到倉(cāng)庫(kù)

.Net Core 7.0 項(xiàng)目鏡像

構(gòu)建所需一個(gè) sdk 鏡像用于打包編譯項(xiàng)目,一個(gè) runtime 鏡像運(yùn)行 .net core 項(xiàng)目,版本選擇對(duì)應(yīng)的 7.0 即可

  • dotnet sdk 鏡像地址:https://hub.docker.com/_/microsoft-dotnet-sdk/
  • dotnet runtime 鏡像地址: https://hub.docker.com/_/microsoft-dotnet-runtime/

構(gòu)建 dotnet sdk 7.0 打包鏡像

  1. 拉取 dotnet sdk 鏡像: docker pull mcr.microsoft.com/dotnet/sdk:7.0

    1. 目前可以直接拉取,若無法拉取則配置國(guó)內(nèi)鏡像源
    2. 臨時(shí)運(yùn)行容器進(jìn)行測(cè)試: docker run -it --rm mcr.microsoft.com/dotnet/sdk:7.0,可以將需要的東西進(jìn)行安裝測(cè)試再編寫 dockerfile
  2. 使用 Dockerfile 構(gòu)建打包鏡像 dotnet-sdk-7.0

    1. 為了便于后期維護(hù),使用 Dockerfile 來構(gòu)建
    2. 目錄文件:dotnet-sdk-7.0/Dockerfile
    3. 基于 sdk 安裝 dotnet-monitor v7.3.2, 文檔 這里只做演示,暫時(shí)沒用上,后續(xù)使用多階段構(gòu)建的時(shí)候可以將其復(fù)制到運(yùn)行時(shí)鏡像中
    4. # 基礎(chǔ)sdk鏡像 v7.0    
      FROM mcr.microsoft.com/dotnet/sdk:7.0
      # 將tools目錄加入環(huán)境變量
      ENV PATH="$PATH:/root/.dotnet/tools"
      # 安裝 dotnet-monitor 
      RUN dotnet tool install -g dotnet-monitor --version 7.3.2
      
    5. 執(zhí)行構(gòu)建:docker build -t dotnet-sdk-7.0 -f ./Dockerfile .
  3. 推送鏡像到 Nexus 倉(cāng)庫(kù)

    1. 鏡像登錄認(rèn)證:docker login push.nexus.devops.test.com -u pusher -p devops666
    2. 打標(biāo)簽: docker tag dotnet-sdk-7.0 push.nexus.devops.test.com/projectbuild/dotnet-sdk-7.0
    3. 推送鏡像: docker push push.nexus.devops.test.com/projectbuild/dotnet-sdk-7.0
    4. 記得清理本地緩存鏡像: docker rmi dotnet-sdk-7.0 && docker rmi push.nexus.devops.test.com/projectbuild/dotnet-sdk-7.0
  4. 使用鏡像

    1. 后續(xù)使用 dotnet sdk 7.0 就可以直接使用 nexus.devops.test.com/projectbuild/dotnet-sdk-7.0 即可
    2. 直接拉取: docker pull nexus.devops.test.com/projectbuild/dotnet-sdk-7.0

構(gòu)建 dotnet runtime 7.0 運(yùn)行時(shí)鏡像

  1. 拉取 dotnet runtime 鏡像: docker pull mcr.microsoft.com/dotnet/runtime:7.0

    1. 臨時(shí)運(yùn)行容器進(jìn)行測(cè)試: docker run -it --rm mcr.microsoft.com/dotnet/runtime:7.0
  2. 使用 Dockerfile 構(gòu)建運(yùn)行時(shí)鏡像

    1. 為了便于后期維護(hù),使用 Dockerfile 來構(gòu)建
    2. 目錄文件:dotnet-runtime-7.0/Dockerfile
    3. 若非需要,可以不安裝軟件,安裝軟件后鏡像會(huì)多個(gè) 100M
    4. # 基礎(chǔ)runtime鏡像 v7.0   
      FROM mcr.microsoft.com/dotnet/aspnet:7.0
      
      # 寫入阿里云鏡像源
      RUN echo " \
      deb http://mirrors.aliyun.com/debian/ bullseye main contrib non-free\n \
      deb-src http://mirrors.aliyun.com/debian/ bullseye main contrib non-free\n \
      \n \
      deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free\n \
      deb-src http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free\n \
      \n \
      deb http://mirrors.aliyun.com/debian/ bullseye-updates main contrib non-free\n \
      deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main contrib non-free\n \
      \n \
      deb http://mirrors.aliyun.com/debian/ bullseye-backports main contrib non-free\n \
      deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main contrib non-free\n \
      " | tee /etc/apt/sources.list
      
      # 安裝 curl&&vim
      RUN apt-get update -y && apt-get install -y curl && apt-get install -y vim
      
    5. 執(zhí)行構(gòu)建:docker build -t dotnet-runtime-7.0 -f ./Dockerfile .
  3. 推送鏡像到 Nexus 倉(cāng)庫(kù)

    1. 鏡像登錄認(rèn)證:docker login push.nexus.devops.test.com -u pusher -p devops666
    2. 打標(biāo)簽:docker tag dotnet-runtime -7.0 push.nexus.devops.test.com/projectbuild/dotnet-runtime-7.0
    3. 推送鏡像: docker push push.nexus.devops.test.com/projectbuild/dotnet-runtime-7.0
    4. 記得清理本地緩存鏡像: docker rmi dotnet-runtime-7.0 && docker rmi push.nexus.devops.test.com/projectbuild/dotnet-runtime-7.0
  4. 使用鏡像

    1. 后續(xù)使用 dotnet runtime 7.0 就可以直接使用 nexus.devops.test.com/projectbuild/dotnet-runtime-7.0 即可
    2. 直接拉取: docker pull nexus.devops.test.com/projectbuild/dotnet-runtime-7.0

構(gòu)建 zhontai 后端項(xiàng)目的應(yīng)用鏡像

制作完鏡像,下面將使用 sdk 鏡像打包項(xiàng)目生成部署文件,再使用 runtime 鏡像部署運(yùn)行。

  1. 下載/克隆項(xiàng)目 admin.core 到服務(wù)器,進(jìn)入項(xiàng)目目錄開始執(zhí)行

    1. # 克隆項(xiàng)目
      git clone https://github.com/zhontai/Admin.Core.git -b v3.7.0
      # 進(jìn)入項(xiàng)目 cd Admin.Core
      cd Admin.Core
      
    2. src 為.net core 項(xiàng)目代碼
  2. 使用 sdk 鏡像進(jìn)行打包,生成部署文件到 publish_output

    1. docker run -i --rm 創(chuàng)建一個(gè)臨時(shí)容器,容器退出后自動(dòng)刪除容器
    2. -v ./build:/build 掛載 MSBuild 屬性文件目錄(./src/Directory.Build.props 中使用)
    3. -v ./src:/src 掛載源碼到容器中
    4. -v ./publish_output:/publish_output掛載構(gòu)建物輸出目錄
    5. --name build_zhontai_api 指定運(yùn)行的容器名稱
    6. nexus.devops.test.com/projectbuild/dotnet-sdk-7.0 sdk 鏡像
    7. /bin/bash -c "xxx"以交互模式運(yùn)行容器,運(yùn)行時(shí)執(zhí)行命令
    8. 若有自定義 nuget 倉(cāng)庫(kù)的包還需掛載 /root/.nuget 目錄,或直接制作在鏡像中
    9. 記得掛載 build 目錄,否則會(huì)提示:Invalid framework identifier
    10. docker run -i --rm \
      -v ./build:/build \
      -v ./src:/src \
      -v ./publish_output:/publish_output \
      --name build_zhontai_api \
      nexus.devops.test.com/projectbuild/dotnet-sdk-7.0 \
      /bin/bash -c 'dotnet publish /src/hosts/ZhonTai.Host -c Release -o /publish_output --runtime linux-x64 --framework net7.0'
      
    11. 執(zhí)行成功后程序包就生成到 publish_output 中了
  3. 使用 runtime 鏡像制作應(yīng)用鏡像

    1. 將上一步的構(gòu)建物 Admin.Core/publish_output 添加到運(yùn)行時(shí)鏡像中
    2. 使用 echo 創(chuàng)建一個(gè) Dockerfile
    3. #創(chuàng)建Dockerfile
      echo 'FROM nexus.devops.test.com/projectbuild/dotnet-runtime-7.0 AS runtime 
      WORKDIR /app 
      COPY ./publish_output /app 
      ENV ASPNETCORE_URLS=http://+:8000 
      ENTRYPOINT ["dotnet", "ZhonTai.Host.dll"]' > Dockerfile
      
    4. 執(zhí)行構(gòu)建:docker build -t zhontai_api .
    5. 運(yùn)行測(cè)試,成功
  4. 推送鏡像到倉(cāng)庫(kù)

    1. #打標(biāo)簽
      docker tag zhontai_api push.nexus.devops.test.com/projectapp/zhontai_api
      #推送
      docker push push.nexus.devops.test.com/projectapp/zhontai_api
      
    2. 推送成功,這里手動(dòng)只構(gòu)建的 latest 版本,若使用自動(dòng)化構(gòu)建,還需構(gòu)建對(duì)應(yīng)版本的鏡像,以支持快速回滾

Vue 3 項(xiàng)目打包

構(gòu)建所需一個(gè) node 鏡像用于 vue 項(xiàng)目打包,nginx 用于部署前臺(tái)項(xiàng)目

  1. node 鏡像地址:https://hub.docker.com/r/library/node ,選擇版本:node:18.17.1
  2. nginx 鏡像地址:https://hub.docker.com/_/nginx ,選擇版本:nginx:1.24.0

構(gòu)建 nodejs 18.17.1 打包鏡像

  1. 拉取 nodejs 鏡像:docker pull node:18.17.1

  2. 將 node 鏡像 vue-node-18 打上標(biāo)簽推送到倉(cāng)庫(kù)

    1. #拉取倉(cāng)庫(kù)
      docker pull node:18.17.1
      # 打標(biāo)簽
      docker tag node:18.17.1 push.nexus.devops.test.com/projectbuild/vue-node-18.17
      #推送
      docker push push.nexus.devops.test.com/projectbuild/vue-node-18.17
      
    2. 測(cè)試使用: docker run -it --rm nexus.devops.test.com/projectbuild/vue-node-18.17 /bin/bash -c "node -v"

構(gòu)建 nginx 1.24 運(yùn)行時(shí)鏡像

  1. 拉取 nginx 鏡像:docker pull nginx:1.24

  2. 將 nginx 鏡像 vue-nginx-1.24 打上標(biāo)簽推送到倉(cāng)庫(kù)

    1. #拉取倉(cāng)庫(kù)
      docker pull nginx:1.24
      # 打標(biāo)簽
      docker tag nginx:1.24 push.nexus.devops.test.com/projectbuild/vue-nginx-1.24
      #推送
      docker push push.nexus.devops.test.com/projectbuild/vue-nginx-1.24
      
    2. 測(cè)試使用: docker run -it --rm nexus.devops.test.com/projectbuild/vue-nginx-1.24 /bin/bash進(jìn)入容器后啟用 nginx,并使用 curl http://localhost 測(cè)試 nginx 可用

構(gòu)建 zhontai 前端項(xiàng)目的應(yīng)用鏡像

  1. 下載/克隆項(xiàng)目 admin.ui.plus 到文件夾

    1. # 克隆項(xiàng)目
      git clone https://github.com/zhontai/admin.ui.plus.git -b v2.2.0
      # 進(jìn)入項(xiàng)目cd admin.ui.plus
      cd admin.ui.plus
      
      # 修改接口地址 
      # 編輯.env.production 中的 VITE_API_URL 配置為接口地址
      
  2. 使用 node 鏡像進(jìn)行打包,生成文件到 dist

    1. docker run -i --rm \
      -v ./:/app \
      --name build_zhontai_webui \
      nexus.devops.test.com/projectbuild/vue-node-18.17 \
      /bin/bash -c 'cd /app 
      npm config set registry https://registry.npmmirror.com
      npm install
      npm run build'
      
    2. 執(zhí)行成功,構(gòu)建輸出到 dist 中
  3. 使用 nginx 鏡像制作應(yīng)用鏡像

    1. # 創(chuàng)建nginx.conf
      
      echo '
      server {
          listen       80;
          server_name  localhost;
          charset utf-8;
          location / {
              root   /usr/share/nginx/html;
              try_files $uri $uri/ /index.html;
              index  index.html index.htm;
          }
      
          #error_page  404              /404.html;
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          }
      }
      '> vue-nginx.conf
      #創(chuàng)建Dockerfile
      echo '
      FROM nexus.devops.test.com/projectbuild/vue-nginx-1.24
      EXPOSE 80
      COPY ./dist /usr/share/nginx/html
      COPY ./vue-nginx.conf /etc/nginx/conf.d/default.conf' > Dockerfile
      
    2. 執(zhí)行構(gòu)建:docker build -t zhontai_webui .
    3. 測(cè)試訪問成功
  4. 推送鏡像到倉(cāng)庫(kù)

#打標(biāo)簽
docker tag zhontai_webui push.nexus.devops.test.com/projectapp/zhontai_webui
#推送
docker push push.nexus.devops.test.com/projectapp/zhontai_webui

將 Docker 應(yīng)用鏡像部署到 K8S

應(yīng)用鏡像打包成功,現(xiàn)在需要將兩個(gè)應(yīng)用精選鏡像部署到 k8s 中

應(yīng)用鏡像的拉取憑證設(shè)置

因?yàn)?nexus 部署在局域網(wǎng),并且配置的域名是局域網(wǎng)域名,所以面臨著如何在 k8s 中訪問 https://nexus.devops.test.com 獲取鏡像的問題,目前我的解決方法時(shí)每個(gè)節(jié)點(diǎn)機(jī)器都配置好對(duì)應(yīng) dns

要想訪問到 nexus 倉(cāng)庫(kù),需要滿足兩個(gè)條件,一個(gè)是訪問到倉(cāng)庫(kù),一個(gè)是倉(cāng)庫(kù)的認(rèn)證

  1. 給 k8s 所有節(jié)點(diǎn)添加 dns 設(shè)置nameserver 192.168.123.214

    1. 使用 docker login nexus.devops.test.com -u puller -p devops666 在宿主機(jī)中登錄倉(cāng)庫(kù)確保可以在節(jié)點(diǎn)拉取鏡像
  2. 創(chuàng)建 nexus 登錄憑證

    1. kubectl create secret \
      docker-registry \
      nexus-login-registry \
      --docker-server=nexus.devops.test.com \
      --docker-username=puller \
      --docker-password=devops666 \
      -n default
      

使用 Deployment 部署應(yīng)用

配置僅供參考,關(guān)于數(shù)據(jù)庫(kù),配置文件,日志,上傳文件等未處理

  • 創(chuàng)建后端部署配置:zhontai_api.yaml

    • ---
      ## 配置服務(wù)
      kind: Service
      apiVersion: v1
      metadata:
        name: app-zhontai-api
        namespace: default
        labels:
          app: app-zhontai-api
      spec:
        selector:
          app: app-zhontai-api
        type: ClusterIP
        ports:
          - name: p80
            port: 80
            targetPort: 8000
      ---
      
      kind: Deployment # 指定創(chuàng)建資源的角色/類型
      apiVersion: apps/v1 # 指定api版本,此值必須在kubectl api-versions中
      metadata: # 資源的元數(shù)據(jù)/屬性
        name: app-zhontai-api # 資源的名字,在同一個(gè)namespace中必須唯一
        namespace: default # 部署在哪個(gè)namespace中
        labels: # 設(shè)定資源的標(biāo)簽
          app: app-zhontai-api
      spec: # 資源規(guī)范字段  
        selector:
          matchLabels:
            app: app-zhontai-api
        replicas: 2 # 聲明副本數(shù)目
        revisionHistoryLimit: 2 # 保留歷史版本
        strategy: # 策略
          rollingUpdate: # 滾動(dòng)更新
            maxSurge: 1 # 最大額外可以存在的副本數(shù),可以為百分比,也可以為整數(shù)
            maxUnavailable: 1 # 示在更新過程中能夠進(jìn)入不可用狀態(tài)的 Pod 的最大值,可以為百分比,也可以為整數(shù)
          type: RollingUpdate # 滾動(dòng)更新策略
        template: # 模版
          metadata: # 資源的元數(shù)據(jù)/屬性
            labels: # 設(shè)定資源的標(biāo)簽
              app: app-zhontai-api
          spec: # 資源規(guī)范字段
            containers:
              - image: nexus.devops.test.com/projectapp/zhontai_api:latest # 容器使用的鏡像地址
                name: app-zhontai-api # 容器的名字
                # 每次Pod啟動(dòng)拉取鏡像策略,三個(gè)選擇 Always、Never、IfNotPresent
                # Always,每次都檢查;Never,每次都不檢查(不管本地是否有);IfNotPresent,如果本地有就不檢查,如果沒有就拉取
                imagePullPolicy: Always 
                resources: # 資源管理
                  # limits: # 最大使用
                  #   cpu: 300m # CPU,1核心 = 1000m
                  #   memory: 500Mi # 內(nèi)存,1G = 1024Mi
                  # requests: # 容器運(yùn)行時(shí),最低資源需求,也就是說最少需要多少資源容器才能正常運(yùn)行
                  #   cpu: 100m
                  #   memory: 100Mi
                livenessProbe: # pod 內(nèi)部健康檢查的設(shè)置
                  httpGet: # 通過httpget檢查健康,返回200-399之間,則認(rèn)為容器正常
                    path: /admin/health # URI地址
                    port: 8000 # 端口
                    scheme: HTTP # 協(xié)議
                  initialDelaySeconds: 10 # 表明第一次檢測(cè)在容器啟動(dòng)后多長(zhǎng)時(shí)間后開始
                  timeoutSeconds: 5 # 檢測(cè)的超時(shí)時(shí)間
                  periodSeconds: 30 # 檢查間隔時(shí)間
                  successThreshold: 1 # 成功門檻
                  failureThreshold: 5 # 失敗門檻,連接失敗5次,pod殺掉,重啟一個(gè)新的pod
                ports:
                  - name: http # 名稱
                    containerPort: 80 # 容器開發(fā)對(duì)外的端口
                    protocol: TCP # 協(xié)議
                env:
                  # 時(shí)區(qū)
                  - name: TZ
                    value: Asia/Shanghai
                  # app name
                  - name: APP_NAME
                    value: app.zhontai.api
                # 掛載
                volumeMounts:
                  - name: app-logs
                    mountPath: /logs #容器中的路徑
            # 卷軸
            volumes:
              - name: app-logs
                hostPath: 
                  path: /app/logs #將日志存放在宿主機(jī)的路徑,需要在宿主機(jī)創(chuàng)建目錄
                  type: Directory
            #重啟策略
            restartPolicy: Always    
            imagePullSecrets: # 鏡像倉(cāng)庫(kù)拉取密鑰
              - name: nexus-login-registry
      
  • 執(zhí)行部署:kubectl apply -f zhontai_api.yaml

  • 創(chuàng)建前端部署配置:zhontai_webui.yaml

    • ---
      ## 配置服務(wù)
      kind: Service
      apiVersion: v1
      metadata:
        name: app-zhontai-webui
        namespace: default
        labels:
          app: app-zhontai-webui
      spec:
        selector:
          app: app-zhontai-webui
        type: ClusterIP
        ports:
          - name: p80
            port: 80
            targetPort: 80
      ---
      
      kind: Deployment # 指定創(chuàng)建資源的角色/類型
      apiVersion: apps/v1 # 指定api版本,此值必須在kubectl api-versions中
      metadata: # 資源的元數(shù)據(jù)/屬性
        name: app-zhontai-webui # 資源的名字,在同一個(gè)namespace中必須唯一
        namespace: default # 部署在哪個(gè)namespace中
        labels: # 設(shè)定資源的標(biāo)簽
          app: app-zhontai-webui
      spec: # 資源規(guī)范字段  
        selector:
          matchLabels:
            app: app-zhontai-webui
        replicas: 2 # 聲明副本數(shù)目
        revisionHistoryLimit: 2 # 保留歷史版本
        strategy: # 策略
          rollingUpdate: # 滾動(dòng)更新
            maxSurge: 1 # 最大額外可以存在的副本數(shù),可以為百分比,也可以為整數(shù)
            maxUnavailable: 1 # 示在更新過程中能夠進(jìn)入不可用狀態(tài)的 Pod 的最大值,可以為百分比,也可以為整數(shù)
          type: RollingUpdate # 滾動(dòng)更新策略
        template: # 模版
          metadata: # 資源的元數(shù)據(jù)/屬性
            labels: # 設(shè)定資源的標(biāo)簽
              app: app-zhontai-webui
          spec: # 資源規(guī)范字段
            containers:
              - image: nexus.devops.test.com/projectapp/zhontai_webui:latest # 容器使用的鏡像地址
                name: app-zhontai-webui # 容器的名字
                # 每次Pod啟動(dòng)拉取鏡像策略,三個(gè)選擇 Always、Never、IfNotPresent
                # Always,每次都檢查;Never,每次都不檢查(不管本地是否有);IfNotPresent,如果本地有就不檢查,如果沒有就拉取
                imagePullPolicy: Always 
                resources: # 資源管理
                  # limits: # 最大使用
                  #   cpu: 300m # CPU,1核心 = 1000m
                  #   memory: 500Mi # 內(nèi)存,1G = 1024Mi
                  # requests: # 容器運(yùn)行時(shí),最低資源需求,也就是說最少需要多少資源容器才能正常運(yùn)行
                  #   cpu: 100m
                  #   memory: 100Mi
                livenessProbe: # pod 內(nèi)部健康檢查的設(shè)置
                  httpGet: # 通過httpget檢查健康,返回200-399之間,則認(rèn)為容器正常
                    path: / # URI地址
                    port: 80 # 端口
                    scheme: HTTP # 協(xié)議
                  initialDelaySeconds: 10 # 表明第一次檢測(cè)在容器啟動(dòng)后多長(zhǎng)時(shí)間后開始
                  timeoutSeconds: 5 # 檢測(cè)的超時(shí)時(shí)間
                  periodSeconds: 30 # 檢查間隔時(shí)間
                  successThreshold: 1 # 成功門檻
                  failureThreshold: 5 # 失敗門檻,連接失敗5次,pod殺掉,重啟一個(gè)新的pod
                ports:
                  - name: http # 名稱
                    containerPort: 80 # 容器開發(fā)對(duì)外的端口
                    protocol: TCP # 協(xié)議
                env:
                  # 時(shí)區(qū)
                  - name: TZ
                    value: Asia/Shanghai
                  # app name
                  - name: APP_NAME
                    value: app.zhontai.webui
            #重啟策略
            restartPolicy: Always    
            imagePullSecrets: # 鏡像倉(cāng)庫(kù)拉取密鑰
              - name: nexus-login-registry
      
  • 執(zhí)行部署:kubectl apply -f zhontai_webui.yaml

配置 Ingress 使用域名訪問

  • 部署成功后添加對(duì)應(yīng) ingress 配置,即可使用域名訪問

前端項(xiàng)目需要修改為對(duì)應(yīng)的接口地址

確保綁定的域名正常解析到 k8s 節(jié)點(diǎn),即可使用域名訪問了,我這里使用的 DnsServer 泛解析,故可以直接訪問,

至此,一步步將一個(gè)單體項(xiàng)目部署到了 k8s 中,僅供參考,實(shí)際如果時(shí)微服務(wù),還設(shè)計(jì)到一些通用和環(huán)境的配置,后面再慢慢分享。

根據(jù)上面的步驟,后面分享將其整理成腳本,以便后續(xù)可以直接使用。

相關(guān)文檔

  • 相關(guān)文章

    • 一篇適合躺收藏夾的 Nexus3 搭建 NuGet&Docker 私有庫(kù)的安裝使用總結(jié)
    • 一篇可供參考的 K8S 落地實(shí)踐經(jīng)驗(yàn)
    • 前后端都用得上的 Nginx 日常使用經(jīng)驗(yàn)
  • 參考文章

    • 如何創(chuàng)建一個(gè)帶診斷工具的.net 鏡像

后語

本文始于2023末,結(jié)束于2024始。

2023的最后兩個(gè)月,是這幾年以來,學(xué)習(xí),產(chǎn)出最高的的兩個(gè)月。

始于國(guó)慶,不止步于元旦。

新年快樂!

總結(jié)

以上是生活随笔為你收集整理的推送到 Nexus 仓库->部署为 k8s 服务实践">构建 dotnet&vue 应用镜像->推送到 Nexus 仓库->部署为 k8s 服务实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。