我有一个非常简单的 node.js 应用程序(HTTP 服务),它与 redis 进行交互。我想创建一个部署,并在 minikube 中运行它。
据我了解,我需要一个基于 Docker 镜像的 Kubernetes Pod 来运行我的应用程序。以下是我的 Dockerfile:
FROM node:8.9.1
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
我使用docker build -t my-app .
命令构建了Docker镜像。
接下来,我为我的应用程序创建了一个Pod定义:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: my-app:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
目前为止,还不错。但是从现在开始,我没有清楚的思路如何处理redis:
redis应该是另一个Pod,还是一个Service(在Kubernetes中的术语)?
我如何从我的应用程序中引用redis?基于redis是否被定义为Pod/Service,我如何获取连接URL和端口?我读过关于由Kubernetes创建的环境变量,但我不确定这些是否适用于Pods或Services。
我如何将两者(我的应用程序和redis)聚合到单个配置中?如何确保redis先启动,然后是我的应用程序(需要运行redis实例),以及如何将我的HTTP端点暴露给“外部世界”?我读到过Deployments,但我不确定如何将这些组件连接在一起。
理想情况下,我希望所有配置都在YAML文件中,这样最终整个基础设施可以通过单个命令启动。
EXPOSE
定义已被弃用,但仅用于文档目的(它没有提供任何其他有用的功能)。 :) - yomateo