• kubernetes集群安装


    一、基础简介

    1、kubeadm是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署

    2、环境要求

    • 一台或多台机器,操作系统CentOS 7.x-86_x64

    • 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+

    • 集群内各个机器之间能相互通信

    • 集群内各个机器可以访问外网,需要拉取镜像

    • 禁止swap分区

    3、节点规划如下

    主机名 ip地址 部署组件
    k8s-master01 192.168.3.17 kube-apiserver、kube-scheduler、kube-controller-manager、etcd、kubelet、kubeadm、kubectl
    k8s-node01 192.168.3.18 kubelet、kubeadm、kubectl
    k8s-node02 192.168.3.19 kubelet、kubeadm、kubectl

    4、组件介绍

    • kube-apiserver:所有服务访问统一入口
    • kube-controller-manager:维持副本期望数目
    • kube-scheduler:负责介绍任务,选择合适的节点进行分配任务
    • etcd:键值对数据库 储存K8S集群所有重要信息(持久化)
    • kubelet:直接跟容器引擎交互实现容器的生命周期管理
    • kube-proxy:负责写入规则至 iptables、ipvs 实现服务映射访问的
    • coredns:可以为集群中的SVC创建一个域名IP的对应关系解析
    • ingress-controller:官方只能实现四层代理,ingress 可以实现七层代理

    5、架构图

    二、系统初始化

    1、设置主机名

    # 在master节点执行
    hostnamectl set-hostname k8s-master01
    
    # 在work01节点执行
    hostnamectl set-hostname k8s-node01
    
    # 在work02节点执行
    hostnamectl set-hostname k8s-node02
    

    2、配置主机和IP映射

    cat >> /etc/hosts << EOF
    192.168.3.17 k8s-master01
    192.168.3.18 k8s-node01
    192.168.3.19 k8s-node02
    EOF
    

    3、安装依赖包

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

    4、设置防火墙为iptables并设置空规则

    # 关闭防火墙
    systemctl stop firewalld && systemctl disable firewalld
    
    # 清理防火墙规则,设置默认转发策略
    iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
    
    # 需要开启防火墙的可以走这一步
    # systemctl stop firewalld && systemctl disable firewalld
    # yum install -y iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
    

    5、关闭 selinux 和 swap交换分区

    • 打开 /etc/fstab 注释掉 swap行,临时关闭:swapoff -a
    • 打开 /etc/sysconfig/selinux,将SELINUX=enforcing修改为SELINUX=disabled,临时关闭:setenforce 0
    # 禁用swap分区
    swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
    # 禁用 selinux
    setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    

    6、配置内核参数,将桥接的IPv4流量传递到iptables的链

    # 加载模块
    modprobe br_netfilter
    
    cat > /etc/sysctl.d/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
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_watches=89100
    fs.file-max=52706963
    fs.nr_open=52706963
    net.ipv6.conf.all.disable_ipv6=1
    net.netfilter.nf_conntrack_max=2310720
    EOF
    
    # 重新加载配置
    sysctl -p /etc/sysctl.d/kubernetes.conf
    

    7、时间同步

    yum install ntpdate -y
    ntpdate time.windows.com
    

    8、关闭不需要的服务

    systemctl stop postfix && systemctl disable postfix
    

    9、升级linux内核

    • CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定
    # 查看内核版本
    cat /proc/version
    
    # 升级版本
    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
    yum --enablerepo=elrepo-kernel install -y kernel-lt
    
    #设置开机从新内核启动(设置如下图版本号)
    grub2-set-default 'CentOS Linux (5.4.193-1.el7.elrepo.x86_64) 7 (Core)'
    
    #重启电脑
    shutdown -r now
    
    • 升级成功如下图

    三、Kubeadm安装

    1、k8s配置使用ipvs为代理,kube-proxy开启ipvs的前置条件

    # 加载模块
    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
    modprobe -- br_netfilter
    EOF
    
    # 修改访问权限
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules
    

    2、配置国内yum源

    curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 或以下方式
    # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    # rm -rf /var/cache/yum && yum makecache && yum -y update && yum -y autoremove
    

    3、安装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
    
    # 更新并安装Docker-ce
    yum update -y && yum install -y docker-ce
    
    # 创建docker目录
    mkdir /etc/docker
    
    # 配置daemon(添加阿里云 YUM 软件源)
    cat > /etc/docker/daemon.json << EOF
    {
      "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "insecure-registries":["192.168.3.12:6007"]
    }
    EOF
    
    # 重启docker 服务
    systemctl daemon-reload && systemctl restart docker && systemctl enable docker
    
    #查看docker版本
    docker --version
    

    4、配置k8s的阿里云yum源

    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
    

    5、安装 kubeadm、kubelet 和 kubectl , 每个节点都需要安装

    • Kubelet:运行在cluster所有节点上,负责启动pod和容器
    • Kubeadm:用于初始化cluster的一个工具
    • Kubectl:命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件
    # 安装指定版本
    yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 --disableexcludes=kubernetes
    
    # 安装最新版本
    # yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
    # 启动 kubelet 服务
    systemctl start kubelet && systemctl enable kubelet
    
    # 查看已经安装的版本
    kubelet --version
    

    6、初始化主节点(只在master节点上执行)

    • kubernetes-version:K8s版本,与上面安装的一致
    • apiserver-advertise-address:master主机内网IP地址
    • image-repository:指定阿里云镜像仓库地址。由于kubeadm 默认从官网http://k8s.grc.io下载所需镜像,国内无法访问,因此需要指定阿里云镜像仓库地址
    • service-cidr:集群内部虚拟网络,Pod统一访问入口
    • pod-network-cidr: 定义pod网段为:10.244.0.0/16
    kubeadm init \
    --kubernetes-version=1.23.1 \
    --apiserver-advertise-address=192.168.3.17 \
    --image-repository registry.aliyuncs.com/google_containers \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    
    • 如果安装报错,可以通过以下命令查看日志
    journalctl -xeu kubelet 
    或者 
    journalctl -xeu kubelet -l
    
    • 安装完成,如下图

    7、配置Kubectl工具

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

    8、查看集群状态

    • 通过以下命令查看集群信息,发现已经有master01节点了,但是状态为:NotReady,原因为未安装flannel插件,如下图
    # 查看节点状态
    kubectl get node
    
    # 查看system下的pods
    kubectl get pods -n kube-system
    


    9、部署 Flannel网络

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    # 如果这个文件无法访问,可以直接下载下来,然后在本地运行
    
    # github下载地址
    # https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
    
    # 运行资源文件
    # kubectl apply -f kube-flannel.yml
    
    • 执行后,需要等待一会,直到flannel和coredns运行即可,如下图
    # 查看pod实时更新状态
    kubectl get pod -n kube-system -w
    



    四、node节点加入集群

    1、master节点创建token

    kubeadm token create --print-join-command
    
    # 查询token列表
    # kubeadm token list
    
    # token永不失效
    # kubeadm token create --ttl 0
    

    如图:

    2、node节点执行kubeadm join命令加入集群,如下图

    kubeadm join 192.168.3.17:6443 --token 2yedu7.ouajpjva3kb8pib0 \
            --discovery-token-ca-cert-hash sha256:8d799bd680ea04626d3146d5cd37aee2b8623bc4ec92050a6d620f93e4e38fe7
    

    3、在master节点上查看node状态,发现已经有node01节点了,状态为NotReady,需要等待flannel初始化完成即可,如下图

    五、参考

  • 相关阅读:
    【python】数据加载与存储
    因为ViewPager与SwipeRefreshLayout冲突导致RecyclerView或者其他列表布局的item无法点击的问题
    通过ip信息获取电脑mac地址: 插网线时的mac 蓝牙的mac 无线网卡mac 各种虚拟机的mac
    HDR图像处理软件 Photomatix Pro mac中文版新增功能
    大模型RLHF算法更新换代,DeepMind提出自训练离线强化学习框架ReST
    【windows】实战部署一(安装)SVNserver服务端+SVNclient客户端
    vue-json-editor
    G-DetKD
    泊松分布简要介绍
    H3C交换机环路保护
  • 原文地址:https://www.cnblogs.com/lvlinguang/p/16270133.html