我想知道在一个单独的部署中要指定什么才能使其访问数据库部署/服务。这是数据库部署/服务:
apiVersion: v1
kind: Service
metadata:
name: oracle-db
labels:
app: oracle-db
spec:
ports:
- name: oracle-db
port: 1521
protocol: TCP
targetPort: 1521
selector:
app: oracle-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: oracle-db-depl
labels:
app: oracle-db
spec:
selector:
matchLabels:
app: oracle-db
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: oracle-db
spec:
containers:
- name: oracle-db
image: oracledb:latest
imagePullPolicy: Always
ports:
- containerPort: 1521
env:
...
我如何在单独的部署中指定连接?是否在某处指定oracle-db服务名称?到目前为止,我在容器中指定了containerPort。
答案 0 :(得分:2)
如果其他应用程序部署在相同的名称空间中,则可以通过oracle-db
引用oracle服务。这是一个使用oracle的word-press应用程序的示例。
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: oracle-db
ports:
- containerPort: 80
name: wordpress
您可以看到oracle-db
将oracle服务作为环境变量引用。
如果该服务与应用程序部署所在的名称空间不同,则可以将其称为oracle-db.namespacename.svc.cluster.local
https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/
答案 1 :(得分:1)
Kubernetes中的服务是“将运行在一组Pod上的应用程序公开为网络服务的抽象方法”。 (k8s documentation)
您可以通过Kubernetes为其提供的IP和端口访问您的Pod,但这不是一个好习惯,因为Pod可能会死亡,并且会创建另一个Pod(如果由Deployment / ReplicaSet控制)。创建新IP后,将使用新IP,您应用中的所有内容都会开始失败。
要解决此问题,您可以使用服务公开Pod(如已经完成),然后使用分配给服务的service-name:service-port
来访问Pod。在这种情况下,即使Pod死亡并创建了一个新Pod,Kubernetes也会继续将流量转发到正确的Pod。