工作原因,需要安装一个 local-k8s。中间碰了很多坑,做个记录。
环境:Linux test 4.18.0-193.el8.x86_64
#
kubectl
kubectl安装说明,可以直接使用包管理器安装,如:
1
2
3
4
5
6
7
8
9
10
| cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubectl
|
#
minicube
minicube安装说明 也比较方便,官网里有不同系统的安装方式。笔者使用curl
的安装:
1
2
| curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
|
#
start cluster
#
安装 kvm
How to Install KVM on CentOS 8
1
2
3
4
5
| # check
cat /proc/cpuinfo | egrep "vmx|svm"
# install
sudo yum install @virt
# start
|
minikube start --driver=<kvm2|hyperkit> --cni=flannel --cpus=4 --memory=8000 -p=<cluster-name>
,其中,笔者使用的centos
系统使用--driver=kvm2
选项。执行时存在诸多问题:
#
kvm2 错误
参照错误提示来。需要安装libvirt
,笔者直接sudo yum install libvirt
进行的。
#
not in libvirt group
不确定为什么需要单独搞一个libvirt group
,按照issue-5617 的说明,需要将用户添加到libvirt
用户组中。笔者直接进行sudo usermod -a -G libvirt ${USERNAME}
。
#
virsh 报错
1
2
| error: failed to connect to the hypervisor
error: authentication failed: access denied by policy
|
需要在将当前用户添加到libvirt
之后,需要配置polkit
规则,确保libvirt
组中的用户能够访问libvirt
。
1
2
3
4
5
6
7
| # 方案参考 https://blog.csdn.net/cunjiu9486/article/details/109074019
# /etc/polkit-1/rules.d/80-libvirt.rules
polkit.addRule(function(action, subject){
if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("libvirt")){
return polkit.Result.YES;
}
});
|
添加规则后,还需要重启 polkitd
。简单粗暴:
1
| nohup /usr/lib/polkit-1/polkitd -r > /dev/null &
|
#
Cannot find suitable emulator for x86_64
通过 sudo systemctl status libvirtd
查看,发现报错是:cannot initialize crypt
,继续安装yum install libgcrypt
。
#
dnsmasq: unknown user or group: dnsmasq
1
2
| groupadd dnsmasq
useradd dnsmasq -g dnsmasq
|
#
Failed to start host
提示建议删除刚才的cluster
,不清楚为啥,提示了就搞起来:
1
2
3
| minikube delete $cluster_name
# 再次执行
minikube start --driver=<kvm2|hyperkit> --cni=flannel --cpus=4 --memory=8000 -p=<cluster-name>
|
这次可以了!
1
2
| * Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "${cluster_name}" cluster and "default" namespace by default
|