zoukankan      html  css  js  c++  java
  • Docker系列(三):将.Net Core Api部署到Kubernetes (K8s)中

    1.新建一个WebApi项目,并添加Dockerfile文件:

    FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM microsoft/dotnet:2.1-sdk AS build
    WORKDIR /src
    Copy . .
    
    RUN dotnet restore
    RUN dotnet build -c Release -o /app
    
    FROM build as publish
    RUN dotnet publish -c Releease -o /app
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "k8s-demo.dll"]

    编译一下,然后通过Docker打包成镜像:docker build -t wei/k8s-demo .

    完成后通过docker images查看下:

     然后将其推送到Docker仓库中,所以你需要去Docker官网注册一个账户,注册完成后进行登录:docker login --username  xxx

    xxx是你的用户名,接着会让你输入密码,验证成功后会提示Login Succeeded

    将镜像推送到仓库这个步骤是不能省略的,因为编写K8s部署文件的时候,需要从仓库拉取镜像,因为服务器在国外,所以会有点慢。

    还有一个问题就是你的镜像名字需要用你的Docker用户名开头,比如xxx/k8s-demo 这种,xxx是你Docker的用户名,不然上传会提示没有权限:

    镜像推送到仓库之后我们就需要编写k8s的部署文件了 :deploy.yaml

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      labels:
        k8s-app: k8s-demo
      name: k8s-demo
      namespace: netcore
    spec:
      replicas: 2
      selector:
        matchLabels:
          k8s-app: k8s-demo
      template:
        metadata:
          labels:
            k8s-app: k8s-demo
        spec:
          containers:
          - name: k8s-demo
            image: xxx/k8s-demo
            ports:
            - containerPort: 80  
    
    ---
    # ------------------- Service ------------------- #
    
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: k8s-demo
      name: k8s-demo
      namespace: netcore
    spec:
      type: NodePort
      ports:
        - port: 80
          targetPort: 80
      selector:
        k8s-app: k8s-demo

    需要说明两个问题,标红的image就是我们推送到仓库的镜像,namespace是资源空间名称,也就是我们当前这个pod要运行的资源空间,所以我们需要创建一下这个资源空间:

    kubectl create namespace netcore

    创建完成后可以通过以下命令进行查看:kubectl get namespace netcore

    然后我们就可以运行我们的部署文件了:kubectl create -f deploy.yaml

     

    正常情况下会有两个提示,分别是deployment.apps "k8s-demo" created 和 service "k8s-demo" created

    我在这步遇到的问题是yaml的格式问题,因为缩进不符合要求,折腾了好久,这个对格式的要求很严格,完成之后我们可以通过以下命令查看:kubectl get svc -n netcore 

    我上面图中已经有了,结果显示我的这个pod运行在31080端口,此时我们可以通过浏览器测试:

    或者我们也可以通过k8s控制台查看,如果没启动代理的通过kubectl proxy命令启动代理,然后访问以下地址:

    http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=netcore

     将命名空间选到我们的netcore即可看到我们已经运行的服务k8s-demo,到此大功告成!!!

    补充一下,当我们关机下次启动会发现k8s处于stop状态,这个时候我们需要重启下Docker,并使用以下命令切换到对应的Kubernetes context :

    kubectl config use-context docker-for-desktop

  • 相关阅读:
    cnblog项目--20190309
    django js引入失效问题
    Python老男孩 day16 函数(六) 匿名函数
    Python老男孩 day16 函数(五) 函数的作用域
    Python老男孩 day15 函数(四) 递归
    Python老男孩 day15 函数(三) 前向引用之'函数即变量'
    Python老男孩 day15 函数(二) 局部变量与全局变量
    Python老男孩 day14 函数(一)
    Python老男孩 day14 字符串格式化
    Python老男孩 day14 集合
  • 原文地址:https://www.cnblogs.com/weiBlog/p/10016816.html
Copyright © 2011-2022 走看看