番茄妹 發表於 2019-7-10 14:11:00

使用Minikube部署本地Kubernetes集群(二十八)

<h1>前言&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</h1>
<p>使用Minikube部署本地k8s集群相对比较简单,非常推荐将其用于本地k8s开发环境,唯一麻烦点的仅仅是网络问题。</p>
<p>在本篇教程中,我们使用了国内的镜像来完成本地k8s集群的搭建。如果搭建过程中出现错误,建议使用minikube delete之后再重新搭建。</p>
<hr>
<p>&nbsp;</p>
<h1><strong>目录</strong></h1>
<p><span style="background-color: rgba(255, 0, 0, 1)"><strong>使用Minikube部署本地Kubernetes集群</strong><strong>&nbsp;</strong></span></p>
<p><strong>1. 什么是Kubernetes集群?&nbsp;</strong></p>
<p><strong>2. 使用Minikube创建本地Kubernetes实验环境&nbsp;</strong></p>
<p><strong>1)什么是Minikube?&nbsp;</strong></p>
<p><strong>2)Minikube支持的功能&nbsp;</strong></p>
<p><strong>3)Windows 10下安装&nbsp;</strong></p>
<p><strong>4)打开Minikube可视化面板&nbsp;</strong></p>
<p><strong>5)常见错误&nbsp;</strong></p>
<p><strong>6)Linux下安装&nbsp;</strong></p>
<hr>
<p>&nbsp;</p>
<h2>使用Minikube部署本地Kubernetes集群</h2>
<h3>什么是Kubernetes集群?</h3>
<p class="FirstParagraph">Kubernetes 用于协调高度可用的计算机集群,这些计算机被连接作为单个工作单元。 Kubernetes允许用户将容器化的应用程序部署到集群,而不必专门将其绑定到单个计算机。为了利用这种新的部署模型,应用程序需要被容器化。容器化应用程序比过去的部署模型更灵活和可用——而不是将应用程序直接安装到特定机器上,作为深入集成到主机中的软件包。Kubernetes 在一个集群上以更有效的方式自动分发和调度容器应用程序。</p>
<p>Kubernetes 集群由两种类型的资源组成:</p>
<ul>
<li>Master:即集群的调度节点,负责管理集群,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。</li>
<li>Nodes:即应用程序实际运行的工作节点,可以是物理机或者虚拟机。每个工作节点都有一个 Kubelet(节点代理),它是管理节点并与Kubernetes Master节点进行通信的代理。节点上还应支持容器操作,例如 Docker或rkt。一个 Kubernetes 工作集群至少有三个节点。</li>
</ul>
<p>当我们在Kubernetes上部署应用程序时, Master会启动应用程序容器,并调度容器在集群的Nodes上运行,而Nodes使用Master公开的Kubernetes API与Master进行通信。最终用户还可以直接使用 Kubernetes 的API与集群交互。</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140157685-181138198.png" alt=""></p>
<h3>使用Minikube创建本地Kubernetes实验环境</h3>
<p class="FirstParagraph">在大部分情况下,我们需要在本地玩转Kubernetes,以便于Kubernetes应用程序的开发和调测。搭建完整的Kubernetes集群毕竟太重,那么使用Minikube则是不二选择。</p>
<h4>什么是Minikube?</h4>
<p class="FirstParagraph">Minikube 是一个轻量级的Kubernetes实现,会在本机创建一台虚拟机,并部署一个只包含一个节点的简单集群。 Minikube适用于Linux, Mac OS和Windows系统。Minikube CLI提供了集群的基本引导操作,包括启动、停止、状态和删除。</p>
<p>Minikube的目标是成为本地Kubernetes应用程序开发的最佳工具,并支持所有适合的Kubernetes功能!</p>
<p>官方GitHub地址:<em>https://github.com/kubernetes/minikube</em></p>
<p class="FigurewithCaption"><img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140246529-1992937983.png" alt=""><br></p>
<h4>Minikube支持的功能</h4>
<p class="FirstParagraph">Minikube支持以下Kubernetes功能:</p>
<ul>
<li>DNS</li>
<li>NodePorts(可使用“minikube service”命令来管理)</li>
<li>ConfigMaps和Secrets</li>
<li>仪表板(Dashboards,minikube dashboard)</li>
<li>容器运行时:Docker,<em>rkt</em>,<em>CRI-O</em>和<em>containerd</em></li>
<li>Enabling CNI(容器网络接口)</li>
<li>Ingress</li>
<li>LoadBalancer(负载均衡,可以使用“minikube tunnel”命令来启用)</li>
<li>Multi-cluster(多集群,可以使用“minikube start -p &lt;name&gt;”命令来启用)</li>
<li>Persistent Volumes</li>
<li>RBAC</li>
<li>通过命令配置apiserver和kubelet</li>

</ul>
<p>&nbsp;</p>
<h4>Windows 10下安装</h4>
<p>1.安装要求</p>
<p>Windows必须支持虚拟化,可以执行“systeminfo”命令来确认。如果支持虚拟化,则【Hyper-V要求】一栏如下图所示:</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140327771-2001789746.jpg" alt=""></p>
<p>C:\Users\Lys_Desktop\Documents\Tencent Files\512982554\Image\C2C\M%YWM2VE`R)$F2KF`{~M{LU.jpg</p>
<p>如果已经装了Hyper-V,则提示如下:</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140343071-1429243990.png" alt=""></p>
<p>&nbsp;</p>
<p>2.启用Hyper-V(推荐)</p>
<p>可以通过【程序和功能】=》<strong>【打开或关闭</strong><strong> Windows </strong><strong>功能】</strong>=》勾选【<strong>Hyper-V</strong>】来启用Hyper-V,也可以通过管理员执行以下Powershell脚本:</p>
<p>Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All</p>
<p>如果不支持启用Hyper-V,大家可以安装“VirtualBox”,而且目前“VirtualBox”是官方默认的虚拟机管理程序。</p>
<p>&nbsp;</p>
<p>3.安装Minikube和kubectl</p>
<ul>
<li>使用Chocolatey安装Minikube(推荐)</li>

</ul>
<p>Chocolatey我们前面已经进行了讲解,这里面我们可以使用Chocolatey以管理员身份一键安装Minikube:</p>
<p>choco install minikube kubernetes-cli</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140433778-1025299730.png" alt=""></p>
<p>PS C:\WINDOWS\system32&gt; choco install minikube kubernetes-cli</p>
<p>Chocolatey v0.10.11</p>
<p>Installing the following packages:</p>
<p>minikube;kubernetes-cli</p>
<p>By installing you accept licenses for the packages.</p>
<p>Minikube v1.1.1 </p>
<p>minikube package files install completed. Performing other installation steps.</p>
<p>ShimGen has successfully created a shim for minikube.exe</p>
<p>The install of minikube was successful.</p>
<p>Software install location not explicitly set, could be in package or</p>
<p>default install location if installer.</p>
<p>kubernetes-cli v1.14.3 already installed.</p>
<p>Use --force to reinstall, specify a version to install, or try upgrade.</p>
<p>Chocolatey installed 1/2 packages.</p>
<p>See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).</p>
<p>Warnings:</p>
<p>- kubernetes-cli - kubernetes-cli v1.14.3 already installed.</p>
<p>Use --force to reinstall, specify a version to install, or try upgrade.</p>
<ul>
<li>通过下载安装包安装</li>

</ul>
<p>下载地址:<em>https://github.com/kubernetes/minikube/releases/</em></p>
<p>需下载【minikube-windows-amd64.exe】,下载完成后,需要重命名为“minikube.exe”进行使用。</p>
<p>&nbsp;</p>
<p>4.启动Minikube</p>
<p>Minikube在Windows上支持使用VirtualBox和Hyper-V,这里我们使用Hyper-V进行实践。</p>
<p>我们需要执行“minikube start”命令来启动Minikube。这个过程中会下载Minikube ISO镜像,如果Minikube ISO镜像下载失败,可复制链接手工下载或者配置容器代理再试。如果是手工下载,下载后,请将ISO文件放置C:\Users\&lt;用户名&gt;\.minikube\cache\iso目录,然后再次执行“start”命令。具体命令如下所示:</p>
<p>需使用管理员执行以下Powershell脚本:</p>
<p>minikube.exe start --registry-mirror=https://registry.docker-cn.com --vm-driver="hyperv" --memory=4096</p>
<p>其中,--registry-mirror参数用于设置镜像服务地址,这里设置为国内镜像服务地址。--vm-driver参数设置了虚拟机类型,这里我们使用Hyper-V,默认是VirtualBox。--memory参数设置了虚拟机内存大小。执行此脚本后,会使用默认的Hyper-V的虚拟交换机,我们也可以使用参数--hyperv-virtual-switch进行指定指定的虚拟网络交换机。虚拟网络交换机设置如下图所示:</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140503044-1735008457.png" alt=""></p>
<p>在中国,由于网络和防火墙的原因,通常会无法拉取k8s相关镜像或者下载速度过于缓慢,因此,我们可以通过参数--image-repository来设置Minikube使用阿里云镜像。如下列命令:</p>
<p>minikube.exe start --registry-mirror=https://registry.docker-cn.com --vm-driver="hyperv" --memory=4096 --hyperv-virtual-switch="NET" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140521912-1793857438.png" alt=""></p>
<p>PS C:\WINDOWS\system32&gt; minikube.exe start --registry-mirror=https://registry.docker-cn.com --vm-driver="hyperv" --memory=4096 --hyperv-virtual-switch="NET" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers</p>
<p>* minikube v1.1.1 on windows (amd64)</p>
<p>* using image repository registry.cn-hangzhou.aliyuncs.com/google_containers</p>
<p>* Creating hyperv VM (CPUs=2, Memory=4096MB, Disk=20000MB) ...</p>
<p>* Configuring environment for Kubernetes v1.14.3 on Docker 18.09.6</p>
<p>* Pulling images ...</p>
<p>* Launching Kubernetes ...</p>
<p>* Verifying: apiserver proxy etcd scheduler controller dns</p>
<p>* Done! kubectl is now configured to use "minikube"</p>
<p>成功之后,我们就可以使用kubectl来操作集群了,比如查看当前所有pod的状态:</p>
<p>kubectl get pods --all-namespaces</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140535783-1821830088.png" alt=""></p>
<p>刚才我们使用Minikube创建了默认的集群,我们还可以使用Minikube创建新的集群,比如:</p>
<p>minikube start -p mycluster</p>
<p>值得注意的是,Minikube搭配Hyper-V使用需要禁用动态内存(Docker for Windows初始化时指定禁用了相关虚拟机使用动态内存),执行Powershell脚本如下所示:</p>
<p>Set-VMMemory -VMName 'minikube' -DynamicMemoryEnabled $false。</p>
<p>在Windows 10下,我们还可以使用docker-desktop来启用k8s,不过由于网络的原因,并不是很推荐:</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140553570-1249519422.png" alt=""></p>
<p>&nbsp;</p>
<h4>打开Minikube可视化面板</h4>
<p>成功启动Minikube之后,我们就可以通过以下命令来打开Minikube可视化面板:</p>
<p>minikube dashboard</p>
<p>启用面板</p>
<p>PS C:\WINDOWS\system32&gt; minikube dashboard</p>
<p>* Enabling dashboard ...</p>
<p>* Verifying dashboard health ...</p>
<p>* Launching proxy ...</p>
<p>* Verifying proxy health ...</p>
<p>* Opening http://127.0.0.1:3173/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ in your default browser...</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140637604-1966883903.png" alt=""></p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140652219-1857628891.png" alt=""></p>
<p>&nbsp;</p>
<h4>常见错误</h4>
<p>启动Minikube时提示错误如下:X Unable to start VM: start: exit status 1</p>
<p>处理方案:执行“minikube delete”或者手工清理时虚拟机目录存在残留内容,需手动删除目录“C:\Users\{your username} \.minikube\machines”后再次尝试。</p>
<h4>&nbsp;</h4>
<h4>Linux下安装</h4>
<p>1.安装虚拟机(可选)</p>
<p class="FirstParagraph">在Linux环境下,Minikube支持直接在主机上运行Kubernetes,因此此步骤为可选。所以大家可以根据实际情况来选择是否安装虚拟机,比如KVM和VirtualBox。</p>
<p><em>注意:如果直接在主机上运行,Minikube会运行一个不安全的API Server,可能会导致安全隐患,因此不建议在个人工作环境安装。</em></p>
<p>&nbsp;</p>
<p>2.安装kubectl</p>
<p>由于Google网络不太稳定,我们使用阿里云镜像进行安装。</p>
<ul>
<li>CentOS</li>

</ul>
<p class="FirstParagraph">echo '#k8s</p>
<p></p>
<p>name=Kubernetes</p>
<p>baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64</p>
<p>enabled=1</p>
<p>gpgcheck=0</p>
<p>'&gt;/etc/yum.repos.d/kubernetes.repo</p>
<p>#kubeadm和相关工具包</p>
<p>yum -y install kubelet kubeadm kubectl kubernetes-cni</p>
<ul>
<li>Debian / Ubuntu</li>

</ul>
<p>apt-get update &amp;&amp; apt-get install -y apt-transport-https</p>
<p>curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -</p>
<p>echo 'deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main' &gt;/etc/apt/sources.list.d/kubernetes.list</p>
<p>apt-get update</p>
<p>apt-get install -y kubelet kubeadm kubectl</p>
<p>&nbsp;</p>
<p>3.安装Minikube</p>
<p class="FirstParagraph">这里我们直接下载安装:</p>
<p>curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \</p>
<p>&amp;&amp; chmod +x minikube</p>
<p>由于网络问题,我们可以选择使用阿里云的执行程序:</p>
<p>curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/latest/minikube-linux-amd64 \</p>
<p>&amp;&amp; chmod +x minikube</p>
<p>然后将可执行文件添加到/usr/local/bin目录下</p>
<p>sudo install minikube /usr/local/bin</p>
<p>&nbsp;</p>
<p>4.启动Minikube</p>
<p class="FirstParagraph">minikube start --vm-driver=none</p>
<p>如果存在网络问题,请使用--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers指定镜像仓库地址。</p>
<p class="Figure">&nbsp;<img src="https://img2018.cnblogs.com/blog/70544/201907/70544-20190710140805482-2066594116.png" alt=""></p>
<p class="FirstParagraph">安装过程中如出现问题,可以执行以下命令之后再重新尝试:</p>
<p>minikube delete</p>
<p>rm ~/.minikube</p>
<p>&nbsp;</p>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">
<h2><strong>往期内容链接</strong></h2>

</div>
<p class="postTitle">Docker最全教程——从理论到实战(一)</p>
<p class="postTitle">Docker最全教程——从理论到实战(二)</p>
<p class="postTitle">Docker最全教程——从理论到实战(三)</p>
<p class="postTitle">Docker最全教程——从理论到实战(四)</p>
<p class="postTitle">Docker最全教程——从理论到实战(五)</p>
<p class="postTitle">Docker最全教程——从理论到实战(六)</p>
<p class="postTitle">Docker最全教程——从理论到实战(七)</p>
<p class="postTitle">Docker最全教程——从理论到实战(八)</p>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">
<p class="postTitle">Docker最全教程之使用Tencent Hub来完成CI(九)</p>
<p class="postTitle">Docker最全教程——数据库容器化(十)</p>
<p class="postTitle">Docker最全教程——数据库容器化之持久保存数据(十一)</p>
<p class="postTitle">Docker最全教程——MongoDB容器化(十二)</p>
<p class="postTitle">Docker最全教程——Redis容器化以及排行榜实战(十三)</p>
<p class="postTitle">Docker最全教程之Ubuntu下安装Docker(十四)</p>
<p class="postTitle">Docker最全教程之树莓派和Docker(十五)</p>
<p class="postTitle">Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)</p>
<p class="postTitle">Docker最全教程之使用Docker搭建Java开发环境(十七)</p>
<p class="postTitle">Docker最全教程之Go实战,墙裂推荐(十八)</p>
<p class="postTitle">Docker最全教程之使用.NET Core推送钉钉消息(十九)</p>
<p class="postTitle">Docker最全教程之使用 Visual Studio Code玩转Docker(二十)</p>
<p class="postTitle">Docker最全教程之Python爬网实战(二十一)</p>
<p class="postTitle">Docker最全教程之使用PHP搭建个人博客站点(二十二)</p>
<p class="postTitle">Docker最全教程之使用Node.js搭建团队技术文档站(二十三)</p>
<p class="postTitle">Docker最全教程之MySQL容器化 (二十四)</p>
<p class="postTitle">Docker+ Kubernetes已成为云计算的主流(二十五)</p>
<p class="postTitle">容器化之后如何节省云端成本?(二十六)</p>
<p class="postTitle">了解Kubernetes主体架构(二十七)</p>

</div>

</div>
<div id="MySignature" role="contentinfo">
    作者:雪雁<br>出处:http://www.cnblogs.com/codelove/
<br>如果喜欢作者的文章,请关注【CodeSpirit-码灵】公众号以便第一时间获得最新内容。本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。<br><b>静听鸟语花香,漫赏云卷云舒。</b>
<br>
<img src="https://images.cnblogs.com/cnblogs_com/codelove/315887/o_251224070213_%E5%85%AC%E4%BC%97%E5%8F%B7.jpg" width="100" height="100"><br><br>
来源:https://www.cnblogs.com/codelove/p/11163581.html
頁: [1]
查看完整版本: 使用Minikube部署本地Kubernetes集群(二十八)