发布dotNetCore程序到Kubernetes

640?wx_fmt=jpeg

上一篇《Mac中搭建Kubernetes》介绍了怎样在Mac中搭建单节点的Kubernetes,本文将编写一个dotNetCore的示例程序,并发布到Kubernetes中。

环境

基本步骤

  1. 创建dotnetCore示例项目;

  2. 本地搭建私有registry,或者使用DockerHub,本文采用搭建私有仓库的方式;

  3. dotnetCore示例项目发布到私有仓库中;

  4. 发布私有仓库镜像到Kubernetes

创建示例项目

1、在命令行执行命令创建一个名为k8s-netcore-demo的项目

dotnet new webApp -o k8s-netcore-demo --no-httpsno-https

2、将示例程序运行起来

cd k8s-netcore-demodotnet run
dotnet run

运行正常的话,访问http://localhost:5000会出现下图界面

640?wx_fmt=png

搭建私有仓库

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

发布netcore程序到私有仓库

1、发布netcore程序

dotnet publish

640?wx_fmt=png

2、在publish目录中创建Dockfile文件,文件内容如下:

FROM microsoft/dotnet:2.1-aspnetcore-runtimeCOPY . /appWORKDIR /appEXPOSE 80/tcpENTRYPOINT ["dotnet", "k8s-netcore-demo.dll"]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-demodocker push localhost:8888/k8s-netcore-demo8888/k8s-netcore-demo
docker push localhost:8888/k8s-netcore-demo

默认情况下,你执行docker push时会出现下面错误

640?wx_fmt=png

Mac中的Docker中做如下设置即可解决

640?wx_fmt=png

设置好重启Docker之后,再次执行docker push,可以正常将镜像推送到私有仓库中。

640?wx_fmt=png

推送完成后,浏览器中访问http://localhost:8888/v2/_catalog,如果如下图所示,说明推送成功了。

640?wx_fmt=png

发布镜像到Kubernetes

1、创建Kubernetes的部署文件deploy.yaml,部署文件为yaml文件格式。文件内容如下:

apiVersion: apps/v1kind: Deploymentmetadata:  name: k8s-netcore-demo  namespace: k8s-netcore  labels:    k8s-app: k8s-netcore-demospec:  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: ServiceapiVersion: v1metadata:  labels:    k8s-app: k8s-netcore-demo  name: k8s-netcore-demo  namespace: k8s-netcorespec:  type: NodePort  ports:    - port: 80      targetPort: 80  selector:    k8s-app: k8s-netcore-demo
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

上面配置文件中属性的含义不用先去弄清楚,保证程序能够正常跑起来是关键。

2、因为在deploy.yaml文件中指定了namespace,所以先创建一个名为k8s-netcore的namespace

kubectl create namespace k8s-netcore

3、执行deploy.yaml文件

kubectl create -f deploy.yaml --validate#加上 --validate 参数,当yaml文件有错误时,会给出提示--validate
#加上 --validate 参数,当yaml文件有错误时,会给出提示

4、使用kubectl get命令查看创建情况

kubectl get deploy -n k8s-netcore


640?wx_fmt=png

5、查看资源情况

kubectl get svc -n k8s-netcore


640?wx_fmt=png

上图中可以看出,暴露出来的端口为32527,浏览器中访问http://localhost:32527,如下图:

640?wx_fmt=png

6、启动代理,在Dashboard中查看运行情况

kubectl proxy


640?wx_fmt=png

怎样访问Dashboard,可以查看《Mac中搭建Kubernetes》中相关介绍。

本文中用到的命令

#创建dotNetCore项目dotnet new webApp -o k8s-netcore-demo --no-https#将dotNetCore程序构建为镜像docker build -t k8s-netcore-demo .#创建namespacekubectl create namespace k8s-netcore#部署Kuberneteskubectl create -f deploy.yaml --validate#查看指定命名空间的部署情况kubectl get deploy -n k8s-netcore#查看指定命名空间的资源情况kubectl get svc -n k8s-netcore
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进行深入的学习。

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Cake] 2. dotnet 全局工具 cake

在上篇博客[Cake] 1. CI中的Cake中介绍了如何在CI中利用Cake来保持与CI/CD环境的解耦。当时dotnet 2.1还未正式发布,dotnet 还没有工具的支持,使得安装cake非常麻烦。不过随着 dotnet tool 的加入,这一问题得到了很好的解决。目前安装cake&am…

官博翻译 | .NET Core 即 .NET 的未来

点击上方蓝字关注“汪宇杰博客”文 / Scott Hunter译 / 汪宇杰我们在2014年11月推出了.NET Core 1.0。.NET Core 的目标是借鉴我们过去12年构建、发布和服务.NET Framework的经验去构建更好的产品。这些改进如:并行安装(您可以安装新版本,而…

微软发布ML.NET 1.0,可一键添加机器学习模型

今天,我们很高兴宣布发布 ML.NET 1.0。ML.NET 是一个免费的、跨平台的开源机器学习框架,旨在将机器学习(ML)的强大功能引入.NET 应用程序。ML.NET GitHub:https://github.com/dotnet/machinelearning入门 http://dot.…

目前下载VS2017你可能会遇到这个坑

可能现在大伙都已经开始使用VS2019进行开发了。VS2019的下载使用也都很简单。由于工作需要,今天要在笔记本上安装VS2017,结果发现,VS2017的下载变得不是那么容易了,官方的下载方式也隐藏的很深,来来回回折腾了好一会才下载下来&am…

代码整洁之道(Clean Code)- 读书笔记

Sorry, 许久未更新文章了,主要因为刚刚换了一家新公司,忙于组建团队(建设、招聘、流程、框架等)与熟悉公司业务,还有领导给的其他工作等等,实在是没有时间更新了。最近在和团队分享Bob大叔的《Clean Code》…

微软Build 2019大会.NET课程视频汇总

点击上方蓝字关注“汪宇杰博客”5月6日至8日,微软在西雅图召开了Build 2019开发者大会。我们关注的.NET领域也迎来了许多激动人心的改进。本文汇总了Build 2019大会上关于.NET的已经公开的视频,欢迎大家观看学习!// 注意:以下视频…

黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程)

微软在几天前的build大会上展示了Windows Terminal的威力,由于官宣要在6月中旬才上Microsoft store,还有一个多月要等呢。好在代码已公布在 github, 于是决定自己 build 后体验一番。遇到不少坑,大概整理一下流程,分享给大家。如果…

aelf帮助C#工程师10分钟零门槛搭建DAPP私有链开发环境

aelf是一个可扩展的去中心化云计算区块链平台,支持高性能合约并行执行、原生多链数据交互、存储使用高性能分布式数据库。aelf整个系统可以在windows、osx及linux运行,团队在osx环境下开发,基于.net core DAPP开发1.安装.net core及protobufh…

Build 2019 上微软的开源动作有点不一样

微软今年举办的 Build 开发者大会可谓是抢足风头,大会第一天就放了不少大招:宣布新的命令行终端 Windows Terminal、Windows 10 的 Linux 子系统 WSL 2 将运行真正的 Linux 内核、跳过 .NET 4 宣布 .NET 5 的计划、宣布 Web 版本的 VS Code (Visual Stud…

P1437 [HNOI2004]敲砖块

P1437 [HNOI2004]敲砖块 题意: 在一个凹槽中放置了 n 层砖块、最上面的一层有 n 块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示: 14 15 4 3 2333 33 76 22 …

在kubernetes 集群内访问k8s API服务

所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户)。基于角色的访问控制(“RBAC”)使用“rbac.authorization.k8s.io”API 组来实现授权控制,允…

.NET Core之只是多看了你一眼

技术学习是一件系统性的事情,如果拒绝学习,那么自己就会落后以至于被替代。.NET也是一样,当开源、跨平台成为主流的时候,如果再故步自封,等待.NET的就是死路一条,幸好.NET Core问世了,社区反响积…

TOTP 介绍及基于 C# 的简单实现

TOTP 介绍及基于 C# 的简单实现IntroTOTP 是基于时间的一次性密码生成算法,它由 RFC 6238 定义。和基于事件的一次性密码生成算法不同 HOTP,TOTP 是基于时间的,它和 HOTP 具有如下关系:TOTP HOTP(K, T)HOTP(K,C) Truncate(HMAC-…

微软携手红帽,共筑开源新未来

官宣了,官宣了!微软携手红帽正式推出重要力作Global Azure 公有云第一款联合管理的 OpenShift 产品,业界欢腾!自此,微软在拥抱云计算开源之路上,多了一股强劲的推动力。5月初刚刚举办的全球 Red Hat Summit…

.NET Core 3.0之深入源码理解Startup的注册及运行

开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点。通过使用Startup,可以配置化处理所有向应用程序所做的请求的管道,同时也可以减少.NET应用程序对单一服务器的依赖性,使我们…

置换群,Polya引理和burnside引理(等价类计数问题)

参考文章: 等价类计数问题 Burnside引理&Plya定理 Burnside引理与Polya定理 置换群和Burnside引理,Polya定理 概念引入: 离散数学应该学过置换群的相关概念,置换本质就是映射,可以理解成一个正方形绕其中心逆时针…

时隔两年的重大更新,微软发布.NET Framework 4.8

微软发布了.NET Framework 4.8,这是两年来.NET 框架的第一个重大更新。新版本包含多个产品领域的改进,其中包括 Windows 窗体、WCF、WorkFlow 和 WPF。它还在基类库(BCL)和通用语言运行时(CLR)中有一些更新…

EventStore文件存储设计

背景ENode是一个CQRSEvent Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删除的场景,所以内部实现会比较复杂,性能也相对比…

.NET Core 如何禁止.resx文件自动生成Designer.cs

点击上方蓝字关注“汪宇杰博客”在 Visual Studio 中,如果我们在一个 .NET Core 工程里加入了一个资源文件(.resx),那么你会发现有个对应的 .Designer.cs 文件被自动生成了,每次资源文件的内容有变化,这个设…

P1450 [HAOI2008]硬币购物

P1450 [HAOI2008]硬币购物 题意: 共有 4 种硬币。面值分别为c1,c2,c3,c4c_1,c_2,c_3,c_4c1​,c2​,c3​,c4​。 某人去商店买东西,去了 n 次,对于每次购买,他带了 did_idi​枚 i 种硬币,想购买 s 的价值的东西。请问…