learn-tech/专栏/Kubernetes入门实战课/00课前准备动手实践才是最好的学习方式.md
2024-10-16 06:37:41 +08:00

13 KiB
Raw Blame History

                        因收到Google相关通知网站将会择期关闭。相关通知内容
                        
                        
                        00 课前准备 动手实践才是最好的学习方式
                        你好我是Chrono今天我们的任务是搭建实验环境。

如果你看过我的另外两个极客时间专栏《透视HTTP协议》和《C++实战笔记》)就会知道,我一直都很强调实验环境的重要程度,毕竟计算机这门学科的实践性要大于理论性,而且有一个能够上手操作的实际环境,对学习理论也非常有帮助。

落到我们的这个Kubernetes学习课上实验环境更是必不可少的因为和网络协议、编程语言不同Kubernetes是一个更贴近于生产环境的庞大系统如果“光说不练”即使你掌握了再多的知识但不能和实际相结合也只能是“纸上谈兵”。

俗话说“工欲善其事必先利其器”所以在正式学习之前我们必须要有一个基本的实验环境要能够在环境中熟悉Kubernetes的操作命令、验证测试Kubernetes的各种特性有这样的“帮手”作为辅助我们的学习才能够事半功倍。

选择什么样的实验环境

但想要得到一个完整的Kubernetes环境不那么容易因为它太复杂了对软硬件的要求都比较高安装部署过程中还有许多的小细节这些都会成为学习过程中的“拦路虎”。

那么,应该怎么搭建出符合我们要求的实验环境呢?

你也许会说:现在的云厂商到处都是,去网上申请一个就好了。

这也许是一个比较便捷的获取途径,不过我有一些不同的意见。

首先,这些网上的“云主机”很少是免费的,都需要花钱,而且想要好配置还要花更多的钱,对于我们的学习来说性价比不高。其次,“云主机”都是在“云”上,免不了会受网络和厂商的限制,存在不稳定因素。再次,这些“云主机”都是厂商已经为我们配好了的,很多软硬件都是固定的,不能随意定制,特别是很难真正“从零搭建”。

考虑上面的这三点,我建议还是在本地搭建实验环境最好,不会受制于人,完全自主可控。

不过Kubernetes通常都运行在集群环境下由多台服务器组成难道我们还要自己置办几台电脑来组网吗

这倒大可不必。因为现在的虚拟机软件已经非常成熟可靠了,能够在一台电脑里虚拟出多台主机,这些虚拟主机用起来和真实的物理主机几乎没有什么差异,只要你的电脑配置不是太差,组成一个三四台虚拟服务器的小集群是毫无问题的,而且虚拟机的创建删除都非常简单,成本极低。

使用虚拟机软件还有一点额外的好处由于很多云服务商内部也在大量使用虚拟服务器Kubernetes里的容器技术也与虚拟机有很多相似之处通过使用虚拟机我们还能顺便对比这些技术的异同点加深对Kubernetes的理解。

所以综合来看,我建议你挑选一台配置不算太差的笔记本或者台式机,在里面使用虚拟机来搭建我们这门课程的实验环境。

作为宿主机电脑的CPU和硬盘的要求不高4核、300G就可以了关键是内存要足够大因为虚拟机和Kubernetes都很能“吃”内存最少要有8G这样起码能够支持开两个虚拟机组成最小的集群。

选择什么样的虚拟机软件

确定了我们的实验环境大方向——虚拟机之后,我们就要选择虚拟机软件了。

目前市面上的主流虚拟机软件屈指可数所以选择起来并不算困难我个人推荐的有两个VirtualBox和VMWare Fusion。

我们先讲适用面广的VirtualBox。

VirtualBox是Oracle推出的一款虚拟机软件历史很悠久一直坚持免费政策使用条款上也没有什么限制是一个难得的精品软件。

VirtualBox支持Windows和macOS但有一个小缺点它只能运行在Intelx86_64芯片上不支持Apple新出的M1arm64/aarch64芯片这导致它无法在新款Mac上使用不得不说是一大遗憾。

所以如果你手里是Apple M1 Mac就只能选择其他的虚拟机软件了。在macOS上虚拟机最出名的应该是Parallel Desktop和VMWare Fusion这两个了都需要付费。这里我比较推荐VMWare Fusion。

不过对于VMWare Fusion来说它对M1的支持进展比较迟缓所以在正式的付费版出来之前公布了一个“技术预览版”是完全免费的而且功能、性能也比较好虽然有使用时间的限制大约300天但对于我们的学习来说是足够了。

这里我给出VirtualBoxhttps://www.virtualbox.org/wiki/Downloads和VMWare Fusionhttps://communities.vmware.com/t5/Fusion-for-Apple-Silicon-Tech/ct-p/3022的网址你可以课后去看一下尽快下载

选择哪种Linux发行版

有了虚拟机软件之后我们就要在上面安装操作系统在这方面毫无疑问只能是Linux因为Kubernetes只能运行在Linux之上。

不过麻烦的是Linux世界又分裂成很多不同的发行版流行的有CentOS/Fedora、 Ubuntu/Debian、SUSE等等没有一个占据绝对统治地位的系统。

那选哪个比较好呢?

我们的主要目的是学习所以易用性应该是首要关注点另外系统还应该能够同时支持x86_64和arm64。筛选下来我建议选择Ubuntu 22.04 Jammy Jellyfish 桌面版(https://ubuntu.com/download/desktop它有足够新的特性非常适合运行Kubernetes而内置的浏览器、终端等工具也很方便我们的调试和测试

但对Apple M1用户来说有一个不太好的消息Ubuntu 22.04在内核由5.13升级到5.15的时候引入了一个小Bug导致VMWare Fusion无法正常安装启动这个问题直到4月份的正式版发布还没有解决。

好在我当初为了测试下载了一个较早的“daily build”版本它可以在VMWare Fusion里正常安装我把它上传到了云盘https://www.aliyundrive.com/s/FRmnawAURKu你可以下载后使用

需要注意一点,由于网站的限制,文件的后缀名被改成了 .mov ,你必须去掉这个后缀,还原成原始的 .iso 才能使用。

如何配置虚拟机

准备好虚拟机软件和Ubuntu光盘镜像之后我们就可以来安装虚拟机了。不过在安装之前我们必须要把虚拟机适当地配置一下。

因为Kubernetes不是一般的应用软件而是一个复杂的系统软件对硬件资源的要求有一点高好在并不太高2核CPU、2G内存是最低要求如果条件允许我建议把内存增大到4G硬盘40G以上这样运行起来会更流畅一些。另外一些对于服务器来说不必要的设备也可以禁用或者删除比如声卡、摄像头、软驱等等可以节约一点系统资源。

由于Linux服务器大多数要以终端登录的方式使用多台服务器还要联网所以在网络方面我们还需要特别设置。

前面说虚拟机软件首选VirtualBoxApple M1 Mac备选VMWare Fusion技术预览版这里我也分别说下两个软件的不同设置。

对于VirtualBox首先你需要在“工具 - 网络”里创建一个“Host-only”的网络IP地址段随意比如这里就使用了它自动分配的“192.168.56.1/24”

然后在虚拟机的配置里你需要启用两个网卡。“网卡1”就设置成刚才创建的“Host-only”网络它是我们在本地终端登录和联网时用的而“网卡2”是“网络地址转换NAT用来上外网

对于VMWare Fusion你需要在“偏好设置-网络”里添加一个自定义的网络比如这里的“vmnet3”网段是“192.168.10.0”允许使用NAT连接外网然后在虚拟机的网络设置里选用这个网络

如何安装虚拟机

把CPU、内存、硬盘、网络都配置好之后再加载上Ubuntu 22.04的光盘镜像我们就可以开始安装Linux了。

在安装的过程中为了节约时间建议选择“最小安装”同时物理断网避免下载升级包。注意断网对于Apple M1来说特别重要否则Ubuntu会自动更新到5.15内核,导致安装后无法正常启动。

安装完Linux系统之后我们还要再做一些环境的初始化操作。

首先我们需要用 Ctrl + Alt + T 打开命令行窗口,然后用 apt 从Ubuntu的官方软件仓库安装git、vim、curl等常用工具

sudo apt update sudo apt install -y git vim curl jq

Ubuntu 桌面版默认是不支持远程登录的所以为了让后续的实验更加便利我们还需要安装“openssh-server”再使用命令 ip addr 查看虚拟机的IP地址然后就可以在宿主机上使用 ssh 命令登录虚拟机:

sudo apt install -y openssh-server ip addr

从这个截图里可以看到这台VirtualBox虚拟机有3个网卡其中名字是“enp0s3”的网卡就是我们之前配置的“192.168.56.1/24”网段IP地址是自动分配的“192.168.56.11”。

如果你对自动分配的IP地址不是很满意也可以在Ubuntu右上角的系统设置里修改网卡把它从动态地址DHCP改成静态地址Manual具体的参数可以参考下面的截图重启后新的IP地址就生效了。

这些工作完成之后,我建议你再给虚拟机拍个快照,做好备份工作,这样万一后面有什么意外发生环境被弄乱了,也可以轻松回滚到拍快照时的正确状态。

现在让我们启动一个命令行终端我用的是Mac里的“iTerm2”使用 ssh 输入用户名、密码和IP地址就能够登录创建好的虚拟机了

有哪些常用的Linux操作

到这里我们的实验环境就算是搭建完毕了虽然目前只有最基本的Linux系统但在后面的“入门篇”“初级篇”“中级篇”里我们会以它为基础逐步完善实现完整的Kubernetes环境。

特别提醒一下因为Kubernetes基于Linux虽然也有图形化的Dashboard但更多的时候都是在命令行里工作所以你需要对基本的Linux操作有所了解。

学习Linux操作系统是另外一个很大的话题了虽然它很重要但并不是我们这门课的目标我这里简单列一些比较常用的知识你可以检测一下自己的掌握程度如果有不了解的希望你课后再查找相关资料补上这些点

命令行界面称为“Shell”支持交互操作也支持脚本操作也就是“Shell编程”。 root用户有最高权限但有安全隐患所以通常我们都只使用普通用户身份必要的时候使用 sudo 来临时使用root权限。 查看系统当前进程列表的命令是 ps 它是Linux里最常用的命令之一。 查看文件可以使用 cat ,如果内容太多,可以用管道符 | ,后面跟 more 、less 。 vim是Linux里最流行的编辑器但它的使用方式与一般的编辑器不同学习成本略高。 curl能够以命令行的方式发送HTTP请求多用来测试HTTP服务器例如Nginx

小结

好了,我们的课前准备就要结束了,我再简单小结一下今天的要点内容:

一个完善的实验环境能够很好地辅助我们的学习建议在本地使用虚拟机从零开始搭建Kubernetes环境。 虚拟机软件可以选择VirtualBoxintel芯片和VMWare FusionApple M1芯片因为Kubernetes只能运行在Linux上建议选择最新的Ubuntu 22.04。 虚拟机要事先配置好内存、网络等参数,安装系统时选最小安装,然后再安装一些常用的工具。 虚拟机都支持快照,环境设置好后要及时备份,出现问题可以随时回滚恢复,避免重复安装系统浪费时间。

在今天的整个搭建过程中,虚拟机设置很关键,这里我也特地录制了一段视频供你更直观地对照参考:-

另外我写专栏的惯例是在GitHub上开一个配套的学习项目这门课程的仓库就叫“k8s_study”https://github.com/chronolaw/k8s_study里面有文档链接、安装脚本、测试命令、YAML描述文件等等你可以克隆下来在后续的课程中参照着学习

课下作业

最后是课下作业时间请实际动手操作在你自己的电脑上用虚拟机搭建出Linux实验环境为下一节课正式学习Docker做好准备。

欢迎在下方留言区和其他同学一起积极参与讨论,如果在搭建过程中有疑问也欢迎留言,我会第一时间给你回复。-