【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境
介绍
Minikube 用于快速在本地搭建 Kubernetes 单节点集群环境,它对硬件资源没有太高的要求,方便开发人员学习试用,或者进行日常的开发。
其支持大部分kubernetes的功能,列表如下
- DNS
- NodePorts
- ConfigMaps and Secrets
- Dashboards
- Container Runtime: Docker, and rkt
- Enabling CNI (Container Network Interface)
- Ingress
- ...
Minikube 支持 Windows、macOS、Linux 三种 OS,会根据平台不同,下载对应的虚拟机镜像,并在镜像内安装 k8s。
目前的虚拟机技术都是基于Hypervisor 来实现的,Hypervisor 规定了统一的虚拟层接口,由此 Minikube 就可以无缝切换不同的虚拟机实现,如 macOS 可以切换hyperkit 或 VirtualBox, Windows 下可以切换 Hyper-V 或 VirtualBox 等。
虚拟机的切换可以通过 --vm-driver 实现,如minikube start --vm-driver hyperkit/ minikube start --vm-driver hyperv
如果 Minikube 安装在内核原生就支持 LXC 的 OS 内,如 Ubuntu 等,再安装一次虚拟机显然就是对资源的浪费了,Minikube 提供了直接对接 OS 底层的方式
driver!=none mode
In this case minikube provisions a new docker-machine (Docker daemon/Docker host) using any supported providers. For instance: a) local provider = your Windows/Mac local host: it frequently uses VirtualBox as a hypervisor, and creates inside it a VM based on boot2docker image (configurable). In this case k8s bootstraper (kubeadm) creates all Kubernetes components inside this isolated VM. In this setup you have usually two docker daemons, your local one for development (if you installed it prior), and one running inside minikube VM. b) cloud hosts - not supported by minikubedriver=none mode
In this mode, your local docker host is re-used. In case no.1 there will be a performance penalty, because each VM generates some overhead, by running several system processes required by VM itself, in addition to those required by k8s components running inside VM. I think driver-mode=none is similar to " HYPERLINK "https://blog.alexellis.io/be-kind-to-yourself/"kind" version of k8s boostraper, meant for doing CI/integration tests.
Minikube 安装
下载Minikube
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.13.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
下载Kubectl
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
启动Minikube
启动参数
启动命令:minikube start "参数"
- --image-mirror-country cn 将缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作为安装Kubernetes的容器镜像仓库,
- --iso-url=*** 利用阿里云的镜像地址下载相应的 .iso 文件
- --cpus=2: 为minikube虚拟机分配CPU核数
- --memory=2000mb: 为minikube虚拟机分配内存数
- --kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本 ,e.g. --kubernetes-version v 1.17.3
- --docker-env http_proxy 传递代理地址
默认启动使用的是 VirtualBox 驱动,使用 --vm-driver 参数可以指定其它驱动
# https://minikube.sigs.k8s.io/docs/drivers/
- --vm-driver=none 表示用容器;
- --vm-driver=virtualbox 表示用虚拟机;
注意: 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
示例
--vm-driver=kvm2
参考: https://minikube.sigs.k8s.io/docs/drivers/kvm2/
minikube start --image-mirror-country cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://ovfftd6p.mirror.aliyuncs.com --driver=kvm2
--vm-driver=hyperv
# 创建基于Hyper-V的Kubernetes测试环境
minikube.exe start --image-mirror-country cn \
--iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso \
--registry-mirror=https://xxxxxx.mirror.aliyuncs.com \
--vm-driver="hyperv" \
--hyperv-virtual-switch="MinikubeSwitch" \
--memory=4096
--vm-driver=none
sudo minikube start --image-mirror-country cn --vm-driver=none

sudo minikube start --vm-driver=none --docker-env http_proxy=http://$host_IP:8118 --docker-env https_proxy=https:// $host_IP:8118
其中$host_IP指的是host的IP,可以通过ifconfig查看;比如在我这台机器是10.0.2.15,用virtualbox部署,则用下列命令启动minikube
sudo minikube start --vm-driver=none --docker-env http_proxy=http://10.0.2.15:8118 --docker-env https_proxy=https://10.0.2.15:8118
Minikube 状态查看
启动完毕,将会运行一个单节点的Kubernetes集群。Minikube也已经把kubectl配置好,因此无需做额外的工作就可以管理容器。
Minikube 创建一个Host-Only(仅主机模式)网络接口,通过这个接口可以路由到节点。如果要与运行的pods或services进行交互,你应该通过这个地址发送流量。使用 minikube ip 命令可以查看这个地址:

Minikube 使用
用户使用Minikube CLI管理虚拟机上的Kubernetes环境,比如:启动,停止,删除,获取状态等。一旦Minikube虚拟机启动,用户就可以使用熟悉的Kubectl CLI在Kubernetes集群上执行操作

# 查看集群的所有资源
kubectl get all
# 进入节点服务器
minikube ssh
# 执行节点服务器命令,例如查看节点 docker info
minikube ssh -- docker info
# 删除集群, 删除 ~/.minikube 目录缓存的文件
minikube delete
# 关闭集群
minikube stop
## 销毁集群
minikube stop && minikube delete
Minikube 插件
sudo minikube addons list

Minikube 默认集成了 Kubernetes Dashboard。执行 minikube dashboard 命令后,默认会打开浏览器

安装遇到的问题
问题-1
Failed to save config: failed to acquire lock for /root/.minikube/profiles/minikube/config.json: unable to open /tmp/juju-mk270d1b5db5965f2dc9e9e25770a63417031943: permission denied

解决办法:
sudo rm -rf /tmp/juju-mk*
sudo rm -rf /tmp/minikube.*
问题-2
unable to read client-cert /root/.minikube/client.crt for minikube due to open /root/.minikube/client.crt: permission denied
unable to read client-key /root/.minikube/client.key for minikube due to open /root/.minikube/client.key: permission denied
unable to read certificate-authority /root/.minikube/ca.crt for minikube due to open /root/.minikube/ca.crt: permission denied
解决办法:
minikube stop
minikube delete
rm -rf ~/.kube
rm -rf ~/.minikube
sudo rm -rf /var/lib/minikube
sudo rm /var/lib/kubeadm.yaml
sudo rm -rf /etc/kubernetes
参考:https://stackoverflow.com/questions/58541104/minikube-wont-work-after-ubuntu-upgrade-to-19-10
问题-3
Error restarting cluster: restarting kube-proxy: waiting for kube-proxy to be up for configmap update: timed out waiting for the condition
通过 minikube delete,minikube start 可以解决
部署应用
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
deployment.apps/hello-minikube created
#访问应用
$ kubectl expose deployment hello-minikube --type=NodePort
service/hello-minikube exposed
#获取服务地址
$ minikube service hello-minikube --url
http://192.168.99.105:30555
参考资料
【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境的更多相关文章
- 菜鸟系列k8s——快速部署k8s集群
快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...
- golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web
golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web Nginx 部署 - beego: 简约 & 强大并存的 Go 应用框架https://bee ...
- Quartz学习笔记:集群部署&高可用
Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...
- 使用RKE快速部署k8s集群
一.环境准备 1.1环境信息 IP地址 角色 部署软件 10.10.100.5 K8s Master Etcd.Control 10.10.100.17 K8s Worker1 Worker 10.1 ...
- 「学习笔记」FFT 快速傅里叶变换
目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...
- Kubeasz部署K8s基础测试环境简介
下面介绍使用Kubeasz部署K8s集群环境. https://github.com/easzlab/kubeasz在需要使用kubeeasz项目安装的k8s时,需要将所有需要它来部署的节点上,都安装 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- UFLDL深度学习笔记 (三)无监督特征学习
UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...
- Vue学习笔记-Django REST framework3后端接口API学习
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
随机推荐
- python中numpy.savetxt 参数
转载:https://blog.csdn.net/qq_36535820/article/details/99543188 numpy.savetxt 参数 numpy.savetxt(fname,X ...
- DX12龙书 01 - 向量在几何学和数学中的表示以及运算定义
0x00 向量 向量 ( vector ) 是一种兼具大小 ( magnitude ) 和方向的量. 0x01 几何表示 几何方法中用一条有向线段来表示一个向量,其中,线段长度代表向量的模,箭头的指向 ...
- Iptables 下 SNAT、DNAT和MASQUERADE三者之间的区别
Iptables 中可以灵活的做各种网络地址转换(NAT,Network Address Translation) 网络地址转换(NAT)主要有两种:SNAT 和 DNAT,但是也有一种特例 MASQ ...
- jenkins 构建 job 并获取其状态的实现
目录 BACKGROUND INVESTIGATION I 1. 连续触发的相同 job 构建不会重复入队 2. 连续触发的不同 job 构建会各自入队 3. 参数变动的相同 job 构建将分别入队 ...
- C 语言因为疫情重登最流行编程语言榜第一名!其实它一直都在~
C 语言时隔五年后再次荣登最流行编程语言榜单第一名. 通过调查得出结论, C 语言再次受欢迎的原因竟然是因为病毒,这听起来愚蠢但确实是事实,嵌入式语言 C 和 C++ 被用于医疗设备中的幅度因为疫 ...
- 【C语言C++编程学习笔记】基础语法,第一个简单的实例编程入门教程!
C语言/C++编程学习:一个简单的实例 让我们来看一个简单的C语言程序.从下面的程序可以看出编写C语言程序的一些基本特征. 如果你能知道该程序将会在显示器上显示一些内容,那说明你还是知道一些的! ...
- 【xenomai内核解析】系列文章大纲
xenomai内核解析 本博客为本人学习linux实时操作系统框架xenomai的一些记录,主要剖析xenomai内核实现,以及与linux相关的知识.方便读者定位具体文章,现列出本博客大纲,后续会陆 ...
- centos8平台安装gitosis服务
一,git服务器端:准备gitosis需要的各依赖软件 1,确认openssh是否存在?如不存在,以下列命令进行安装 [root@yjweb ~]# yum install openssh opens ...
- Vue slot插槽通俗解释
slot内容分发是Vue的Api来源 <div id="app"> <my-list> {{msg}} </my-list> </div& ...
- 往with as中写入数据的方法
方法1:直接写入,使用union all,简单直观,但程序运行效率低,几百条就很慢了 with dw_wms_outbound_info_v100 as( select '10700001' as o ...