You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MicroK8s的Kubernetes集群中无法找到Vault的正确选择器

在MicroK8s Kubernetes集群中安装Vault后的unseal失败问题

问题现象

首次按照HashiCorp官方指南在MicroK8s集群部署Vault后,遇到以下异常:

  • 5个Vault Pod(vault-0至vault-4)持续处于Pending状态,无法启动
  • 执行kubectl exec命令尝试初始化Vault时,提示pods "vault-0" not found
  • 使用标签选择器查询资源时,提示目标命名空间下无匹配资源

排查命令输出

root@vault-dev:/home/dev# kubectl --namespace="vault" get pods
NAME                                   READY   STATUS    RESTARTS   AGE
vault-0                                0/1     Pending   0          12m
vault-1                                0/1     Pending   0          12m
vault-2                                0/1     Pending   0          12m
vault-3                                0/1     Pending   0          12m
vault-4                                0/1     Pending   0          12m
vault-agent-injector-7969bb745-nmswj   1/1     Running   0          12m

root@vault-dev:/home/dev# kubectl exec --stdin=true --tty=true vault-0 -- vault operator init
Error from server (NotFound): pods "vault-0" not found

root@vault-dev:/home/dev# kubectl --namespace="vault" get all
NAME                                       READY   STATUS    RESTARTS   AGE
pod/vault-0                                0/1     Pending   0          15m
pod/vault-1                                0/1     Pending   0          15m
pod/vault-2                                0/1     Pending   0          15m
pod/vault-3                                0/1     Pending   0          15m
pod/vault-4                                0/1     Pending   0          15m
pod/vault-agent-injector-7969bb745-nmswj   1/1     Running   0          15m

NAME                               TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/vault-internal             ClusterIP      None             <none>        8200/TCP,8201/TCP   15m
service/vault-ui                   LoadBalancer   REDACTED         <pending>     8200:32269/TCP      15m
service/vault-standby              ClusterIP      REDACTED         <none>        8200/TCP,8201/TCP   15m
service/vault-agent-injector-svc   ClusterIP      REDACTED         <none>        443/TCP             15m
service/vault                      ClusterIP      REDACTED         <none>        8200/TCP,8201/TCP   15m
service/vault-active               ClusterIP      REDACTED         <none>        8200/TCP,8201/TCP   15m

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/vault-agent-injector   1/1     1            1           15m

NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/vault-agent-injector-7969bb745   1         1         1       15m

NAME                     READY   AGE
statefulset.apps/vault   0/5     15m

root@vault-dev:/home/dev# kubectl get pods --selector='statefulset.apps/name=vault' --namespace=' vault'
No resources found in  vault namespace.

问题解决步骤

1. 修复命名空间参数的空格错误

最后一条查询命令中,--namespace=' vault'包含前导空格,导致Kubernetes识别错误的命名空间。正确命令应为:

kubectl get pods --selector='statefulset.apps/name=vault' --namespace='vault'

2. 解决Vault Pod Pending状态问题

Pod处于Pending状态的核心原因通常是资源不足、存储卷未绑定或调度约束不满足,按以下步骤排查:

  • 调整副本数缓解资源压力:MicroK8s默认节点资源有限,5个Vault Pod的资源需求可能超出节点能力,先降低副本数测试:
    kubectl --namespace=vault scale statefulset/vault --replicas=1
    
  • 启用并验证MicroK8s存储插件:Vault StatefulSet依赖持久化存储,需确保MicroK8s已启用storage插件:
    microk8s enable storage
    
    检查PVC绑定状态:
    kubectl --namespace=vault get pvc
    
    若PVC处于Pending,确认StorageClass是否正常创建:
    kubectl get storageclass
    
  • 查看Pod调度事件:通过kubectl --namespace=vault describe pod vault-0查看Events字段,获取具体调度失败原因(如镜像拉取失败、权限不足、节点亲和性约束等)。

3. 正确执行Vault初始化命令

待vault-0 Pod进入Running状态后,指定命名空间执行初始化命令:

kubectl --namespace=vault exec --stdin=true --tty=true vault-0 -- vault operator init

内容的提问来源于stack exchange,提问作者Victor Schmit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:55:18