.NET Core 控制台应用程序如何部署到 Kubernetes?
How does a .NET Core console application deploy to Kubernetes?
我有一个控制台应用程序充当某个消息代理的侦听器。我已经将它容器化并成功 运行 作为本地 docker。现在我想将它部署到 Kubernetes(特别是 AWS 上的 EKS)。
所以我创建了一个部署所需的yaml文件,但是,我对yaml文件中需要的端口感到困惑。根据部署API的经验,我知道该端口应该与Docker图像暴露的端口相同,但是,控制台应用程序不暴露任何端口,不需要端口到运行 要么。
所以我简单地拿出一些端口并尝试部署。自然它不起作用。我已经从 ECR 和 运行s 中提取图像以确认它正在工作。只有部署到 EKS 不是。
请问是否有将 .NET Core 控制台应用程序部署到 Kubernetes 的正确方法?
下面是我的Docker文件:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Listener/Listener.csproj", "Listener/"]
COPY ["Infra/Infra.csproj", "Infra/"]
RUN dotnet restore "Listener/Listener.csproj"
COPY . .
WORKDIR "/src/Listener"
RUN dotnet build "Listener.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Listener.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Listener.dll"]
下面是这个控制台应用程序的 yaml 文件:
apiVersion: apps/v1
items:
- apiVersion: v1
kind: Service
metadata:
annotations:
Process: listener
creationTimestamp: null
labels:
app: listener
name: listener
spec:
type: LoadBalancer
ports:
- name: "5999"
port: 5999
targetPort: 5999
selector:
app: listener
status:
loadBalancer: {}
- apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
Process: listener
creationTimestamp: null
labels:
app: listener
name: listener
spec:
replicas: 1
selector:
matchLabels:
app: listener
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: listener
spec:
containers:
- env:
image: *****.dkr.ecr.<region>.amazonaws.com/listener:latest
name: listener
ports:
- containerPort: 5999
resources: {}
restartPolicy: Always
status: {}
kind: List
metadata: {}
如果有人能提供帮助,我将不胜感激!谢谢!
好吧,如果您的项目实际上没有监听任何端口,那么您不需要公开任何端口。您可以从部署中删除这些行
ports:
- containerPort: 5999
而且,由于 services 被定义为“一种将应用程序 运行 在一组 Pods 上公开为网络服务的抽象方式”,您实际上并不需要服务定义,这意味着您只需要部署。
我有一个控制台应用程序充当某个消息代理的侦听器。我已经将它容器化并成功 运行 作为本地 docker。现在我想将它部署到 Kubernetes(特别是 AWS 上的 EKS)。
所以我创建了一个部署所需的yaml文件,但是,我对yaml文件中需要的端口感到困惑。根据部署API的经验,我知道该端口应该与Docker图像暴露的端口相同,但是,控制台应用程序不暴露任何端口,不需要端口到运行 要么。
所以我简单地拿出一些端口并尝试部署。自然它不起作用。我已经从 ECR 和 运行s 中提取图像以确认它正在工作。只有部署到 EKS 不是。
请问是否有将 .NET Core 控制台应用程序部署到 Kubernetes 的正确方法?
下面是我的Docker文件:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Listener/Listener.csproj", "Listener/"]
COPY ["Infra/Infra.csproj", "Infra/"]
RUN dotnet restore "Listener/Listener.csproj"
COPY . .
WORKDIR "/src/Listener"
RUN dotnet build "Listener.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Listener.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Listener.dll"]
下面是这个控制台应用程序的 yaml 文件:
apiVersion: apps/v1
items:
- apiVersion: v1
kind: Service
metadata:
annotations:
Process: listener
creationTimestamp: null
labels:
app: listener
name: listener
spec:
type: LoadBalancer
ports:
- name: "5999"
port: 5999
targetPort: 5999
selector:
app: listener
status:
loadBalancer: {}
- apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
Process: listener
creationTimestamp: null
labels:
app: listener
name: listener
spec:
replicas: 1
selector:
matchLabels:
app: listener
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: listener
spec:
containers:
- env:
image: *****.dkr.ecr.<region>.amazonaws.com/listener:latest
name: listener
ports:
- containerPort: 5999
resources: {}
restartPolicy: Always
status: {}
kind: List
metadata: {}
如果有人能提供帮助,我将不胜感激!谢谢!
好吧,如果您的项目实际上没有监听任何端口,那么您不需要公开任何端口。您可以从部署中删除这些行
ports:
- containerPort: 5999
而且,由于 services 被定义为“一种将应用程序 运行 在一组 Pods 上公开为网络服务的抽象方式”,您实际上并不需要服务定义,这意味着您只需要部署。