如何解决kubernetes-如何将mysql服务公开到另一个Pod?
我有一个带有pv的mysql服务,以及一个自定义karaf图像映像的部署。
我的karaf中有钩子,安装kar liquibase时应该填充数据库,但是我意识到数据库恢复为空,所以karaf无法访问mysql。
我想在我的机器上访问本地主机。
这是我的.yaml配置:
mysql pv:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
mysql部署:
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: mysql-root-password
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: db-secret
key: mysql-user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: mysql-password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
mysql传递密码的秘诀:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
mysql-password: cm9vdA==
mysql-root-password: cm9vdA==
mysql-user: eGNvcmVyb290
karaf部署:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: karaf-deployment
spec:
selector:
matchLabels:
app: karaf
replicas: 1 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: karaf
spec:
containers:
- name: karaf
image: myuser/karaf:v1
注意:要本地连接到mysql,我必须公开:kubectl expose deployment mysql --type=LoadBalancer --name=my-service
不确定这是否正确...
我对karaf也做同样的事情,添加了--port=8101
,所以我可以ssh到karaf并安装kar ...
我尝试了一些在互联网上看到的问题,例如创建一个入口控制器,或者这个Minikube expose MySQL running on localhost as service
但是没用:(
感谢您的光临!
解决方法
在您的Karaf应用程序中。连接源URL是什么? 例如,在部署在kubernetes中且使用mysql服务的Spring引导应用程序中,连接源URL为:jdbc:mysql:// mysqlservice:3306 / $ {DB_NAME}。 其中“ mysqlservice”将是mysql在kubernetes中定义的服务的名称。
,您的服务已经在Kubernetes中公开给端口3306
上的其他Pod。您可以使用NodePort
类型的服务向主机公开mysql。
kubectl expose svc/mysql --name mysql-np --port 3306 --type NodePort
kubectl get svc mysql-np -ojsonpath='{.spec.ports[0].nodePort}'
对于数据,您是否有机会删除并重新创建PV?您共享的配置应该可以使用。
,当您使用相同的名称空间时,在使用名为MySQL的服务后创建的pod将具有名为:
的环境变量。- MYSQL_SERVICE_HOST
- MYSQL_SERVICE_PORT
您可以在第二个部署中使用它们来访问MySQL部署。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。