Kubernetes | 02.搭建Kubernetes集群

参考内容

视频:2.安装Kubernetes集群

文档:安装Kubernetes集群

1.集群搭建的三种方式

  1. [minikube] - 仅测试使用

    K8S集群模拟器,部署时只需要一台机器(即只有一个节点),Master和Worker都在一起,仅作测试使用;

  2. [云服务器可视化搭建] - 操作简单,生态齐全,负载均衡器、存储等都配套齐全

    如果机器都是云服务器,则可以通过云平台(阿里云、腾讯云等)可视化搭建,只需要简单几步就可以快速搭建好一个集群;

  3. [裸机安装] - 配置麻烦,缺少生态支持,负载均衡器、云存储等都不支持

    需要至少两台机器(Master × 1 + Worker × 1),需要自己安装Kubernetes组件,需要自行配置;

2.minikube

minikube运行时,模拟启动了一个Ubuntu系统,并基于此系统搭建了一个Master与Worker都在同一台机器的模拟集群。

  1. [安装minikube] 可以直接在网站上下载安装包,也可以在PowerShell中通过指令下载:

    image-20220607112755096

  2. [minikube常用指令]

    # 启动集群
    minikube start
    # 查看节点。kubectl 是一个用来跟 K8S 集群进行交互的命令行工具
    kubectl get node
    # 停止集群
    minikube stop
    # 清空集群
    minikube delete --all
    # 安装集群可视化 Web UI 控制台
    minikube dashboard
    

3.云服务器可视化搭建

大部分云平台(腾讯云、阿里云等)都支持可视化搭建集群。可参考视频 2.安装Kubernetes集群 按步骤搭建。

4.裸机搭建

2. kubernetes集群环境搭建

先准备好两台机器(云服务器或虚拟机都可以),分别为:

  • Master:内网IP - 192.168.245.174
  • Worker1:内网IP - 192.168.245.175
  1. [所有节点 - 配置主机名]

    为了方便集群节点间的直接调用,使用vim指令编辑 /etc/hosts 文件,将 Master 和 Worker1 的信息添加进去;

    # 编辑 /etc/hosts
    vim /etc/hosts
    

    image-20220615182824862

  2. [所有节点 - 同步时间]

    kubernetes要求集群中的节点时间必须精确一致,使用chronyd服务从网络同步各主机的时间;

    # 启动chronyd服务
    systemctl start chronyd
    
    # 让chronyd服务开机自启
    systemctl enable chronyd
    
  3. [所有节点 - 禁用iptable和firewalld服务]

    kubernetes 和 docker 在运行的中会产生大量的 iptables 规则,为了不让系统规则跟它们混淆,直接关闭系统的规则。

    # 关闭firewalld服务
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 关闭iptables服务
    systemctl stop iptables
    systemctl disable iptables
    
  4. [所有节点 - 禁用selinux]

    selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题。

    • 使用vim编辑 /etc/selinux/config ,修改SELINUX的值为disabled;

      # 编辑 /etc/selinux/config
      vim /etc/selinux/config
      

      image-20220615182740016

    • 使用下方指令重启主机;

      # 重启主机
      shutdown -r now
      
  5. [所有节点 - 禁用swap分区]

    swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明;

    • 使用vim编辑 /etc/fstab ,将swap分区对应的配置注释掉;

      # 编辑/etc/fstab
      vim /etc/fstab
      

      image-20220615183136340

    • 使用下方指令重启主机;

      # 重启主机
      shutdown -r now
      
  6. [所有节点 - 修改Linux的内核参数]

    • 使用vim创建 /etc/sysctl.d/kubernetes.conf

      vim /etc/sysctl.d/kubernetes.conf
      

      并在其中添加如下配置,并通过:wq保存修改;

      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      net.ipv4.ip_forward = 1
      
    • 输入下方指令重新加载配置;

      # 重新加载配置
      sysctl -p
      
      # 加载网桥过滤模块
      modprobe br_netfilter
      
  7. [所有节点 - 配置ipvs功能]

    在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块;

    # 1.安装ipset和ipvsadm
    yum install ipset ipvsadm -y
    
    # 2.添加需要加载的模块写入脚本文件
    cat <<EOF> /etc/sysconfig/modules/ipvs.modules
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    
    # 3.为脚本添加执行权限
    chmod +x /etc/sysconfig/modules/ipvs.modules
    
    # 4.执行脚本文件
    /bin/bash /etc/sysconfig/modules/ipvs.modules
    
  8. [所有节点 - 安装Docker] 特别注意的是,必须安装对应版本的Docker;

    # 1.下载Docker镜像源
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
    # 2.查看当前镜像源中支持的docker版本
    yum list docker-ce --showduplicates
    
    # 3.安装特定版本的docker-ce
    # 必须添加参数--setopt=obsoletes=0,否则yum会自动安装更高版本
    yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
    
    # 4.添加配置文件
    # Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
    mkdir /etc/docker
    cat <<EOF> /etc/docker/daemon.json
    {
    	"exec-opts": ["native.cgroupdriver=systemd"],
    	"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
    }
    EOF
    
    # 5.启动Docker
    systemctl restart docker
    systemctl enable docker
    
  9. [所有节点 - 安装Kubernetes组件]

    • 添加K8S镜像源,通过vim创建 /etc/yum.repos.d/kubernetes.repo

      vim /etc/yum.repos.d/kubernetes.repo
      

      添加如下配置:

      [kubernetes]
      name=Kubernetes
      baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgchech=0
      repo_gpgcheck=0
      gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      			http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      
    • 安装kubeadm、kubelet和kubectl

      yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
      
    • 配置kubelet的cgroup,通过vim编辑 /etc/sysconfig/kubelet

      vim /etc/sysconfig/kubelet
      

      添加如下配置:

      KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
      KUBE_PROXY_MODE="ipvs"
      
    • 设置kubelet开机自启

      systemctl enable kubelet
      
  10. [所有节点 - 拉取集群镜像]

    # 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
    kubeadm config images list
    
    # 下载镜像
    # 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
    images=(
    	kube-apiserver:v1.17.4
    	kube-controller-manager:v1.17.4
    	kube-scheduler:v1.17.4
    	kube-proxy:v1.17.4
    	pause:3.1
    	etcd:3.4.3-0
    	coredns:1.6.5
    )
    
    for imageName in ${images[@]};do
    	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
    done
    
  11. [Master - 安装网络插件]

    • 输入下方指令安装网络插件;

      # 安装下方指令安装网络插件
      wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      
    • 通过vim创建并配置文件 /etc/cni/net.d/10-flannel.conf

      # 逐级创建目录
      mkdir /etc/cni
      mkdir /etc/cni/net.d
      
      # 创建配置文件
      vim /etc/cni/net.d/10-flannel.conf
      
      {
          "name":"cbr0",
          "cniVersion":"0.3.1",
          "type":"flannel",
          "deledate":{
              "hairpinMode":true,
              "isDefaultGateway":true
          }
      }
      
    • 重置kubeadm,重启机器

      # 在master节点之外的节点进行操作
      kubeadm reset
      
      # 重启机器
      shutdown -r now
      

  1. [Master - 将k8s的Master与本机绑定] 设置环境变量,并重新加载即可;

    # 添加环境变量
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
    
    # 使新添加的环境变量生效
    source /etc/profile
    
  2. [Master - 创建集群]

    在Master节点执行下方指令,注意替换 **–apiserver-advertise-address **参数的值为Master机器的IP地址

    kubeadm init \
    	--apiserver-advertise-address=192.168.245.174 \
    	--image-repository registry.aliyuncs.com/google_containers \
    	--kubernetes-version=v1.17.4 \
    	--service-cidr=10.96.0.0/12 \
    	--pod-network-cidr=10.244.0.0/16
    

    随后会输出加入集群的指令,我们将其记录起来,后续Worker节点加入集群时需要用到;

    image-20220616151130385

  3. [Worker1 - 加入集群]

    • Worker1节点输入下方指令进行各项网络配置,随后重启服务器;

      # 打开IP转发功能
      echo "1" > /proc/sys/net/ipv4/ip_forward
      
      # 重置kubeadm
      kubeadm reset -y
      
      # 其他网络配置
      systemctl stop kubelet
      systemctl stop docker
      rm -rf /var/lib/cni/
      rm -rf /var/lib/kubelet/*
      rm -rf /etc/cni/
      ifconfig cni0 down
      ifconfig flannel.1 down
      ifconfig docker0 down
      ip link delete cni0
      ip link delete flannel.1
      # 重启kubelet
      systemctl restart kubelet
      # 重启docker
      systemctl restart docker
      
      # 重启服务器
      shutdown -r now
      
    • 复制方才创建集群时输出的指令,在Worker1节点中执行以加入集群:

      # SHA256的值是各有不同的
      kubeadm join 192.168.245.174:6443 --token iq6c98.d621qyvp9652ix2c \
          --discovery-token-ca-cert-hash sha256:d872f1a0656a172e14f95231dd3xxxxxxxxxxxxxxxebadab11cb1a95954f0ec7
      

      image-20220616152113840

  4. [Master - 重新部署网络] 在 Master机器 重新部署网络,以解决节点的NotReady问题:

    搭建k8s集群出现所有节点NotReady问题

    # 重新部署网络
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
  5. [Master - 查看结果] 输入下方指令,查看各节点是否正常运作。worker节点会慢一些,请耐心等待(我等了10min)

    kubectl get nodes
    
    image-20220616180630848
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值