首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openshift -超时过期,等待卷附加或挂载到pod

Openshift -超时过期,等待卷附加或挂载到pod
EN

Stack Overflow用户
提问于 2019-04-27 01:16:53
回答 1查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
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服务器的存储空间。我试图部署的模板如下:

代码语言:javascript
复制
---
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挂载卷"database-1-qvv86_test3(54f01c55-6885-11e9-bc42-3a342852673a)":超时过期,等待卷附加或挂载为pod“test3”/“数据库-1-qv86”。未挂载卷列表=数据库-数据默认值-令牌-8 8hjgv。未附加卷列表=数据库-数据默认值-令牌-8 8hjgv

持久卷声明成功地附加到持久卷,但据我所知,荚没有附加到该卷。模板被部署在一个新项目中,PV是新创建的,nfs是空的。我看不出pod如何引用持久卷声明时有任何错误。我不知道为什么会出现这个错误,但我只是在学习模板,显然缺少了一些东西。有人看到我错过了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-27 03:58:14

问题在于我的NFS权限。以下是my /etc/exports文件的工作内容:

代码语言:javascript
复制
/var/nfs        *(rw,root_squash,no_wdelay)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55876473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档