假设要在 Kubernetes 上部署两个 Docker 镜像 co:v1 和 nn:v1,你需要为每个服务分别创建 Deployment(用于管理 Pod)和 Service(用于访问服务)。下面是一个完整、清晰、可直接使用的部署流程(含 YAML 示例)。
✅ 一、前提条件
-
Kubernetes 集群已就绪(
kubectl get nodes能看到节点) -
两个镜像
co:v1和nn:v1已推送到 镜像仓库(如 Docker Hub、私有 Harbor 等)- 如果是本地镜像(如 Minikube),需确保镜像已加载到节点
-
假设两个服务都监听 80 端口(如果不是,请替换为实际端口)
📌 如果镜像在私有仓库,还需创建
imagePullSecrets(本文末尾附说明)
✅ 二、部署步骤(每个服务一套 YAML)
我们将为每个服务创建:
- Deployment:运行 Pod
- Service:暴露服务(使用
NodePort便于外部访问)
📁 1. 部署 co:v1 服务
文件:co-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: co-deployment
spec:
replicas: 2
selector:
matchLabels:
app: co
template:
metadata:
labels:
app: co
spec:
containers:
- name: co-container
image: co:v1 # ← 替换为你的完整镜像地址,如 registry/co:v1
ports:
- containerPort: 80 # ← 替换为实际端口
---
apiVersion: v1
kind: Service
metadata:
name: co-service
spec:
type: NodePort
selector:
app: co
ports:
- protocol: TCP
port: 80 # Service 端口
targetPort: 80 # Pod 端口
nodePort: 30001 # 可选,范围 30000-32767
📁 2. 部署 nn:v1 服务
文件:nn-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nn-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nn
template:
metadata:
labels:
app: nn
spec:
containers:
- name: nn-container
image: nn:v1 # ← 替换为你的完整镜像地址
ports:
- containerPort: 80 # ← 替换为实际端口
---
apiVersion: v1
kind: Service
metadata:
name: nn-service
spec:
type: NodePort
selector:
app: nn
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30002 # 注意:不能和 co 的 nodePort 冲突!
✅ 三、应用配置
# 部署 co 服务
kubectl apply -f co-deployment.yaml
# 部署 nn 服务
kubectl apply -f nn-deployment.yaml
✅ 四、验证部署
# 查看 Pods
kubectl get pods -l app=co
kubectl get pods -l app=nn
# 查看 Services
kubectl get svc co-service
kubectl get svc nn-service
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
co-service NodePort 10.96.123.45 <none> 80:30001/TCP 10s
nn-service NodePort 10.96.234.56 <none> 80:30002/TCP 10s
✅ 五、访问服务
假设你的 Kubernetes 节点 IP 是 192.168.1.100:
- 访问
co服务:http://192.168.1.100:30001 - 访问
nn服务:http://192.168.1.100:30002
💡 如果是云环境(如 AWS、阿里云),用节点的公网 IP;如果是本地(Minikube),用
minikube ip。
✅ 六、进阶建议
1. 使用完整镜像地址(推荐)
如果镜像在 Docker Hub:
image: yourname/co:v1
如果在私有仓库:
image: harbor.example.com/project/co:v1
2. 私有镜像仓库?需要 imagePullSecrets
spec:
containers:
- name: co-container
image: your-private-registry/co:v1
imagePullSecrets:
- name: regcred # 需提前创建
创建 secret:
kubectl create secret docker-registry regcred \
--docker-server=your-registry.com \
--docker-username=xxx \
--docker-password=xxx
3. 端口不是 80?修改 containerPort 和 targetPort
例如服务监听 8080:
ports:
- containerPort: 8080
...
targetPort: 8080
4. 需要服务间通信?
在 nn 的 Pod 中可通过 DNS 访问 co:
curl http://co-service:80 # 同命名空间
curl http://co-service.default.svc.cluster.local:80 # 完整域名
✅ 七、清理资源
kubectl delete -f co-deployment.yaml
kubectl delete -f nn-deployment.yaml
🎯 总结
| 步骤 | 操作 |
|---|---|
| 1 | 为每个镜像写一个 Deployment + Service |
| 2 | 确保 selector.matchLabels 和 template.metadata.labels 一致 |
| 3 | 使用不同 nodePort 避免冲突 |
| 4 | 应用 YAML,验证 Pod 和 Service |
| 5 | 通过 <NodeIP>:<NodePort> 访问服务 |
按照这个流程,你就可以在 Kubernetes 上成功部署并访问两个服务!🎉