环境要求

系统

  • 纯净 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,后续忽略相应报错即可
  1. swapoff -a & sed -i 's/.swap./#&/' /etc/fstab</code>
  2. #### 修改 Hosts
  3. <code>cat > /etc/hosts << EOF
  4. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  5. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  6. 192.168.1.103 master
  7. 192.168.1.104 node1
  8. 192.168.1.105 node2
  9. EOF

时间同步

  1. yum install -y ntpdate & ntpdate ntp.aliyun.com
  2. echo '/5 * /usr/sbin/ntpdate -u ntp.aliyun.com' >>/var/spool/cron/root
  3. systemctl restart crond
  4. crontab -l

搭建

安装 Docker

1)配置 Docker 的 yum 仓库(阿里云仓库)

  1. yum -y install yum-utils device-mapper-persistent-data lvm2
  2. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. yum makecache fast

2)查找并安装指定版本 Docker(确定 K8S 支持的 Docker 版本)

  1. yum list docker-ce.x86_64 --showduplicates | sort -r
  2. yum -y install docker-ce-19.03.11 docker-ce-cli-19.03.11 containerd.io-1.2.13
  3. systemctl enable docker & systemctl start docker

3)修改 Docker 的 Cgroup Driver 为 systemd(确保服务器节点在资源紧张的情况更加稳定)

  1. mkdir /etc/docker
  2. touch /etc/docker/daemon.json
  3. cat > /etc/docker/daemon.json << EOF
  4. {
  5. "exec-opts": ["native.cgroupdriver=systemd"]
  6. }
  7. EOF
  8. systemctl daemon-reload & systemctl restart docker
  9. docker info | grep Cgroup

安装 kubeadm

1)配置 kubenetes 的 yum 仓库

  1. cat > /etc/yum.repos.d/kubernetes.repo << EOF
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled=1
  6. gpgcheck=1
  7. repo_gpgcheck=1
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. EOF

2)安装 kubelat、kubectl、kubeadm

  1. yum install -y kubelet kubeadm kubectl
  2. systemctl enable kubelet

初始化 Master

1)配置忽略 Swap 报错

vi /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS="--fail-swap-on=false"
2)初始化 Master
仅在 Master 节点执行

  1. kubeadm init \
  2. --apiserver-advertise-address=192.168.1.103 \
  3. --kubernetes-version v1.20.1 \
  4. --image-repository registry.aliyuncs.com/google_containers \
  5. --service-cidr=10.10.0.0/16 \
  6. --pod-network-cidr=10.244.0.0/16 \
  7. --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
  1. mkdir -p $HOME/.kube
  2. cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. chown $(id -u):$(id -g) $HOME/.kube/config

执行 kubectl get nodes 发现现有节点为 NotReady 状态,说明我们需要配置 Node 节点了

  1. kubectl get nodes
  2. kubectl get pods -n kube-system

4)添加 Flannel 网络组件
Flannel 是一个专门为 K8s 定制的网络解决方案,主要解决 Pod 跨主机通信问题

  1. wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2. # 由于国内网络问题,可能需要科学上网进行手动下载
  3. kubectl apply -f kube-flannel.yml
  4. # 验证 flannel 网络插件是否部署成功(Running 即为成功)
  5. kubectl get pods -n kube-system | grep flannel

加入 Node 节点

所有 Node 节点运行
1)配置忽略 Swap 报错

  1. cat > /etc/sysconfig/kubelet << EOF
  2. KUBELET_EXTRA_ARGS="--fail-swap-on=false"
  3. EOF

2)加入 Node 节点

  1. kubeadm join 192.168.1.103:6443 --token 7wor0d.7i31zm9hw330ay97 \
  2. --discovery-token-ca-cert-hash sha256:70970addce82343177ba403997644a2a38d7b8058724c5c22b8b1d5018c05560