• k8s集群配置


    前言:本配置笔记根据此视频尚硅谷Kubernetes教程(K8s入门到精通)而来,有兴趣的可以自己学习一下,有问题也可以来这里交流

    配置VMware环境

    创建三台服务器,分别是master、node01、node02节点,服务器的配置如下

    • 导航栏 – 编辑 – 虚拟网络编辑器设置
      在这里插入图片描述
      在这里插入图片描述

    网卡配置文件
    在这里插入图片描述
    基本配置
    在这里插入图片描述
    Linux版本是CentOS-7-x86_64-Everything-1908.iso

    最后要保证三台服务器可以使用xshell或者MobaXterm连接

    注意:视频中要求三个节点使用仅本机网络,koolshare使用nat和仅本机两种网络,另外三个节点的网卡配置静态ip形式,本人使用这种方式无法上网,所以最终网卡使用DHCP形式,网络使用Nat模式,实现轻松上网

    在这里插入图片描述


    配置服务器相关信息

    批量操作时建议使用MobaXterm的MultiExec操作,十分方便
    在这里插入图片描述

    在这里插入图片描述
    ,十分方便

    设置系统主机名以及 Host 文件的相互解析

    vim /etc/hosts
    192.168.66.129 k8s-master
    192.168.66.189 k8s-node01
    192.168.66.201 k8s-node02
    
    • 1
    • 2
    • 3
    • 4

    hostnamectl set-hostname k8s-master01 同样可以永久生效

    安装依赖包

    yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
    
    • 1

    设置防火墙为 Iptables 并设置空规则

    systemctl stop firewalld && systemctl disable firewalld 
    yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
    
    • 1
    • 2

    关闭 SELINUX和swap

    swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab setenforce 0 && sed -i 
    's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    
    • 1
    • 2

    调整内核参数,对于 K8S

    cat > kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1 
    net.bridge.bridge-nf-call-ip6tables=1 
    net.ipv4.ip_forward=1 
    net.ipv4.tcp_tw_recycle=0 
    vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它 
    vm.overcommit_memory=1 # 不检查物理内存是否够用 
    vm.panic_on_oom=0 # 开启 OOM 
    fs.inotify.max_user_instances=8192 
    fs.inotify.max_user_watches=1048576 
    fs.file-max=52706963 
    fs.nr_open=52706963 
    net.ipv6.conf.all.disable_ipv6=1 
    net.netfilter.nf_conntrack_max=2310720 
    EOF 
    cp kubernetes.conf /etc/sysctl.d/kubernetes.conf 
    sysctl -p /etc/sysctl.d/kubernetes.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    调整时区

    # 设置系统时区为 中国/上海 
    timedatectl set-timezone Asia/Shanghai 
    # 将当前的 UTC 时间写入硬件时钟 
    timedatectl set-local-rtc 0 
    # 重启依赖于系统时间的服务 
    systemctl restart rsyslog 
    systemctl restart crond
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    关闭系统不需要服务

    systemctl stop postfix && systemctl disable postfix
    
    • 1

    设置 rsyslogd 和 systemd journald

    mkdir /var/log/journal # 持久化保存日志的目录 
    mkdir /etc/systemd/journald.conf.d 
    cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF 
    [Journal] 
    # 持久化保存到磁盘 
    Storage=persistent 
    # 压缩历史日志 
    Compress=yes 
    SyncIntervalSec=5m 
    RateLimitInterval=30s 
    RateLimitBurst=1000 
    # 最大占用空间 10G 
    SystemMaxUse=10G 
    # 单日志文件最大 200M 
    SystemMaxFileSize=200M 
    # 日志保存时间 2MaxRetentionSec=2week 
    # 不将日志转发到 syslog 
    ForwardToSyslog=no 
    EOF 
    systemctl restart systemd-journald
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    升级系统内核为 5.4

    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 
    # 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装 一次! 
    yum --enablerepo=elrepo-kernel install -y kernel-lt 
    
    #查看系统内部内核数
    cat /boot/grub2/grub.cfg |grep menuentry
    
    # 设置开机从新内核启动 ,具体可以从grub.cfg的文件中获取
    grub2-set-default 'CentOS Linux (5.4.207-1.el7.elrepo.x86_64) 7 (Core)'
    
    #查看默认启动项
    grub2-editenv list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    保证重启时显示如下信息
    在这里插入图片描述

    kube-proxy开启ipvs的前置条件
    注意:如果是高版本的内核需要将nf_conntrack_ipv4换成nf_conntrack,否则会报错modprobe: FATAL: Module nf_conntrack_ipv4 not found.

    modprobe br_netfilter
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&
    lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    安装 Docker 软件
    注意: lz在这里安装的最新版本docker,但由于新版本k8s已经弃用docker,所以需要安装对应版本的docker,lz是在这里安装的最新版本,然后再降低docker到可用版本

    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 update -y && yum install -y docker-ce
    
    ## 创建 /etc/docker 目录
    mkdir /etc/docker
    
    # 配置 daemon.json,设置cgroup的管理方式为systemd
    cat > /etc/docker/daemon.json <<EOF
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    	"max-size": "100m"
      }
    }
    EOF
    
    mkdir -p /etc/systemd/system/docker.service.d
    
    # 重启docker服务
    systemctl daemon-reload && systemctl restart docker && systemctl enable docker
    
    • 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

    安装 Kubeadm (主从配置)

    创建kubernets的yum的repo文件

    cat <<EOF > /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
    EOF
    
    # 使用yum下载kubeadm、kubectl、kubelet服务并设置自启
    yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
    systemctl enable kubelet.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    初始化主节点

    上传kubeadm-basic.images.tar.gz文件到服务器/root目录下,使用tar -zxvf kubeadm-basic.images.tar.gz解压,编写导入脚本load-images.sh

    #!/bin/bash
    ls /root/kubeadm-basic.images > /tmp/image-list.txt
    cd /root/kubeadm-basic.images
    
    for i in $( cat /tmp/image-list.txt )
    do
    	docker load -i $i
    done 
    
    
    rm -rf /tmp/image-list.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    授权脚本后执行

    chmod a+x load-images.sh
    
    • 1

    在这里插入图片描述
    使用指令将解压后的目录和脚本传到子节点,然后运行load-images的脚本

    scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root
    scp -r kubeadm-basic.images load-images.sh root@k8s-node02:/root
    
    • 1
    • 2

    初始化主节点

    # 将kubeadm的默认模板文件输出打印到kubeadm-config.yaml文件中
    kubeadm config print init-defaults > kubeadm-config.yaml
    
    # 编辑kubeadm-config.yaml文件,修改advertiseAddress、kubernetesVersion参数,增加podSubnet参数、apiVersion参数以下的内容,将k8s改成ipvs的模式
    localAPIEndpoint:
    advertiseAddress: 192.168.66.129
    kubernetesVersion: v1.15.1
    networking:
    podSubnet: "10.244.0.0/16"
    serviceSubnet: 10.96.0.0/12
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    featureGates:
      SupportIPVSProxyMode: true
    mode: ipvs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    初始化安装、自动颁发证书

    kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    完成日志中的提示操作

    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 node
    
    • 1

    在这里插入图片描述
    NotReady状态是因为k8s需要一个扁平化的网络管理,而目前节点无法构建网络插件Flannel

    部署网络
    创建对应的文件目录与层级,kubeadm-config.yaml与kubeadm-init.log文件从/root中移过去的
    在这里插入图片描述

    到/root/install-k8s/plugin/flannel目录下创建获取flannel文件信息

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --no-check-certificate
    
    • 1

    根据资源清单创建flannel

     kubectl create -f kube-flannel.yml
    
    • 1

    查看对应的pod是否正在运行

    kubectl get pod -n kube-system
    
    • 1

    查看节点状态

    kubectl get node
    
    • 1

    在这里插入图片描述
    有些网络不好的小伙伴可以手动下载一下

    链接: flannel插件下载
    提取码: c738

    如果查看不到flannel的pod可以参考一下lz的帖子解决K8S节点NotReady状态

    加入主节点以及其余工作节点 (在工作节点上操作)

    kubeadm join 192.168.66.129:6443 --token s43a1z.8et2m6s7zrv96cgs --discovery-token-ca-cert-hash sha256:c88c2c17489e7dff798b0fc64cdd6d62278f2a323e65b462e30330a6cc878057
    
    • 1

    注意,192.168.66.129为主节点IP,后面的hash是启动的时候生成的数据,如果没有保存下来,可以使用指令重新生成,master节点上执行命令kubeadm token create --ttl 0 --print-join-command

    lz加入的时候报错了[preflight] Running pre-flight checks [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.17. Latest validated version: 18.09
    在这里插入图片描述

    可以参考这篇文章对docker进行降低版本处理加入k8s集群报错this Docker version is not on the list of validated versions: 20.10.17. Latest validated…

    降级后重试

    加入主节点集群中
    在这里插入图片描述
    pod状态
    在这里插入图片描述
    节点状态
    在这里插入图片描述


    到此环境算是配置完成,下一步开始测试环境

    ******************余生还长,切勿惆怅***************

  • 相关阅读:
    52单片机独立键盘控制数码管计数
    1.4.16 实验16:ABR汇总
    8.神经元和需求预测
    2022年全国部分省市跨境电商交易规模汇总
    LeetCode_二分搜索_简单_367.有效的完全平方数
    【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
    CDGA|从平台自治到规范化的数据治理
    从React源码角度看useCallback,useMemo,useContext
    (1) Java后端从0硬撸vite3+vue3+ts项目 | 起步
    问:TCP/IP协议栈在内核态的好还是用户态的好
  • 原文地址:https://blog.csdn.net/qq_42910468/article/details/126001818