【问题标题】:how to link and run mysql database and tomcat server on kubernetes clusture?如何在kubernetes集群上链接和运行mysql数据库和tomcat服务器?
【发布时间】:2019-05-08 01:40:46
【问题描述】:

如何将我在 webapps 文件夹中具有 war 文件的 tomcat 容器链接到另一个具有 mysql 数据库的容器。当前,如果我在 tomcat 管理器应用程序中启动我的 war 文件,我会收到错误消息,说无法在 contextpath /data-core-0.0 启动应用程序。 1-SNAPSHOT catalina 生命周期异常。

我认为我的tomcat容器无法访问mysql数据库容器!!

statefulset.yaml

serviceName: mysql
 template:
  metadata:
   labels:
    name: mysql
  spec:
   containers:
    - name: mysql
      image: suji165475/vignesh:latest
      ports:
       - containerPort: 3306
      volumeMounts:
       - name: mysql-initdb
         mountPath: /docker-entrypoint-initdb.d
   volumes:
    - name: mysql-initdb
      persistentVolumeClaim:
       claimName: mysql-initdb-pv-claim

persistantvolumeclaim.yaml

kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-initdb-pv-volume
  labels:
    type: local
    app: mysql
spec:
  storageClassName: manual
  capacity:
    storage: 1Mi
  accessModes:
    - ReadOnlyMany
  hostPath:
    path: "/tmp/data"

---

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-initdb-pv-claim
  labels:
    app: mysql
spec:
  storageClassName: manual
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Mi

tomcatdeployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: suji165475/vignesh:tomcatserver
        ports:
        - containerPort: 8080

【问题讨论】:

  • 您是否创建了连接到 mysql pod 的服务。理想情况下,您的 tomcat 应用程序应将mysql-service 作为主机进行连接。
  • 是的,我创建了一个集群 ip 类型的 mysql 服务
  • 对于 MySQL 我使用有状态集而不是部署
  • 你能从tomcat容器ping mysql服务吗?
  • no.. 当我尝试从 tomcat 容器 ping mysql 时,它说未知主机 mysql

标签: docker kubernetes docker-compose


【解决方案1】:

您必须为 mysql 创建服务并在 tomcat 服务中使用该服务名称,以便 tomcat pod 能够与 mysql 服务器通信。

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: <value>
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

现在为 tomcat 部署:

apiVersion: v1
kind: Service
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  selector:
    app: tomcat
    tier: frontend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  selector:
    matchLabels:
      app: tomcat
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: tomcat
        tier: frontend
    spec:
      containers:
      - image: <image location>
        name: tomcat
        env:
        - name: DB_PORT_3306_TCP_ADDR
          value: mysql                  #service name of mysql
        - name: DB_ENV_MYSQL_PASSWORD
          value: <Mysql password>
        - name: DB_ENV_MYSQL_USER
          value: <mysql user>
        - name: DB_ENV_MYSQL_DATABASE
          value: <database name>
        - name: DB_ENV_MYSQL_PASSWORD
          value: <Mysql password>
        ports:
        - containerPort: 80
          name: http
        - containerPort: 443
          name: https
        volumeMounts:
        - name: tomcat-persistent-storage
          mountPath: /var/data
      volumes:
      - name: tomcat-persistent-storage
        persistentVolumeClaim:
          claimName: tomcat-pv-claim

【讨论】:

  • 我已经将我的 sql 初始化脚本复制到 dockerfile 本身的 /docker-entrypoint-initdb.d 中
  • 使用的url - 服务器的ip地址:8080
  • 我使用 kubectl exec -it 进入了我的 pod,我可以看到我的数据库和数据表
  • 它说未知的主机期望 mysql
  • 两者都只匹配??
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2012-07-21
相关资源
最近更新 更多