环境要求
系统
- 纯净 CentOS 7.x 及以上
- 机器配置 2 核 4G 以上 3台及以上
- 服务器网络互通
- 禁止 Swap 分区
软件
环境安装
yum install -y wget net-tools
关闭防火墙
systemctl stop firewalld & systemctl disable firewalld
关闭 SELinux
vi /etc/selinux/config 文件中设置 SELINUX=disabled ,重启服务器setenforce 0 & sed -i 's/enforcing/disabled/' /etc/selinux/config
关闭 Swap
如果服务器配置低,可以不关闭 swap,后续忽略相应报错即可
swapoff -a & sed -i 's/.swap./#&/' /etc/fstab</code>
#### 修改 Hosts
<code>cat > /etc/hosts << EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.103 master
192.168.1.104 node1
192.168.1.105 node2
EOF
时间同步
yum install -y ntpdate & ntpdate ntp.aliyun.com
echo '/5 * /usr/sbin/ntpdate -u ntp.aliyun.com' >>/var/spool/cron/root
systemctl restart crond
crontab -l
搭建
安装 Docker
1)配置 Docker 的 yum 仓库(阿里云仓库)
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
2)查找并安装指定版本 Docker(确定 K8S 支持的 Docker 版本)
yum list docker-ce.x86_64 --showduplicates | sort -r
yum -y install docker-ce-19.03.11 docker-ce-cli-19.03.11 containerd.io-1.2.13
systemctl enable docker & systemctl start docker
3)修改 Docker 的 Cgroup Driver 为 systemd(确保服务器节点在资源紧张的情况更加稳定)
mkdir /etc/docker
touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload & systemctl restart docker
docker info | grep Cgroup
安装 kubeadm
1)配置 kubenetes 的 yum 仓库
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
2)安装 kubelat、kubectl、kubeadm
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
初始化 Master
1)配置忽略 Swap 报错
vi /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS="--fail-swap-on=false"
2)初始化 Master
仅在 Master 节点执行
kubeadm init \
--apiserver-advertise-address=192.168.1.103 \
--kubernetes-version v1.20.1 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.10.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=Swap
参数说明:
- —kubernetes-version # 指定 Kubernetes 版本
- —image-repository # 指定阿里云镜像仓库地址
- —pod-network-cidr # 指定 pod 网络段,默认使用 10.244.0.0/16 不要修改,容易造成 Flannel 状态 CrashLoopBackOff
- —service-cidr # 指定 service 网络段
- —ignore-preflight-errors=Swap # 忽略 Swap 报错信息
然后等待拉取镜像,初始化完成以后按提示运行
记住kubeadm jion 192.168.1.103:6443 ...
命令,以便后续加入 Node 节点
3) 配置 kubeconfig
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
执行 kubectl get nodes 发现现有节点为 NotReady 状态,说明我们需要配置 Node 节点了
kubectl get nodes
kubectl get pods -n kube-system
4)添加 Flannel 网络组件
Flannel 是一个专门为 K8s 定制的网络解决方案,主要解决 Pod 跨主机通信问题
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 由于国内网络问题,可能需要科学上网进行手动下载
kubectl apply -f kube-flannel.yml
# 验证 flannel 网络插件是否部署成功(Running 即为成功)
kubectl get pods -n kube-system | grep flannel
加入 Node 节点
所有 Node 节点运行
1)配置忽略 Swap 报错
cat > /etc/sysconfig/kubelet << EOF
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
2)加入 Node 节点
kubeadm join 192.168.1.103:6443 --token 7wor0d.7i31zm9hw330ay97 \
--discovery-token-ca-cert-hash sha256:70970addce82343177ba403997644a2a38d7b8058724c5c22b8b1d5018c05560