c# - .NET Core 控制台应用程序如何部署到 Kubernetes?
问题描述
我有一个控制台应用程序,它充当某个消息代理的侦听器。我已经将它容器化并成功作为本地 docker 运行。现在我想将它部署到 Kubernetes(特别是 AWS 上的 EKS)。
所以我创建了一个部署所需的 yaml 文件,但是,我对 yaml 文件中所需的端口感到困惑。根据部署 API 的经验,我知道端口应该与 Docker Image 暴露端口相同,但是,控制台应用程序不暴露任何端口,也不需要端口来运行。
所以我简单地放出一些端口并尝试部署。自然它不起作用。我已经从 ECR 中提取了图像并运行以确认它正在工作。只有部署到 EKS 不是。
我可以知道将 .NET Core 控制台应用程序部署到 Kubernetes 的正确方法吗?
下面是我的 Dockerfile:
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
而且,由于服务被定义为“将在一组 Pod 上运行的应用程序公开为网络服务的抽象方式”,因此您实际上也不需要服务定义,这意味着您只需要部署即可。
推荐阅读
- kubernetes - CPU 利用率 > K8s 中的 CPU 限制
- docker - Docker 映像运行问题:cat:找不到命令
- reactjs - 扩展和覆盖接口属性
- php - Amazon Polly AudioStream 始终为空
- javascript - JavaScript addEventListener() 方法
- javascript - 我想在 setState 初始化我应该使用哪个状态系统之后访问我的状态对象
- google-sheets - 对 SUM 的结果使用 FLOOR
- angular - 我无法将 API JSON 响应绑定到 angular typescript 类
- asp.net - 如何过滤asp.net中的组合框
- python - 如何获取前 6 个文本