1. imodel-bank minikube部署示例

大部分内容翻译自此文档

1.1. 总览

minikube imodel-bank

1.1.1. 环境设置

  • Windows 主机

    • kubectl

      Install and Set Up kubectl on Windows

    • helm

      通过 chocolatey 安装

      choco install kubernetes-helm

    • istioctl

      下载 istioctl 1.9.3

      解压istioctl.exe到系统path路径下

    • minikube

      下载 minikube installer v1.19.0

    • Docker-CLI

      Docker Desktop包含Docker-CLI

    • storage service

      额外依赖:node12, yarn

      需下载imodel-bank源码

      在imodel-bank\storage-service文件夹下运行 (占用当前命令行):

      yarn
      yarn build
      mkdir rootDir
      node $pwd\lib\Run.js --rootDir $pwd/rootDir --configDir $pwd/../config/minikube
      

      dev版直接npm install安装会有依赖包版本不存在问题,可用yarn过程中按照提示选择依赖版本(0.14.0测试可用)

    • smb

      准备imodelbank证书License.belic和users.sqlite用户数据

      • 需要打开Windows Features 中的smb1.0

      • 创建名字为imodel-bank-fs的共享文件夹

      • 将License.belic复制到imodel-bank-fs文件夹中

      • 在imodel-bank-fs中创建basic-auth-service文件夹

      • 将users.sqlite复制到basic-auth-service文件夹中

  • minikube 虚拟机

    启动minikube

    minikube start --cpus 4 --memory 8192 --disk-size=50GB

    --disk-size必须设置,默认大小不够imodel-bank镜像构建

    国内镜像加速flags(可选):

    --image-mirror-country cn

    --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.19.0.iso

    --registry-mirror=https://docker.mirrors.ustc.edu.cn

    • istio

      • 安装

        Windows PowerShell:istioctl install --set components.cni.enabled=false --istioNamespace istio-system

      • 暴露服务(可选,占用当前命令行)

        Windows PowerShell: minikube tunnel

    • Docker

      • 使用 minikube 内的 Docker

        Windows PowerShell: & minikube -p minikube docker-env | Invoke-Expression

        仅在执行过该命令的窗口有效

    • 挂载smb共享文件夹

      • SSH 连接 Minikube: minikube ssh

      • 获取Windows主机IP:

        hostIP=$(route -n | grep ^0.0.0.0 | awk '{ print $2 }')
        
      • 创建用于挂载的文件夹:

        sharedFolderName="imodel-bank-fs"
        mountDir="/mnt/$sharedFolderName"
        sudo mkdir -p $mountDir
        
      • 挂载smb共享文件夹(修改user,domain为你的Windows账户):

        user="name.surname"
        domain="domain.com"
        smbPath="//$hostIP/$sharedFolderName"
        sudo mount -t cifs -o username=$user,domain=$domain,nobrl,soft,rw,dir_mode=0777,file_mode=0777 $smbPath $mountDir
        
      • 根据提示输入Windows用户密码

      • 卸载命令:

        sudo umount $mountDir
        

1.1.2. 软件源优化(可选)

apt源替换为ustc

Dockerfile中所有apt命令前加上替换软件源命令

sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list && \
apt-get clean && \

1.2. 构建镜像

前置条件:当前命令行使用 minikube 内 Docker 运行环境

源码或prod包构建二选一

1.2.1. a.通过源码构建准备

下载源码

[imodel-bank](https://dev.azure.com/bentleycs/iModelTechnologies/_git/imodel-bank

Windows用户开始前必读

在Windows下默认设置的git会替换所有LF为CRLF从而导致所有sh文件在Linux下不可用(报错为:No such file or directory)

禁止自动转换:

git config --global core.autocrlf false

如果已经被替换,请参考 此文章 处理

package 访问权限

azure tokens 创建token,设置Pakaging权限

.npmrc中加上registry配置,$B64_TOKEN替换为上一步获得的token的base64编码

@bentley:registry=https://bentleycs.pkgs.visualstudio.com/_packaging/Packages/npm/registry/
//bentleycs.pkgs.visualstudio.com/_packaging/Packages/npm/registry/TOKEN:username=VssSessionToken
//bentleycs.pkgs.visualstudio.com/_packaging/Packages/npm/registry/:_password=$B64_TOKEN
//bentleycs.pkgs.visualstudio.com/_packaging/Packages/npm/registry/:email=not-used@example.com

1.2.2. b.通过prod包构建准备

下载prod包

prod包下载

导入minikube配置

复制源码config/minikube文件夹到prod包config文件夹中

1.2.3. 构建

使用下面两种方法选择其中一种

  • powershell脚本构建所有镜像

    ./dockerfiles.ps1 -b *

  • 手动逐个构建

    • Dockerfile.builder:

      docker build -f Dockerfile.builder -t imodel-bank-builder .
      
    • Dockerfile.orchestrator:

      docker build -f Dockerfile.orchestrator -t imodel-bank-orchestrator .
      
    • Dockerfile.gateway:

      docker build -f Dockerfile.gateway -t imodel-bank-gateway .
      
    • Dockerfile.licensing:

      docker build -f Dockerfile.licensing -t imodel-bank-licensing .
      
    • Dockerfile.imodel-manager:

      docker build -f Dockerfile.imodel-manager -t imodel-bank-imodel-manager .
      
    • Dockerfile.imodel-bank:

      docker build -f Dockerfile.imodel-bank -t imodel-bank .
      
    • Dockerfile.native-jobs:

      docker build -f Dockerfile.native-jobs -t native-jobs .
      
    • Dockerfile.checkpoint-job-scheduler:

      docker build -f Dockerfile.checkpoint-job-scheduler -t checkpoint-job-scheduler .
      
    • Dockerfile.utility-jobs:

      docker build -f Dockerfile.utility-jobs -t utility-jobs .
      

1.3. 配置文件修改

  • ./config/minikube/logging.config.json5
    • 注释或删除seq相关内容 (可选:安装seq并修改seq.hostURL)
  • ./config/minikube/server.config.json5

    • storage-service.hostname改为Windows主机IP

      可通过以下命令获取Windows主机IP:

      minikube ssh "route -n | grep ^0.0.0.0 | awk '{ print $2 }'"

      注意:storage-service.hostname仅需IP,不要用http://IP/

1.4. 部署

  • 创建namespace:

    kubectl create namespace imodelbank

  • 设置标签

    kubectl label namespace imodelbank istio-injection=enabled --overwrite

  • 切换当前目录到 imodel-bank/helm 项目目录

  • 部署 iModelBank Licensing

    helm install imodel-bank-licensing `
    ./helm/imodel-bank-licensing `
    --namespace imodelbank `
    -f ./helm/values-dev.yaml `
    --set-file config.data.logging\.config\.json5=./config/minikube/logging.config.json5 `
    --set-file config.data.server\.config\.json5=./config/minikube/server.config.json5 `
    --set storage.iModelStorageType="storageservice" `
    --set storage.serviceStateStorageType="localhost" `
    --set storage.mountDir="/mnt/imodel-bank-fs" `
    --set appVersion=0.0.1
    
  • 部署 iModelBank

    helm install imodel-bank `
    ./helm/imodel-bank `
    --namespace imodelbank `
    -f ./helm/values-dev.yaml `
    --set-file config.data.logging\.config\.json5=./config/minikube/logging.config.json5 `
    --set-file config.data.server\.config\.json5=./config/minikube/server.config.json5 `
    --set istio.virtualService.hosts[0]=$(kubectl get svc -n istio-system --field-selector='metadata.name=istio-ingressgateway' -o jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}') `
    --set storage.iModelStorageType="storageservice" `
    --set storage.serviceStateStorageType="localhost" `
    --set storage.mountDir="/mnt/imodel-bank-fs" `
    --set appVersion=0.0.1
    
  • 删除部署

    helm delete imodel-bank -n imodelbank
    helm delete imodel-bank-licensing -n imodelbank
    

1.5. 访问

使用 minikube tunnel 暴露服务后,可通过service IP访问

1.5.1. basic auth设置

  • 用户名:TestUserName.TestUserLastName@TestDomain.com
  • 密码:TestUserPassword

1.6. 镜像发布

确认已 docker login 到目标镜像注册表

./dockerfiles.ps1 -b * -t $tag -cr $Registry 
./dockerfiles.ps1 -push * -t $tag -cr $Registry

1.7. 镜像清理

./dockerfiles.ps1 -clean

1.8. 疑难杂症

1.8.1. RabbitMQ容器报错,报错内容 …… No Permission

RabbitMQ用户问题,文件夹默认权限为755无法写入。对 rabbit-mq 文件夹运行 chmod -R 777 rabbit-mq(775未测试)

1.8.2. 各种job失败,(报错为:No such file or directory)

参考 Windows用户开始前必读

results matching ""

    No results matching ""