使用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/24
       
    minikube 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.crt
    extensions:
    - extension:
        last-update: Sun, 16 Jun 2024 05:43:41 UTC
        provider: minikube.sigs.k8s.io
        version: v1.33.1
      name: cluster_info
    server: https://192.168.49.2:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Sun, 16 Jun 2024 05:43:41 UTC
        provider: minikube.sigs.k8s.io
        version: v1.33.1
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/test/.minikube/profiles/minikube/client.crt
    client-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-ngvc6

HTTP/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.mfbz.cn/a/721502.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#——方法的参数列表ref、out、params、in详情

在C#中&#xff0c;方法参数列表是在定义方法时指定的&#xff0c;用于接收传递给方法的数据。参数列表包括参数类型和参数名。参数可以是必需的&#xff08;必须有值&#xff09;&#xff0c;也可以是可选的&#xff08;可以有默认值&#xff09;。 方法的参数列表 1. 值参数…

温湿度采集与OLED显示

目录 一、什么是软件I2C 二、什么是硬件I2C 三、STM32CubeMX配置 1、RCC配置 2、SYS配置 3、I2C1配置 3、I2C2配置 4、USART1配置 5、TIM1配置 6、时钟树配置 7、工程配置 四、设备链接 1、OLED连接 2、串口连接 3、温湿度传感器连接 五、每隔2秒钟采集一次温湿…

jquey+mybatis-plus实现简单分页功能

这篇文章介绍一下怎么通过JQuery结合mybatis-plus的分页插件实现原生HTML页面的分页效果&#xff0c;没有使用任何前端框架&#xff0c;主要是对前端知识的应用。 创建Springboot项目 Intellij IDEA中创建一个Springboot项目&#xff0c;项目名为pager。 添加必须的依赖包 修…

Linux安装Tomcat和Nginx

目录 前言一、系统环境二、Tomcat安装步骤Step1 安装JDK环境Step2 安装Tomcat 三、Nginx安装步骤四、测试4.1 测试Tomcat4.2 测试Nginx 总结 前言 本篇文章介绍如何在Linux上安装Tomcat web服务器。 一、系统环境 虚拟机版本&#xff1a;VMware Workstation 15 ProLinux镜像…

Java基础 - 练习(二)打印菱形

Java基础练习 打印菱形&#xff0c;先上代码&#xff1a; // 方法一&#xff1a;基础&#xff0c;好理解 public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星…

链表OJ--超详细解析

链表OJ 文章目录 链表OJ1. 反转链表2. 返回K值3. 链表的中间节点4. 回文链表5. 相交链表6. 带环链表6.1 为什么一定会相遇&#xff0c;有没有可能会错过&#xff0c;或者出现永远追不上的情况&#xff0c;请证明6.2 slow一次走一步&#xff0c;fast如果一次走3步&#xff0c;走…

解决nvm切换node版本后,全局依赖无法使用

问题描述 使用 nvm install 10.24.1 安装node版本&#xff0c;安装成功后&#xff0c;使用 npm install -g xxx 安装全局依赖&#xff08;私有库&#xff09;&#xff0c;安装成功后&#xff0c;运行命令提示找不到命令。 已做以下尝试 npm root -g&#xff0c;返回 D:\Prog…

【Java面试】二十、JVM篇(上):JVM结构

文章目录 1、JVM2、程序计数器3、堆4、栈4.1 垃圾回收是否涉及栈内存4.2 栈内存分配越大越好吗4.3 方法内的局部变量是否线程安全吗4.4 栈内存溢出的情况4.5 堆和栈的区别是什么 5、方法区5.1 常量池5.2 运行时常量池 6、直接内存 1、JVM Java源码编译成class字节码后&#xf…

window端口占用情况及state解析

背景&#xff1a; 在电脑使用过程中&#xff0c;经常会开许多项目&#xff0c;慢慢地发现电脑越来越卡&#xff0c;都不知道到底是在跑什么项目导致&#xff0c;于是就想查看一下电脑到底在跑什么软件和项目&#xff0c;以作记录。 常用命令 netstat -tuln &#xff1a; 使用…

这些已经死去的软件,依旧无可替代

互联网这条长河里&#xff0c;软件们就像流星一样&#xff0c;一闪而过。有的软件火过一段时间&#xff0c;然后就慢慢消失了。 说不定有些软件你以前天天用&#xff0c;但不知道从什么时候开始就不再用了。时间一天天过去&#xff0c;我们的热情、记忆都在消退&#xff0c;还…

【免费API推荐】: 解锁创意无限,享受免费开发之旅

幂简网站上免费的 API 分类内汇集了各种各样的免费 API&#xff0c;涵盖了多个领域和功能。无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个项目都能为你提供丰富的选择。 幂简集成搜集了网络上免费的 API 资源&#xff0c;为广大开发者和创业者提供便捷的访问渠…

在Linux中安装中文编程语言洛书

本次安装使用的VMware中的Ubuntu系统虚拟机&#xff0c;尝试下中文编程。 安装洛书 下载官网&#xff1a;洛书——打造开源高效强大的国产编程语言 官方文档&#xff1a;洛书文档中心 (losu.tech) 点击获取 在终端中安装工具 dpkg和rlwrap&#xff1a; sudo apt install d…

服务器数据恢复—NTFS文件系统下双循环riad5数据恢复案例

服务器存储数据恢复环境&#xff1a; EMC CX4-480存储&#xff0c;该存储中有10块硬盘&#xff0c;其中有3块磁盘为掉线磁盘&#xff0c;另外7块磁盘组成一组RAID5磁盘阵列。运维人员在处理掉线磁盘时只添加新的硬盘做rebuild&#xff0c;并没有将掉线的硬盘拔掉&#xff0c;所…

《失败的逻辑》|别再无效复盘了!学会认清每一次失败的必然性

为什么铁路信号系统工作正常时&#xff0c;列车仍然会发生撞车事故&#xff1f; 为什么所有操作人员都警觉地坚守着工作岗位&#xff0c;核反应堆依然会发生灾难性的熔化事故&#xff1f; 为什么我们制定得甚好的那么多专业和个人计划&#xff0c;会如此频繁地出岔子&#xff1…

RoaringBitMap处理海量数据内存diff

一、背景 假设mysql库中有一张近千万的客户信息表(未分表)&#xff0c;其中有客户性别&#xff0c;等级(10个等级)&#xff0c;参与某某活动等字段 1、如果要通过等级性别其他条件(离散度也低)筛选出客户&#xff0c;如何处理查询&#xff1f; 2、参与活动是记录活动ID&#…

NVIDIA新模型Nemotron-4:98%的训练数据是合成生成的,你敢信?

获取本文论文原文PDF&#xff0c;请公众号 AI论文解读 留言&#xff1a;论文解读 标题&#xff1a;Nemotron-4 340B Technical Report 模型概述&#xff1a;Nemotron-4 340B系列模型的基本构成 Nemotron-4 340B系列模型包括三个主要版本&#xff1a;Nemotron-4-340B-Base、…

RNN的变种们:GRULSTM双向RNN

上篇笔记记录到RNN的一个缺点&#xff1a;训练时会出现梯度消失&#xff0c;解决的办法是找到一个更优的计算单元。这里也有GRU和LSTM。 GRU&#xff08;Gated Recurrent Unit&#xff09;门控训练网络 什么是门控机制&#xff1f;就是对当前的输入进行一个筛选。门打开&…

《UNIX环境高级编程》第三版(电子工业出版社出品)——两年磨一剑的匠心译作

历时两年&#xff0c;《UNIX环境高级编程》的翻译工作终于落下帷幕。这一路走来&#xff0c;真可谓是如鱼饮水&#xff0c;冷暖自知。还记得最初看到招募译者消息的那一刻&#xff0c;内心的激动难以言表。我毫不犹豫地报名&#xff0c;而后经历了试译、海选等激烈的角逐&#…

「TCP 重要机制」滑动窗口 粘包问题 异常情况处理

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;计网 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 滑动窗口&粘包问题&异常情况处理 &#x1f349;滑动窗口&#x1f34c;流量控制&#x1f34c;拥塞控制&#x1f34c;延时应答&…

mkv文件怎么转成mp4?教你四种常见的转换方法!

mkv文件怎么转成mp4&#xff1f;大家在使用mkv文件的时候有没有遇到过下面这些缺点&#xff0c;首先是mkv的兼容性不行&#xff0c;这体验在它不方便分享上面&#xff0c;很有可能我们分享出去但是对方根本无法进行接受&#xff0c;这就导致我们需要进行额外的操作才能分享&…