镜像:CentOS-7-x86_64-Minimal-1908
CPU:2核
内存:2G

//在master虚拟机上,设置master01节点
hostnamectl set-hostname master01
//立马生效
bash
//查看/etc/hostname为master01
cat /etc/hostname
//重启后永久生效
reboot
//同理在node1虚拟机上,设置node01节点
hostnamectl set-hostname node01
//立马生效
bash
//查看/etc/hostname为node01
cat /etc/hostname
//重启后永久生效
reboot
node2如node1操作
//安装yum工具
yum install -y yum-utils
//卸载旧版本Docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
//安装仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//更新配置yum源后,用如下命令生成缓存,提高搜索安装软件速度
sudo yum makecache fast
//安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io -y
//启动docker
sudo systemctl start docker
//设置开机启动
sudo systemctl enable docker
sudo systemctl status docker
//新增配置文件
cat >> /etc/docker/daemon.json << EOF
{
"exec-opts":["native.cgroupdriver=systemd"]
}
EOF
//重启docker
systemctl restart docker
systemctl status docker
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
swapoff -a
//关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
//自定义master与node IP,请根据个人情况修改
cat >> /etc/hosts << EOF
192.168.186.155 master01
192.168.186.156 node01
192.168.186.157 node02
EOF
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
//针对修改repo_gpgcheck=0
在所有节点上安装kubelet、kubeadm和kubectl。
sudo yum update -y
//sudo yum install -y kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4
//可以根据github发布版本,指定
//最新的1.24版本已经弃用docker,所以此处需指定1.23
sudo yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5
//默认最新版本
//sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
sudo systemctl start kubelet
//sudo systemctl status kubelet 此时kubelet还没有正常准备,待kubeadm init后master节点会ok,将node节点join添加后kubelet也会正常
yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl
//查看集群版本结果Kubernetes v1.23.5
kubelet --version
![]()
//apiserver-advertise-address 192.168.186.155为master节点IP,根据个人master IP修改
kubeadm init --apiserver-advertise-address 192.168.186.155 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr 10.244.0.0/16 --service-cidr 10.96.0.0/12
补充:Kubeadm初始化报错:[ERROR CRI]: container runtime is not running
解决办法:
rm -rf /etc/containerd/config.toml
systemctl restart containerd
//如果执行失败,需重置
kubeadm reset
//配置客户端kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
//worker节点添加到集群 ---> 在worker节点node1上执行
//可以通过kubeadm token list查看token
//也可以通过如下命令一次性获取命令
kubeadm token create --print-join-command
![]()
wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml --no-check-certificate
kubectl apply -f calico.yaml
//此处应用后node状态由NotReady --> Ready
kubectl get nodes

kubectl get pod -A

//在master01传文件到node01,其中172.168.186.156为master01节点
scp -r /etc/kubernetes/admin.conf root@172.168.186.156:/etc/kubernetes/
//在node1上执行
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile