暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes(k8s) 1.23.6版本基于Docker的集群安装部署

巴韭特锁螺丝 2023-10-31
222

1. 部署方式

有几下几种部署方式:

  • minikube:一个用于快速搭建单节点的kubernetes工具

  • kubeadm:一个用于快速搭建kubernetes集群的工具

  • 二进制包:从官网上下载每个组件的二进制包,依次去安装

这里我们选用kubeadm方式进行安装

2. 集群规划

Kubernetes有一主多从或多主多从的集群部署方式,这里我们采用一主多从的方式

服务器名称服务器IP角色CPU(最低要求)内存(最低要求)
k8s-master192.168.23.160master2核2G
k8s-node1192.168.23.161node2核2G
k8s-node2192.168.23.162node2核2G

3. docker安装

这里需要安装与Kubernetes兼容的docker版本,参考链接:

  1. https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md

  2. https://github.com/kubernetes/kubernetes/blob/v1.23.6/build/dependencies.yaml

containerd也需要和Docker兼容,参考链接:

  1. https://docs.docker.com/engine/release-notes/

  2. https://github.com/moby/moby/blob/v20.10.7/vendor.conf

所以这里Docker安装20.10.7版本,containerd安装1.4.6版本

Docker的安装参考centos7基于yum repository方式安装docker和卸载docker

4. 安装k8s集群

4.1 基础环境

1. 禁用selinux

临时禁用方法

[root@k8s-master ~]# setenforce 0
[root@k8s-master ~]# getenforce
Permissive
[root@k8s-master ~]#

永久禁用方法。需重启服务器

[root@k8s-master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' etc/selinux/config

2. 关闭swap

swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。但是会对系统性能产生影响。所以这里需要关闭。如果不能关闭,则在需要修改集群的配置参数

临时关闭方法

[root@k8s-master ~]# swapoff -a  
[root@k8s-master ~]# free -m
total used free shared buff/cache available
Mem: 1819 286 632 9 900 1364
Swap: 0 0 0
[root@k8s-master ~]#

永久关闭方法。需重启服务器

[root@k8s-master ~]# sed -ri 's/.*swap.*/#&/' etc/fstab

3. bridged网桥设置

为了让服务器的iptables能发现bridged traffic,需要添加网桥过滤和地址转发功能

新建modules-load.d/k8s.conf文件

[root@k8s-master ~]# cat <<EOF | tee etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
[root@k8s-master ~]#

新建sysctl.d/k8s.conf文件

[root@k8s-master ~]# cat <<EOF | sudo tee etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@k8s-master ~]#

加载配置文件

[root@k8s-master ~]# sysctl --system

加载br_netfilter网桥过滤模块,和加载网络虚拟化技术模块

[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# modprobe overlay

检验网桥过滤模块是否加载成功

[root@k8s-master ~]# lsmod | grep -e br_netfilter -e overlay
br_netfilter 22256 0
bridge 151336 1 br_netfilter
overlay 91659 0
[root@k8s-master ~]#


3.4 配置IPVS

service有基于iptables和基于ipvs两种代理模型。基于ipvs的性能要高一些。需要手动载入才能使用ipvs模块

安装ipset和ipvsadm

[root@k8s-master ~]# yum install ipset ipvsadm

新建脚本文件/etc/sysconfig/modules/ipvs.modules,内容如下

    [root@k8s-master ~]# 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
    [root@k8s-master ~]#


    [root@k8s-master ~]# bin/bash etc/sysconfig/modules/ipvs.modules
    [root@k8s-master ~]#

    检验模块是否加载成功

    [root@k8s-master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    ip_vs_sh 12688 0
    ip_vs_wrr 12697 0
    ip_vs_rr 12600 0
    ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
    nf_conntrack_ipv4 15053 2
    nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
    nf_conntrack 139264 7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
    libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
    [root@k8s-master ~]#

    4.2 安装kubelet、kubeadm、kubectl

    添加yum源

    [root@k8s-master ~]# cat <<EOF | tee 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
    [root@k8s-master ~]#

    安装,然后启动kubelet

    [root@k8s-master ~]# yum install -y --setopt=obsoletes=0 kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
    [root@k8s-master ~]# systemctl enable kubelet --now
    Created symlink from etc/systemd/system/multi-user.target.wants/kubelet.service to usr/lib/systemd/system/kubelet.service.
    [root@k8s-master ~]#


    说明如下:

    • obsoletes等于1表示更新旧的rpm包的同时会删除旧包,0表示更新旧的rpm包不会删除旧包

    • kubelet启动后,可以用命令journalctl -f -u kubelet
      查看kubelet更详细的日志

    • kubelet默认使用systemd作为cgroup driver

    • 启动后,kubelet现在每隔几秒就会重启,因为它陷入了一个等待kubeadm指令的死循环

    4.3 下载各个机器需要的镜像

    查看集群所需镜像的版本

    [root@k8s-master ~]# kubeadm config images list
    I0510 21:58:56.690111 9902 version.go:255] remote version is much newer: v1.24.0; falling back to: stable-1.23
    k8s.gcr.io/kube-apiserver:v1.23.6
    k8s.gcr.io/kube-controller-manager:v1.23.6
    k8s.gcr.io/kube-scheduler:v1.23.6
    k8s.gcr.io/kube-proxy:v1.23.6
    k8s.gcr.io/pause:3.6
    k8s.gcr.io/etcd:3.5.1-0
    k8s.gcr.io/coredns/coredns:v1.8.6
    [root@k8s-master ~]#


    编辑镜像下载文件images.sh,然后执行。其中node节点只需要kube-proxy和pause

    [root@k8s-master ~]# tee ./images.sh <<'EOF'
    #!/bin/bash

    images=(
    kube-apiserver:v1.23.6
    kube-controller-manager:v1.23.6
    kube-scheduler:v1.23.6
    kube-proxy:v1.23.6
    pause:3.6
    etcd:3.5.1-0
    coredns:v1.8.6
    )
    for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    done
    EOF
    [root@k8s-master ~]#
    [root@k8s-master ~]# chmod +x ./images.sh && ./images.sh

    文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论