目标:创建三个节点的集群,一个master节点,两个node节点。
具体步骤如下所示:
步骤一:在aws上申请3个instance,操作系统选择ubuntu
1.登陆aws上,申请3个EC2 instance,node节点join的时候是通过内部IP地址join的,所以在aws上创建EC2 instance请需绑定上Elastic IP,这样即便instance重启后,IP地址也不会变化。
2.执行 swapoff -a 命令关闭分区;执行sudo ufw disable 关闭防火墙
3.为了保障node节点能成功加入master节点,还需要对master和node节点开放如下端口,具体信息可查看官网详细信息
步骤二:允许iptables检查桥接流量
1.执行命令 sudo modprobe br_netfilter
执行该命令后会自动化创建目录/proc/sys/net/bridge,并在该目录下自动创建一些文件,后续会用到。
2.为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,执行如下命令,将 net.bridge.bridge-nf-call-iptables
设置为
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
步骤三:安装 kubeadm、kubelet 和 kubectl
1.更新 apt
包索引并安装使用 Kubernetes apt
仓库所需要的包
sudo apt-get update && sudo apt-get install -y apt-transport-https curl containerd
sudo apt-get update && sudo apt-get install -y apt-transport-https
sudo apt-get install curl
sudo apt-get install containerd
2.下载 Google Cloud 公开签名秘钥
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
3.添加 Kubernetes apt
仓库:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
4.安装kubeadm、kubelet 和 kubectl并锁定版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
以上三个步骤在master节点和node节点都需要执行。
安装完成后,选取一个节点作为master节点,另外两个节点作为node节点,master节点执行集群初始化命令
kubeadm init --apiserver-advertise-address=10.x.x.x --service-cidr=10.x.x.x/16 --pod-network-cidr=192.168.0.0/16
这里没有使用默认的kubeadm init,--apiserver-advertise-address可以填写master节点的内部ip地址,实际项目中是负载均衡的ip,--service-cidr与--apiserver-advertise-address不要在同一个网段,例如前面是10.0,那么后面这个就是10.1, 对于--pod-network-cidr
flannel 默认是10.244.0.0/16
calico 默认是192.168.0.0/16
需要注意的是:在kubeadm init过程中,如果选用下面的方式安装calico插件,那么kubeadm init的时候一定要设置 --pod-network-cidr=192.168.0.0/16这个参数,否则安装插件后,查看node状态也是NotReady状态。
执行上述命令过程中如下遇到如下错误,那么执行这两条命了,将指设置为1
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
kubeadm init命令执行完成后,会显示如下信息,按提示信息copy配置文件,kubeadm join命令需copy下来,这是后面node节点加入的命令。
接下来在master节点安装网络插件,这里选择calico网络插件,具体网络插件安装详细信息可查看这里
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
插件安装完成后,就可以在node节点上执行copy出来的kubeadm join命令,注意所有node节点也需要执行步骤一、步骤二、步骤三。
node节点join成功后,可在master节点执行kubectl get node命令,查看master和node节点信息,如果都是ready状态,如下图所示,那么说明整个集群安装成功。
如果以后想重启集群,那么在master和node节点上执行kubeadm reset命令,然后在master节点上至下kubeadm init命令,node节点上重新只想kubead join命令即可。
如果遇到这个错误可从如下几个方面进行排查:connection-to-the-server-host-6443-was-refused
1.执行命令查看6443是否被正常监听
netstat -pnlt | grep 6443
2.查看kubelet服务是否处于运行状态
systemctl status kubelet
3.查看containerd服务是否处于运行状态
systemctl status containerd