搭建Kubernates集群笔记(二)— 安装 Docker 和 k8s
这章节的操作请在 root 账号下进行,在虚拟机中使用 sudo -s
即可切换到 root 账号。
一、配置yum源
不建议使用 CentOS 7 自带的 yum 源,因为安装软件和依赖时会非常慢甚至超时失败,除非使用魔法。执行下方命令使用阿里云的源:
[root@master docker]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master docker]# yum makecache
PS:如果提示:
wget: command not found
,先运行yum -y install wget
安装wget
命令。
二、关闭 防火墙 和 Swap
防火墙一定要提前关闭,否则在后续安装K8S集群的时候是个 trouble maker。执行下面语句关闭,并禁用开机启动:
[root@master docker]# systemctl stop firewalld & systemctl disable firewalld
关闭Swap:
类似ElasticSearch集群,在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。有两种方法关闭Swap:
- 执行
swapoff -a
可临时关闭,但系统重启后恢复。 - 编辑
/etc/fstab
,用#
注释掉包含 swap 的那一行即可,重启后可永久关闭。每个人的机子可能不同,我机子上包含swap的那行被注释后是这样的:
UUID=1c419d6c-5064-4a2b-953c-05b2c67edb15 / xfs defaults 0 0
# /swapfile none swap defaults 0 0
PS:可用 Finalshell 下方文件视图找到 /etc/fstab ,双击编辑后保存。
或执行以下命令关闭:
[root@master docker]# sed -i '/ swap / s/^/#/' /etc/fstab
因为方法2虽然是永久关闭,但需要重启才能生效,所以我们可以各执行一次方法1和方法2。随后使用top
命令查看 Swap 的情况,如果显示如下则表示关闭成功(0 total,0 free):
三、安装Docker
方法一:通过官方库安装
依次运行下方语句,通过官方库安装 Docker,官方文档地址:Install Docker Engine on CentOS
[root@master docker]# sudo yum install -y yum-utils
[root@master docker]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@master docker]# yum makecache
[root@master docker]# sudo yum install docker-ce docker-ce-cli containerd.io -y
方法二:通过阿里云的 Docker 仓库安装
[root@master docker]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master docker]# yum makecache
[root@master docker]# yum install docker-ce docker-ce-cli containerd.io -y
安装过程漫长,泡杯咖啡等待过程结束。完成之后跑一下下方的命令,能显示版本号就说明安装成功了。
[root@master docker]# docker --version
启动Docker并激活开机启动:
[root@master docker]# systemctl start docker & systemctl enable docker
最后跑一下 docker run hello-world
命令看看效果如何:
四、Docker配置阿里云镜像
参考资料:docker配置阿里云镜像
我使用的是中国科学技术大学的镜像地址:https://docker.mirrors.ustc.edu.cn
PS:以下操作可直接在 Finalshell 下方的文件视图对应的目录中,右键-新建-文件,进行编辑保存。
使用如下命令创建/修改daemon.json
文件:
[root@master docker]# sudo vi /etc/docker/daemon.json
PS:不加
sudo
的命令,在保存文件时有Can't open file for writing
错误,查询此篇文章后,加上sudo
解决此问题:linux vim操作提示:“Can’t open file for writing”或“operation not permitted”的解决办法。
在其中加入以下内容:
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
第一行为添加镜像地址,第二行指定 Docker 的 Cgroup
为 systemd
。之后使用下方命令重载内容:
[root@master docker]# systemctl daemon-reload
[root@master docker]# systemctl restart docker
五、安装 Kubernetes
文档推荐:
- 官方(右上角可以切换中文,但中文文档不全):Creating a cluster with kubeadm
- Kuboard:Kubernetes教程
因为有Q的存在,官方仓库无法使用,我们使用阿里源的仓库(以下命令一起复制/黏贴/执行):
[root@master docker]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 关闭 SELinux(SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则))。
[root@master docker]# setenforce 0
[root@master docker]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- 安装 k8s 组件(kubelet、kubeadm、kubectl)
[root@master docker]# yum install -y kubelet kubeadm kubectl
- 启动 kubelet
[root@master docker]# systemctl enable kubelet && systemctl start kubelet
这一步有区别,网络上说这次启动会报错:
如果此时执行
service status kubelet
命令,将得到 kubelet 启动失败的错误提示,请忽略此错误,因为必须完成后续步骤中 kubeadm init 的操作,kubelet 才能正常启动。
但本地测试并没有问题,不清楚是否是因为 Vagrant 虚拟机的问题,可能高版本已忽略此问题。
- 配置 kubelet 的 cgroup drive
这一步与网络资源也有区别,网络上需要修改
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
文件使得k8s和docker的Cgroup相同,但在我本机此文件不存在,可能高版本已没有这份文件了。
确保 docker 的 cgroup drive 和 kubelet 的 cgroup drive 一样,否则在后续kubeadm init
时,会有“cgroupfs”警告,参考资料:kubeadm初始化警告“cgroupfs”解决
k8s默认使用systemd
,这里我们只需要修改 Docker 的就可以了,参考资料:容器运行时
在第四步中,我们已经修改 docker 的 Cgroup 内容了,这里只需要调用下方命令确认 docker 的 Cgroup 即可,打印结果应该为:Cgroup Driver: systemd
[root@master docker]# docker info | grep -i cgroup
如果有WARNING: bridge-nf-call-iptables is disabled
或WARNING: bridge-nf-call-ip6tables is disabled
提示,请再运行以下对应的命令:
[root@master docker]# echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
[root@master docker]# echo "1" >/proc/sys/net/bridge/bridge-nf-call-ip6tables
到此,虚拟机中的所需程序已安装完成,可以将当前虚拟机package
了,这个新的BOX我命名为centos/k8s
。