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

  • 相关阅读:
    算法提高 12-1三角形
    poj3723_Conscription
    算法提高 8-1因式分解
    算法提高 道路和航路
    算法训练 安慰奶牛
    最短路问题(Bellman/Dijkstra/Floyd)
    最小生成树 prime+heap
    算法训练 最短路
    算法训练 最大的算式
    poj3255 Roadblocks
  • 原文地址:https://www.cnblogs.com/weiBlog/p/10016816.html
Copyright © 2011-2022 走看看