搭建Kubernetes 集群是件很痛苦的事情,各种繁多的配置,还需要准备多台服务器。为了方便大家本地开发和体验Kubernetes,社区提供了可以在本机部署的Minikube,可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可。如果是使用 MiniKube 的话,阿里云还维护了一个国内版的 MiniKube,这可以解决很多人拉取不到镜像的问题。
1、Minikube简介
Minikube 是一个可以在本地轻松运行 Kubernetes 的工具。Minikube 会在您的电脑中的虚拟机上运行一个单节点的 Kubernetes 集群,以便用户对 Kubernetes 进行试用或者在之上进行 Kubernetes 的日常开发。
- Minikube官网:https://minikube.sigs.k8s.io/docs/
- Minikube官网安装配置:https://minikube.sigs.k8s.io/docs/start/
- Minikube教程:https://kubernetes.io/zh/docs/tutorials/hello-minikube/
- kubectl官网:https://kubernetes.io/docs/tasks/tools/
- 阿里云minikube地址:https://github.com/AliyunContainerService/minikube
Minikube 支持的 Kubernetes 功能包括:
- DNS
- NodePorts
- ConfigMaps 和 Secrets
- 仪表盘
- 容器运行时:Docker,rkt 和 CRI-O
- 启用 CNI (Container Network Interface,容器网络接口)
- Ingress
2、Minikube 和 Kubernetes 的区别
1)Kubernetes 集群的架构
通常情况下,一套完整的Kubernetes集群至少需要包括master节点和node节点,下图是常规k8s的集群架构,master节点一般是独立的,用于协调调试其它节点之用,而容器实际运行都是在node节点上,kubectl位于 master节点。
2)Minikube 的架构
下图是 Minikube 的架构,可以看出,master 节点与其它节点合为一体,而整体则通过宿主机上的 kubectl 进行管理,这样可以更加节省资源。
3)Minikube 的基本运作原理
简单来说就是,用户使用Minikube CLI管理虚拟机上的Kubernetes环境,比如:启动,停止,删除,获取状态等。一旦Minikube虚拟机启动,用户就可以使用熟悉的Kubectl CLI在Kubernetes集群上执行操作。
Minikube运作的基本原理如下所示:
A: Minikube 在PC本地生成 kubeconfig 配置文件
B: Minikube 在虚拟环境中创建 Minikube 虚拟机
C: Minikube 在虚拟机中构建 Kubernetes
D: Kubectl 通过 kubeconfig 对虚机中的 Kubernetes 进行管理
3、安装前的环境检查
3.1 配置需求
- 2核 CPU 及以上
- 2G 空闲的内存
- 20G 空闲磁盘空间
- 可以连接Internet(用于下载组件)
- 容器或虚拟机底座,诸如 Docker、Hyperkit、 Hyper-V、KVM、 Parallels、 Podman、 VirtualBox,、 VMWare
3.2 开启虚拟化
Minikube安装之前需要检查系统是否开启虚拟化
# 检查系统是否开启虚拟化,如果输出no,说明没用开启
# 必须在计算的BIOS中启用VT-X或AMD-V虚拟化
egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no
3.3 安装Hypervisor依赖
Minikube运行需要Hypervisor依赖(在不同操作系统上支持不同的驱动)
1.macOS需安装的驱动
- Docker 缺省驱动
- xhyve driver, VirtualBox 或 VMware Fusion
2.Linux需安装的驱动
- Docker 缺省驱动
- VirtualBox 或 KVM2
3.Windows需安装的驱动
# 安装virtualbox驱动代码
sudo apt-get # 更新
sudo apt-get install virtualbox
注:
- 由于minikube复用了docker-machine,在其软件包中已经支持了相应的VirtualBox, VMware Fusion驱动
- VT-x/AMD-v 虚拟化必须在 BIOS 中开启
- 在Windows环境下,如果开启了Hyper-V,不支持VirtualBox方式
4、Minikube安装
安装minikube的过程中,主要步骤包括3个,分别是:安装docker、安装kubectl、安装minikube。
- docker是容器引擎,kubernetes是容器管理工具,为了安装minikube学习kubernetes,安装docker是理所应当的。
- kubectl是一个kubernetes的命令管理工具,也可以称之为一个kubernetes的一个命令行客户端。它和kubernetes的关系,类似于mysql命令和mysqld数据库服务器的管理,mysql是mysqld的一个命令管理工具,mysqld是数据库引擎。
- minikube是缩小版的kubernetes。
4.1 安装docker-ce。
安装docker的过程参考Docker教程-1-学习及安装Docker。
4.2 安装virtualBox(低版本minikube必须)
新版本的Minikube已经不需要再依赖于VM做为底层,也可以通过docker直接作为底层驱动,并且在起步资源方面需求量更小。
- 注意: 必须在 BIOS 中 开启 VT-x/AMD-v 虚拟化,否则无法启用虚拟机。VirtualBox的通用性更强。
4.3 安装 kubectl
kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。
4.3.1 使用二进制安装包安装
1.下载Kubectl二进制包
# 最新版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 要下载特定版本,请将$(curl -L -s https://dl.k8s.io/release/stable.txt)命令的部分替换为特定版本。
# 如指定版本v1.18.0
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
2.验证二进制文件(可选)
下载 kubectl 校验和文件:
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
根据校验和文件验证 kubectl 二进制文件:
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
如果有效,则输出为:
kubectl: OK
如果检查失败,sha256则以非零状态退出并打印类似于以下内容的输出:
kubectl: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
- 注意:下载相同版本的二进制文件和校验和。
3.添加可执行权限
chmod +x ./kubectl
4.将二进制文件移到您的PATH中
因为我是root登录的所以是/usr/bin,其他用户登录是/usr/local/bin
sudo mv ./kubectl /usr/bin/kubectl
5.测试安装版本
kubectl version --client
# 查看版本的详细信息:
kubectl version --client --output=yaml
命令执行结果
root@xnzysq20210118001:/opt# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
注:如果您在目标系统上没有 root 访问权限,您仍然可以将 kubectl 安装到该~/.local/bin目录:
chmod +x kubectl
mkdir -p ~/.local/bin
mv ./kubectl ~/.local/bin/kubectl
# and then append (or prepend) ~/.local/bin to $PATH
4.3.2 使用Homebrew安装
Homebrew 安装方法:
1.安装:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
2.升级:
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow
brew update
3.执行以下命令,自动安装 kubectl 最新稳定版:
brew install kubectl
4.4 安装Minikube
1.下载最新版Minikube
使用二进制安装,下载在x86-64 Linux上安装最新的 minikube稳定版本:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
2.安装Minikube
sudo install minikube-linux-amd64 /usr/local/bin/minikube
3.启动Minikube集群
从具有管理员访问权限的终端执行启动命令:
- 若启动失败,则检查是否安装了virtualbox驱动,请按照安装前的环境检查进行核查。
- PS: 首次启动会自动下载依赖, 需要等待,网速差的话可能有点慢
- 由于国外镜像不能使用,这里使用国内的,配置参数:–image-mirror-country=cn
# 设置none为默认驱动程序(裸机启动)
minikube config set vm-driver none
minikube start
# 如下命令将自动使用阿里云服务来支持minikube的环境配置
minikube start --image-mirror-country='cn'
minikube 提供了非常多的配置参数,常用配置参数如下:
- –driver=*** 从1.5.0版本开始,Minikube缺省使用系统优选的驱动来创建Kubernetes本地环境,比如您已经安装过Docker环境,minikube 将使用 docker 驱动
- –cpus=2: 为minikube虚拟机分配CPU核数
- –memory=2048mb: 为minikube虚拟机分配内存数
- –registry-mirror= 为了提升拉取Docker Hub镜像的稳定性,可以为 Docker daemon 配置镜像加速,参考阿里云镜像服务
- –kubernetes-version=: minikube 虚拟机将使用的 kubernetes 版本比如, 创建 minikube 环境并且调整默认资源配置
minikube start --image-mirror-country=‘cn’ --cpus=4 --memory=4096mb
更多配置参数请参考 minikube help start
其他方式和配置
# 使用 docker 驱动启动集群:
minikube start --driver=docker
# 要使 docker 成为默认驱动程序:
minikube config set driver docker
minikube有2种启动驱动:虚拟机程序启动和裸机启动(也被称为none驱动程序启动)
1虚拟机程序启动。
- minikube依赖虚拟机运行。如果是在物理机上安装的minikube,则官方推荐使用libvirt v1.3.1+、qemu-kvm v2.0+或VirtualBox 5.2+等虚拟机来启动minikube。
2裸机启动(也被称为none驱动程序启动)。
- 如果安装minikube的时候是在Vmware等虚拟机中安装的,那么Vmware虚拟机管理程序不允许嵌套虚拟化,则可以使用裸机启动方式,跳过创建其他VM的操作。裸机启动只能单节点部署k8s。
- 启动的时候一定要指定–vm-driver=none,表示不采用任何虚拟机驱动而采用裸机启动,也可以说是采用none驱动程序启动。
- 裸机启动方式要求minikube以root身份运行,需要带上–registry-mirror参数,指明从docker中国区的镜像下载数据。minikube start --vm-driver=none --registry-mirror=https://registry.docker-cn.com
可以设置none为默认驱动程序(裸机启动),那么以后只需要执行minikube start即可正常启动minikube,设置命令:
minikube config set vm-driver none
然后执行:
minikube start --registry-mirror=https://registry.docker-cn.com
minikube start 命令执行后会依次自动执行以下操作:
- 1)验证minikube运行环境
- 2)在docker上预加载Kubernates,验证docker
- 3)下载kubelet、kubeadm(当前实验版本为v1.16)
- 4)拉取Kubernates镜像
- 5)启动Kubernates
4.启动后查看运行状态
# 启动后查看运行状态
minikube status
5.help命令
minikube help
6.打开Kubernetes控制台
访问 Kubernetes 仪表盘, 命令执行后会自动打开网页
minikube dashboard
1)用服务器内网 IP 访问 dashboard
正常启动过的情况下,dashboard 默认会以本地回环地址拉起proxy,我们执行以下命令:
minikube dashboard --url
由于centos等linux系统按照最小化安装是没有浏览器的,也没有图形化功能,所以这边使用了–url 参数,这将不掉用浏览器,而直接返回可用户访问的 endpoint,正常启动成功,结果如下:
但是,由于我们是部署在服务器上,从外部访问又无法访问服务器的回环地址,因此我们需要做代理,来实现外部访问,下面介绍具体方法:
2)在终端开启本地IP代理窗口
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*'
这里使用0.0.0.0,旨在可以使公网网卡也监听端口,方便我们外部访问,如果VPC环境的话,需要本地IP段和服务器IP段打通,否则就需要做端口映射,将端口暴露出来,这里的端口可以随便指定未占用的端口,也可以不使用 --port 参数,这样会随机分配一个端口 。
proxy控制台启动成功,返回如下,开启本地 45396 端口监听:
3)获取k8s api endpoint
再次运行 minikube dashboard --url ,将获取到的 endpoint 的 IP:Port 替换成外部IP:45396 ,再在本地浏览器中访问以下地址:
http://192.168.3.224:45396/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
一切正常的话,就可以访问 minikube dashboard 了:
5、基本操作
下面的操作可以分为两类:
-
1、用minikube对k8s集群的管理性操作
-
2、kubectl客户端的各种操作,它是对单个集群的访问性操作
-
1.用minikube对k8s集群的管理性操作
# 用类似如下命令设置minikube的各种参数
minikube config set memory 4096 # minikube默认情况下仅分配2GB的RAM,需扩内存可使用此命令
# 访问minikube的dashboard
minikube dashboard # 访问minikube集群中运行的Kubernetes仪表
# 使用minikube可在浏览器中轻松打开此开放节点
minikube service hello-minikube
# minikube默认启动一个单节点k8s集群,下面命令可以启动另外一个k8s集群,当然,也是单节点的。
minikube start -p cluster2 # 启动第二个本地集群(注意:裸机启动(本次实验环境)不适用)
# 停止本地集群
minikube stop
# 删除本地集群
minikube delete
- 2.kubectl客户端的各种操作,它是对单个集群的访问性操作
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080 # 启动服务器
kubectl get po -A # 查看pod状态
kubectl expose deployment hello-minikube --type=NodePort # 将服务公开为NodePort
# 查看集群信息
kubectl cluster-info
# 查看节点信息
kubectl get node
# 查看内部服务组件
kubectl get pod -A
#应用一个object配置, 至于部署什么,就看yaml配置文件定义了什么, 这里部署一个pod
kubectl apply -f ./pod.yaml
#kubectl get子命令用户展示k8s资源,k8s资源就是我们通过object部署的东西。
#展示所有pod
kubectl get pods
#展示kube-system名字空间下的所有pod, 默认kubectl命令只是操作default默认名字空间,可以通过-n参数指定名字空间
kubectl get pods -n kube-system
#展示所有deployment
kubectl get deploy
#展示所有service(服务)
kubectl get svc
#展示所有ingress
kubectl get ingress
#以yaml格式,展示具体的ingress资源的配置, 展示任意资源具体的yaml配置命令格式:kubectl get 资源类型 资源名字 -o yaml
kubectl get ingress 资源名字 -o yaml
#删除指定的资源,具体删除内容由配置文件object定义
kubectl delete -f ./pod.yaml
#在容器中执行命令格式
kubectl exec 容器id 命令
#在admin-app-5f84f57f7-vthlf容器中,执行ls /alidata/www 命令
kubectl exec admin-app-5f84f57f7-vthlf ls /alidata/www
#在admin-app-5f84f57f7-vthlf容器中,打开shell交互窗口, 需要加上-it参数
kubectl exec -it admin-app-5f84f57f7-vthlf bash
6、安装过程错误处理
1.Minikube安装启动集群报错
X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.23.3 requires conntrack to be installed in root’s path
解决方案:sudo apt-get install conntrack -y
评论区