• k8s部署


    环境搭建

    本次环境搭建需要安装三台Centos服务器(一主二从),k8s采用1.24.3版本。
    环境初始化
    1)检查操作系统的版本

    cat /etc/redhat-release
    
    • 1

    2) 主机名解析

    # 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容 
    192.168.121.153 master 
    192.168.121.152 node1 
    192.168.121.151 node2
    
    • 1
    • 2
    • 3
    • 4

    3) 时间同步

    # 安装chrony
     yum install chrony
     vim /etc/chrony.conf
     server ntp1.aliyun.com iburst    ##修改
     
     # 启动chronyd服务 
     systemctl start chronyd
    
    # 设置chronyd服务开机自启 
    systemctl enable chronyd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4) 禁用iptables和firewalld服务

    # 1 关闭firewalld服务
    systemctl stop firewalld 
    systemctl disable firewall
    # 2 关闭iptables服务
    systemctl stop iptables
    systemctl disable iptables
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5) 禁用selinux

    vim /etc/selinux/conf
    SELINUX=disabled
    
    • 1
    • 2

    6) 禁用swap分区

    vim /etc/fstab
    注释最后一行
    
    • 1
    • 2

    在这里插入图片描述
    7)升级操作系统内核

    # 导入elrepo gpg key
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
     安装elrepo YUM源仓库
      yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
      # 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
      yum --enablerepo="elrepo-kernel" -y install kernel-ml.x86_64
      # 设置grub2默认引导为0
      grub2-set-default 0
      重新生成grub2引导文件
      grub2-mkconfig -o /boot/grub2/grub.cfg
      # 更新后,需要重启,使用升级的内核生效
       reboot
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    8)修改linux的内核参数

    #编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置: 
    
    vim /etc/sysctl.d/kubernetes.conf
    net.bridge.bridge-nf-call-ip6tables = 1 
    net.bridge.bridge-nf-call-iptables = 1 
    net.ipv4.ip_forward = 1 
    vm.swappiness=0
    # # 重新加载配置
    sysctl -p /etc/sysctl.d/kubernetes.conf
    # 加载网桥过滤模块
    modprobe br_netfilter
    # 查看网桥过滤模块是否加载成功 
    lsmod | grep br_netfilter
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    9)配置ipvs功能
    在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
    两者比较的话,ipvs的性能明显要高一些

    	# 1 安装ipset和ipvsadm  
    yum install ipset ipvsadm -y
    # 2 添加需要加载的模块写入脚本文件 
    cat < /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 
    EOF
    # 3 为脚本文件添加执行权限 
    chmod +x /etc/sysconfig/modules/ipvs.modules	
    # 4 执行脚本文件
     /bin/bash /etc/sysconfig/modules/ipvs.modules
    # 5 查看对应的模块是否加载成功 
     lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    基础环境

    kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源,本文使用阿里云YUM源

    cat < /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 clean all && yum makecache
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    # 集群软件安装 
    安装kubeadm、kubelet和kubectl
    yum install kubeadm kubelet kubectl -y
    
    # 查看所有的可用版本 
    yum list kubeadm kubelet kubectl --showduplicates | sort -r
    
    # 默认安装的版本就是最新版1.24.X,当然也可以指定版本安装 ,如 yum install kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 
    yum install kubeadm kubelet kubectl 
    #安装后查看版本 
    kubeadm version 
    kubeadm version: &version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.2", GitCommit:"f66044f4361b9f1f96f0053dd46cb7dce5e990a8", GitTreeState:"clean", BuildDate:"2022-06-15T14:20:54Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"} 
    
    # 配置kubelet的cgroup 
    # 为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。 $ cat < /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" EOF 
    
    # 设置kubelet开机自启 
    systemctl enable kubelet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    做完基础环境,建议创建快照,后续会分别使用三种不同方式创建集群。

    集群创建方式1:containerd
    安装containerd
    直接安装docker-ce源 
    # step 1: 安装必要的一些系统工具	
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # Step 2: 添加软件源信息 
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo 
    # Step 3 
    sed  -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 
    # Step 4:查询软件包 
    yum list | grep containerd
    
    # Step 5:安装软件包 
    yum install containerd -y
    # Step 6:初始化默认配置 
    containerd config default | tee /etc/containerd/config.toml
    
    # Step 7:修改containerd配置更改
    cgroup sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml 
    # Step 8:修改镜像源 
    sed -i "s#k8s.gcr.io#registry.aliyuncs.com/google_containers#g" /etc/containerd/config.toml
    # Step 9:配置crictl 
    cat <
    • 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
    初始化 Master 节点

    通过配置文件初始化
    1)生成并修改配置文件

    # 生成配置文件 
    kubeadm config print init-defaults > kubeadm.yml
    
    • 1
    • 2

    修改如下配置:

    advertiseAddress:为控制切面地址,( Master 主机 IP )
    criSocket:为 containerd 的 socket 文件地址
    imageRepository:阿里云镜像代理地址,否则拉取镜像会失败
    kubernetesVersion:为 k8s 版本
    注意:一定要配置镜像代理,否则会由于防火墙问题导致集群安装失败
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2)初始化 K8S 集群

    # 查看所需镜像列表 
    kubeadm config images list --config kubeadm.yml 
    # 拉取镜像 
    kubeadm config images pull --config kubeadm.yml 
    # 根据配置文件启动 kubeadm 初始化 k8s 
    kubeadm init --config=kubeadm.yml --upload-certs --v=6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果初始化失败:

    #iptables里面没有写入东西
    modprobe br_netfilter
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    添加 Worker 节点

    两个节点都需要添加!

    #iptables里面没有写入东西
    	modprobe br_netfilter
    	echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    	echo 1 > /proc/sys/net/ipv4/ip_forward	
    kubeadm join 192.168.121.153:6443 --token 
    
    abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:acad442584595756a6e7f57ca2886ab3819b3154cd0bd26943032fae3b44aa5a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    安装网络插件

    没有安装之前查看集群节点

    kubectl get nodes
    
    NAME     STATUS     ROLES           AGE     VERSION
    master   NotReady   control-plane   10m     v1.24.3
    node2    NotReady             7m36s   v1.24.3
    node3    NotReady             5m23s   v1.24.3
    
    kubectl get nodes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    下载,这里我们安装 flannel

    wget http://down.i4t.com/k8s1.24/kube-flannel.yml
    # 根据需求修改网卡配置,这里以eth0为主 
    containers: 
    - name: kube-flannel 
      image: rancher/mirrored-flannelcni-flannel:v0.17.0 
      command: 
      - /opt/bin/flanneld 
      - args: 
      - - --ip-masq 
      - - --kube-subnet-mgr 
      - - --iface=eth0 # 如果是多网卡的话,指定内网网卡的名称
    
    执行:
    	
    kubectl apply -f kube-flannel.yml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    kubectl命令出现错误“The connection to the server localhost:8080 was refused”
    解决方法:

    1.将主节点(master)中的“/etc/kubernetes/admin.conf”文件拷贝到从节点相同目录下
    2.配置环境变量
    
    	echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    3.立即生效
    	source ~/.bash_profile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    服务部署
    # 部署nginx
    kubectl create deployment nginx --image=nginx:1.14-alpine
    
    # 暴露端口
    kubectl expose deployment nginx --port=80 --type=NodePort
    
    # 查看服务状态
    kubectl get pods,service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    TypeScript数组的多种定义方式
    Anaconda 使用虚拟环境命令集合
    Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
    SystemVerilog学习(2)——数据类型
    洛谷算法题解:Bear and Bowling
    React函数式写法和类式写法的区别(以一个计数器功能为例子)
    DependsOn注解失效问题排查
    Java常用类方法总结
    说一下JVM创建对象的流程?
    基于springboot实现的rabbitmq消息确认
  • 原文地址:https://blog.csdn.net/weijiajia123456/article/details/126343193