美文网首页
k8s集群搭建

k8s集群搭建

作者: 我可能是个假开发 | 来源:发表于2023-09-04 19:52 被阅读0次

    一、环境准备

    1.检查系统版本

    cat /etc/redhat-release

    image.png

    2.配置host解析:

    编辑 /etc/hosts文件

    192.168.112.100 master
    192.168.112.101 node1
    192.168.112.102 node2
    
    image.png

    验证是否配置成功

    ping master
    ping node1
    ping node2
    
    image.png

    3.时间同步

    k8s要求集群节点时间必须一致。
    设置

    • systemctl start chronyd
    • 设置为开机自启动:systemctl enable chronyd

    验证是否成功 date

    image.png

    4.禁用iptables和firewalld服务

    k8s和docker在运行中会产生大量的iptables规则,为了不让系统规则与其混淆,直接关闭系统的规则:
    关闭firewalld

    • systemctl stop firewalld
    • systemctl disable firewalld

    关闭iptables

    • systemctl stop iptables
    • systemctl disable iptables
      image.png

    5.禁用selinux

    selinux是linux系统的安全服务,不关闭可能会产生一系列问题。
    编辑 /etc/selinux/config文件 ,修改SELINUX=disabled

    • 永久关闭selinux,需要重启
    • 临时关闭selinux,重启之后,无效:setenforce 0
    • 查看selinux是否开启:getenforce
      image.png

    6.关闭swap分区

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

    • 编辑分区配置文件/etc/fstab,注释掉swap分区(修改后需重启):# /dev/mapper/centos-swap
    • 临时关闭swap分区,重启之后,无效:swapoff -a
      image.png
    image.png

    7.修改linux内核参数

    修改linux的内核参数,添加网桥过滤和地址转发功能

    • 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配器
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    
    • 重新加载配器 sysctl -p
    • 加载网桥过滤模块 modprobe br_netfilter
    • 查看网桥过模块是否加载成功lsmod | grep br_netfilter
    image.png

    8.配置ipvs

    在kubernetes中service有两种代理模型:

    • 基于iptables
    • 基于ipvs

    两者比较的话,ipvs的性能要高一些,但是如果要使用它,需要手动载入ipvs模块

    • 在每个节点安装ipset和ipvsadm:yum -y install ipset ipvsadmin
    • 在所有节点执行如下脚本:
    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
    
    • 添加执行权限:chmod +x /etc/sysconfig/modules/ipvs.modules
    • 执行脚本:bin bash /etc/sysconfig/modules/ipvs.modules
    • 检查是否加载:lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    image.png

    9.重启三台机器

    reboot

    二、安装docker

    1.切换镜像源

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

    image.png

    2.查看当前镜像源中支持的docker版本

    yum list docker -ce --showduplicates

    3.安装特定版本的docker-ce

    yum install --setopt-obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

    4.添加配置文件

    Docker在默认情况下使用的Cgroup 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
    
    image.png
    5.启动docker

    systemctl restart docker
    systemctl enable docker

    image.png

    6.检查docker状态和版本

    docker version

    image.png

    三、安装kubernetes组件

    1.切换成国内的镜像源

    编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置 :

    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=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
    

    2. 安装kubeadm、kubelet和kubectl

    yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
    

    3. 配置kubelet的cgroup

    编辑/etc/sysconfig/kubelet,添加下面的配置

    KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
    KUBE_PROXY_MODE="ipvs"
    

    4.设置kubelet开机自启

    systemctl enable kubelet
    
    image.png

    四、准备集群镜像

    查看镜像:kubeadm config images list

    下载镜像

    1.定义镜像

    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
    )
    

    2.循环执行

    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
    
    image.png

    3.查看
    docker images

    image.png

    五、集群初始化

    对集群进行初始化,并将node节点加入到集群中。
    在master中执行:

    1.创建集群:

    [root@master ~]# kubeadm init \
        --kubernetes-version=v1.17.4 \
        --pod-network-cidr=10.244.0.0/16 \
        --service-cidr=10.96.0.0/12 \
        --apiserver-advertise-address=192.168.108.100
    
    image.png

    2.创建必要文件

    [root@master ~]# mkdir -p $HOME/.kube
    [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    3.节点加入集群

    在要加入这个集群的节点中执行

    kubeadm join 192.168.108.100:6443 --token uj1ggl.9as18bj9m7z7k5pm \
        --discovery-token-ca-cert-hash sha256:1fe8d18cf15a7aa17796048c195d1b58f1743dba1de33266f41ae74f25f68c7f
    
    image.png

    在master节点中查看集群所有节点:


    image.png

    六、安装网络插件

    1.获取fannel的配置文件

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    2.使用配置文件启动fannel

    kubectl apply -f kube-flannel.yml
    kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可

    3.查看集群节点的状态

    kubectl get nodes

    image.png

    七、服务部署

    在kubernetes集群中部署一个nginx程序,测试下集群是否在正常工作

    1. 部署nginx

    kubectl create deployment nginx --image=nginx:1.14-alpine

    2.暴露端口

    kubectl expose deployment nginx --port=80 --type=NodePort

    3. 查看服务状态

    kubectl get pods,service

    image.png

    4.访问部署的nginx服务

    http://192.168.108.102:31387/


    image.png

    相关文章

      网友评论

          本文标题:k8s集群搭建

          本文链接:https://www.haomeiwen.com/subject/wawuydtx.html