1、环境准备
- 准备3台centos7主机(每台至少双核2G)
- 关闭防火墙,禁用selinux,同步时间
- 修改好主机名,并配置hosts(例:master,node01,node02)
- 配置ssh免密登录(搜索或者参考https://blog.youkuaiyun.com/u010342213/article/details/100921274)
- 安装docker环境(可以参考菜鸟教程https://www.runoob.com/docker/centos-docker-install.html)
- 永久禁用swap
swapoff -a #临时生效,重启失效
修改开机加载配置文件,把swap开机加载配置项注释掉。
vim /etc/fstab #永久禁用

然后
mount -a # 重新加载生效
【注意】:以上操作三台主机都要执行
2、安装kubernetes
2.1、编写repo文件配置yum仓库(3个节点都要配置)
cd /etc/yum.repos.d # 进入指定目录
vim kubernetes.repo # 新建kubernetes.repo文件,编辑如下内容
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

yum repolist #查看

yum makecache #在本地生成缓存

【注意】:以上操作三台主机都要执行
2.2、打开iptables桥接功能(3个节点都要配置)
vim /etc/sysctl.d/k8s.conf #在该目录下自定义conf文件,添加以下配置项
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
重新加载文件使其生效
sysctl -p /etc/sysctl.d/k8s.conf

【注意】:如果报“找不到文件”,我们需要加载一个模块:
modprobe br_netfilter
2.3、打开路由转发(3个节点都要配置)
echo net.ipv4.ip_forward = 1 > /etc/sysctl.conf
sysctl -p #加载该文件,使其生效

2.4、在master节点操作
1. 修改yum的配置文件,缓存下面要下载的rpm包
vim /etc/yum.conf

2. 下载rpm包
yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0
下载完成后查看是否缓存了rpm包
cd /var/cache/yum/x86_64/7/kubernetes/packages
ls

3. 将服务加入开机自启
systemctl enable kubelet.service
4. 下载镜像
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
docker pull quay.io/coreos/flannel:v0.11.0-amd64
docker pull coredns/coredns:1.3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull mirrorgooglecontainers/pause:3.1
下载完成后,通过docker images查看镜像,
根据 IMAGE ID修改mirrorgooglecontainers开头的镜像名称,
用docker tag IMAGE_ID NEW_REPOSITORY修改名称(可以保留旧的),
#例如:
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
修改后如下:

一定要完成改名,否则接下来初始化会失败。
5.初始化集群
#初始化集群
kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
参数解释:
–kubernetes-version:指定当前kubernetes版本号(查看版本:kubelet --version)
–pod-network: 指定pod网段,kubernetes默认指定网络。
–ignore:忽略所有报错
参考如下截图,保存最下面的命令,后面添加节点要用。

根据上图的提示创建目录并授予权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点:
kubectl get nodes

可以看出master的状态是未就绪(NotReady),之所以是这种状态是因为还缺少一个附件flannel,没有网络各Pod是无法通信的。
6.部署docker容器的跨主机网络:
将该yml文件下载到本地
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在yml文件所在目录执行:
kubectl apply -f kube-flannel.yml

稍等一会会,查看节点状态:
kubectl get nodes

2.5 在两个从节点操作(node01和node02分别进行)
1.yum下载安装kubeadm(无需安装kubectl)
yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
2.下载完成后将该服务加入开机自启
systemctl enable kubelet.service
3.docker拉取镜像
与master操作一样,先通过脚本拉取镜像,然后通过docker tag修改镜像名称
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull quay.io/coreos/flannel:v0.11.0-amd64
下载完成后,通过docker images查看镜像,
根据 IMAGE ID修改mirrorgooglecontainers开头的镜像名称,
用docker tag IMAGE_ID NEW_REPOSITORY修改名称,
#例如:
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
修改名称后(可以保留旧的)如下图:

4.将node01和node02节点加入集群
在两个从节点分别执行以下命令加入集群(在初始化集群是生成的,并且每次的值都是不同的)
kubeadm join 192.168.xxx.xxx:6443 --token wgms7n.fba5wzd4lbtzdjxg \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxx9f03f0eabda21a31xxxxe94db3a55596xxxxxxxxxxxxxxxxxxxxx
2.6、在master节点查看节点信息
kubectl get nodes

确保有其他节点的信息,并且状态都为ready。
注意:如果状态为NotReady,那就是网络的问题,没有部署跨主机网络,则需要执行上面【2.4 - 6】部署docker容器的跨主机的网络。
3、熄灯
至此k8s集群已经搭建完成。
【补充】:
如果初始化集群(在master上初始化集群)后没有保存添加节点命令,或者是初始化成功后的信息信息被覆盖了想要重新初始化,可以先执行kubeadm reset命令重装一下,再重新初始化。
而当你执行完重置命令后,再进行初始化时,可能会报以下错误:

需要将该目录删除掉,
rm -rf /var/lib/etcd
如果已经创建了~/.kube目录,也需要一并删除,然后再重新初始化集群。
本文详细介绍了如何在CentOS7环境下搭建Kubernetes集群,包括环境准备、配置yum仓库、开启iptables桥接功能、设置路由转发、安装kubernetes组件、下载及修改镜像、初始化与加入节点,以及解决NotReady状态问题。最后,文章提供了重置和重新初始化集群的注意事项。
6565






