【1】minikube初体验


目录

【1】minikube初体验
【2】minikube部署Traefik
【3】minikube离线版安装

minikube 介绍


K8S的迷你版本,运行于单机之上的K8S。当资源并不多,而需要学习或者开发基于k8s集群的组件,minikube也是一个不错的选择。

minikube 官方文档:https://minikube.sigs.k8s.io/docs/start/


安装前准备


官方文档写的非常详细。

image-20240307193804461

大概意思是说,需要准备一台不能小于 2核心、2G内存、20G磁盘、能连接互联网的主机,而且主机需要有容器或者虚拟机环境,比如:docker、QEMU 巴拉巴拉虚拟化软件其中之一,然后安装 minikube 就是一条命令的事:minikube start

我这里直接采用 vmware workstation 创建一台虚拟机来搭建 minikube, 配置信息如下:

image-20240307195121659

挑战下极限,估计给了个最低配置,磁盘100GB不影响。安装好 Centos7.9 准备开搞。


minikube安装部署


系统初始化


最常见的系统初始化还是要做的。

  1. 关闭 selinux 和 firewalld
  2. 修改主机名并添加 /etc/hosts 解析
  3. 校对时间

差不多就这三步吧, 后面遇到再说。这三步就不给出命令了, 都敲烂了。

我主机的主机名及解析
root@minikube(192.168.199.200)~>hostname
minikube
root@minikube(192.168.199.200)~>cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.200 minikube

继续跟着官方文档走。


下载minikube


image-20240307195916645

这一步就难死了一大帮兄弟们,看到 google 就头痛。

阿里云发布的minikube地址:https://github.com/kubernetes/minikube/releases 从 release 目录下载最新版的 minikube 别下载错了。

image-20240308100350017

这里要是github再上不去,在国内学习kubernetes 真就得谢谢阿里的同学们,还有一个地方可以使用:

https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.20.0/minikube-linux-amd64

上面这个目前只更新到 v1.20.0 版本了。

上面提供了三种方式下载 minikube ,无论用哪种方法下载的,接下来的操作都是一致的。


部署minikube


root@minikube(192.168.199.200)~>install minikube-linux-amd64 /usr/bin/minikube
root@minikube(192.168.199.200)~>ls /usr/bin/minikube
/usr/bin/minikube*

版本
root@minikube(192.168.199.200)~>minikube version
minikube version: v1.32.0
commit: 8220a6eb95f0a4d75f7f2d7b14cef975f050512d

安装官方文档来说, 试试 minikube start

root@minikube(192.168.199.200)~>minikube start
* minikube v1.32.0 on Centos 7.9.2009
* Unable to pick a default driver. Here is what was considered, in preference order:
* Alternatively you could install one of these drivers:
  - docker: Not installed: exec: "docker": executable file not found in $PATH
  - kvm2: Not installed: exec: "virsh": executable file not found in $PATH
  - podman: Not installed: exec: "podman": executable file not found in $PATH
  - qemu2: Not installed: exec: "qemu-system-x86_64": executable file not found in $PATH
  - virtualbox: Not installed: unable to find VBoxManage in $PATH

X Exiting due to DRV_NOT_DETECTED: No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/

报错了不要慌,认真看报错信息,上面的主要内容无非就是需要指定 --driver 嘛,那么多中选一个就是了。我们本来就是虚拟机,这里直接用 none 这种模式,对应的看 none 后面是啥解释。

  - none: Not installed: exec: "docker": executable file not found in $PATH  没有安装 docker,执行文件在环境变量 PATH中找不到。

根据提示先安装docker吧。


安装docker


安装docker有很多种方式。

  1. 通过yum安装
  2. 通过二进制包安装

因为有互联网访问,直接采用yum安装更加方便。

添加docker源

root@minikube(192.168.199.200)~>curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  -o /etc/yum.repos.d/docker-ce.repo

安装docker

root@minikube(192.168.199.200)~>yum -y install docker-ce -y

启动docker

root@minikube(192.168.199.200)~>systemctl enable --now docker

查看docker版本

root@minikube(192.168.199.200)~>docker version
Client: Docker Engine - Community
 Version:           25.0.4
 API version:       1.44
 Go version:        go1.21.8
 Git commit:        1a576c5
 Built:             Wed Mar  6 16:33:16 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          25.0.4
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.8
  Git commit:       061aa95
  Built:            Wed Mar  6 16:32:11 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

注意:这里不要自作主张的修改 Docker Root Dir 的数据目录,minikube初始化会重新设置这个目录。


注意:当执行 minikube start 未成功,下次再次执行前先删除 /root/minikube,因为会缓存上一次失败的文件。

安装完docker后,再次执行,记得要加 --driver=none 我们是虚拟机环境 minikube start --driver=none

先清除
root@minikube(192.168.199.200)~>rm -rf ~/.minikube
再执行
root@minikube(192.168.199.200)~>minikube start --driver=none
* minikube v1.32.0 on Centos 7.9.2009
* Using the none driver based on user configuration

X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.28.3 requires conntrack to be installed in root's path

还是有问题,意思是说:安装 Kubernetes 1.28.3 需要安装 conntrack 在root目录。这里就思考一个问题,这里给出了 k8s安装版本,如果不想用这个版本呢?

这里就通过 minikube start --help 尝试去找找能不能为 minikube 指定 k8s 版本:

root@minikube(192.168.199.200)~>minikube start  --help | egrep version
        If set, automatically updates drivers to the latest version. Defaults to true.
    --kubernetes-version='':
        The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.28.3, 'latest' for v1.28.3). Defaults to 'stable'.
    --mount-9p-version='9p2000.L':
        Specify the 9p version that the mount should use

看来可以通过 --kubernetes-version='' 来指定版本,默认是安装k8s稳定版,例如我这里需要安装 v1.23.3版本的 k8s,为什么是 v1.23.3呢,因为这个版本容器还是用的 docker,后面的版本都使用 containerd

指定版本再次尝试:

先清除
root@minikube(192.168.199.200)~>rm -rf ~/.minikube
再执行
root@minikube(192.168.199.200)~>minikube start --driver=none --kubernetes-version='v1.23.3'
* minikube v1.32.0 on Centos 7.9.2009
* Using the none driver based on user configuration

X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.23.3 requires conntrack to be installed in root's path

看来安装 conntrack 是绕不开了。


安装conntrack


有互联网就是爽,直接yum安装即可。

root@minikube(192.168.199.200)~>yum -y install conntrack

安装完成后,再次尝试:

先清除
root@minikube(192.168.199.200)~>rm -rf ~/.minikube
再执行
root@minikube(192.168.199.200)~>minikube start --driver=none --kubernetes-version='v1.23.3'
* minikube v1.32.0 on Centos 7.9.2009
* Using the none driver based on user configuration
* Starting control plane node minikube in cluster minikube
* Running on localhost (CPUs=2, Memory=3770MB, Disk=97352MB) ...
* OS release is CentOS Linux 7 (Core)
E0308 10:25:51.159453   15673 start.go:421] unable to disable preinstalled bridge CNI(s): failed to configure non-podman bridge cni configs in "/etc/cni/net.d": sudo find /etc/cni/net.d -maxdepth 1 -type f -name *bridge* -not -name *podman* -not -name *.mk_disabled -printf "%p, " -exec sh -c "sudo sed -i -r -e '/"dst": ".*:.*"/d' -e 's|^(.*)"dst": (.*)[,*]$|\1"dst": \2|g' -e '/"subnet": ".*:.*"/d' -e 's|^(.*)"subnet": ".*"(.*)[,*]$|\1"subnet": "10.244.0.0/16"\2|g' {}" ;: exit status 1
stdout:

stderr:
find: ‘/etc/cni/net.d’: No such file or directory
    > kubelet.sha256:  64 B / 64 B [-------------------------] 100.00% ? p/s 0s
    > kubelet:  230.23 KiB / 118.75 MiB [>_____] 0.19% 79.80 KiB p/s ETA 25m2/

看起来已经可以运行了啊,但是这里下载 kubelet / kubeadm / kubectl 速度实在太慢了,有没有其他办法呢? 当然有办法。


安装kubeadm/kubectl/kubelet


重新开启一台虚拟机,配置啥都无所谓能连接到互联网即可,方法是该虚拟机从aliyun源安装对应版本的 kubeadm / kubelet / kubectl 然后拷贝到 minikube 下载目录下即可。

注意:该虚拟机并非安装 minikube 主机!!!

添加 kubernetes源

root@localhost(192.168.199.170)~>cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装minikube需要的版本(注意:注意:该虚拟机并非安装 minikube 主机!!!)

root@localhost(192.168.199.170)~>yum -y install kubelet-1.23.3 kubeadm-1.23.3 kubectl-1.23.3

拷贝kubeadm / kubectl / kubelet 到 minikube指定目录

root@localhost(192.168.199.170)~>scp /usr/bin/kube* 192.168.199.200:/root/.minikube/cache/linux/v1.23.3/

部署minikube


通过上面的步骤已经将 kubelet / kubectl / kubeadm 拷贝到对应目录了, 再次执行操作。因为 minikube 也需要下载镜像文件,而默认的镜像文件也是国外的仓库,修改为阿里云的仓库。

--image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

操作如下:

先清除
root@minikube(192.168.199.200)~>rm -rf ~/.minikube
创建目录
root@minikube(192.168.199.200)~>mkdir -p /root/.minikube/cache/linux/amd64/v1.23.3/
再拷贝
root@localhost(192.168.199.170)~>scp /usr/bin/kube* 192.168.199.200:/root/.minikube/cache/linux/amd64/v1.23.3/
再执行
root@minikube(192.168.199.200)~>minikube start --driver=none --kubernetes-version='v1.23.3' --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'
* minikube v1.32.0 on Centos 7.9.2009
* Using the none driver based on user configuration
* Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
* Starting control plane node minikube in cluster minikube
* Running on localhost (CPUs=2, Memory=3770MB, Disk=97352MB) ...
* OS release is CentOS Linux 7 (Core)
E0308 13:57:24.345459    7322 start.go:421] unable to disable preinstalled bridge CNI(s): failed to configure non-podman bridge cni configs in "/etc/cni/net.d": sudo find /etc/cni/net.d -maxdepth 1 -type f -name *bridge* -not -name *podman* -not -name *.mk_disabled -printf "%p, " -exec sh -c "sudo sed -i -r -e '/"dst": ".*:.*"/d' -e 's|^(.*)"dst": (.*)[,*]$|\1"dst": \2|g' -e '/"subnet": ".*:.*"/d' -e 's|^(.*)"subnet": ".*"(.*)[,*]$|\1"subnet": "10.244.0.0/16"\2|g' {}" ;: exit status 1
stdout:

stderr:
find: ‘/etc/cni/net.d’: No such file or directory
* Preparing Kubernetes v1.23.3 on Docker 25.0.4 ...
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Configuring local host environment ...
*
! The 'none' driver is designed for experts who need to integrate with an existing VM
* Most users should use the newer 'docker' driver instead, which does not require root!
* For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/
*
! kubectl and minikube configuration will be stored in /root
! To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:
*
  - sudo mv /root/.kube /root/.minikube $HOME
  - sudo chown -R $USER $HOME/.kube $HOME/.minikube
*
* This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
* Verifying Kubernetes components...
  - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
* Enabled addons: default-storageclass, storage-provisioner
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

看最后的结果,done,已经完成。看倒数第二行

kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'

kubectl 没找到,如果需要执行:minikube kubectl -- get pods -A 尝试执行:

root@minikube(192.168.199.200)~>minikube kubectl -- get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-65c54cc984-w9rtf           1/1     Running   0          8m10s
kube-system   etcd-minikube                      1/1     Running   0          8m23s
kube-system   kube-apiserver-minikube            1/1     Running   0          8m23s
kube-system   kube-controller-manager-minikube   1/1     Running   0          8m23s
kube-system   kube-proxy-qpwsq                   1/1     Running   0          8m10s
kube-system   kube-scheduler-minikube            1/1     Running   0          8m25s
kube-system   storage-provisioner                1/1     Running   0          8m21s

这里没找到 kubectl, 我们让它找到不就完了。

root@minikube(192.168.199.200)~>cp -a  ~/.minikube/cache/linux/amd64/v1.23.3/kubectl /usr/bin/

然后在本地想k8s一样的查看pod

root@minikube(192.168.199.200)~>kubectl get po -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-65c54cc984-w9rtf           1/1     Running   0          9m41s
etcd-minikube                      1/1     Running   0          9m54s
kube-apiserver-minikube            1/1     Running   0          9m54s
kube-controller-manager-minikube   1/1     Running   0          9m54s
kube-proxy-qpwsq                   1/1     Running   0          9m41s
kube-scheduler-minikube            1/1     Running   0          9m56s
storage-provisioner                1/1     Running   0          9m52s

到这里,minikube已经部署完成了,接下来验证下试试看。


开启dashboard


开启dashboard
root@minikube(192.168.199.200)~>minikube addons enable dashboard

查看
root@minikube(192.168.199.200)~>kubectl get pod,svc  -n kubernetes-dashboard
NAME                                             READY   STATUS    RESTARTS   AGE
pod/dashboard-metrics-scraper-7db978b848-zplcm   1/1     Running   0          53m
pod/kubernetes-dashboard-6f4c897964-fw7qj        1/1     Running   0          53m

NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/dashboard-metrics-scraper   ClusterIP   10.97.6.92      <none>        8000/TCP   53m
service/kubernetes-dashboard        ClusterIP   10.108.199.93   <none>        80/TCP     53m

访问 dashboard 也是个技术活。

首先,启动dashboard 界面

root@minikube(192.168.199.200)~>minikube dashboard &
[1] 62714
root@minikube(192.168.199.200)~>* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
http://127.0.0.1:34726/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

为了使用非本机的客户端访问 dashboard,需要添加外部代理

kubectl proxy --port=80 --address='192.168.199.200' --accept-hosts='^.*' &

然后就可以将上面的 127.0.0.1:34726 替换为 192.168.199.200访问了

http://192.168.199.200/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

别看着好奇怪一链接地址,直接浏览器访问就打开了。

image-20240308173103232


验证


运行一个Pod

运行一个pod
root@minikube(192.168.199.200)~>kubectl create deployment ngx --image=nginx:alpine --port=80
deployment.apps/ngx created

为pod添加service
root@minikube(192.168.199.200)~>kubectl expose deployment ngx --type=NodePort --port=80 --target-port=80
service/ngx exposed

查看service

root@minikube(192.168.199.200)~>kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        22m
ngx          NodePort    10.101.201.161   <none>        80:30429/TCP   37s

映射的随机端口: 30429 , 通过浏览器访问。

image-20240308142016957



--- EOF ---

本文作者:hukey

本文链接:https://www.cnblogs.com/hukey/p/18061513

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   hukey  阅读(1019)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
历史上的今天:
2019-03-08 Nginx - 限制并发、限制访问速率、限制流量
2019-03-08 Nginx - 隐藏或修改版本号
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 彩虹 Jay
彩虹 - Jay
00:00 / 00:00
An audio error has occurred.

彩虹 + 轨迹 (Live) - 周杰伦 (Jay Chou)

彩虹

词:周杰伦

曲:周杰伦

哪里有彩虹告诉我

哪里有彩虹告诉我

能不能把我的愿望还给我

能不能把我的愿望还给我

为什么天这么安静

为什么天这么安静

所有的云都跑到我这里

有没有口罩一个给我

有没有口罩一个给我

释怀说了太多就成真不了

释怀说了太多就成真不了

也许时间是一种解药

也许时间是一种解药

也是我现在正服下的毒药

也是我现在正服下的毒药

看不见你的笑 我怎么睡得着

看不见你的笑 我怎么睡得着

你的声音这么近我却抱不到

你的声音这么近我却抱不到

没有地球太阳还是会绕

没有地球太阳还是会绕

没有理由我也能自己走

没有理由我也能自己走

你要离开 我知道很简单

你要离开 我知道很简单

你说依赖 是我们的阻碍

你说依赖 是我们的阻碍

就算放开 但能不能别没收我的爱

就算放开 但能不能别没收我的爱

当作我最后才明白

当作我最后才明白

看不见你的笑 要我怎么睡得着

看不见你的笑 要我怎么睡得着

你的声音这么近我却抱不到

没有地球太阳还是会绕 会绕

没有理由我也能自己走掉

释怀说了太多就成真不了

也许时间是一种解药 解药

也是我现在正服下的毒药

轨迹

词:黄俊郎

曲:周杰伦

我会发着呆然后忘记你

接着紧紧闭上眼

想着哪一天 会有人代替

想着哪一天 会有人代替

让我不再想念你

我会发着呆 然后微微笑

我会发着呆 然后微微笑

接着紧紧闭上眼

又想了一遍 你温柔的脸

又想了一遍 你温柔的脸

在我忘记之前