Kubernetes 1.25 相关配置 - 系统篇

继续我们的系列教程,在上一篇文章中,我们已经成功地在本地安装并运行了CentOS Stream 9虚拟机。接下来,我将指导大家如何配置这台虚拟机,为后续安装和部署Kubernetes 1.25做好准备。这一步是确保我们能够顺利进行Kubernetes集群搭建的关键环节。


进阶教程

接下来的阶段,我会接着更新:

  • 搭建集群:
    • 介绍安装containerd,配置containerd,安装和配置crictl,以及安装Kubernetes 1.25版本的kubectl、kubelet和kubeadm,初始化master集群,生成kubeadm默认配置文件,设置.kube/config,安装Calico网络插件,添加Node节点,并切换Kubernetes的IPVS转发模式。
  • 扩展功能:
    • 包括部署Traefik,安装NFS存储,安装KubeSphere,安装Grafana,以及部署EFK(Elasticsearch + Filebeat + Kibana)日志收集系统。
  • 相关笔记:
    • 整理在部署过程中遇到的问题及其解决方案,以及如何部署Filebeat。
  • 额外内容:
    • 部署各种中间件,部署主从数据库,部署高可用kafka,部署高可用HA-Hadoop,redis等等…
  • 自动化部署脚本:
    • 五分钟内完成从0到1搭建;

1. 安装部分软件

安装自己所需的习惯的应用,这里 wgetcurl 是必须安装的;

yum -y install wget vim curl tar lrzsz

2. 编辑hosts

加入一下内容,(ip和地址根据自己的需求来定)

cat >> /etc/hosts << EOF
10.211.55.100 k8s-master
10.211.55.101 k8s-node1
10.211.55.102 k8s-node2
EOF

👇👇👇
在这里插入图片描述
在这里插入图片描述

3. 关闭防火墙

这通常在 Kubernetes 部署中执行,以确保没有其他防火墙规则干扰 Kubernetes 的网络管理。

iptables -F
iptables -X
sudo systemctl stop firewalld 
sudo systemctl disable firewalld
sudo systemctl disable firewalld.service

在这里插入图片描述

4. 关闭 selinux

在安装 Kubernetes时,通常建议关闭 SELinux(Security-Enhanced Linux)主要是出于兼容性和简化配置的考虑。

setenforce  0 
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux 
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux 
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config

👇👇👇
在这里插入图片描述

5. 关闭 swap

这些参数通常在安装和配置 Kubernetes 或其他内存密集型应用时很重要。

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

👇👇👇
在这里插入图片描述

6. 优化系统参数

不一定是最优,各取所有;
主要用于优化和配置 Kubernetes 集群节点的网络和文件系统行为,以确保 Kubernetes 能够正确、高效地运行。

加载内核模坒

  • overlay:支持 OverlayFS,这是一种文件系统服务,用于支持 Docker 的镜像和容器层。
  • br_netfilter:允许通过网桥的网络流量被 iptables 检查和过滤。这对于网络策略的实施很重要。
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

👇👇👇
在这里插入图片描述

网络和系统相关配置
这些设置调整了网络行为和某些系统限制,以满足 Kubernetes 的需求:

  • 禁用 IPv6:
    • net.ipv6.conf.*.disable_ipv6 = 1 禁用 IPv6,是为了简化网络配置或解决与 IPv6 相关的特定问题。
  • ARP 相关设置:
    • 调整 ARP 广播行为,以减少可能的网络冲突。
  • IP 转发:
    • net.ipv4.ip_forward = 1 开启 IP 转发,对于节点间通信和 Pod 网络非常重要。
  • 网桥相关的 Iptables 调用:
    • 确保网桥上的流量可以被 iptables 处理,对于实施 Kubernetes 网络策略至关重要。
  • 连接跟踪限制:
    • net.netfilter.nf_conntrack_max 调整最大连接跟踪数,对于大规模集群中维持大量网络连接很有帮助。
  • 文件系统和内核参数:
    • 如增加用户可以监视的文件数量、调整内存管理行为等,这些都是为了提高系统的稳定性和性能。
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.ip_forward = 1
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
# 要求iptables不对bridge的数据进行处理
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.netfilter.nf_conntrack_max = 2310720
fs.inotify.max_user_watches=89100
fs.may_detach_mounts = 1
fs.file-max = 52706963
fs.nr_open = 52706963
vm.overcommit_memory=1
vm.panic_on_oom=0
vm.swappiness = 0
EOF

应用配置并加载模块
这一命令将应用所有的系统配置并确保br_netfilter模块被加载,这对于确保上述配置生效是必需的。

sysctl --system && modprobe br_netfilter

7. 配置和检查 Linux 内核模块和参数

7.1 调整文件打开数等配置(可选)

当然了这里最好的其实是/etc/security/limits.d目录下生成一个新的配置文件。避免修改原来的总配置文件、这也是推荐使用的方式。

  • * 号表示这个限制适用于所有用户

  • * soft nproc 1000000(允许每个用户设置软限制(soft limit)的最大进程数(nproc)是1000000)

  • * hard nproc 1000000(设置硬限制(hard limit)的最大进程数)

  • * soft nofile 1000000(设置软限制的打开文件描述符的数量)

  • * hard nofile 1000000(设置打开文件描述符数量的硬限制)

  • * soft memlock unlimited(设置软限制的内存锁定量,unlimited 表示没有限制,用户可以锁定任意量的内存)

  • * hard memlock unlimited(设置硬限制的内存锁定量,unlimited表示没有硬性上限)

cat> /etc/security/limits.conf <<EOF
* 
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft  memlock  unlimited
* hard memlock  unlimited
EOF

👇👇👇
在这里插入图片描述

8. 调整必须要配置

主要用于配置和验证 Kubernetes 集群节点的网络和文件系统模块设置。

sysctl --system
modprobe br_netfilter
modprobe overlay
lsmod | grep -e br_netfilter -e overlay

👇👇👇
在这里插入图片描述

  • vm.swappiness=0 (设置交换空间的使用倾向为最低,这意味着系统会尽量避免使用交换空间)
  • vm.overcommit_memory=1(允许内核过量分配内存,这对于某些内存密集型应用来说可能是必要的)
  • vm.panic_on_oom=0(在内存耗尽时,系统不会进行内核崩溃)
  • fs.inotify.max_user_watches=89100(增加 inotify 的最大监视项数量,这对于某些应用(如文件监控服务)来说可能是必要的)
  • vm.max_map_count=262144(这个设置主要用于调整 Linux 系统允许的最大内存映射数量,常用于优化 Elasticsearch 等需要大量内存映射的应用)
cat > /etc/sysctl.conf << EOF
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
vm.max_map_count=262144
EOF

👇👇👇
在这里插入图片描述
生效

sysctl -p

9. ipvs 设置

  • iptables -P FORWARD ACCEPT
  • 这个命令设置了默认的转发策略。当数据包需要从一个网络接口转发到另一个网络接口时,这条命令确保默认情况下允许这种转发行为。在 Kubernetes 环境中,这对于 pod 间的通信非常关键,尤其是跨节点的通信。由于 Kubernetes 通常依赖于 iptables 来处理跨节点的数据包路由,所以必须允许转发。如果这个设置被设置为 DROP,那么不同节点上的 pod 将无法互相通信。
  • sudo yum install -y ipvsadm ipset dnf-utils
    • 这条命令安装了几个重要的网络管理和配置工具:
      • ipvsadm: 用于管理 IP 虚拟服务器的工具,支持基于内核的负载均衡技术(IPVS)。Kubernetes 可以使用 IPVS 模式进行服务的负载均衡,这通常比传统的 iptables 模式性能更高。
      • ipset: 用于管理 IP 集合的工具,它可以高效地处理成百上千条网络规则,常与 iptables 一起使用以优化大规模规则的处理。
      • dnf-utils: 提供了一些辅助工具,用于管理 DNF 包管理器的仓库和扩展包的处理功能。
iptables -P FORWARD ACCEPT
sudo yum install -y ipvsadm  ipset dnf-utils

10. 添加yum源

目的是设置 Docker 的 YUM 软件仓库,以便在 CentOS 系统上安装 Docker CE;

yum install -y wget && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

配置 Kubernetes 的 YUM 软件仓库。具体操作步骤是创建一个新的 YUM 仓库配置文件,指定 Kubernetes 软件包的下载源,使得用户能够通过 YUM 包管理器安装和管理 Kubernetes 组件。
下面baseurl我用arm,如果是amd则换https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
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

👇👇👇
在这里插入图片描述

11. 设置时间同步

确保系统时间准确同步,因为 Kubernetes 集群中的各节点和组件要求时间一致性,以保证交互操作和日志记录的正确性。时间同步对于事务、调度和日志管理等功能非常关键。

vim /etc/chrony.conf

使用阿里云的时间服务器 写入conf文件中,最后wq保存退出

server ntp1.aliyun.com iburst

👇👇👇
在这里插入图片描述
启动服务

systemctl enable --now chronyd

测试

chronyc sources

强制同步时间

sudo chronyc -a makestep
systemctl enable chronyd
systemctl is-enabled chronyd

👇👇👇在这里插入图片描述

12. NTP服务器(可选)

NTP(网络时间协议)服务器是一种专门用于在计算机网络中同步时间的服务器。它使用 NTP 协议,这是一个用于同步网络中所有设备时间的标准互联网协议。

我为什么在k8s中选择使用NTP服务器

  • 保持集群时间一致性
  • 简化时间同步管理
  • 确保集群操作的准确性
  • 便于故障排查

总的来说,配置 Kubernetes master 节点作为 NTP 服务器,使得整个集群能够保持时间的一致性,这对于集群的稳定运行和简化管理非常关键。

master中安装 NTP 服务(其实哪一台都可以,只要一台作为NTF服务器)

(如果尚未安装)
sudo yum install -y chrony

12.2 配置 Chrony 作为 NTP 服务器:

编辑 /etc/chrony.conf 文件,在文件中添加或修改以下行以允许网络同步:

# 允许您的网络同步
allow 10.211.55.0/24

# 这是一个示例网段,请根据自己的网络实际情况进行更改

注意:

如果 node 服务器也在这个子网中,这就是需要的配置。如果它们位于不同的子网,需要根据实际情况调整 allow 指令的参数,以包括这些子网。例如,如果有另一个子网 10.211.56.0/24,也希望包含进来,可以这样设置:

allow 10.211.55.0/24
allow 10.211.56.0/24

12.3 重启 Chrony 服务

systemctl enable chronyd
systemctl is-enabled chronyd
sudo systemctl restart chronyd

12.4 验证服务状态

chronyc sources

12.5 在 Node 服务器上配置 NTP 客户端

在每个 node 服务器上,需要指向 master 服务器同步时间

(如果尚未安装)
# sudo yum install -y chrony

12.5.1 配置 Chrony 客户端

编辑 /etc/chrony.conf 文件,将 NTP 服务器地址设置为 master 服务器的 IP 地址:

先注释掉原来的 pool 2.centos.pool.ntp.org iburst,然后添加下面的

server 10.211.55.100 iburst

ip 替换为 master 服务器的实际 IP 地址。

12.5.2 重启 Chrony 服务

systemctl enable chronyd
systemctl is-enabled chronyd
sudo systemctl restart chronyd

12.5.3 检查时间同步

在 node 服务器上运行 chronyc sources 来验证是否正在从 master 服务器同步时间。

查看chronyd服务的状态systemctl status chronyd

注意事项

  • 确保网络安全规则和防火墙设置允许从 node 到 master 的 NTP 流量(UDP 端口 123),本次我们关闭防火墙这里可以跳过;
  • 在生产环境中,通常推荐使用外部可靠的 NTP 服务器,因为单点故障(比如 master 服务器的时间不准确)会影响整个集群。
  • 如果集群规模较大或对时间同步有较高的精度要求,考虑使用多个时间源或专业的时间同步解决方案。

13 . 重启

reboot

以上已经完成最基本的系统环境,此时可以先备份一个系统,下面开始配置k8s相关配置,下面配置适合master以及node

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值