使用Minikube部署Kubernetes环境

使用Minikube部署Kubernetes环境

1. Minikube简介

Minikube是一个轻量级的Kubernetes实现,它在本地运行一个Kubernetes集群,可以是单节点或者集群环境,主要用于开发和测试。Minikube支持Kubernetes的所有主要功能,包括Dashboard、DNS、容器运行时(如Docker、containerd、CRI-O)等。

主要功能:

  • 快速启动本地Kubernetes集群
  • 支持多种容器运行时
  • 集成Kubernetes Dashboard
  • 提供内置的加载均衡器和Ingress控制器
  • 支持持久化存储卷

2. 安装Minikube

2.1 环境要求

  • 操作系统:Linux, macOS, Windows
  • 最低配置:2 CPUs, 2GB 内存, 20GB 磁盘空间
  • 互联网连接
  • 容器或者虚拟化管理器: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation

2.2 安装步骤

以lx86架构的linux环境为例,更多的安装选项参考:minikube start | minikube (k8s.io)

在这里插入图片描述

  1. 下载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. 启动集群

3.1 启动Minikube

启动Minikube非常简单,只需运行以下命令:

minikube start

如果minikube启动失败,可以参考Drivers | minikube (k8s.io)安装一个虚拟机或容器环境。

集群启动成功后,创建了一个当前最新的单节点K8S 1.30版本的集群:

test@ubuntu-svr:~$ kubectl get node -o wide
NAME  STATUS  ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE   KERNEL-VERSION      CONTAINER-RUNTIME
minikube Ready control-plane 31m v1.30.0 192.168.49.2  <none>  Ubuntu 22.04.4 LTS  5.15.0-107-generic  docker://26.1.1
test@ubuntu-svr:~$ kubectl get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-7db6d8ff4d-8c7h8           1/1     Running   0          4m33s
kube-system   coredns-7db6d8ff4d-xmd7b           1/1     Running   0          4m33s
kube-system   etcd-minikube                      1/1     Running   0          4m47s
kube-system   kube-apiserver-minikube            1/1     Running   0          4m47s
kube-system   kube-controller-manager-minikube   1/1     Running   0          4m47s
kube-system   kube-proxy-c6jdl                   1/1     Running   0          4m33s
kube-system   kube-scheduler-minikube            1/1     Running   0          4m47s
kube-system   storage-provisioner                1/1     Running   0          4m46s

备注:

  1. 官方建议使用非root用户启动集群,如果要使用root运行,需要加 --force

  2. 如果拉取镜像失败,可以通过设置代理服务器进行,命令如下:

    export HTTP_PROXY=http://<proxy hostname:port>
    export HTTPS_PROXY=https://<proxy hostname:port>
    export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24minikube start
    

3.2 节点运行说明

本机使用docker作为底层driver,上述创建了一个单节点的k8s集群,该k8s节点运行在docker容器中。minikube所在的宿主机ip为192.168.0.157,docker使用kicbase启动了一个容器作为k8s的节点(ip为192.168.49.2),这种玩法用到了容器嵌套的技术。

test@ubuntu-svr:~$ ip add | grep 192.inet 192.168.0.157/24 metric 100 brd 192.168.0.255 scope global dynamic ens33
test@ubuntu-svr:~$ docker ps
CONTAINER ID   IMAGE  COMMAND          CREATED       STATUS       PORTS    NAMES
9d565ab58c23   gcr.io/k8s-minikube/kicbase:v0.0.44   "/usr/local/bin/entr…"   2 hours ago   Up 2 hours   127.0.0.1:32772->22/tcp, 127.0.0.1:32771->2376/tcp, 127.0.0.1:32770->5000/tcp, 127.0.0.1:32769->8443/tcp, 127.0.0.1:32768->32443/tcp   minikube
# 容器ip为minikube节点的INTERNAL-IP
test@ubuntu-svr:~$ docker inspect 9d565ab58c23 | grep -i ipaddr"SecondaryIPAddresses": null,"IPAddress": "","IPAddress": "192.168.49.2",
# 进入kicbase容器内部,里面运行了minikube k8s环境的管理面容器和其他容器
test@ubuntu-svr:~$ docker exec -it 9d565ab58c23 sh
# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS          PORTS     NAMES
fead4e8669bc   kicbase/echo-server                       "/bin/echo-server"       13 minutes ago   Up 13 minutes             k8s_echo-server_hello-minikube-5c898d8489-ngvc6_default_70e327a3-9926-4615-8e63-b9b5e93c04d3_0
c0dfae68f544   registry.k8s.io/pause:3.9                 "/pause"                 13 minutes ago   Up 13 minutes             k8s_POD_hello-minikube-5c898d8489-ngvc6_default_70e327a3-9926-4615-8e63-b9b5e93c04d3_0
89fc270a8b21   kubernetesui/dashboard                    "/dashboard --insecu…"   33 minutes ago   Up 33 minutes             k8s_kubernetes-dashboard_kubernetes-dashboard-779776cb65-h8gql_kubernetes-dashboard_b638ee89-615c-462c-a877-49d78471e24c_0
...

4. 集群交互

如果已经安装了kubectl( 安装教程),可以直接使用:

kubectl get po -A

也可以使用minikube下载合适的kubectl版本:

minikube kubectl -- get po -A

可以设置命令别名,详情参考 kubectl:

alias kubectl="minikube kubectl --"

minikube同时集成了dashboard,可以通过下面的命令使用:

test@ubuntu-svr:~$ minikube dashboard
* Enabling dashboard ...- Using image docker.io/kubernetesui/metrics-scraper:v1.0.8- Using image docker.io/kubernetesui/dashboard:v2.7.0
* Some dashboard features require the metrics-server addon. To enable all features please run:minikube addons enable metrics-server* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
* Opening http://127.0.0.1:34747/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...http://127.0.0.1:34747/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

配置ssh端口转发,将本地的34747端口转发到上述宿主机节点的34747端口:ssh -f -N -L 34747:localhost:34747 test@192.168.0.157

成功配置后,本地浏览器访问http://127.0.0.1:34747/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/即可打开dashboard面板。

kubeconfig文件路径如下,注意server指向的地址:

test@ubuntu-svr:~$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:certificate-authority: /home/test/.minikube/ca.crtextensions:- extension:last-update: Sun, 16 Jun 2024 05:43:41 UTCprovider: minikube.sigs.k8s.ioversion: v1.33.1name: cluster_infoserver: https://192.168.49.2:8443name: minikube
contexts:
- context:cluster: minikubeextensions:- extension:last-update: Sun, 16 Jun 2024 05:43:41 UTCprovider: minikube.sigs.k8s.ioversion: v1.33.1name: context_infonamespace: defaultuser: minikubename: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikubeuser:client-certificate: /home/test/.minikube/profiles/minikube/client.crtclient-key: /home/test/.minikube/profiles/minikube/client.key

5. 部署和管理应用

5.1 部署一个示例应用

使用以下命令部署一个示例应用(如Nginx):

kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0

5.2 暴露服务

创建一个服务来暴露部署的应用:

kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get services hello-minikube

5.3 访问应用

你可以通过Minikube的服务URL来访问应用:

test@ubuntu-svr:~$ minikube service hello-minikube
|-----------|----------------|-------------|---------------------------|
| NAMESPACE |      NAME      | TARGET PORT |            URL            |
|-----------|----------------|-------------|---------------------------|
| default   | hello-minikube |        8080 | http://192.168.49.2:30984 |
|-----------|----------------|-------------|---------------------------|
* Opening service default/hello-minikube in default browser...http://192.168.49.2:30984

使用kubectl配置端口转发,将宿主机的7080端口转发到hello-minikube应用的8080端口:

kubectl port-forward service/hello-minikube 7080:8080
# 宿主机访问hello-minikube应用
test@ubuntu-svr:~$ curl http://localhost:7080/
Request served by hello-minikube-5c898d8489-ngvc6HTTP/1.1 GET /Host: localhost:7080
Accept: */*
User-Agent: curl/7.81.0

宿主机为VMware workstation的一台虚拟机,可以进一步配置端口转发,再次在PC本地配置ssh转发,转发客户端的7080端口到宿主机的7080端口。

ssh -f -N -L 7080:localhost:7080 test@192.168.0.157

使用pc浏览器访问 http://localhost:7080/即可查看hello-minikube应用。

在这里插入图片描述

6. 管理集群

查看集群状态

minikube status

暂停集群:

minikube pause

恢复集群:

minikube unpause

停止Minikube

minikube stop

设置默认的内存资源限制(需要重启):

minikube config set memory 4096

查看安装的k8s服务列表,minikube addons list

test@ubuntu-svr:~$ minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | minikube                       |
| cloud-spanner               | minikube | disabled     | Google                         |
| csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
| dashboard                   | minikube | enabled ✅   | Kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
| efk                         | minikube | disabled     | 3rd party (Elastic)            |
| freshpod                    | minikube | disabled     | Google                         |
| gcp-auth                    | minikube | disabled     | Google                         |
| gvisor                      | minikube | disabled     | minikube                       |
| headlamp                    | minikube | disabled     | 3rd party (kinvolk.io)         |
| helm-tiller                 | minikube | disabled     | 3rd party (Helm)               |
| inaccel                     | minikube | disabled     | 3rd party (InAccel             |
|                             |          |              | [info@inaccel.com])            |
| ingress                     | minikube | disabled     | Kubernetes                     |
| ingress-dns                 | minikube | disabled     | minikube                       |
| inspektor-gadget            | minikube | disabled     | 3rd party                      |
|                             |          |              | (inspektor-gadget.io)          |
| istio                       | minikube | disabled     | 3rd party (Istio)              |
| istio-provisioner           | minikube | disabled     | 3rd party (Istio)              |
| kong                        | minikube | disabled     | 3rd party (Kong HQ)            |
| kubeflow                    | minikube | disabled     | 3rd party                      |
| kubevirt                    | minikube | disabled     | 3rd party (KubeVirt)           |
| logviewer                   | minikube | disabled     | 3rd party (unknown)            |
| metallb                     | minikube | disabled     | 3rd party (MetalLB)            |
| metrics-server              | minikube | disabled     | Kubernetes                     |
| nvidia-device-plugin        | minikube | disabled     | 3rd party (NVIDIA)             |
| nvidia-driver-installer     | minikube | disabled     | 3rd party (Nvidia)             |
| nvidia-gpu-device-plugin    | minikube | disabled     | 3rd party (Nvidia)             |
| olm                         | minikube | disabled     | 3rd party (Operator Framework) |
| pod-security-policy         | minikube | disabled     | 3rd party (unknown)            |
| portainer                   | minikube | disabled     | 3rd party (Portainer.io)       |
| registry                    | minikube | disabled     | minikube                       |
| registry-aliases            | minikube | disabled     | 3rd party (unknown)            |
| registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube | enabled ✅   | minikube                       |
| storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
| storage-provisioner-rancher | minikube | disabled     | 3rd party (Rancher)            |
| volumesnapshots             | minikube | disabled     | Kubernetes                     |
| yakd                        | minikube | disabled     | 3rd party (marcnuri.com)       |

创建一个老版本的k8s集群:

minikube start -p aged --kubernetes-version=v1.16.1

删除Minikube集群

minikube delete --all

7. 高级配置和常见问题

7.1 配置资源限制

你可以在启动Minikube时配置CPU和内存资源:

minikube start --cpus=4 --memory=8192
7.2 配置容器运行时

Minikube支持多种容器运行时,可以使用--container-runtime选项来指定:

minikube start --container-runtime=cri-o
7.3 常见问题

Q: 启动Minikube时遇到虚拟化问题?

A: 确保你的系统支持虚拟化,并且已启用。你可以在BIOS设置中启用虚拟化技术(如Intel VT-x或AMD-V)。

Q: 如何重新配置Minikube?

A: 你可以使用minikube config命令来设置和查看Minikube的配置。例如,设置默认的内存大小:

minikube config set memory 8192

Q: Minikube是否支持高可用集群及多节点配置?

A:支持,详情参考:

Using Multi-Control Plane - HA Clusters | minikube (k8s.io)

Using Multi-Node Clusters | minikube (k8s.io)


8. 总结

Minikube是一个强大的工具,可以在本地快速搭建一个Kubernetes集群,帮助开发者在本地进行开发和测试。通过本文的介绍,你应该能够顺利安装、配置和使用Minikube,并了解一些高级配置和常见问题的解决方法。希望这篇文章对你有所帮助,祝你在Kubernetes的学习和使用中取得成功!

更多信息请访问 Minikube官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/353212.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝镜像地址失效

1. 使用nvm安装node时候报错 报错内容 Get "https://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": tls: failed to verify certificate: x509: certificate has expired or is not yet valid:报错原因 淘宝镜像地址的证书过期了 解决 找到nvm安装的根目…

scratch3编程02-使用克隆来编写小游戏

目录 1&#xff0c;游戏效果 2&#xff0c;游戏代码块 1&#xff09;玩家 2&#xff09;障碍物 ​ 3&#xff09;箭头 ​ 4&#xff09;关卡图片 3&#xff0c;scratch文件 1&#xff0c;游戏效果 使用克隆 在这个游戏中&#xff1a; 程序开始&#xff1a;只要点击“…

统计学一(术语,正态)

目录 一&#xff0c;常用术语 二&#xff0c;正态分布&#xff08;Normal Distribution&#xff09; 三&#xff0c;中心极限定理(Central Limit Theorem) 一&#xff0c;常用术语 population(族群)&#xff1a;要统计的总的 populationSize(族群数量)&#xff1a;要统计的总…

Ardupilot开源代码之ExpressLRS性能实测方法

Ardupilot开源代码之ExpressLRS性能实测方法 1. 源由2. 测试效果3. 测试配置4. 总结5. 参考资料6. 补充 1. 源由 之前一直在讨论ExpressLRS性能的问题&#xff0c;有理论、模拟、实测。 始终缺乏完整的同一次测试的测试数据集&#xff0c;本章节将介绍如何在Ardupilot上进行获…

QT day02

思维导图 UI界面设计 设置登录界面&#xff0c;输入账号、密码&#xff0c;登录/取消 按钮 使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义…

zerotier自建moon方法

简介 使用zerotier已经有一段时间了&#xff0c;现在偶尔会出现服务器连接不上的情况。我就想自己建个moon来试试。记录一下过程&#xff0c;用作备忘录。 准备工作 准备一个有公网IP的云主机。我用的是“三丰云”&#xff0c;速度很快同时提供"免费虚拟主机"和“免费…

商讯杂志商讯杂志社商讯编辑部2024年第10期目录

案例分享 基于胜任素质的干部选拔和梯队建设体系探讨——以A区卫生健康系统为例 康文雁; 1-4 “家庭五险一金”对居民商业保险购买存在挤出效应——基于江苏省徐州、淮安、泰州三市的实证研究 李炳毅; 5-8 人口老龄化背景下促进徐州市经济高质量发展的探究 李艳秋;…

java:spring actuator扩展原有info endpoint的功能

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89437506 # 项目代码 【pom.xml】 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId&…

【热门开源项目推荐】满足不同程序员的需求与关注点

目录 前言一、热门开源项目介绍二、使用开源热门项目的优势&#xff08;一&#xff09;经济方面&#xff08;二&#xff09;技术方面&#xff08;三&#xff09;社区支持及协作方面 三、程序员选择项目模型建议&#xff08;一&#xff09;关键步骤&#xff08;二&#xff09;示…

后端开发中缓存的作用以及基于Spring框架演示实现缓存

缓存的作用及演示 现在我们使用的程序都是通过去数据库里拿数据然后展示的 长期对数据库进行数据访问 这样数据库的压力会越来越大 数据库扛不住了 创建了一个新的区域 程序访问去缓存 缓存区数据库 缓存里放数据 有效降低数据访问的压力 我们首先进行一个演示 为了演示…

【Spine学习12】之 事件帧

1、新建事件帧&#xff1a; 2、选择第8s的攻击帧&#xff0c;点击第一步新建的attack事件帧前面的钥匙 这样每次动作到8s的时候会自动跳出事件帧提示 这个文字实际动画不会显示 事件是动画过程中所发生情况的触发器。 给程序员识别的

苍穹外卖环境搭建

一、前端环境搭建 ①整体结构 ②前端工程基于nginx运行 启动nginx:双击 nginx.exe 即可启动 nginx 服务&#xff0c;访问端口号为 80 进入浏览器地址输入locallhost回车 二、后端环境搭建 后端初始工程基于maven进行项目构建&#xff0c;并且进行分模块开发 (1) idea打开初始…

【靶场搭建】-01- 在kali上搭建DVWA靶机

1.DVWA靶机 DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是使用PHPMysql编写的web安全测试框架&#xff0c;主要用于安全人员在一个合法的环境中测试技能和工具。 2.下载DVWA 从GitHub上将DVWA的源码clone到kali上 git clone https://github.com/digininj…

力扣每日一题 6/18 字符串/模拟

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2288.价格减免 【中等】 题目&#xff1a; 句子 是由若干个单词组成的字符…

如何应对IT行业内卷严重?生存策略大揭秘!

这几天&#xff0c;身边又有个IT项目团队又开始间歇性停工了&#xff01;当下IT行业内卷相当严重&#xff0c;大部分的技术团队面临着前所未有的挑战。 我们要正视目前行业中的显示&#xff0c;内卷趋势短期内不会消失&#xff0c;而且很可能随着大型公司人员毕业而更加严重。 …

【Redis】java客户端(SpringData和jedis)

https://www.oz6.cn/articles/58 https://www.bilibili.com/video/BV1cr4y1671t/?p16 redis官网客户端介绍&#xff1a;https://redis.io/docs/latest/develop/connect/clients/ jedis maven引入依赖 <dependencies><!--引入Jedis依赖--><dependency><…

CUDA C权威编程指南 第4章 全局内存

一、CUDA内存模型概述 1. CUDA内存模型 对于程序员来说&#xff0c;一般有两种类型的存储器&#xff1a; 可编程的&#xff1a;你需要显式地控制哪些数据存放在可编程内存中 不可编程的&#xff1a;你不能决定数据的存放位置&#xff0c;程序将自动生成存放位置以获得良好…

【CPP】插入排序、希尔排序

目录 1.插入排序1.1直接插入排序简介代码分析 1.2直接插入对比冒泡排序简介代码对比分析(直接插入排序与冒泡的复杂度效率区别) 1.3希尔排序简介代码分析 1.插入排序 基本思想&#xff1a;把一个待排数字按照关键码值插入到一个有序序列中&#xff0c;得到一个新的有序序列。 …

​【数据结构与算法】冒泡排序:简单易懂的排序算法解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 二、冒泡排序原理 &#x1f343;基本思想&#xff1a; &#x1f343;算法…

反激开关电源保险丝以及热敏电阻的选型

保险丝&#xff08;2A/250V&#xff09; 保险丝的选型及计算 1、保险丝的作用就是在电路出现故障造成过流甚至短路时能及时切断电路电源的联系。&#xff08; 保护后 级电路&#xff0c;一旦出现故障&#xff0c;由于电流过大温度过高&#xff0c;保险丝熔断 &#xff09; 2、…