Table of Contents

简介

本章节主要讲解在安装部署k8s-1.29.4环境之前的一些软件、环境调优的准备工作,本篇采用k8s二进制安装的方式进行部署,该环境是根据在用的一个30节点左右的k8s集群部署流程进行文章整理。

一.资源及软件准备

1.1.机器资源信息

资源说明:列出其中一部分IP和资源,集群规模大概在30个节点左右,单台机的配置大概是24核192G,2T的盘。

角色ip主机名
master10.16.120.81pc-k8s-master-vm120-81
master10.16.120.82pc-k8s-master-vm120-82
master10.16.120.83pc-k8s-master-vm120-83
worker10.16.120.84pc-k8s-master-vm120-84
worker10.16.120.85pc-k8s-master-vm120-85
1.2.软件列表

软件版本说明,可以根据软件版本及指引提前将软件进行下载准备,将以下用到的软件下载在一个统一的目录下,并上传到master节点上去。

软件版本说明备注
系统unbutu-22.4内核:5.15 https://www.kernel.org/
kubernetesv1.29.4 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.29.md
etcdv3.5.13 https://github.com/etcd-io/etcd/releases
containerdv1.7.16下载cri版的cri-containerd-1.7.16-linux-amd64.tar.gz https://github.com/containerd/containerd/releases/
ciliumv1.15.4 https://github.com/cilium/cilium
ingressv1.10.1kubectl apply -f  https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml
corednsv1.11.2coredns v1.11.2
metallbv0.14.5 https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml
cfsslv1.6.1 https://github.com/cloudflare/cfssl
helmv3.14.4 https://github.com/helm/helm/releases/latest
1.2.网络规划

软件说明:

名称网段备注
apiserver-vip10.16.120.80
service网段10.1.0.0/16
pod网段10.2.0.0/16
coredns的service IP10.1.0.2
1.2.安装路径

软件说明:

名称路径备注
kubernetes/opt/kubernetes/{conf,bin,ssl,logs}
etcd/opt/etcd/{conf,bin,ssl,logs}
containerd/etc/containerd/config.toml

二.系统初始化环境

2.1.内核升级

内核升级说明:

当前内核:5.15.0-107-generic    
升级内核:6.6.30-060630.202405021537
cilium要求内核 Kernel >= 5.15

下载ubuntu-mainline-kernel脚本更新
wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh

第一步:sudo ubuntu-mainline-kernel.sh -r 查看可用内核版本。
第二步:选择一个版本 :sudo ubuntu-mainline-kernel.sh -i v6.2.0
第三步:执行:sudo apt --fix-broken install
第四步:sudo reboot
第五步:查看当前系统内核:dpkg --list|egrep "linux-image|linux-header"
第六部:删除旧内核:sudo apt-get purge linux-image-5.4.0-42-generic

更新包:
第一步:检查系统更新 $ sudo apt update
第二步:列出需要更新的软件包 $ sudo apt list --upgradable
第三步:更新 $ sudo apt upgrade -y
第四部:sudo apt --fix-broken install
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
2.2.软件安装

软件安装说明:

sudo apt-get install wget vim net-tools jq telnet lvm2 git tar curl nfs-kernel-server chrony ipvsadm ipset sysstat conntrack -y

2.2.系统初始化

1.禁用防火墙

ufw disable
sudo ufw status
  • 1.
  • 2.

2.关闭swap

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

3.设置时间同步,检查时区、设置成24小时制

timedatectl status
timedatectl set-timezone Asia/Shanghai

执行timedatectl status结果如下:
Local time: Thu 2024-05-09 18:30:02 CST
           Universal time: Thu 2024-05-09 10:30:02 UTC
                 RTC time: Thu 2024-05-09 10:30:02
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

4.修改dns,一行一条命令

echo "`date +%Y-%m-%dT%H:%M:%S` change dns"
sed -i 's#192.168.11.228#192.168.238.75#g' /etc/netplan/00-installer-config.yaml
netplan apply
sed -i 's#\#DNS=.*#DNS=192.168.238.75#' /etc/systemd/resolved.conf
systemctl restart systemd-resolved
systemctl enable systemd-resolved
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

5.先检查编码相关配置,没有的话,编辑/etc/default/locale并添加如下信息

LANG=en_US.UTF-8
LC_TIME=en_DK.UTF-8
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
  • 1.
  • 2.
  • 3.
  • 4.

6.在/etc/hosts中配置主机名的映射

10.16.120.81 yt-pcauto-k8s.pc.com.cn #域名对应的是apiserver的vip,当配置好vip以后,改解析到正确的vip上
10.16.120.81 yt-pcauto-k8s-16-120-81
10.16.120.82 yt-pcauto-k8s-16-120-82
10.16.120.83 yt-pcauto-k8s-16-120-83
10.16.120.84 yt-pcauto-k8s-16-120-84

2.2.内核模块配置

配置一些需要的内核模块

一.
cat >> /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

二.
systemctl restart systemd-modules-load.service

三.
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

  • 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.

配置后执行:lsmod | grep -e ip_vs -e nf_conntrack 结果如下:

ip_vs_sh 16384 0
ip_vs_wrr 16384 0
ip_vs_rr 16384 0
ip_vs 155648 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 139264 1 ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
nf_defrag_ipv4 16384 1 nf_conntrack
libcrc32c 16384 4 nf_conntrack,btrfs,raid456,ip_vs
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
2.3.内核参数优化

内核参数优化

cat <<EOF >> /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_max_syn_backlog = 20480
net.core.somaxconn = 102400
net.core.netdev_max_backlog = 32768
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.forwarding = 1
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

文件句柄调优

cat >> /etc/security/limits.conf <<EOF
* soft nofile 655350
* hard nofile 655350
* soft nproc 20480
* hard nproc 20480
EOF

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
sed -i 's#\#DefaultLimitNOFILE=.*#DefaultLimitNOFILE=1024000#' /etc/systemd/system.conf
sed -i 's#\#DefaultLimitNPROC=#DefaultLimitNPROC=1024000#' /etc/systemd/system.conf
sed -i 's#\#DefaultLimitCORE=#DefaultLimitCORE=infinity#' /etc/systemd/system.conf
  • 1.
  • 2.
  • 3.