近年来,随着技术架构的演进,从单体到SOA,再由SOA到微服务的架构演变,而大规模的应用给开发和运维带来的很多麻烦。容器化技术的产生,使得我们可以利用镜像不可变性通过快速简单的回滚,提供可靠且频繁的容器镜像构建和部署在生产环境中,可以使得我们以松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。随着应用规模的不断扩大,就需要一个自动化的管理运行应用程序的容器,实现自动伸缩的系统,具体kubernetes 如何的好,能做什么这里闲话少絮,想了解的参考官网:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/。 这里也是为了更好了解其中的原理,参考官方文档在本地搭建一套单主节点的集群,并记录下过程中遇到的问题,希望小伙伴可以避免这些问题,快速处理问题,节省时间到研究 kubernetes 本身的原理和实践中去。
同时也给出几篇文章供参考:
centos 8 环境搭单主节点 kubernetes 建集群的文章(英文):
https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/
https://upcloud.com/community/tutorials/install-kubernetes-cluster-centos-8/
kubernetes 官方文档的参考(中文):
https://kubernetes.io/zh/docs/setup/independent/create-cluster-kubeadm/
环境准备
我先说一下我的环境:
vagrant+virtual box 创建3台虚拟机,分配 2CPU、2G内存,系统采用 centos 8.1
官网给出的环境要求如下:
虚拟机准备
至于vagrant 和 virtual box 创建虚拟机的过程这里就不写了,给出官网下载地址 和 Vagrantfile 配置即可,需要注意的是要保证虚拟机之间的互相通信,和mac地址的唯一性,这也在上面的要求中列出来了。
vagrant 下载地址:https://www.vagrantup.com/downloads.html
virtual box 下载地址:https://www.virtualbox.org/wiki/Downloads
virtual box 虚拟机 centos 镜像地址:https://cloud.centos.org/centos/8/x86_64/images/
最好先下载到本地磁盘保存,然后通过 vagrant 把这个镜像添加到镜像库中:
vagrant box add --name centos/8.1 F:\boxes\CentOS-8-Vagrant-8.1.1911-20200113.3.x86_64.vagrant-virtualbox.box
添加成功之后可以用命令 vagrant box list 查看镜像。
这里给出 Vagrantfile 虚拟机配置文件内容供参考,当然也可以手动创建虚拟机:
Vagrant.configure("2") do |config|
config.vm.box = "centos/8.1"
config.vm.box_check_update = false
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.network "public_network"
node.vm.provider "virtualbox" do |vb|
vb.name = "node-#{i}"
vb.memory = "2048"
vb.cpus = 2
end
node.vm.synced_folder "./node-#{i}", "/vagrant"
end
end
end
这里虚拟机的名称和同步文件夹名称可以自己修改(我的在Vagrantfile 同级目录下),我把网络设置成 public_network 保证虚拟机可以上公网,因为需要下载镜像。然后运行 vagrant up 启动这三个虚拟机,不放心的话可以互相ping一下,检查网络。
下面正式进入搭建工作,需要在三个节点中安装 kubeadm、kubectl、kubelet、docker组件),在主节点安装控制面板组件(下图中的 kubernetes control plane 部分的组件,用于集群控制)。下图是 kubernetes 官方网站的组件图: