Openshift-超时已到期,等待为Pod挂接或挂载卷

时间:2019-04-27 01:16:54

标签: openshift

我在部署Openshift模板时遇到一些困难,特别是在附加永久卷方面。该模板旨在部署Jira和MYSQL数据库以实现持久性。我已部署以下持久卷配置:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysqlpv0003 
spec:
  capacity:
    storage: 2Gi 
  accessModes:
  - ReadWriteMany
  nfs: 
    path: /var/nfs/mysql
    server: 192.168.0.171
  persistentVolumeReclaimPolicy: Retain 

192.168.0.171是有效的nfs服务器。我的目标是使用此持久卷作为MYSQL服务器的存储。我尝试部署的模板如下:

---
apiVersion: v1
kind: Template
labels:
  app: jira-persistent
  template: jira-persistent
message: |-
  The following service(s) have been created in your project: ${NAME}, ${DATABASE_SERVICE_NAME}.
metadata:
  annotations:
    description: Deploys an instance of Jira, backed by a mysql database
    iconClass: icon-perl
    openshift.io/display-name: Jira + Mysql
    openshift.io/documentation-url: https://github.com/sclorg/dancer-ex
    openshift.io/long-description: Deploys an instance of Jira, backed by a mysql database
    openshift.io/provider-display-name: ABXY Games, Inc.
    openshift.io/support-url: abxygames.com
    tags: quickstart,JIRA
    template.openshift.io/bindable: 'false'
  name: jira-persistent


objects:
# Database secrets
- apiVersion: v1
  kind: Secret
  metadata:
    name: "${NAME}"
  stringData:
    database-password: "${DATABASE_PASSWORD}"
    database-user: "${DATABASE_USER}"
    keybase: "${SECRET_KEY_BASE}"

# application service
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      description: Exposes and load balances the application pods
      service.alpha.openshift.io/dependencies: '[{"name": "${DATABASE_SERVICE_NAME}",
        "kind": "Service"}]'
    name: "${NAME}"
  spec:
    ports:
    - name: web
      port: 8080
      targetPort: 8080
    selector:
      name: "${NAME}"

# application route
- apiVersion: v1
  kind: Route
  metadata:
    name: "${NAME}"
  spec:
    host: "${APPLICATION_DOMAIN}"
    to:
      kind: Service
      name: "${NAME}"

# application image
- apiVersion: v1
  kind: ImageStream
  metadata:
    annotations:
      description: Keeps track of changes in the application image
    name: "${NAME}"

# Application buildconfig
- apiVersion: v1
  kind: BuildConfig
  metadata:
    annotations:
      description: Defines how to build the application
      template.alpha.openshift.io/wait-for-ready: 'true'
    name: "${NAME}"
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: "${NAME}:latest"
    source:
      contextDir: "${CONTEXT_DIR}"
      git:
        ref: "${SOURCE_REPOSITORY_REF}"
        uri: "${SOURCE_REPOSITORY_URL}"
      type: Git
    strategy:
      dockerStrategy:
        env:
        - name: CPAN_MIRROR
          value: "${CPAN_MIRROR}"
        dockerfilePath: Dockerfile
      type: Source
    triggers:
    - type: ImageChange
    - type: ConfigChange
    - github:
        secret: "${GITHUB_WEBHOOK_SECRET}"
      type: GitHub

# application deployConfig
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      description: Defines how to deploy the application server
      template.alpha.openshift.io/wait-for-ready: 'true'
    name: "${NAME}"
  spec:
    replicas: 1
    selector:
      name: "${NAME}"
    strategy:
      type: Recreate
    template:
      metadata:
        labels:
          name: "${NAME}"
        name: "${NAME}"
      spec:
        containers:
        - env:
          - name: DATABASE_SERVICE_NAME
            value: "${DATABASE_SERVICE_NAME}"
          - name: MYSQL_USER
            valueFrom:
              secretKeyRef:
                key: database-user
                name: "${NAME}"
          - name: MYSQL_PASSWORD
            valueFrom:
              secretKeyRef:
                key: database-password
                name: "${NAME}"
          - name: MYSQL_DATABASE
            value: "${DATABASE_NAME}"
          - name: SECRET_KEY_BASE
            valueFrom:
              secretKeyRef:
                key: keybase
                name: "${NAME}"
          - name: PERL_APACHE2_RELOAD
            value: "${PERL_APACHE2_RELOAD}"
          image: " "
          livenessProbe:
            httpGet:
              path: "/"
              port: 8080
            initialDelaySeconds: 30
            timeoutSeconds: 3
          name: jira-mysql-persistent
          ports:
          - containerPort: 8080
          readinessProbe:
            httpGet:
              path: "/"
              port: 8080
            initialDelaySeconds: 3
            timeoutSeconds: 3
          resources:
            limits:
              memory: "${MEMORY_LIMIT}"
    triggers:
    - imageChangeParams:
        automatic: true
        containerNames:
        - jira-mysql-persistent
        from:
          kind: ImageStreamTag
          name: "${NAME}:latest"
      type: ImageChange
    - type: ConfigChange

# database persistentvolumeclaim
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: "${DATABASE_SERVICE_NAME}"
  spec:
    accessModes:
    - ReadWriteMany
    resources:
      requests:
        storage: "${VOLUME_CAPACITY}"

# database service
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      description: Exposes the database server
    name: "${DATABASE_SERVICE_NAME}"
  spec:
    ports:
    - name: mysql
      port: 3306
      targetPort: 3306
    selector:
      name: "${DATABASE_SERVICE_NAME}"

# database deployment config
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      description: Defines how to deploy the database
      template.alpha.openshift.io/wait-for-ready: 'true'
    name: "${DATABASE_SERVICE_NAME}"
  spec:
    replicas: 1
    selector:
      name: "${DATABASE_SERVICE_NAME}"
    strategy:
      type: Recreate
    template:
      metadata:
        labels:
          name: "${DATABASE_SERVICE_NAME}"
        name: "${DATABASE_SERVICE_NAME}"
      spec:
        containers:
        - env:
          - name: MYSQL_USER
            valueFrom:
              secretKeyRef:
                key: database-user
                name: "${NAME}"
          - name: MYSQL_PASSWORD
            valueFrom:
              secretKeyRef:
                key: database-password
                name: "${NAME}"
          - name: MYSQL_DATABASE
            value: "${DATABASE_NAME}"
          image: " "
          livenessProbe:
            initialDelaySeconds: 30
            tcpSocket:
              port: 3306
            timeoutSeconds: 1
          name: mysql
          ports:
          - containerPort: 3306
          readinessProbe:
            exec:
              command:
              - "/bin/sh"
              - "-i"
              - "-c"
              - MYSQL_PWD='${DATABASE_PASSWORD}' mysql -h 127.0.0.1 -u ${DATABASE_USER}
                -D ${DATABASE_NAME} -e 'SELECT 1'
            initialDelaySeconds: 5
            timeoutSeconds: 1
          resources:
            limits:
              memory: "${MEMORY_MYSQL_LIMIT}"
          volumeMounts:
          - mountPath: "/var/lib/mysql/data"
            name: "${DATABASE_SERVICE_NAME}-data"
        volumes:
        - name: "${DATABASE_SERVICE_NAME}-data"
          persistentVolumeClaim:
            claimName: "${DATABASE_SERVICE_NAME}"
    triggers:
    - imageChangeParams:
        automatic: true
        containerNames:
        - mysql
        from:
          kind: ImageStreamTag
          name: mysql:5.7
          namespace: "${NAMESPACE}"
      type: ImageChange
    - type: ConfigChange

parameters:
- description: The name assigned to all of the frontend objects defined in this template.
  displayName: Name
  name: NAME
  required: true
  value: jira-persistent
- description: The OpenShift Namespace where the ImageStream resides.
  displayName: Namespace
  name: NAMESPACE
  required: true
  value: openshift
- description: Maximum amount of memory the JIRA container can use.
  displayName: Memory Limit
  name: MEMORY_LIMIT
  required: true
  value: 512Mi
- description: Maximum amount of memory the MySQL container can use.
  displayName: Memory Limit (MySQL)
  name: MEMORY_MYSQL_LIMIT
  required: true
  value: 512Mi
- description: Volume space available for data, e.g. 512Mi, 2Gi
  displayName: Volume Capacity
  name: VOLUME_CAPACITY
  required: true
  value: 1Gi
- description: The URL of the repository with your application source code.
  displayName: Git Repository URL
  name: SOURCE_REPOSITORY_URL
  required: true
  value: https://github.com/stpork/jira.git
- description: Set this to a branch name, tag or other ref of your repository if you
    are not using the default branch.
  displayName: Git Reference
  name: SOURCE_REPOSITORY_REF
- description: Set this to the relative path to your project if it is not in the root
    of your repository.
  displayName: Context Directory
  name: CONTEXT_DIR
- description: The exposed hostname that will route to the jira service, if left
    blank a value will be defaulted.
  displayName: Application Hostname
  name: APPLICATION_DOMAIN
  value: ''
- description: Github trigger secret.  A difficult to guess string encoded as part
    of the webhook URL.  Not encrypted.
  displayName: GitHub Webhook Secret
  from: "[a-zA-Z0-9]{40}"
  generate: expression
  name: GITHUB_WEBHOOK_SECRET
- displayName: Database Service Name
  name: DATABASE_SERVICE_NAME
  required: true
  value: database
- displayName: Database Username
  from: user[A-Z0-9]{3}
  generate: expression
  name: DATABASE_USER
- displayName: Database Password
  from: "[a-zA-Z0-9]{8}"
  generate: expression
  name: DATABASE_PASSWORD
- displayName: Database Name
  name: DATABASE_NAME
  required: true
  value: sampledb
- description: Set this to "true" to enable automatic reloading of modified Perl modules.
  displayName: Perl Module Reload
  name: PERL_APACHE2_RELOAD
  value: ''
- description: Your secret key for verifying the integrity of signed cookies.
  displayName: Secret Key
  from: "[a-z0-9]{127}"
  generate: expression
  name: SECRET_KEY_BASE
- description: The custom CPAN mirror URL
  displayName: Custom CPAN Mirror URL
  name: CPAN_MIRROR
  value: ''

运行时,MYSQL服务器的部署最终失败,并显示以下错误:

  

无法挂载Pod的卷   “数据库-1-qvv86_test3(54f01c55-6885-11e9-bc42-3a342852673a)”:   超时已到期,等待卷连接或挂载到Pod   “ test3” /“ database-1-qvv86”。未装入的卷列表= [数据库数据   default-token-8hjgv]。未连接卷的列表= [数据库数据   default-token-8hjgv]

永久卷声明已成功附加到永久卷,但据我所知,吊舱未附加到该卷。该模板正在一个新项目中部署,并且PV已重新创建,并且nfs为空。我看不到Pod如何引用持久卷声明的任何错误。我不确定为什么会发生此错误,但是我只是在学习模板,并且显然缺少一些东西。有人看到我所缺少的吗?

1 个答案:

答案 0 :(得分:1)

问题出在我的NFS权限中。这是我的/ etc / exports文件的工作内容:

/var/nfs        *(rw,root_squash,no_wdelay)