OKD 部署.netcore项目 电脑版发表于:2021/8/3 17:25 ![](https://img.tnblog.net/arcimg/hb/6070b5726c184417b10c0c4ca6546931.png) >#OKD 部署.netcore项目 [TOC] 创建.netcore测试项目(Webapp) ------------ ```bash dotnet --version dotnet new webApp -o myWebApp --no-https dotnet run cd myWebApp dotnet run ``` ![](https://img.tnblog.net/arcimg/hb/d1ebb5272c554948b896ebebf566ccf8.png) ![](https://img.tnblog.net/arcimg/hb/c6c09c4edd284c3889a0266c89dfb44c.png) tn2>Ctrl+c停止运行后,发布该项目 ```bash # 发布时项目框架版本(-f)可查看:https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks dotnet publish myWebApp -f netcoreapp3.1 -c Release ``` ![](https://img.tnblog.net/arcimg/hb/c50a18eaffa44ff1bd268355cfdd8043.png) 在OKD中创建项目 ------------ tn2>使用aidasi用户创建mywebapp项目空间。 ```bash oc login -u aidasi -p aidasi oc new-project mywebapp # 查看当前命名空间 oc whoami --show-context ``` ![](https://img.tnblog.net/arcimg/hb/2621ccbc9c0e44f1ba6dbeeca4fcaa21.png) 添加镜像流 ------------ tn2>先添加dotnet 镜像流。在下列链接中找到okd部署的系统所对应的dotnet的镜像流: https://github1s.com/redhat-developer/s2i-dotnetcore/blob/master/dotnet_imagestreams_centos.json 下载下来后进行安装 这里我们就添加到当前项目(mynetcore)中,所以我图中多了一个openshift是错的,请按下面命令执行 ```bash # 安装 oc create -f dotnet_imagestreams_centos.json # 查看dotnet 版本 oc get is dotnet --template='{{range .spec.tags}}{{.name}}{{"\n"}}{{end}}' ``` ![](https://img.tnblog.net/arcimg/hb/fb67b163e4da4427b730a11381080a9d.png) tn2>我们看到有关很多.net的环境镜像流。 接着我们需要将其镜像上传到我们私有镜像库中。 搭建私有库请参考:https://www.tnblog.net/hb/article/details/6291 ![](https://img.tnblog.net/arcimg/hb/15528cea82054bd3a2563fd53c87081f.png) ![](https://img.tnblog.net/arcimg/hb/22b9f516f8924d57a1473fd7e1a2934b.png) ![](https://img.tnblog.net/arcimg/hb/0dc880e3b45c4708983d5bd429e0a45d.png) tn2>我们在harbor界面上看看有没有这个mynetcore项目,没有是需要进行创建项目的。 ![](https://img.tnblog.net/arcimg/hb/a3801bc9e73c4a8d9ec845d4cd78528c.png) tn2>这里我们只需要dotnet3.1的镜像即可。可以安装上图底部进行安装。 ```bash docker pull registry.centos.org/dotnet/dotnet-31-centos7:latest docker tag registry.centos.org/dotnet/dotnet-31-centos7:latest 10.211.55.8:8060/mynetcore/dotnet:3.1 docker push 10.211.55.8:8060/mynetcore/dotnet:3.1 ``` tn>在构建的过程中,我们可能需要build的服务去进行构建。所以我们需要为build服务添加我们的docker登录 ```bash # 复制该文件到当前目录下 cp ~/.docker/config.json k8s-docker.json # 添加到全局secret oc create secret generic harborkey --from-file=.dockerconfigjson=./k8s-docker.json --type=kubernetes.io/dockerconfigjson # 为builder账户添加拉取与上传的登陆secret oc secrets link builder harborkey --for=pull,mount ``` tn2>最后来看看界面上,builder是不是首先使用harborkey为顺序 ![](https://img.tnblog.net/arcimg/hb/5bd1fb4c5a7d42368271437970e0287d.png) ![](https://img.tnblog.net/arcimg/hb/2d0f92477a324ff8a82c74b85b5955c1.png) ![](https://img.tnblog.net/arcimg/hb/2ce4f09a896d4f44b64c965d226ddf68.png) tn2>这里secrets必须以harborkey为第一位哦,因为其他secret有harbor登录的账号与密码的话,那可能就使用前者而不使用我们现在创建的。 ![](https://img.tnblog.net/arcimg/hb/0371916d845049a6aa5d9b6e57d8b06b.png) 构建、部署与访问 ------------ tn2>创建一个构建配置。我们将使用包含.net5 SDK和运行时的dotnet3.1镜像。实用二进制内容构建应用程序 ```bash ./oc new-build --name=my-web-app dotnet:3.1 --binary=true ``` ![](https://img.tnblog.net/arcimg/hb/e4d0758471a74f409c32c998c70e7d68.png) tn2>指定刚刚发布的mywebtest项目目录路径进行构建。 ```bash ./oc start-build my-web-app --from-dir=/Users/hebo/myfile/cshrp/test/myWebApp/bin/Release/netcoreapp3 .1/publish ``` tn2>我们可以打开另外一个窗口,查看构建过程与构建日志 ```bash # 获取所有构建 oc get bc -n mywebapp # 获取构建日志 oc logs -f bc/my-web-app -n mywebapp ``` ![](https://img.tnblog.net/arcimg/hb/4a1627b55ccf4c98ad0bd2ba2c1c62b4.png) tn2>我们可以看到已经构建成功了 ![](https://img.tnblog.net/arcimg/hb/1e795145115543aa962d84a333986179.png) tn2>这是一些日志信息 ![](https://img.tnblog.net/arcimg/hb/c8322812683c4161a08792c6ba4a5443.png) tn2>接着查看我们`my-web-app`的镜像流。 ```bash oc get is -n mynetcore ``` ![](https://img.tnblog.net/arcimg/hb/d2aaa0e480524359bec191f2dbeaf5c6.png) tn2>部署创建应用 ```bash oc new-app --docker-image=10.211.55.8:8060/mynetcore/my-web-app --name=my-web-app ``` ![](https://img.tnblog.net/arcimg/hb/f60da67fe00f4366b68bffff1de611c0.png) ![](https://img.tnblog.net/arcimg/hb/bfb89a9f53dd45308a8fa788f9682bbd.png) tn2>接着创建路由方便我们访问 ```bash oc expose svc/my-web-app # 查看路由 oc get route ``` ![](https://img.tnblog.net/arcimg/hb/075143f244234397979bc0f61b71fc16.png) ![](https://img.tnblog.net/arcimg/hb/fa5524b5f4c04d8db24e013c7211fdbf.png) tn2>点开我们右下角链接,很尴尬 ![](https://img.tnblog.net/arcimg/hb/ed57b5640ead47a5a6008a044d8a4e44.png) tn2>我们通过代理进行访问 ```bash # 在本地运行 kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' --port=8009 ``` tn2>访问地址:http://127.0.0.1:8009/api/v1/namespaces/mynetcore/services/my-web-app:8080/proxy/ 关于kubectl proxy请参考:https://www.tnblog.net/hb/article/details/4681 ![](https://img.tnblog.net/arcimg/hb/bcfca964422b4b0bb42bc7124120d742.png)