Vagrant定制Box

为Kubernetes定制Centos7 Box

标签: vagrant   devops   kubernetes   kubeadm   centos7  

很多人在学习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。

参考

Vagrant搭建虚拟机集群

Vagrantfile配置官方文档

「真诚赞赏,手留余香」

请我喝杯咖啡?

使用微信扫描二维码完成支付

相关文章