当前位置:   article > 正文

创建多节点 k8s 集群

创建多节点 k8s 集群

在这里插入图片描述

主机IP系统
master192.168.2.15ubuntu20.04 x64 2C 4G
Worker1192.168.2.16ubuntu20.04 x64 2C 4G
Worker1192.168.2.18ubuntu20.04 x64 2C 4G

使用 iterm2 连接四台服务器 command + shift + i 同时操作

  1. 初始化配置

    关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1
    • 2

    关闭selinux

    sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
    setenforce 0  # 临时
    
    • 1
    • 2

    关闭swap

    swapoff -a  # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
    
    • 1
    • 2

    根据规划分别设置主机名

    hostnamectl set-hostname <hostname>
    master1、worker1、worker2
    
    • 1
    • 2

    在master添加hosts

    cat >> /etc/hosts << EOF
    192.168.2.15 k8s-master1
    192.168.2.18  k8s-worker1
    192.168.2.16 k8s-worker2
    > EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5

    将桥接的 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  # 生效
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    时间同步

    yum install ntpdate -y
    ntpdate time.windows.com
    
    • 1
    • 2
  2. 所有节点安装 Docker

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
    yum -y install docker-ce
    # 设置开机自启并重启
    systemctl enable docker && systemctl start docker
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240326110023468

  3. 配置镜像下载加速器

    vim /etc/docker/daemon.json
    # 添加
    {
      "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    systemctl restart docker
    
    docker info   #查看docker信息,进行确认
    
    # 添加软件源:
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  4. 安装 kubeadm、kubelet、kubectl:

    yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
    systemctl enable kubelet
    
    • 1
    • 2
  5. 部署 k8s-master【master执行】

    kubeadm 部署(需要等上一会),需要在两个 master 上分别执行,apiserver 分别指定自身 IP
    
    kubeadm init \
    --apiserver-advertise-address=192.168.2.15 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.23.0 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16 \
    --ignore-preflight-errors=all
    
    # 解释
    --apiserver-advertise-address 集群通告地址
    --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问
    --kubernetes-version K8s版本,与上面安装的一致
    --service-cidr 集群内部虚拟网络,Pod统一访问入口
    --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
    # 初始化之后,会输出一个join命令,先复制出来,node节点加入master会使用
     kubeadm join 192.168.2.15:6443 --token uyx18p.o5yd0n88fd3rny6i \
    	--discovery-token-ca-cert-hash sha256:5db69227ff23b9073e74d7aa244fa04f9b42aa6c512220612e9bfca1e93fb6d9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  6. 拷贝 k8s 认证文件

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 查看工作节点:
    kubectl get nodes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image-20240326113120860

    注:由于网络插件还没有部署,还没有准备就绪 NotReady,继续操作

  7. 配置 k8s 的 node 节点【node节点操作】

    在 node 节点执行加入命令,执行后在 master 可以看到新增节点

    image-20240326113537365

    默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了。这时就需要重新创建 token,可以直接使用命令快捷生成:

     kubeadm token create --print-join-command
    
    • 1
  8. 部署 CNI 网络插件

    在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。在master节点中执行以下命令进行配置:

    wget https://docs.projectcalico.org/manifests/calico.yaml
    
    • 1

    下载完后还需要修改里面定义 Pod 网络(CALICO_IPV4POOL_CIDR),取消注释,value 与前面 kubeadm init 的 --pod-network-cidr 指定的一样

    image-20240326114731922

    # 修改完后文件后,进行部署:
    kubectl apply -f calico.yaml
    
    kubectl get pods -n kube-system                        #执行结束要等上一会才全部running
    
    • 1
    • 2
    • 3
    • 4

    image-20240326115042360

    注:以后所有 yaml 文件都只在 Master 节点执行。

    安装目录:/etc/kubernetes/

    组件配置文件目录:/etc/kubernetes/manifests/

  9. 部署 Dashboard

    Dashboard 是官方提供的一个 UI,可用于基本管理 K8s 资源。

    YAML下载地址:

     wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
    
    • 1

    默认 Dashboard 只能集群内部访问,修改 Service 为 NodePort 类型,暴露到外部:

    image-20240326125305036

    使用命令判断启动状态

    kubectl get pods --all-namespaces
    kubectl get pods -n kubernetes-dashboard
    
    • 1
    • 2

    image-20240326141400965

    浏览器访问:https://NodeIP:30001

    image-20240326143206185

    报错解决:Dashboard 证书不信任,浏览器无法访问

    1、删除默认的secret,用自签证书创建新的secret
    kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
    kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt -n kubernetes-dashboard
    
    2、修改dashboard.yaml文件,在args下面增加如下两行
       args:
         - --auto-generate-certificates
    	 - --tls-key-file=apiserver.key
    	 - --tls-cert-file=apiserver.crt
    	 
    3、重新应用yaml即可
    kubectl apply -f kubernetes-dashboard.yaml
    
    说明:新版本镜像2.0.3及以上已解决证书信任问题,可任意浏览器访问
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  10. 创建 service account 并绑定默认 cluster-admin 管理员集群角色:

    创建用户

    kubectl create serviceaccount dashboard-admin -n kube-system
    
    • 1

    用户授权

    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
    
    • 1

    获取用户 Token

    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
    
    • 1

    image-20240326143417032

    使用创建的 token 登录 dashboard

    image-20240326143924132

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/327479
推荐阅读
相关标签
  

闽ICP备14008679号