因收到Google相关通知,网站将会择期关闭。相关通知内容 17 更真实的云原生:实际搭建多节点的Kubernetes集群 你好,我是Chrono。 到今天,你学习这个专栏的进度就已经过半了,在前面的“入门篇”我们了解了Docker和容器技术,在“初级篇”我们掌握了Kubernetes的基本对象、原理和操作方法,一路走下来收获很多。 现在你应该对Kubernetes和容器编排有了一些初步的认识,那么接下来,让我们继续深入研究Kubernetes的其他API对象,也就是那些在Docker中不存在的但对云计算、集群管理至关重要的概念。 不过在那之前,我们还需要有一个比minikube更真实的Kubernetes环境,它应该是一个多节点的Kubernetes集群,这样更贴近现实中的生产系统,能够让我们尽快地拥有实际的集群使用经验。 所以在今天的这节课里,我们就来暂时忘掉minikube,改用kubeadm(https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/)搭建出一个新的Kubernetes集群,一起来看看更真实的云原生环境。 什么是kubeadm 前面的几节课里我们使用的都是minikube,它非常简单易用,不需要什么配置工作,就能够在单机环境里创建出一个功能完善的Kubernetes集群,给学习、开发、测试都带来了极大的便利。 不过minikube还是太“迷你”了,方便的同时也隐藏了很多细节,离真正生产环境里的计算集群有一些差距,毕竟许多需求、任务只有在多节点的大集群里才能够遇到,相比起来,minikube真的只能算是一个“玩具”。 那么,多节点的Kubernetes集群是怎么从无到有地创建出来的呢? [第10讲]说过Kubernetes是很多模块构成的,而实现核心功能的组件像apiserver、etcd、scheduler等本质上都是可执行文件,所以也可以采用和其他系统差不多的方式,使用Shell脚本或者Ansible等工具打包发布到服务器上。 不过Kubernetes里的这些组件的配置和相互关系实在是太复杂了,用Shell、Ansible来部署的难度很高,需要具有相当专业的运维管理知识才能配置、搭建好集群,而且即使这样,搭建的过程也非常麻烦。 为了简化Kubernetes的部署工作,让它能够更“接地气”,社区里就出现了一个专门用来在集群中安装Kubernetes的工具,名字就叫“kubeadm”,意思就是“Kubernetes管理员”。 kubeadm,原理和minikube类似,也是用容器和镜像来封装Kubernetes的各种组件,但它的目标不是单机部署,而是要能够轻松地在集群环境里部署Kubernetes,并且让这个集群接近甚至达到生产级质量。 而在保持这个高水准的同时,kubeadm还具有了和minikube一样的易用性,只要很少的几条命令,如 init、join、upgrade、reset 就能够完成Kubernetes集群的管理维护工作,这让它不仅适用于集群管理员,也适用于开发、测试人员。 实验环境的架构是什么样的 在使用kubeadm搭建实验环境之前,我们先来看看集群的架构设计,也就是说要准备好集群所需的硬件设施。 这里我画了一张系统架构图,图里一共有3台主机,当然它们都是使用虚拟机软件VirtualBox/VMWare虚拟出来的,下面我来详细说明一下: 所谓的多节点集群,要求服务器应该有两台或者更多,为了简化我们只取最小值,所以这个Kubernetes集群就只有两台主机,一台是Master节点,另一台是Worker节点。当然,在完全掌握了kubeadm的用法之后,你可以在这个集群里添加更多的节点。 Master节点需要运行apiserver、etcd、scheduler、controller-manager等组件,管理整个集群,所以对配置要求比较高,至少是2核CPU、4GB的内存。 而Worker节点没有管理工作,只运行业务应用,所以配置可以低一些,为了节省资源我给它分配了1核CPU和1GB的内存,可以说是低到不能再低了。 基于模拟生产环境的考虑,在Kubernetes集群之外还需要有一台起辅助作用的服务器。 它的名字叫Console,意思是控制台,我们要在上面安装命令行工具kubectl,所有对Kubernetes集群的管理命令都是从这台主机发出去的。这也比较符合实际情况,因为安全的原因,集群里的主机部署好之后应该尽量少直接登录上去操作。 要提醒你的是,Console这台主机只是逻辑上的概念,不一定要是独立,你在实际安装部署的时候完全可以复用之前minikube的虚拟机,或者直接使用Master/Worker节点作为控制台。 这3台主机共同组成了我们的实验环境,所以在配置的时候要注意它们的网络选项,必须是在同一个网段,你可以再回顾一下[课前准备],保证它们使用的是同一个“Host-Only”(VirtualBox)或者“自定”(VMWare Fusion)网络。 安装前的准备工作 不过有了架构图里的这些主机之后,我们还不能立即开始使用kubeadm安装Kubernetes,因为Kubernetes对系统有一些特殊要求,我们必须还要在Master和Worker节点上做一些准备。 这些工作的详细信息你都可以在Kubernetes的官网上找到,但它们分散在不同的文档里,比较凌乱,所以我把它们整合到了这里,包括改主机名、改Docker配置、改网络设置、改交换分区这四步。 第一,由于Kubernetes使用主机名来区分集群里的节点,所以每个节点的hostname必须不能重名。你需要修改“/etc/hostname”这个文件,把它改成容易辨识的名字,比如Master节点就叫 master,Worker节点就叫 worker: sudo vi /etc/hostname 第二,虽然Kubernetes目前支持多种容器运行时,但Docker还是最方便最易用的一种,所以我们仍然继续使用Docker作为Kubernetes的底层支持,使用 apt 安装Docker Engine(可参考[第1讲])。 安装完成后需要你再对Docker的配置做一点修改,在“/etc/docker/daemon.json”里把cgroup的驱动程序改成 systemd ,然后重启Docker的守护进程,具体的操作我列在了下面: cat <