1.问题描述
学习Kubernetes技术,就要先布署Kubernetes环境,不然如何练习呢?(光看文档是学不会的)。但是,布署Kubernetes集群须要好多台机器,而且过程也不简单,让人忘而生畏(虽然也没有这么复杂linux解压rar,我们之所以如此说,纯粹是为了引出minikube工具,不然我们没办法继续往下说呀)。庆幸有minikube工具,让我们快速在本地创建用于学习和开发的Kubernetes集群。
该笔记将记录:使用minikube搭建用于学习的Kubernetes集群(用于本地测试、功能体验)的方式及注意事项。
2.实验环境
#09/18/2020DebianGNU/Linux10(buster)
#03/15/2021Ubuntu20.04LTS(因为硬件不到位,我们少张阵列卡,c盘空间不足,所以临时使用minikube搭建测试环境)
3.解决方案3.1.第一步、安装环境依赖
安装kubectl命令:参考InstallandSetUpkubectl()笔记(或则,官方文档)。该步骤是可选的,最后我们会通过minikube来安装对应版本的kubectl命令。
安装集群底层运行环境:使用minikube创建的Kubernetes集群,运行在不同的环境内。例如minikube可以调用VirtualBox来创建集群,也可以调用VMware来创建集群(还支持使用Docker、Podman等等,参考Drivers()文档)。我们使用kvm虚拟化(由于更紧贴于使用场景),所以须要安装KVM虚拟化环境,参考SettingUpaKVMVMHostServer(,_KVM_and_libvirt/2.Installing_and_Upgrading/Setting_Up_a_KVM_VM_Host_Server.html)笔记。
3.2.第二步、检查虚拟化是否开启
# egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no
yes # 输出 yes 表示支持虚拟化
3.3.第三步、安装minikube命令
有两种安装方式:1)使用包管理器安装、2)使用二补码安装
方式一、使用包管理器安装:
# 我们使用 Debian 发行版(适用于 Ubuntu 发行版),因此执行如下安装命令:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
dpkg -i minikube_latest_amd64.deb
# 其他 Linux 发行版,参考 minikube start 页面
# https://minikube.sigs.k8s.io/docs/start/
# 其他 minikube 版本,访问 Github release 页面
# https://github.com/kubernetes/minikube/releases
方式二、使用二补码安装(通用):
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
mkdir -p /usr/local/bin/
mv ./minikube /usr/local/bin/
chmod u+x /usr/local/bin/minikube
minikube version
3.4.第四步、启动minikube集群,并进行操作
该步骤的全部命令微型linux系统,须要切换到普通用户执行(否则,将出现各类错误,参考「常见问题处理」部分)。
网路缘由,我们须要配置网路加速服务,能够让minikube完成下载:
export HTTP_PROXY="http://"
export HTTPS_PROXY="https://"
# 以下内网网段不要通过代理服务
# 注意,这里一定要添加虚拟机 NAT 网段
export NO_PROXY="localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
# 更多网络设置,参考 Proxies and VPNs 文档:
# https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/
启动集群(须要等待下载完成):
# minikube start --driver=kvm2
* minikube v1.18.1 on Ubuntu 20.04
* Using the kvm2 driver based on user configuration
* Downloading driver docker-machine-driver-kvm2:
> docker-machine-driver-kvm2....: 65 B / 65 B [----------] 100.00% ? p/s 0s
> docker-machine-driver-kvm2: 11.39 MiB / 11.39 MiB 100.00% 1.14 MiB p/s 1
* Downloading VM boot image ...
> minikube-v1.18.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
> minikube-v1.18.0.iso: 212.99 MiB / 212.99 MiB 100.00% 1.46 MiB p/s 2m26s
* Starting control plane node minikube in cluster minikube
* Downloading Kubernetes v1.20.2 preload ...
> preloaded-images-k8s-v9-v1....: 491.22 MiB / 491.22 MiB 100.00% 1.11 MiB
* Creating kvm2 VM (CPUs=2, Memory=6000MB, Disk=20000MB) ...
* Found network options:
- HTTP_PROXY=http://192.168.10.184:8123
- HTTPS_PROXY=http://192.168.10.184:8123
- NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
- http_proxy=http://192.168.10.184:8123
- https_proxy=http://192.168.10.184:8123
* Preparing Kubernetes v1.20.2 on Docker 20.10.3 ...
- env HTTP_PROXY=http://192.168.10.184:8123
- env HTTPS_PROXY=http://192.168.10.184:8123
- env NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
- Generating certificates and keys ...
- Booting up control plane ...
- Configuring RBAC rules ...
* Verifying Kubernetes components...
- Using image gcr.io/k8s-minikube/storage-provisioner:v4
* Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
查看集群状态,以及常用集群操作:
# minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
# minikube node list
minikube 192.168.39.73
# minikube node add
* Adding node m02 to cluster minikube
! Cluster was created without any CNI, adding node to it might cause broken network.
E0315 17:10:35.176437 3660 register.go:141] unexpected first step: ""
* Starting node minikube-m02 in cluster minikube
E0315 17:10:35.178726 3660 register.go:141] unexpected first step: ""
* Creating kvm2 VM (CPUs=2, Memory=2200MB, Disk=20000MB) ...
* Found network options:
- HTTP_PROXY=http://192.168.10.184:8123
- HTTPS_PROXY=http://192.168.10.184:8123
- NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
- http_proxy=http://192.168.10.184:8123
- https_proxy=http://192.168.10.184:8123
E0315 17:10:59.100306 3660 register.go:141] unexpected first step: ""
* Preparing Kubernetes v1.20.2 on Docker 20.10.3 ...
- env HTTP_PROXY=http://192.168.10.184:8123
- env HTTPS_PROXY=http://192.168.10.184:8123
- env NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
E0315 17:11:07.146825 3660 register.go:141] unexpected first step: ""
* Verifying Kubernetes components...
* Successfully added m02 to minikube!
# minikube node add
...
# minikube node list
minikube 192.168.39.73
minikube-m02 192.168.39.91
minikube-m03 192.168.39.244
3.5.第五步、访问及使用集群
添加minikube的Bash补全:
echo 'source > ~/.bashrc # 添加命令补全
source ~/.bashrc
安装kubectl命令,以及手动补全:
minikube kubectl # 安装命令(当首次执行时,将自动安装)
echo 'alias kubectl="minikube kubectl --"' >> ~/.bashrc # 添加命令别名(最后的 -- 是 minikube 要求的)
echo 'source > ~/.bashrc # 添加命令补全
source ~/.bashrc
使用kubectl命令:
// minikube 已经将集群的访问凭证保存到 ~/.kube/ 目录,因此无需单独配置
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 45m v1.20.2
minikube-m02 Ready 38m v1.20.2
minikube-m03 Ready 35m v1.20.2
minikube-m04 Ready 34m v1.20.2
minikube-m05 Ready 33m v1.20.2
3.6.常用组件设置
安装Calico网路插件:
// 在最开始时,我们未使用其他网络插件,因此需要重新启动集群来指定网络插件
# minikube stop
# minikube start --driver=kvm2 --network-plugin=cni --cni=calico
// 查看网络插件容器状态
# kubectl get pods -n kube-system -l k8s-app=calico-node
NAME READY STATUS RESTARTS AGE
calico-node-5d58f 1/1 Running 0 14m
calico-node-6972r 1/1 Running 0 14m
calico-node-br69s 1/1 Running 0 14m
calico-node-jqjzg 1/1 Running 0 14m
calico-node-njwn2 1/1 Running 0 14m
4.常见问题汇总4.1.XExitingduetoDRV_AS_ROOT:The"kvm2"drivershouldnotbeusedwithrootprivileges.
问题描述:使用minikubestart--driver=kvm2启动时,形成如下错误:
# minikube start --driver=kvm2
* minikube v1.18.1 on Ubuntu 20.04
* Using the kvm2 driver based on user configuration
* The "kvm2" driver should not be used with root privileges.
* If you are running minikube within a VM, consider using --driver=none:
* https://minikube.sigs.k8s.io/docs/reference/drivers/none/
X Exiting due to DRV_AS_ROOT: The "kvm2" driver should not be used with root privileges.
问题缘由:当前用户为ROOT用户而minikube不容许以ROOT用户运行微型linux系统,只能以普通用户运行。
解决方式:切换到普通用户执行该命令。
4.2./usr/bin/virshdomcapabilities--virttypekvmfailed
KVM-DebianWiki(#Installation)
kvm2:checkifuserin"libvirt"group·Issue#5617·kubernetes/minikube()
问题描述:使用minikubestart--driver=kvm2启动时,形成如下错误:
# minikube start --driver=kvm2
minikube v1.14.1 on Debian 10.5
Using the kvm2 driver based on user configuration
X Exiting due to PROVIDER_KVM2_ERROR: /usr/bin/virsh domcapabilities --virttype kvm failed:
Suggestion: Follow your Linux distribution instructions for configuring KVM
Documentation: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/
问题缘由:当前用户(非ROOT用户)未加入libvirt组。首先,minikube不容许以ROOT用户运行,只能以普通用户运行。以普通用户运行时,假若不能管理虚拟机(即没有权限,即不能执行virshdomcapabilities命令)linux服务器搭建,则会形成上述错误。
解决方式:将当前用户加入libvirt组即可:
adduser '' libvirt
5.相关文档
搭建“稍显复杂的”测试集群,参考Installingk8s1.14onCentOS7()笔记(仍然只能用于测试);
搭建“生产可用的”集群环境,参考Stackedcontrolplane()笔记(细节内容建议参考官方文档);
6.参考文献
completion|minikube()
Drivers|minikube(%20)
InstallMinikube|Kubernetes()
kvm2|minikube()
ProxiesandVPNs|minikube()
QuickstartforCalicoonminikube(%20)