kubernetes - 无法使用带有 GKE 的 KubeVirt 启动 VM
问题描述
目前我尝试KubeVirt
与GKE
集群一起使用。
我做了什么(按照官方文档):
- 通过 GCP 控制台创建
GKE
具有 3 个节点的集群 - 本地安装
kubectl
并连接到这个集群 kubevirt
通过安装kubectl
virtctl
本地安装- 设置
debug.useEmulation
为true
- 创建
testvm
(按照演示)上述所有步骤都可以正常工作。
但是现在我无法启动虚拟机
- 如果我尝试通过 启动它
"virtctl start testvm"
,我会收到以下错误消息:
“错误启动 VirtualMachine 服务器已要求客户端提供凭据”
- 如果我尝试修改VM模板以将其设置为默认运行,它也不起作用。在
virt-launcher
pod中,计算容器启动成功但volumecontainerdisk
失败,日志如下:
standard_init_linux.go:211: exec user process caused "permission denied"
任何帮助表示赞赏,谢谢。
解决方案
从本地连接到集群时,使用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
推荐阅读
- laravel - 如何在 laravel 集合中计数?
- wordpress - 提交表单后 gform_after_submission 不会触发
- r - 调整 ggplot 上的数字标签,同时保持图形看起来相同
- database - Firestore订单文件如何
- python - 涉及 SQLite 3 的错误阻止我正确添加到数据库
- r - 如何在现有地块上叠加一个框?
- javascript - 根据模式验证数据的 Javascript 函数
- mysql - 使用 MySQL 更改值输出/修剪特定值之前和之后的所有文本
- hive - 如何通过节俭客户端在 Hive 独立元存储服务器上运行 MSCK
- ssh - 使用 SSH 将第二个 repo 克隆到 config.yml circleci 时出错