手把手搭建一个k8s集群(附搭建脚本)

前置条件

  1. 安装好linux的三台主机(我这里用的是CentOs 7

  2. 为节点分别设置hostname

    # master节点执行
    hostnamectl set-hostname k8s-master
    reboot
    # slave0节点执行
    hostnamectl set-hostname k8s-slave0
    reboot
    # slave1节点执行
    hostnamectl set-hostname k8s-slave1
    reboot
    
  3. 设置一下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
    
  4. 升级一下内核(可选)

    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

  1. 安装前置需要的软件包

    # yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  2. 安装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

  1. 增加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
    
  2. 使用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
    
  3. 关闭swap

    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    swapoff -a
    
  4. 关闭防火墙

    systemctl stop firewalld.service
    systemctl disable firewalld.service
    # 查看防火墙状态
    firewall-cmd --state 
    
  5. 禁用SELINUX

    setenforce 0
    sed -i 's/^SELINUX=.*$/SELINUX=disable/g' /etc/selinux/config
    

在master节点使用kubeadm初始化集群

  1. 检查版本

    kubeadm version
    kubectl version --client
    kubelet --version
    
  2. 初始化集群

    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组件网网络范围

  1. 根据安装成功的提示创建kubectl的配置

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  2. 记录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重新生成

  3. 添加网络

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml;
    
  4. 检查k8s状态

    kubectl get all --all-namespaces
    kubectl get node -o wide
    

把slave加入集群

  1. 在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
    
  2. 把slave节点加入集群(slave机器执行)

    kubeadm join 192.168.13.129:6443 --token 5a1b5d.aguumwt5biwroita \
    --discovery-token-ca-cert-hash sha256:7907054c13dd4d0a32548dd9ce3761634bb1b51eeefbba9a696f58e0b2dd60e6
    
  3. 用kubectl检查node状态(master节点执行)

    kubectl get node -o wide
    

至此,k8s集群已经安装完成

创建脚本

  1. master脚本:https://github.com/zoujiejun/pub-shell-script/blob/master/kubernetes/k8s-init-master.sh
  2. slave脚本:https://github.com/zoujiejun/pub-shell-script/blob/master/kubernetes/k8s-init-slave.sh
  3. 使用指南:https://github.com/zoujiejun/pub-shell-script/blob/master/kubernetes/README.md
posted @ 2022-03-20 15:34  雷吉胡乱写写的地方  阅读(574)  评论(0编辑  收藏  举报