Net Core 微服务 - 如何将.Net Core Web Api服务部署到Kubernetes (K8s)中
1.新建一个WebApi项目
默认的web api项目包含一个默认的api:/weatherforecast
2. 新建一个Dockerfile文件
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["CoreApi.csproj", "."] RUN dotnet restore "./CoreApi.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "CoreApi.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "CoreApi.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "CoreApi.dll"]
3. 通过Dockerfile生成Docker镜像文件
在Dockerfile所在目录打开命令行工具运行如下命令(注意YourUserName是你在Docker官网注册的账户名):
docker build -t YourUserName/coreapi1 .
4. 将刚生成的Docker镜像推送到Docker仓库中
你需要去Docker官网注册一个账户,注册完成后进行登录:docker login --username YourUserName
YourUserName是你注册的用户名,接着会让你输入密码,验证成功后会提示Login Succeeded
将镜像推送到仓库这个步骤是不能省略的,因为编写K8s部署文件的时候,需要从仓库拉取镜像,因为服务器在国外,所以会有点慢。
还有一个问题就是你的镜像名字需要用你的Docker用户名开头,比如YourUserName/coreapi1,YourUserName是你Docker的用户名,不然上传会提示没有权限。
5. 编写k8s的部署文件 k8s-deploy.yaml
kind: Deployment apiVersion: apps/v1 metadata: labels: k8s-app: k8s-apidemo name: k8s-apidemo namespace: coreapi spec: replicas: 2 selector: matchLabels: k8s-app: k8s-apidemo template: metadata: labels: k8s-app: k8s-apidemo spec: containers: - name: k8s-apidemo image: YourUserName/coreapi1 ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: labels: k8s-app: k8s-apidemo name: k8s-apidemo namespace: coreapi spec: type: NodePort ports: - nodePort: 31001
port: 80 targetPort: 80 selector: k8s-app: k8s-apidemo
需要说明两个问题,标红的image就是我们推送到仓库的镜像,namespace是资源空间名称,也就是我们当前这个pod要运行的资源空间,所以我们需要创建一下这个资源空间:
kubectl create namespace coreapi
创建完成后可以通过以下命令进行查看:kubectl get namespace coreapi
6. 运行我们的部署文件 k8s-deploy.yaml
kubectl create -f k8s-deploy.yaml
如果我们没有创建资源空间coreapi,运行以上命令就会看到如下错误:
正常情况下会有两个提示,分别是deployment.apps/k8s-apidemo created 和 service/k8s-apidemo created
完成之后我们可以通过以下命令查看:kubectl get svc -n coreapi -o wide
结果显示我的这个pod运行在31001端口,此时我们可以通过浏览器测试:
OK. 部署成功了!!!