首页 > 解决方案 > 无法使用带有 GKE 的 KubeVirt 启动 VM

问题描述

目前我尝试KubeVirtGKE集群一起使用。

我做了什么(按照官方文档):

  1. 通过 GCP 控制台创建GKE具有 3 个节点的集群
  2. 本地安装kubectl并连接到这个集群
  3. kubevirt通过安装kubectl
  4. virtctl本地安装
  5. 设置debug.useEmulationtrue
  6. 创建testvm(按照演示)上述所有步骤都可以正常工作。

但是现在我无法启动虚拟机

  1. 如果我尝试通过 启动它"virtctl start testvm",我会收到以下错误消息:

“错误启动 VirtualMachine 服务器已要求客户端提供凭据”

  1. 如果我尝试修改VM模板以将其设置为默认运行,它也不起作用。在virt-launcherpod中,计算容器启动成功但volumecontainerdisk失败,日志如下:
standard_init_linux.go:211: exec user process caused "permission denied"

任何帮助表示赞赏,谢谢。

标签: kubernetesgoogle-kubernetes-engine

解决方案


从本地连接到集群时,使用gcloud container clusters get-credentials....

对我有用的是创建一个新的 SA 并为其创建一个 kubeconfig:

{
kubectl create sa deployer
kubectl create clusterrolebinding deployer --clusterrole cluster-admin --serviceaccount default:deployer

KUBE_DEPLOY_SECRET_NAME=`kubectl get sa deployer -o jsonpath='{.secrets[0].name}'`
KUBE_API_EP=`kubectl get ep -o jsonpath='{.items[0].subsets[0].addresses[0].ip}'`
KUBE_API_TOKEN=`kubectl get secret $KUBE_DEPLOY_SECRET_NAME -o jsonpath='{.data.token}'|base64 --decode`
KUBE_API_CA=`kubectl get secret $KUBE_DEPLOY_SECRET_NAME -o jsonpath='{.data.ca\.crt}'|base64 --decode`
echo $KUBE_API_CA > tmp.deploy.ca.crt

export KUBECONFIG=./my-new-kubeconfig
kubectl config set-cluster k8s --server=https://$KUBE_API_EP --certificate-authority=tmp.deploy.ca.crt --embed-certs=true
kubectl config set-credentials k8s-deployer --token=$KUBE_API_TOKEN
kubectl config set-context k8s --cluster k8s --user k8s-deployer
kubectl config use-context k8s

rm tmp.deploy.ca.crt
unset KUBECONFIG
}

kubectl virt start testvm --kubeconfig ./my-new-kubeconfig

更多解释:https ://faun.pub/manually-connect-to-your-kubernetes-cluster-from-the-outside-d852346a7f0a


推荐阅读