手把手搭建一个k8s集群(附搭建脚本)
前置条件
-
安装好linux的三台主机(我这里用的是
CentOs 7
) -
为节点分别设置hostname
# master节点执行 hostnamectl set-hostname k8s-master reboot # slave0节点执行 hostnamectl set-hostname k8s-slave0 reboot # slave1节点执行 hostnamectl set-hostname k8s-slave1 reboot
-
设置一下yum的国内阿里源(可选)
# 备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 更新catch yum clean all yum makecache
-
升级一下内核(可选)
yum -y update rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install -y kernel-lt # 检查一下是否有新内核 awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg # 设置从新内核启动 grub2-set-default 0 # 生成启动配置 grub2-mkconfig -o /boot/grub2/grub.cfg reboot # 重启后查看内核 uname -r
在master节点安装docker
-
安装前置需要的软件包
# yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2 yum install -y yum-utils device-mapper-persistent-data lvm2
-
安装docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl start docker && systemctl enable docker
在master节点安装kubeadm、kubelet、kubectl
-
增加kubernetes源
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=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
-
使用yum进行安装(这里用的是v1.19.0)
yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 systemctl enable kubelet && systemctl start kubelet
-
关闭swap
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab swapoff -a
-
关闭防火墙
systemctl stop firewalld.service systemctl disable firewalld.service # 查看防火墙状态 firewall-cmd --state
-
禁用SELINUX
setenforce 0 sed -i 's/^SELINUX=.*$/SELINUX=disable/g' /etc/selinux/config
在master节点使用kubeadm初始化集群
-
检查版本
kubeadm version kubectl version --client kubelet --version
-
初始化集群
kubeadm init \ --kubernetes-version=1.19.0 \ --apiserver-advertise-address=192.168.13.129 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16
初始化参数说明:
- --kubernetes-version : kubernetes集群版本
- --apiserver-advertise-address=192.168.13.129 : kube-api-server的地址,为master节点本机ip
- --image-repository registry.aliyuncs.com/google_containers : 国内搭建需要替换的镜像源(非gfw可选)
- --service-cidr=10.1.0.0/16 : 集群service组件网络范围
- --pod-network-cidr=10.244.0.0/16 : 集群pod组件网网络范围
-
根据安装成功的提示创建kubectl的配置
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
记录salve加入集群的token
kubeadm join 192.168.13.129:6443 --token 5a1b5d.aguumwt5biwroita \ --discovery-token-ca-cert-hash sha256:7907054c13dd4d0a32548dd9ce3761634bb1b51eeefbba9a696f58e0b2dd60e6
忘记了的话可以使用
kubeadm token create --print-join-command
重新生成 -
添加网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml;
-
检查k8s状态
kubectl get all --all-namespaces kubectl get node -o wide
把slave加入集群
-
在slave节点安装docker和kubernetes组件(slave机器执行)
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab swapoff -a yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl start docker && systemctl enable docker yum install -y kubelet-1.19.0 kubeadm-1.19.0 --disableexcludes=kubernetes systemctl enable kubelet && systemctl start kubelet
-
把slave节点加入集群(slave机器执行)
kubeadm join 192.168.13.129:6443 --token 5a1b5d.aguumwt5biwroita \ --discovery-token-ca-cert-hash sha256:7907054c13dd4d0a32548dd9ce3761634bb1b51eeefbba9a696f58e0b2dd60e6
-
用kubectl检查node状态(master节点执行)
kubectl get node -o wide