jjzjj

使用minikube搭建k8s环境

山水牧羊 2023-07-25 原文

一、介绍

        minikube 是一个本地k8s,聚焦于快捷构建k8s学习与开发环境,在有虚拟化的环境运行 minikube start即可运行。为我们除了可以利用minikube快速准备环境,也可以从另外一个角度再了解Kubernetes的信息。

官方网站

https://minikube.sigs.k8s.io

亮点

  • 支持最新的Kubernetes发布镜像
  • 跨平台(Linux,macOS,Windows)
  • 可部署在虚拟机、容器或裸金属上
  • 支持多种容器运行时(CRI-O,containerd,docker)
  • 直连API endpoint 以更快的加载和构建镜像
  • 支持高级特性如:负载均衡、文件系统挂载、特性网关、网络策略
  • 使用插件来易于Kubernetes应用的安装
  • 支持通用的CI环境

GitHub - minikube-ci/examples: Repository providing samples and testing for running kubernetes/minikube on various CI services

系统配置要求

  • 2逻辑CPU
  • 2GB内存
  • 20GB磁盘
  • 连接互联网
  • 容器或虚拟机管理器

Docker、Podman、Parallels、Hyperkit

KVM、Hyper-V、VMware Fusion/Workstation、VirtualBox

我所使用的环境是CentOS7,使用Docker作为容器运行时。

二、安装

[yeqiyu@s168 ~]$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 15.6M  100 15.6M    0     0   391k      0  0:00:40  0:00:40 --:--:--  148k
[root@s168 ~]# sudo rpm -Uvh minikube-latest.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
   1:minikube-1.25.2-0                ################################# [100%]
[yeqiyu@s168 ~]$ sudo rpm -Uvh minikube-latest.x86_64.rpm

三、启动

minikube start --image-mirror-country='cn'

在非root用户下,启动minikube

启动时指定--image-mirror-country='cn' ,可以使用阿里云的镜像站点,来提高资源下载速度。

[yeqiyu@s168 ~]$ minikube start --image-mirror-country='cn'
Centos 7.8.2003 上的 minikube v1.25.2
自动选择 docker 驱动。其他选项:none, ssh
正在使用镜像存储库 registry.cn-hangzhou.aliyuncs.com/google_containers
Starting control plane node minikube in cluster minikube
Pulling base image ...

registry.cn-hangzhou.aliyun...: 379.06 MiB / 379.06 MiB  100.00% 2.45 MiB

Creating docker container (CPUs=2, Memory=128900MB) ...
正在 Docker 20.10.12 中准备 Kubernetes v1.23.3…

kubelet.housekeeping-interval=5m

kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
kubeadm: 43.12 MiB / 43.12 MiB [---------------] 100.00% 1.50 MiB p/s 29s
kubectl: 44.43 MiB / 44.43 MiB [---------------] 100.00% 1.51 MiB p/s 30s
kubelet: 118.75 MiB / 118.75 MiB [-------------] 100.00% 2.58 MiB p/s 46s

Generating certificates and keys ...
Booting up control plane ...
Configuring RBAC rules ...
Verifying Kubernetes components...

Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
Enabled addons: storage-provisioner, default-storageclass
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
[yeqiyu@s168 ~]$

minikube已经启动完成。

可以通过minikube help start 查看更多帮助

四、管理集群

如果已经安装了kubectl,可以直接用kubectl命令管理集群。如

kubectl get pod -A

如果没安装,可以在kubectl前边加上minikube命令。

minikube kubectl --get pod -A

[yeqiyu@s168 ~]$ minikube kubectl -- get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
kube-system            coredns-65c54cc984-7vmjg                     1/1     Running   0          2d23h
kube-system            etcd-minikube                                1/1     Running   0          2d23h
kube-system            kube-apiserver-minikube                      1/1     Running   0          2d23h
kube-system            kube-controller-manager-minikube             1/1     Running   0          2d23h
kube-system            kube-proxy-mdpwp                             1/1     Running   0          2d23h
kube-system            kube-scheduler-minikube                      1/1     Running   0          2d23h
kube-system            storage-provisioner                          1/1     Running   0          2d23h
kubernetes-dashboard   dashboard-metrics-scraper-6ccbc78cd8-sqr6m   1/1     Running   0          29h
kubernetes-dashboard   kubernetes-dashboard-6ddd477f4f-xsvnr        1/1     Running   0          29h

如果本地未安装kubectl,可以通过别名方式,后续可直接使用kubectl了。

alias kubectl="minikube kubectl --"

五、部署应用

部署一个hello-minikube应用,并暴露出8080端口

[yeqiyu@s168 ~]$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-minikube created
[yeqiyu@s168 ~]$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

查看服务状态

[yeqiyu@s168 ~]$ kubectl get services
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort    10.107.218.145   <none>        8080:30425/TCP   15m
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          22m

前文提到,本环境未安装kubectl,想通过minikube kubectl方式来管理集群,但是在创建deployment时,出现如下现象。

[yeqiyu@s168 ~]$ minikube kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4

Error: unknown flag: --image

See 'minikube kubectl --help' for usage.

六、kubernetes控制台

        执行命令 minikube dashboard

        这里需要注意,如果是通过ssh连接至服务器,那么需要配置ssh的X11转发,否则会无法通过图形化调用远端Firefox。这是因为ssh工具不支持x11转发所致,更换为MobaXterm后,启动成功。

[yeqiyu@s168 ~]$ minikube dashboard
正在开启 dashboard ...

Using image registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.3.1
Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
正在验证 dashboard 运行情况 ...
Launching proxy ...
正在验证 proxy 运行状况 ...
Opening http://127.0.0.1:36943/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
START /bin/firefox "http://127.0.0.1:36943/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/"
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Running without a11y support!
Error: no DISPLAY environment variable specified
xdg-open: no method available for opening 'http://127.0.0.1:36943/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/'
X Exiting due to HOST_BROWSER: failed to open browser: exit status 3

执行成功后,调用远端浏览器打开了页面。

七、删除集群

删除本地集群

minikube delte

[yeqiyu@s168 ~]$ minikube delete
正在删除 docker 中的“minikube”…
正在删除容器 "minikube" ...
正在移除 /home/yeqiyu/.minikube/machines/minikube…
Removed all traces of the "minikube" cluster.

删除集群和配置文件

minikube delte --all

[yeqiyu@s168 ~]$ minikube delete --all
成功删除所有配置文件

八、配置minikube

配置使用的逻辑cpu数量。

[yeqiyu@s168 ~]$ minikube config set cpus 4
! These changes will take effect upon a minikube delete and then a minikube start
[yeqiyu@s168 ~]$ minikube config get cpus
4

其他可配置选项

[yeqiyu@s168 ~]$ minikube config show
config modifies minikube config files using subcommands like "minikube config set driver kvm2"
Configurable fields:

 * driver
 * vm-driver
 * container-runtime
 * feature-gates
 * v
 * cpus
 * disk-size
 * host-only-cidr
 * memory
 * log_dir
 * kubernetes-version
 * iso-url
 * WantUpdateNotification
 * WantBetaUpdateNotification
 * ReminderWaitPeriodInHours
 * WantNoneDriverWarning
 * WantVirtualBoxDriverWarning
 * profile
 * bootstrapper
 * insecure-registry
 * hyperv-virtual-switch
 * disable-driver-mounts
 * cache
 * EmbedCerts
 * native-ssh

Available Commands:
  defaults    Lists all valid default values for PROPERTY_NAME
  get         Gets the value of PROPERTY_NAME from the minikube config file
  set         Sets an individual value in a minikube config file
  unset       unsets an individual value in a minikube config file
  view        Display values currently set in the minikube config file

Usage:
  minikube config SUBCOMMAND [flags] [options]

Use "minikube <command> --help" for more information about a given command.
Use "minikube options" for a list of global command-line options (applies to all commands).

九、minikube插件

使用插件可以帮助我们快速构建Kubernetes的扩展gongne

查看插件列表。

[yeqiyu@s168 ~]$ minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | third-party (ambassador)       |
| auto-pause                  | minikube | disabled     | google                         |
| csi-hostpath-driver         | minikube | disabled     | kubernetes                     |
| dashboard                   | minikube | enabled ✅   | kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | kubernetes                     |
| efk                         | minikube | disabled     | third-party (elastic)          |
| freshpod                    | minikube | disabled     | google                         |
| gcp-auth                    | minikube | disabled     | google                         |
| gvisor                      | minikube | disabled     | google                         |
| helm-tiller                 | minikube | disabled     | third-party (helm)             |
| ingress                     | minikube | disabled     | unknown (third-party)          |
| ingress-dns                 | minikube | disabled     | google                         |
| istio                       | minikube | disabled     | third-party (istio)            |
| istio-provisioner           | minikube | disabled     | third-party (istio)            |
| kong                        | minikube | disabled     | third-party (Kong HQ)          |
| kubevirt                    | minikube | disabled     | third-party (kubevirt)         |
| logviewer                   | minikube | disabled     | unknown (third-party)          |
| metallb                     | minikube | disabled     | third-party (metallb)          |
| metrics-server              | minikube | disabled     | kubernetes                     |
| nvidia-driver-installer     | minikube | disabled     | google                         |
| nvidia-gpu-device-plugin    | minikube | disabled     | third-party (nvidia)           |
| olm                         | minikube | disabled     | third-party (operator          |
|                             |          |              | framework)                     |
| pod-security-policy         | minikube | disabled     | unknown (third-party)          |
| portainer                   | minikube | disabled     | portainer.io                   |
| registry                    | minikube | disabled     | google                         |
| registry-aliases            | minikube | disabled     | unknown (third-party)          |
| registry-creds              | minikube | disabled     | third-party (upmc enterprises) |
| storage-provisioner         | minikube | enabled ✅   | google                         |
| storage-provisioner-gluster | minikube | disabled     | unknown (third-party)          |
| volumesnapshots             | minikube | disabled     | kubernetes                     |
|-----------------------------|----------|--------------|--------------------------------|

安装插件

[yeqiyu@s168 ~]$ minikube addons enable ingress
  - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
  - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.1
  - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
* Verifying ingress addon...
* 启动 'ingress' 插件

参考资料

https://minikube.sigs.k8s.io

有关使用minikube搭建k8s环境的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐