k8s系列文章3: kubeadm搭建k8s集群(上)
k8s系统由一组可执行程序组成,用户可以通过Github上的k8s项目页下载编译好的二进制包,或者下载源代码并编译后进行安装。
1. 系统要求
1)CPU和内存:Master:至少2core和4GB内存;Node:至少4core和16GB内存;推荐Master节点4core16GB内存,Node根据需要运行的容器数量进行配置。
2)Linux操作系统:Kernel版本要求在3.1以上;推荐CentOS 7。
3)etcd:3.0版本及以上;推荐使用3.3版本。
4)Docker:18.03版本;推荐使用18.09版本。
注意事项:CentOS系统默认启动了防火墙服务,但k8s系统在Master和各个工作的Node之间会有大量的网络通信。如果是安全的内部网络环境,推荐关闭防火墙,如下:
systemctl disable firewalld
systemctl stop firewalld
同时,建议让容器能够读取主机内容:
setenforce 0
2. 使用kubeadm工具安装k8s集群
k8从1.4版本开始引入了命令行工具kubeadm,以便于简化集群的安装过程。同时解决k8s集群的高可用问题。
2.1. 安装kubeadm和相关工具
首先要配置yum源,官方的yum源的地址是:
https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
访问官方的yum源,需要能够可续上网。否则建议配置国内的源:
http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
yum源的配置文件:/etc/yum.repos.d/kubernetes.repo,编辑内容:
[kubernetes]
name=Kubernetes Repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
配置好yum源后,执行yum install命令安装kubeadm和相关工具:
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
默认情况下,安装的是最新版本的k8s,如果想安装特定的版本,需要一次安装kubelet,kubeadm和kubectl。如下:
yum install -y kubelet-1.14.0-0
yum install -y kubeadm-1.14.0-0
yum install -y kubectl-1.14.0-0
下载完成后,启动docker服务和kubelet,同时设置为开起自启动(如果安装过docker则不需要,总之在这一步之后保证docker可用,docker version查看docker状态。如果显示docker版本,则说明docker已经可用):
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
2.2 kubeadm config
kubeadm 将配置文件以configMap的形式保存到集群之中,便于后续的查询和升级工作。为此,kubeadm config子命令提供了对这一组功能的支持:
kubeadm config upload from-file //由配置文件上传到集群中生成ConfigMap
kubeadm config upload from-flags //由配置参数生成ConfigMap
kubeadm config view //查看当前集群中的配置值
kubeadm config print init-defaults //输入kubeadm init默认参数文件的内容
kubeadm config print join-defaults //输出kubeadm join默认参数文件的内容
kubeadm config migrate //在新旧版本之间进行配置转换
kubeadm config images list //列出所需的镜像列表
kubeadm config images pull // 拉取镜像到本地
自定义文件,按需生成合适的配置。例如,将下面的文件保存为init-config.yaml备用。其中配置镜像仓库的地址,以及pod的地址范围:
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
imageRepository: docker.io/dustise
kubernetesVersion: v1.14.0
networking:
podSubnet: "192.168.0.0/16"
2.3 下载kubernetes的相关镜像
如果不能科学上网,则需要从国内的镜像站点获得镜像加速支持,建议修改Docker的配置文件,增加Registry Mirror参数,将镜像配置写入参数中。如下:
echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json
然后重启docker服务:
systemctl restart docker
重启docker成功后,使用config images pull子命令下载所需镜像,例如:
kubeadm config images pull --config=init-config.yaml
运行后将会执行下载镜像的步骤。之后,就可以进行安装了。
2.4 运行kubeadm init命令安装Master
自此,准备工作已经就绪,执行kubeadm init命令可以一键安装k8s的Master。
需要注意的是,kubeadm的安装过程不涉及网络插件(CNI)的初始化,因此kubeadm初步安装完成的集群不具备网络功能,任何pod包括自带的CoreDNS都无法正常工作。而网络插件的安装往往对kubeadm init命令的参数有一定的要求。
接下来执行kuberadm init命令,使用前面创建的配置文件进行集群控制面的初始化:
kubeadm init --config=init-config.yaml
如果到这一步发现了如下的报错:
Error swap: running with swap on is not supported.please disable swap
发生上述错误是因为kubeadm推荐关闭交换空间的使用,而我们在之前并没有完成这一步。可以通过下面的步骤完成:
# 执行完下面的命令后,进行/etc/fstab文件,删除对swap的加载,将有swap哪一行注释掉即可
swapoff -a
重新运行初始化命令,控制台将输出以下内容:
控制台输出.jpg
到这一步,则Master节点的安装已经成了大半,然后按照k8s的提示,复制配置文件到普通用户的home目录下:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时Master的节点就安装结束了。但是还缺少工作的Node和容器网络的配置。需要注意的是,kubeadm init命令执行完成的最后几行会提示重要的信息,其中包括加入节点的操作和需要用到的token信息,记录下来后面安装Node的时候需要用到。
至此,Master节点的安装就大功告成了,下一篇文章继续安装工作节点Node。