centos 构建 local-k8s

工作原因,需要安装一个 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
Licensed under CC BY-NC-SA 4.0
Hello, World!
使用 Hugo 构建
主题 StackJimmy 设计