kubeadm 一主二从安装文档

环境准备

  • vmbox(开源免费)

  • 三台centos虚拟机 (推荐2g2c)

  • 两张网卡(一张使用nat模式, 一张HostOnly模式 – 更换网络固定ip地址使用)

修改网卡配置

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static    #初始为dhcp,修改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=199cbe78-4384-456c-bc43-a77b869940db
DEVICE=enp0s3
ONBOOT=yes            #初始为no,修改成yes
IPADDR=192.168.56.101 #为hostOnly同一网段即可

虚拟机初始化

开始在每台机器上执行下面的命令

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux

永久关闭

sed -i 's/enforcing/disabled/' /etc/selinux/config

临时关闭

setenforce 0

关闭 swap

临时

swapoff -a

永久关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab

根据规划设置主机名【master 节点上操作】

hostnamectl set-hostname k8smaster

根据规划设置主机名【node1 节点操作】

hostnamectl set-hostname k8snode1

根据规划设置主机名【node2 节点操作】

hostnamectl set-hostname k8snode2

在 master 添加 hosts

cat >> /etc/hosts << EOF
192.168.56.101 k8smaster
192.168.56.102 k8snode1
192.168.56.103 k8snode2
EOF

将桥接的 IPv4 流量传递到 iptables 的链

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

生效

sysctl --system

时间同步

yum install ntpdate -y
ntpdate time.windows.com

安装docker以及kubernetes

首先配置一下 Docker 的阿里 yum 源

cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - x86_64
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

然后 yum 方式安装 docker

yum 安装

yum -y install docker-ce

查看 docker 版本

docker --version

启动 docker

systemctl enable docker
systemctl start docker

配置 docker 的镜像源

cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://17wukhty.mirror.aliyuncs.com"]
}
EOF

然后重启 docker

systemctl daemon-reload
systemctl restart docker

然后我们还需要配置一下 yum 的 k8s 软件源

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=0
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

安装 kubeadm,kubelet 和 kubectl
由于版本更新频繁,这里指定版本号部署:

安装 kubelet、kubeadm、kubectl,同时指定版本

yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

设置开机启动

systemctl enable kubelet

master 主机

kubeadm init --apiserver-advertise-address=192.168.56.101 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=172.16.0.0/16

注意: calico默认pod cidr为192.168.0.0/16, flannel默认pod cidr为10.244.0.0/16.

虚拟机cidr和pod cidr不要重复. (发生冲突修改cli之后还需要修改calico.yaml)

#重新打印join命令 
kubeadm token create --print-join-command

其他

cni选择calicao

install calicao

kubectl create -f https://projectcalico.docs.tigera.io/v3.18/manifests/calico.yaml
watch kubectl get pods -n calico-system

如果有flannel,则先需要卸载

卸载

第一步,在master节点删除flannel

kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

第二步,在node节点清理flannel网络留下的文件
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/  
rm -f /etc/cni/net.d/*
注:执行完上面的操作,重启kubelet
双网卡带来的问题

问题解决

IP_AUTODETECTION_METHOD=interface=eth.* #为网卡名称,这里更改为hostOnly网卡名称

Q.E.D.