【问题标题】:Unable to mount volumes for pod on AKS无法在 AKS 上为 pod 挂载卷
【发布时间】:2019-09-03 17:04:10
【问题描述】:

我想使用 sonar-qube 并将其部署在 AKS (Azure Kubernetes) 上。我想在持久卷上存储声纳日志、数据、conf 和扩展。但是,AKS 似乎由于超时而无法装载卷。

我已经构建了一个创建卷 + 服务 + 部署和入口的脚本。 --> 没有成功

我试图将卷创建与应用程序创建和卷附件分开-->没有成功

但是,卷是在 AZURE 上创建并可用的

配置:

  • AKS 版本:1.14.5
  • 硬件类型:标准 DS2 v2(2 vcpus,7 GiB 内存)

这是我用来创建卷的脚本:

#Namespace creation
apiVersion: v1
kind: Namespace
metadata: 
  name: cicd
  labels: 
    name: cicd
---
#PVC for Sonar’s data directory creation
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonar-data
  namespace: cicd  
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: default
  resources:
    requests:
      storage: 5G
---
#PVC for Sonar’s conf directory
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonar-conf
  namespace: cicd  
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: default
  resources:
    requests:
      storage: 5Gi
---
#PVC for Sonar’s logs directory
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonar-logs
  namespace: cicd  
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: default
  resources:
    requests:
      storage: 10Gi
---
#PVC for Sonar’s extensions directory
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonar-extensions
  namespace: cicd  
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: default
  resources:
    requests:
      storage: 5Gi
---
#Create secretKeyRef

apiVersion: v1
kind: Secret
metadata:
  name: sonar-secret
  namespace: cicd
type: Opaque
data:
  password: *****************

这是我用来创建声纳的脚本:

#SonarQube deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: sonarqube
  name: sonarqube
  namespace: cicd
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: sonarqube
    spec:
      securityContext:
        runAsUser: 0
        fsGroup: 0    
      containers:
        - name: sonarqube
          image: sonarqube:latest
          resources:
            requests:
              cpu: 500m
              memory: 1024Mi
            limits:
              cpu: 2000m
              memory: 2048Mi
          volumeMounts:
          - mountPath: "/opt/sonarqube/data/"
            name: sonar-data
          - mountPath: "/opt/sonarqube/extensions/"
            name: sonar-extensions
          - mountPath: "/opt/sonarqube/logs/"
            name: sonar-logs
          - mountPath: "/opt/sonarqube/conf/"
            name: sonar-conf
          env:
          - name: "SONARQUBE_JDBC_USERNAME"
            value: "sonar"
          - name: "SONARQUBE_JDBC_URL"
            value: "jdbc:sqlserver://internal-sql-az-westeurope.database.windows.net:1433;databaseName=Sonar;user=SONARQUBE_JDBC_USERNAME;password=SONAR_SQL_LOGIN_PASSWORD"
          - name: "SONARQUBE_JDBC_PASSWORD"
            valueFrom:
              secretKeyRef:
                name: sonar-secret
                key: password
          ports:
          - containerPort: 9000
            protocol: TCP
      volumes:
      - name: sonar-data
        persistentVolumeClaim:
          claimName: sonar-data
      - name: sonar-extensions
        persistentVolumeClaim:
          claimName: sonar-extensions
      - name: sonar-logs
        persistentVolumeClaim:
          claimName: sonar-logs
      - name: sonar-conf
        persistentVolumeClaim:
          claimName: sonar-conf
---
# --------------
# Service Object
# --------------
apiVersion: v1
kind: Service
metadata:
  labels:
    name: sonarqube
  name: sonarqube-service
  namespace: cicd
spec:
  ports:
    - port: 80 # Default port for image
      protocol: TCP
  selector:
    name: sonarqube

# -----------------
# Ingress object
# -----------------
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: sonarqube-api-ingress
  namespace: cicd
  annotations:
    kubernetes.io/ingress.class: nginx
    #Default is 'true'
    #nginx.ingress.kubernetes.io/ssl-redirect: "false" 
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    #https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#whitelist-source-range
    nginx.ingress.kubernetes.io/whitelist-source-range: "******"    
spec:
  tls:
  - hosts:
    - sonar.traceparts.com
    secretName: aks-ingress-tls-star-traceparts-com 
  rules:
  - host: sonar.traceparts.com
    http:
      paths:     
      - backend:
          serviceName: sonarqube-service
          servicePort: 80
        path: /(.*)         

有人可以帮我理解这个问题吗?

【问题讨论】:

  • 您是否连接了其他磁盘?你的 SP 有足够的权限吗?
  • 在包含我的 AKS 群集的天蓝色资源组上,我有三个磁盘,其中包含 AKS 使用的代理池(3 个实例)。其他磁盘已由卷创建脚本创建。如何查看权限?

标签: azure-storage azure-aks


【解决方案1】:

实际上,当您通过 YAML 文件创建持久卷并将 Azure 磁盘挂载到节点时,您需要等待一段时间,Azure 需要一些时间将磁盘附加到节点。因此,由于磁盘导致的第一次故障没有附加到节点。

只是被画了,稍等片刻,然后用命令检查一下:

kubectl describe pvc --namespace cicd

如下图所示:

顺便说一句,当您创建 AKS 集群时,它的服务主体已经具有节点所在资源组的 Contributor 角色。所以通常权限就足够了,至少对于持久卷而言。

【讨论】:

  • 感谢您的回答,看起来我正在尝试挂载到许多磁盘,因为我只尝试挂载并且创建 pod 没有任何问题。知道是否可以增加 Kubernetes 仪表板的等待时间?
  • @SebHO 我不知道如何增加AKS的等待时间,但我想你只需要通过命令kubectl get pods --namespace cicd --watch查看状态并等待一段时间。
  • @SebHO 能解决您的问题吗?或者您还有更多问题?如果它适合你,请接受它作为答案。
  • 您好,问题仍然存在,我仍在调查中。
  • 我设法使用 HELM 安装声纳,我猜 AKS 无法在合理的时间范围内执行多个磁盘分配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2021-06-02
  • 2021-08-23
  • 2019-11-08
  • 2021-11-26
  • 2021-12-22
相关资源
最近更新 更多