------------ 前言 ------------
💻系统信息:Ubuntu 22.04
🔧Minikube:v1.18.1
🔧docker:20.10.12
📦需要安装的内容:kubectl,docker,minikube
Kubernetes简称k8s,下文统一简称k8s
Minikube和k8s区别
通俗的讲,如果k8s是pro版的手机,那minikube就是青春版
minikube是面向想体验和学习k8s的用户推出的简化版k8s
官方定义:
与 kind 类似,minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你本地的个人计算机(包括 Windows、macOS 和 Linux PC)运行一个单节点的 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。
两者的架构已不尽相同,完整的k8s集群部署需要master和node节点,其中master节点用于协调和管理其他节点,一般独立存在,实际的容器运行在node节点上,kubectl位于master节点。
而minikube则不同,master节点与其他节点合为一体,所有节点通过宿主机上的kubectl进行管理,相比k8s可以理解为单机版的k8s,部署更加简单。适合个人,测试环境和学习者使用。
k8s架构图
minikube架构图
安装
1.安装kubectl
1.1 apt 包更新, 安装 apt-transport-https\ca-certificates\curl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
1.2 加认证公钥:
官方为Google的源,国内因为众所周知的原因,不推荐使用
这里使用阿里云的源 https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
1.3 为apt安装添加阿里的镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
添加完成后切记执行
apt-get update
否则可能报错如下
root@mypc:/home/mypc# apt-get update
获取:1 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease [9,383 B]
错误:1 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease
由于没有公钥,无法验证下列签名: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB
命中:2 http://cn.archive.ubuntu.com/ubuntu jammy InRelease
命中:3 http://security.ubuntu.com/ubuntu jammy-security InRelease
命中:4 http://cn.archive.ubuntu.com/ubuntu jammy-updates InRelease
命中:5 http://cn.archive.ubuntu.com/ubuntu jammy-backports InRelease
2.安装minikube
apt-get update
apt-get install -y kubectl
耐心等待安装完成
-------------如果执行后报错如下-----------
No apt package “kubeadm“, but there is a snap with that name
说明apt的镜像源地址没有生效或是没配置,参照1.3的步骤执行下后,再次执行
apt-get update
后再安装!!!!!
-------------如果执行后报错如上-----------
校验minikube是否安装成功
minikube version
// 输出如下内容即为安装成功
// mypc@mypc:~$ minikube version
// minikube version: v1.18.1
// commit: xxxxx
3.启动minikube
启动minikube需要指定driver 命令是
minikube start --driver=docker
我这里选择的是docker,当然minikube支持多种容器化工具,docker用惯了就选了docker
⚠️如果你还没有安装docker,启动会报错,docker安装命令如下:
apt-get install docker.io
-------------如果启动时报错如下-----------
mypc@mypc:~$ minikube start --driver=docker
😄 Ubuntu 22.04 上的 minikube v1.18.1
✨ 根据用户配置使用 docker 驱动程序
💣 Exiting due to PROVIDER_DOCKER_NEWGRP: "docker version --format -" exit status 1: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied
💡 建议:Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker'
📘 文档:https://docs.docker.com/engine/install/linux-postinstall/
是因为docker安装后默认需要root权限,即sudo docker xxx才能执行,但是minikube不推荐在root下使用,导致minikute用不了docker,需要给普通用户增加docker使用的权限
# 添加docker用户组,这个命令执行后可能会提示该用户组已存在,为正常现象
sudo groupadd docker
# 将当前登陆的用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组信息
newgrp docker
#普通用户权限下不加sudo执行docker命令,如果正常输出结果,则说明配置成功
docker ps
-------------如果启动时报错如上-----------
启动成功后输出如下内容:
mypc@mypc:~$ minikube start --driver=docker
😄 Ubuntu 22.04 上的 minikube v1.18.1
✨ 根据用户配置使用 docker 驱动程序
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
耐心等待启动完成,有时候镜像源服务器会抽风报错😂
如果启动时出现pull base image卡住问题,以下是解决方法
阿里镜像源会出现拉取镜像慢或者缺失问题,如果你跟我一样悲催,出现
save image to xxxxxx.... file unexpected EOF 错误
就老老实实按官方给的方法来吧
# 先执行
minikube delete
# 然后执行
rm -rf /home/[用户名]/.minikube
然后查阅官方文档:https://minikube.sigs.k8s.io/docs/start/
# 执行
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
该命令会安装最新版本的minikube,我这里装的是v1.28.0
然后执行
# 加上--image-mirror-country=cn是为了使用阿里的镜像源,之前出现无法下载镜
# 像的问题,我严重怀疑是minikube版本太低的原因
minikube start minikube start --image-mirror-country=cn --driver=docker
如果到这里执行完毕,你可以跳过下面红色的部分
----------------------------如果执行后报错----------------------------
Exiting due to K8S_KUBELET_NOT_RUNNING: wait: /bin/bash -c "sudo env PATH="/var/lib/minikube/binaries/v1.25.3:$PATH" kubeadm init --config /var/tmp/minikube/kubeadm.yaml --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests,DirAvailable--var-lib-minikube,DirAvailable--var-lib-minikube-etcd,FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable--etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,Mem,SystemVerification,FileContent--proc-sys-net-bridge-bridge-nf-call-iptables": Process exited with status 1
参考:https://github.com/kubernetes/minikube/issues/15270 中的解决方法
# 先执行
minikube delete
# 然后执行
rm -rf /home/[用户名]/.minikube
将--kubernetes-version 版本设置成1.23.0
新的启动命令如下
minikube start --image-mirror-country=cn --kubernetes-version=1.23.0
即可启动完成
----------------------------------------------------------------------
4.启动minikube控制台
4.1 如果你只在本机启动
# 该命令执行后会自动打开浏览器,如果想输出具体的地址 再命令后加 --url
minikube dashboard
4.1 如果你在服务器上启动,并通过其他电脑访问
# 执行如下命令,为服务提供代理
nohub kubectl proxy --port=[需要暴露的端口号] --address='[服务器IP]' --accept-hosts='^[外部访问服务器的IP]$' >/dev/null 2>&1&
然后执行
minikube dashboard --url
访问地址
http://[服务器IP]:[需要暴露的端口号]/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default
即可进入minikube的管理界面,如果进不去,记得排查防火墙是否放行了你想要暴露的端口号
sudo ufw allow [需要暴露的端口号]