在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插件:
检查PVC绑定状态:microk8s enable storage
若PVC处于Pending,确认StorageClass是否正常创建:kubectl --namespace=vault get pvckubectl 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
相关产品推荐
相关产品推荐

