Vagrant为Kubernetes定制Centos7 Box
很多人在学习Kubernetes之前,都会苦恼如何搭建一个集群环境呢?你可以使用新版的Docker快速搭建一个单Master的集群,你也可以购买云厂商的集群服务;使用Docker安装集群非常的简单,但是只能是单master节点;购买云厂商的集群服务可以拥有所有的集群功能,而且任意购买云存储,外网LoadBalancer等,但是费用昂贵,因为k8s集群对机器的要求还是不低的。那有没有其他的选择呢?下面给大家介绍我是如何在本地快速搭建k8s集群的。
使用Vagrant定制Centos7 Box,里面包含了Linux参数优化,Docker,Kubectl,Kubeadm,Kubelet等。这样就可以通过这个Vagrant Box启动多个节点的k8s集群了。
最近花了点时间将所有的配置都脚本化,可以通过CLI的方式快速构建基础Box或者删除。
项目结构
Vagrantfile配置文件
Vagrant会将项目根目录下所有文件同步到目标节点的/vagrant
目录,在Vagrantfile配置文件中,以centos7,版本2004.01为基础镜像,执行执行init-centos.sh
脚本来定制化Box。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.box_version = "2004.01"
config.vm.provider "virtualbox" do |vb|
vb.name = "MyCentos7"
vb.gui = false
end
config.vm.provision "shell", path: "init-centos.sh"
end
init-centos.sh脚本
#!/usr/bin/env bash
echo '### 0.update yum repos'
rm /etc/yum.repos.d/CentOS-Base.repo
rm -f /etc/yum.repos.d/epel*.repo
cp /vagrant/yum/*.* /etc/yum.repos.d/
yum clean all
yum makecache fast
echo '### 1.install common libs'
yum install -y git wget curl vim htop \
epel-release conntrack-tools net-tools telnet tcpdump bind-utils socat \
ntp chrony kmod ceph-common dos2unix ipvsadm ipset jq iptables bridge-utils libseccomp
echo '### 2.update locale'
cat <<EOF | sudo tee -a /etc/environment
LANG=en_US.utf8
LC_CTYPE=en_US.utf8
EOF
echo '### 3.disable selinux'
setenforce 0
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
echo '### 4.disable firewalld'
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
echo '### 5.disable swap'
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
echo '### 6.optimize linux kernel parameters'
cp /vagrant/sysctl/kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf
echo '### 7.change timezone'
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
timedatectl set-timezone Asia/Shanghai
echo '### 8.sync time'
systemctl enable chronyd
systemctl start chronyd
timedatectl status
timedatectl set-local-rtc 0
systemctl restart rsyslog
systemctl restart crond
echo '### 9.disable useless system server'
systemctl stop postfix && systemctl disable postfix
echo '### 10.install docker'
yum install -y yum-utils device-mapper-persistent-data lvm2
yum -y install docker-ce-18.09.9
mkdir -p /etc/docker
cat /vagrant/docker/daemon.json > /etc/docker/daemon.json
cat /vagrant/systemd/docker.service > /usr/lib/systemd/system/docker.service
echo '### 11.enable docker service'
systemctl daemon-reload
systemctl enable docker
systemctl start docker
echo '### 12.install and enable kubeadm'
#yum install -y kubelet-1.16.8 kubeadm-1.16.8 kubectl-1.16.8 --disableexcludes=kubernetes
yum install -y kubelet-1.18.4 kubeadm-1.18.4 kubectl-1.18.4 --disableexcludes=kubernetes
systemctl enable --now kubelet
echo "### 13.permit root login"
/bin/cp -rf /vagrant/ssh/sshd_config /etc/ssh/sshd_config
service sshd restart
echo '### 14.info output'
docker --version
docker info
kubelet --version
kubeadm version
echo '### 15.add vagrant public key'
sudo -u vagrant wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys
chmod go-w /home/vagrant/.ssh/authorized_keys
cat /home/vagrant/.ssh/authorized_keys
echo '### 16.clean data'
yum clean all # 清除yum操作缓存
rm -rf /tmp/* # 清除tmp下的零时文件
rm -f /var/log/wtmp /var/log/btmp # 清除日志
history -c # 清除历史
shutdown -h now # 立即关机
定制Box
执行项目的Makefile脚本,注意查看控制台日志的输出。
make build
测试
在项目根目录执行如下脚本测试:
# 进入test目录
cd test
# 使用定制Box,启动Vagrant
vagrant up
# 进入服务器节点,查看是否正常
vagrant ssh
# 删除数据
vagrant halt && vagrant destroy -f
到这里定制Vagrant Box就结束了。
最后
通过这个Vagrant Box,我终于可以快速的创建k8s集群了,并且可以切换不同的版本,目前使用的是1.18.4。
[root@node1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready master 124m v1.18.4
node2 Ready <none> 120m v1.18.4
项目的github地址如下:https://github.com/DevOpsDays2020/vagrant-box。
## 参考
License:
CC BY 4.0