侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 285 篇文章
  • 累计创建 125 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

k8s入门教程-2:通过 Minikube 在本地运行Kubernetes集群(单机版集群)

孔子说JAVA
2022-04-05 / 0 评论 / 0 点赞 / 157 阅读 / 8,549 字 / 正在检测是否收录...

搭建Kubernetes 集群是件很痛苦的事情,各种繁多的配置,还需要准备多台服务器。为了方便大家本地开发和体验Kubernetes,社区提供了可以在本机部署的Minikube,可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可。如果是使用 MiniKube 的话,阿里云还维护了一个国内版的 MiniKube,这可以解决很多人拉取不到镜像的问题。

微信图片_20220413145453

1、Minikube简介

Minikube 是一个可以在本地轻松运行 Kubernetes 的工具。Minikube 会在您的电脑中的虚拟机上运行一个单节点的 Kubernetes 集群,以便用户对 Kubernetes 进行试用或者在之上进行 Kubernetes 的日常开发。

Minikube 支持的 Kubernetes 功能包括:

  1. DNS
  2. NodePorts
  3. ConfigMaps 和 Secrets
  4. 仪表盘
  5. 容器运行时:Docker,rkt 和 CRI-O
  6. 启用 CNI (Container Network Interface,容器网络接口)
  7. Ingress

2、Minikube 和 Kubernetes 的区别

1)Kubernetes 集群的架构

通常情况下,一套完整的Kubernetes集群至少需要包括master节点和node节点,下图是常规k8s的集群架构,master节点一般是独立的,用于协调调试其它节点之用,而容器实际运行都是在node节点上,kubectl位于 master节点。

12

2)Minikube 的架构

下图是 Minikube 的架构,可以看出,master 节点与其它节点合为一体,而整体则通过宿主机上的 kubectl 进行管理,这样可以更加节省资源。

13

3)Minikube 的基本运作原理

简单来说就是,用户使用Minikube CLI管理虚拟机上的Kubernetes环境,比如:启动,停止,删除,获取状态等。一旦Minikube虚拟机启动,用户就可以使用熟悉的Kubectl CLI在Kubernetes集群上执行操作。

Minikube运作的基本原理如下所示:

11

A: Minikube 在PC本地生成 kubeconfig 配置文件
B: Minikube 在虚拟环境中创建 Minikube 虚拟机
C: Minikube 在虚拟机中构建 Kubernetes
D: Kubectl 通过 kubeconfig 对虚机中的 Kubernetes 进行管理

3、安装前的环境检查

3.1 配置需求

  1. 2核 CPU 及以上
  2. 2G 空闲的内存
  3. 20G 空闲磁盘空间
  4. 可以连接Internet(用于下载组件)
  5. 容器或虚拟机底座,诸如 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需安装的驱动

2.Linux需安装的驱动

3.Windows需安装的驱动

2

# 安装virtualbox驱动代码
sudo apt-get # 更新
sudo apt-get install virtualbox

注:

  1. 由于minikube复用了docker-machine,在其软件包中已经支持了相应的VirtualBox, VMware Fusion驱动
  2. VT-x/AMD-v 虚拟化必须在 BIOS 中开启
  3. 在Windows环境下,如果开启了Hyper-V,不支持VirtualBox方式

4、Minikube安装

安装minikube的过程中,主要步骤包括3个,分别是:安装docker、安装kubectl、安装minikube。

  1. docker是容器引擎,kubernetes是容器管理工具,为了安装minikube学习kubernetes,安装docker是理所应当的。
  2. kubectl是一个kubernetes的命令管理工具,也可以称之为一个kubernetes的一个命令行客户端。它和kubernetes的关系,类似于mysql命令和mysqld数据库服务器的管理,mysql是mysqld的一个命令管理工具,mysqld是数据库引擎。
  3. 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

1

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 提供了非常多的配置参数,常用配置参数如下:

  1. –driver=*** 从1.5.0版本开始,Minikube缺省使用系统优选的驱动来创建Kubernetes本地环境,比如您已经安装过Docker环境,minikube 将使用 docker 驱动
  2. –cpus=2: 为minikube虚拟机分配CPU核数
  3. –memory=2048mb: 为minikube虚拟机分配内存数
  4. –registry-mirror= 为了提升拉取Docker Hub镜像的稳定性,可以为 Docker daemon 配置镜像加速,参考阿里云镜像服务
  5. –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

15

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

14

5.help命令

minikube help

6.打开Kubernetes控制台

访问 Kubernetes 仪表盘, 命令执行后会自动打开网页

minikube dashboard

1)用服务器内网 IP 访问 dashboard

正常启动过的情况下,dashboard 默认会以本地回环地址拉起proxy,我们执行以下命令:

minikube dashboard --url

由于centos等linux系统按照最小化安装是没有浏览器的,也没有图形化功能,所以这边使用了–url 参数,这将不掉用浏览器,而直接返回可用户访问的 endpoint,正常启动成功,结果如下:

21

但是,由于我们是部署在服务器上,从外部访问又无法访问服务器的回环地址,因此我们需要做代理,来实现外部访问,下面介绍具体方法:

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 端口监听:

22

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 了:

23

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

0

评论区