首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >发布dotNetCore程序到Kubernetes

发布dotNetCore程序到Kubernetes

作者头像
oec2003
发布2019-07-19 17:48:01
8701
发布2019-07-19 17:48:01
举报
文章被收录于专栏:不止dotNET不止dotNET

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

环境

  • Mac:10.13.6
  • Docker:2.0.0.3 (31259)
  • Kubernetes:1.10.11
  • netCore:2.1

基本步骤

  1. 创建dotnetCore示例项目;
  2. 本地搭建私有registry,或者使用DockerHub,本文采用搭建私有仓库的方式;
  3. dotnetCore示例项目发布到私有仓库中;
  4. 发布私有仓库镜像到Kubernetes

创建示例项目

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

dotnet new webApp -o k8s-netcore-demo --no-https
  • webApp:创建一个webApp类型的项目
  • -o:创建项目到指定目录
  • --no-https:不启用https

2、将示例程序运行起来

cd k8s-netcore-demo
dotnet run

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

搭建私有仓库

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

发布netcore程序到私有仓库

1、发布netcore程序

dotnet publish

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

FROM microsoft/dotnet: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-demo
docker push localhost:8888/k8s-netcore-demo

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

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

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

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

发布镜像到Kubernetes

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

apiVersion: apps/v1
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

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

  • 所有配置为k8s-netcore-demo的地方是构建的镜像的名称
  • image的值为localhost:8888/k8s-netcore-demo,这个是镜像发布到本地仓库中的地址;
  • namespace的值配置为创建的namespace的名称。

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

kubectl create namespace k8s-netcore

3、执行deploy.yaml文件

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

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

kubectl get deploy -n k8s-netcore

5、查看资源情况

kubectl get svc -n k8s-netcore

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

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

kubectl proxy

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

本文中用到的命令

#创建dotNetCore项目
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进行深入的学习。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不止dotNET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
  • 基本步骤
  • 创建示例项目
  • 搭建私有仓库
  • 发布netcore程序到私有仓库
  • 发布镜像到Kubernetes
  • 本文中用到的命令
  • 总结
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档