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,到此大功告成!!!

猜你喜欢

转载自www.cnblogs.com/weiBlog/p/10016816.html