k8s是Kubernetes的缩写(k和s之间有8个字母),其是一个自动的容器部署、管理工具;当我们部署容器时,服务器会有成千上万台,如果手动去控制无法完成,此时我们便需要自动的去帮助我们部署管理容器;Kubernetes是谷歌的开源工具,在开源前,谷歌已经使用了好几年,其稳定性已经得到充分的验证;
Kubernetes的集群安装搭建十分复杂,难度很高,所以在这种情况下,诞生了辅助的开源项目帮助我们安装集群,提供俩种模式可选:
使用三台物理机或VMware
虚拟机(物理机内存需要16G以上)来搭建集群环境,一台主控服务器,两台工作节点服务器。
如果资源有限(物理机内存不足16G的)也可以去掉一个工作节点,使用两台服务器。
在集群中,如果我们想启动一个docker容器,会向主控服务器发送指令,主控服务器收到指令后会向工作节点发送指令,告诉工作节点在其节点上部署启动容器,此时,可以告诉多个工作节点启动部署多台容器;
主控服务器一般不运行容器,其作为控制服务器存在,控制工作节点服务器去部署启动容器;
kubeasz项目极大的简化了k8s集群的安装过程,他提供的工具可以轻松安装和管理k8s集群。
调整 VMware 虚拟机的内存和 cpu:
进入虚拟机修改ip地址:
./ip-static
ip:192.168.64.191
ifconfig
使用mobaxterm连接虚拟机后,将我们准备的文件上传到对应目录下:
在主控服务器的主目录下,执行脚本工具 ezdown
,添加脚本权限:
cd ~/
chmod +x ./ezdown
ls -l
完成后执行下面命令下载所需的所有离线文件,当文件已存在时,不会重复下载,并且其会帮助安装docker:
./ezdown -D
导入 docker 镜像,后面使用这些镜像用来测试 k8s:
docker load -i images.gz
docker images
可选下载离线系统包 (适用于无法使用yum/apt仓库情形)
./ezdown -P
上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/kubeasz
/etc/kubeasz 包含 kubeasz 版本为 ${release} 的发布代码
/etc/kubeasz/bin 包含 k8s/etcd/docker/cni 等二进制文件
/etc/kubeasz/down 包含集群安装时需要的离线容器镜像
/etc/kubeasz/down/packages 包含集群安装时需要的系统基础软件
此时,我们第一台主服务器就已经准备好了,然后我们克隆此虚拟机,命名为k2,k3并修改其IP地址:
k2、k3作为从节点存在,后续我们的操作都在k1中进行,k2、k3只要保证其是启动着的就可以了;
./ezdown -S
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/kubeasz/example/config.yml
我们主服务器会连接从服务器,在主服务器进行的操作也会自动连接从服务器进行操作,所以主服务器需要自动连接并操作从服务器,所以我们需要设置免密登录:
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
ssh-copy-id 192.168.64.191
ssh-copy-id 192.168.64.192
ssh-copy-id 192.168.64.193
可以看到,我们已经可以免密登录192服务器了,测试后可以通过exit
命令退出192服务器;
我们首先创建一个集群方案cs1:
cd /etc/kubeasz
chmod +x ezctl
./ezctl new cs1
集群方案可以配置多个,比如cs1方案我们配置一主俩从,dz2集群方案我们可以配置一主三从,启动时,可以根据我们配置的方案进行选择,来快速搭建集群;
vim /etc/kubeasz/clusters/cs1/hosts
-etcd:注册中心集群,我们这里启动三个服务,组成注册集群;
修改完成后使用!wq
命令保存修改内容并退出;
我们拍摄服务器快照作为备份,如果集群安装失败,可以进行回退后重新安装:
三台服务器均可以进行快照备份;当需要回退时,点击下方的恢复快照即可选择版本进行回退;
cd /etc/kubeasz
./ezctl setup cs1 all
安装完成后,后续的命令都需要使用kubectl
命令来执行,我们为了方便操作,这里给这个命令设置一个别名k
;
# 设置 kubectl 命令别名 k
echo "alias k='kubectl'" >> ~/.bashrc
# 使设置生效
source ~/.bashrc
yum install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
k get cs
其中no是node的缩写,此命令主要作为查看节点服务器的命令使用,可以查看节点服务器列表:
k get no
我们可以看到目前节点服务器均是就绪状态: