• Kubeadm方式快速搭建K8S集群1.20版本


    Kubeadm方式搭建K8S集群

    安装要求

    在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

    • 一台或多台机器,操作系统 CentOS7.x-86_x64
    • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】
    • 需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点

    准备环境

    角色IP
    master192.168.137.180
    node1192.168.137.181
    node2192.168.137.182

    网卡配置(如果公有云的服务器请忽略此步骤哦)
    由于小编使用的是vmware,所以需要自己配置网卡信息,使用的是NAT模式可以脱离具体网络

    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="static"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="63f09150-a4ab-4af5-ae44-4d6ece7bd059"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR=192.168.137.180 #根据自己电脑配置
    NETMASK=255.255.255.0 #根据自己电脑配置
    GATEWAY=192.168.137.2 #根据自己电脑配置
    DNS1=8.8.8.8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    然后开始在每台机器上执行下面的命令

    # 关闭防火墙
    systemctl stop firewalld 
    systemctl disable firewalld
    
    # 关闭selinux
    # 永久关闭
    sed -i 's/enforcing/disabled/' /etc/selinux/config  
    
    # 临时关闭
    setenforce 0  
    
    # 关闭swap
    # 临时
    swapoff -a 
    # 永久关闭
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    # 根据规划设置主机名【master节点上操作】
    hostnamectl set-hostname k8smaster
    # 根据规划设置主机名【node1节点操作】
    hostnamectl set-hostname k8snode1
    # 根据规划设置主机名【node2节点操作】
    hostnamectl set-hostname k8snode2
    
    #master添加hosts
    cat >> /etc/hosts << EOF
    192.168.137.180 k8smaster
    192.168.137.181 k8snode1
    EOF
    
    # 将桥接的IPv4流量传递到iptables的链,修改内核参数
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    # 生效
    sysctl --system  
    
    #时间同步
    yum install chrony -y
    systemctl start chronyd && systemctl enable chronyd && chronyc sources
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    安装Docker/kubeadm/kubelet

    所有节点安装Docker/kubeadm/kubelet ,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker

    安装Docker

    首先配置一下Docker的阿里yum源

    cat >/etc/yum.repos.d/docker.repo<<EOF
    [docker-ce-edge]
    name=Docker CE Edge - \$basearch
    baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    然后yum方式安装docker

    # yum安装
    yum -y install docker-ce
    #开机自启然后启动docker
    systemctl enable docker && systemctl start docker
    
    • 1
    • 2
    • 3
    • 4

    配置docker的镜像源

    cat >> /etc/docker/daemon.json << EOF
    {
        "exec-opts": ["native.cgroupdriver=systemd"],
        "registry-mirrors": [
         	"https://rsbud4vc.mirror.aliyuncs.com",
            "https://registry.docker- cn.com",
         	"https://docker.mirrors.ustc.edu.cn",
         	"https://dockerhub.azk8s.cn",
         	"http://hub- mirror.c.163.com",
         	"http://qtid6917.mirror.aliyuncs.com",
         	"https://rncxm540.mirror.aliyuncs.com"
        ]
    }
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    然后启动docker

    systemctl restart docker
    #kubernetes官方建议docker驱动采用systemd
    docker info | grep "Cgroup Driver"
    
    • 1
    • 2
    • 3

    添加kubernetes软件源

    然后我们还需要配置一下yum的k8s软件源

    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

    安装kubeadm,kubelet和kubectl

    由于版本更新频繁,这里指定版本号部署:

    # 安装kubelet、kubeadm、kubectl,同时指定版本
    yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
    
    # 设置开机启动
    systemctl enable kubelet
    
    #查看初始化需要的镜像
    kubeadm config images list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    部署Kubernetes Master【master节点】

    执行在master节点

    kubeadm init --apiserver-advertise-address 0.0.0.0 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.0 --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16
    
    • 1

    由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,【执行上述命令会比较慢,因为后台其实已经在拉取镜像了】,我们 docker images 命令即可查看已经拉取的镜像
    在这里插入图片描述

    当我们出现下面的情况时,表示kubernetes的镜像已经安装成功

    在这里插入图片描述

    使用kubectl工具 【master节点操作】

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 1
    • 2
    • 3

    执行完成后,我们使用下面命令,查看我们正在运行的节点

    kubectl get nodes
    
    • 1

    在这里插入图片描述

    能够看到,目前有一个master节点已经运行了,但是还处于未准备状态,下面我们还需要在Node节点执行其它的命令,将node1和node2加入到我们的master节点上

    加入Kubernetes Node【Slave节点】

    下面我们需要到 node1 和 node2服务器,执行下面的代码向集群添加新节点

    执行在kubeadm init输出的kubeadm join命令:

    注意,以下的命令是在master初始化完成后,每个人的都不一样!!!需要复制自己生成的

    kubeadm join 192.168.137.180:6443 --token 2re9qc.8yxg6qd48sjxzvmy \
        --discovery-token-ca-cert-hash sha256:e4a9da7f45c90372c5af44b8067453789c424fd5edbcfd11951fe64327932fe
    
    • 1
    • 2

    当我们把两个节点都加入进来后,我们就可以去Master节点 执行下面命令查看情况

    kubectl get node
    
    • 1

    在这里插入图片描述

    部署CNI网络插件

    上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问

    # master添加
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    #查看是否run起来
    kubectl get pods -n kube-system
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行后的结果

    运行完成后,我们查看状态可以发现,已经变成了Ready状态了
    在这里插入图片描述

    如果上述操作完成后,还存在某个节点处于NotReady状态,可以在Master将该节点删除

    # master节点将该节点删除
    kubectl delete node k8snode1 
    # 然后到k8snode1节点进行重置
    kubeadm reset
    # 重置完后在加入
    kubeadm join 192.168.137.180:6443 --token 8j6ui9.gyr4i156u30y80xf     --discovery-token-ca-cert-hash sha256:eda1380256a62d8733f4bddf926f148e57cf9d1a3a58fb45dd6e80768af5a500
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    有问题请关注公众号【运维开发实战】小编会及时回复
  • 相关阅读:
    进程【JavaEE初阶】
    为什么EDR需要深度防御来打击勒索软件?
    Swift中运算符相关内容
    项目开发中Maven的单向依赖-2022新项目
    mongo cond $add 相差8小时 ISODate 按时、日、周、天、月、季度、年 对日期进行分组
    python+Django 使用apscheduler实现定时任务 管理调度
    【 C++ 】IO流
    EPSG竟然是个“石油组织”?
    【微信小程序】传参存储
    Python常见操作的时间复杂度
  • 原文地址:https://blog.csdn.net/m0_38004619/article/details/126621904