使用kubeadm部署k8s高可用集群
部署k8s集群方式有很多种,包括二进制文件部署,kubespray,rancher,kubeadm等等。
纯粹的二进制文件部署非常复杂和麻烦,而使用良好的工具来达到“偷懒”的目的是我们程序员的天性,因此自动化部署工具才是我们的首选。
关于部署工具的选用逻辑也很简单,kubeadm是官方提供和推荐的,因此可以认为kubeadm是可用而且可靠的,文档也足够全面,官方的文档已经足够支撑我们把集群部署起来。使用上也很方便,所以不在这上面纠结太多,直接选用。
安装kubeadm
官方文档在此 安装kubeadm
为了方便阅读,结合实际操作过程中我自己的理解,这里整理一下整个部署过程
这里我们的系统已经安装好 docker 18.06.01-ce,关于如何安装docker这里不再赘述,可以看我的另外一篇文章 安装docker
服务器要求:
CPU:2+核
内存:2+G
硬盘:30+G
集群服务器之间内网完全互通
这些 端口未被占用
关闭 swap 不确定是否关闭的话,可以执行 swapoff -a 来关闭
确保集群服务器之间时间同步
关闭防火墙
关闭SElinux
关于容器运行时
k8s 默认的容器运行时是docker,但是不仅仅支持docker,还支持包括 containerd,CRI-O。
如果你的机器上安装了一个以上的运行时,需要卸载掉,只保留一个,或者在后面执行到kubeadm init 时,通过 --cri-socket 来指定使用哪个运行时,否则会出错。
什么是运行时?可以简单理解为容器运行环境,包括运行方式,运行依赖组件,等等,后面有机会再详细聊聊。
怎么检查机器上安装了几个进行时呢?检查以下目录是否存在就知道了
运行时 | kubeadm检测的socket 文件路径 |
---|---|
Docker | /var/run/docker.sock |
containerd | /run/containerd/containerd.sock |
CRI-O | /var/run/crio/crio.sock |
一些可选配置
1.给服务器配置互相免密ssh
ssh-keygen -t RSA
一路按enter,把生成的id_rsa.pub传到其他服务器上,然后执行
cat id_rsa.pub >> /root/.ssh/authorized_keys
2.修改服务器hostname便于辨识,例如:
hostnamectl set-hostname k8smaster
3.修改/etc/hosts,把集群内的服务器都加进去
下面正式开始安装k8s集群
设置yum源,国外的源比较慢,本次我使用阿里的镜像
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
执行yum install
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
启用服务
systemctl enable --now kubelet
一些准备工作
设置文件驱动和cgroup驱动
默认的文件驱动可能是其他,这里我们设置成overlay2
注意,k8s不支持vfs文件驱动,可以通过 docker info
命令查看你的 storage driver
默认的cgroup驱动是cgroupfs,官方推荐用systemd
cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd --storage-driver=overlay2 --
Restart=always
EOF
重启
systemctl