欢迎光临
我们一直在努力

(一)kubeadm方式搭建单master的k8s的集群

 集群节点初始化:

集群规划

角色 IP 系统版本
prod-k8s-master 192.168.xx.xx Rocky Linux release 9.4
prod-k8s-node01 192.168.xx.xx Rocky Linux release 9.4
prod-k8s-node02 192.168.xx.xx Rocky Linux release 9.4

集群节点配置(所有主机操作)

1:所有节点修改主机名(每个节点主机名不一样,注意识别清除)

hostnamectl set-hostname prod-k8s-master

hostnamectl set-hostname prod-k8s-node01

hostnamectl set-hostname prod-k8s-node02

2:配置本地解析

vim /etc/hosts

#在下方添加
192.168.xx.xx prod-k8s-master1
192.168.xx.xx prod-k8s-node01
192.168.xx.xx prod-k8s-node02

3:关闭本地防火墙

systemctl disable –now firewalld

4:关闭SElinux

setenforce 0 && sed -ri "s/^SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

5:关闭swap分区

swapoff -a && sysctl -w vm.swappiness=0 && sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

6:更改本地安装源

mkdir /etc/yum.repos.d/repo.bak
cp /etc/yum.repos.d/rocky* /etc/yum.repos.d/repo.bak/
sed -e 's|^mirrorlist=|#mirrorlist=|g' \\
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \\
-i.bak \\
/etc/yum.repos.d/rocky-*.repo
yum makecache

7:安装epel源

dnf install -y epel-release
sed -e 's!^metalink=!#metalink=!g' \\
-e 's!^#baseurl=!baseurl=!g' \\
-e 's!https\\?://download\\.fedoraproject\\.org/pub/epel!https://mirrors.tuna.tsinghua.edu.cn/epel!g' \\
-e 's!https\\?://download\\.example/pub/epel!https://mirrors.tuna.tsinghua.edu.cn/epel!g' \\
-i /etc/yum.repos.d/epel{,-testing}.repo

8:下载内核离线安装包(所有节点)

dnf install -y wget vim git
mkdir kernel-rpm && cd kernel-rpm/
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-6.1.161-1.el9.elrepo.x86_64.rpm \\
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-devel-6.1.161-1.el9.elrepo.x86_64.rpm \\
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-tools-6.1.161-1.el9.elrepo.x86_64.rpm \\
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-core-6.1.161-1.el9.elrepo.x86_64.rpm \\
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-tools-libs-6.1.161-1.el9.elrepo.x86_64.rpm \\
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-modules-6.1.161-1.el9.elrepo.x86_64.rpm
yum -y localinstall kernel-lt-*

9: 设置 GRUB 启动菜单中第 0 项(第一个)内核为系统默认启动项

grub2-set-default 0

10: 重新生成 GRUB 启动配置文件,并将配置输出到/etc/grub2.cfg 

grub2-mkconfig -o /etc/grub2.cfg

11:  给默认内核添加启动参数,核心作用是「启用 Linux 用户命名空间功能」

grubby –args="user_namespace.enable=1" –update-kernel="$(grubby –default-kernel)"

12: 输出当前系统设置的默认启动内核的完整路径

grubby –default-kernel

集群节点实现时间同步(所有节点)

1. 所有节点同步时间及时区:

dnf install -y chrony
vim /etc/chrony.conf
#第三行下添加内容如下:

pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst
pool cn.pool.ntp.org iburst
server ntp4.aliyun.com iburst

2. 启动时间同步工具:

systemctl enable –now chronyd

3. 立刻同步时间及同步状态 :

chronyc makestep
chronyc tracking
chronyc sources

集群节点同步时区:
1. 校准时间修改上海时区并且定时同步时间:

timedatectl set-timezone Asia/Shanghai

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo 'ASia/Shanghai' > /etc/tiomezone

2. 查看时区

timedatectl

3. 默认时间格式为 12 小时制,调整为 24 小时制:

date
localectl set-locale LC_TIME=C.UTF-8
localectl

验证 : date

修改过后断开重连终端

集群节点内核参数调优 (所有节点)

1:加载k8s内核参数

cat >> /etc/sysctl.d/k8s.conf << EOF
#内核参数调整
vm.swappiness=0
#配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#启用IP 转发功能
net.ipv4.ip_forward = 1
#允许文件系统分离挂载
fs.may_detach_mounts = 1
#减少交换分区的使用倾向。
vm.swappiness = 0
#允许内存超配
vm.overcommit_memory=1
#在内存不足时不触发系统崩溃
vm.panic_on_oom=0
#设置进程的最大内存映射区域数量
vm.max_map_count=655360
#增加 inotify 监视的最大用户手表数量
fs.inotify.max_user_watches=89100
#增加文件描述符的最大数量
fs.file-max=52706963
#和打开文件的最大数量
fs.nr_open=52706963
#设置网络连接跟踪的最大数量
net.netfilter.nf_conntrack_max=2310720
#TCP 连接在空闲状态下保持存活的时间(秒),超过这个时间后开始发送保活探测包。
net.ipv4.tcp_keepalive_time = 600
#发送保活探测包的次数,如果都没有响应则关闭连接。
net.ipv4.tcp_keepalive_probes = 3
#发送保活探测包的时间间隔(秒)
net.ipv4.tcp_keepalive_intvl = 15
#设置系统中处于 TIME_WAIT 状态的最大连接数量。
net.ipv4.tcp_max_tw_buckets = 36000
#允许将处于 TIME_WAIT 状态的套接字重新用于新的连接。
net.ipv4.tcp_tw_reuse = 1
#系统所能处理的孤儿套接字(没有父进程的套接字)的最大数量。
net.ipv4.tcp_max_orphans = 327680
#孤儿套接字的重试次数。
net.ipv4.tcp_orphan_retries = 3
#启用 SYN Cookies 功能,防范 SYN 洪水攻击。
net.ipv4.tcp_syncookies = 1
#SYN 队列(未完成连接队列)的最大长度。
net.ipv4.tcp_max_syn_backlog = 16384
#最大的 IP 连接跟踪数量。
net.ipv4.ip_conntrack_max = 65536
#禁用 TCP 时间戳选项。
net.ipv4.tcp_timestamps = 0
#套接字监听队列的最大长度。
net.core.somaxconn = 16384
EOF

2:删除注释行

sed -i '/^#/d' /etc/sysctl.d/k8s.conf

3:加载网桥过滤模块

modprobe overlay && modprobe br_netfilter
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

4:加载配置

sysctl –system 或 sysctl -p /etc/sysctl.d/k8s.conf

5:测试

sysctl -a
lsmod | grep br_netfilter

集群节点启动ipvs功能 (所有节点)

1:安装工具

dnf install ipvsadm ipset sysstat conntrack libseccomp -y

2:启用ipvs相关功能模块

cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
overlay
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

3:加载模块

modprobe overlay
modprobe ip_vs && modprobe ip_vs_rr && modprobe ip_vs_wrr && modprobe ip_vs_sh && modprobe nf_conntrack
systemctl enable –now systemd-modules-load.service rsyslog

4:测试

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

集群节点修改加载Limits参数 (所有节点)

1:设置最大文件打开数

vim /etc/security/limits.conf
#在最后添加如下
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited

2:重启所有节点

reboot

3:查看内核参数是否加载

lsmod | grep –color=auto -e ip_vs -e nf_conntrack

集群节点安装containerd作为容器运行时

Kubernetes 版本和 Containerd 版本依赖关系:kubernetes/CHANGELOG/CHANGELOG-1.33.md at master · kubernetes/kubernetes · GitHub

1:安装docker源

yum install -y yum-utils jq psmisc net-tools telnet device-mapper-persistent-data lvm2 -y
yum-config-manager –add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新:

dnf makecache

2:查看containerd指定版本

dnf list –showduplicates containerd.io –enablerepo=docker-ce-stable

3:安装docker和containerd

dnf install -y containerd.io-1.7.* docker-ce

4:验证

containerd –version

5:生成配置containerd配置文件

mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

6:修改containerd配置文件参数

sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml

sed -i 's#k8s.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml

sed -i 's#registry.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml

sed -i 's#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml

重新加载配置并启动containerd

systemctl daemon-reload && systemctl enable –now containerd

所有节点配置 crictl 客户端连接的运行时位置

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF


Kubernetes相关组件安装

组件核心作用
kubeadm 集群初始化工具:kubeadm init搭建 master 控制平面、kubeadm join节点入网 只负责搭集群、加节点,不管理容器
kubelet 节点核心代理,对接 containerd,创建 / 销毁 Pod、上报节点状态(所有节点必装) 真正干活创建、删除容器的执行者。
kubectl 集群客户端命令行,kubectl get/describe管理集群资源,仅 master 需要 把操作请求发给集群主控 apiserver:

集群所有节点安装Kubernetes安装源

1:集群所有节点安装Kubernetes安装源

       所有节点配置 K8s 阿里云 yum 源

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/repodata/repomd.xml.key
EOF
dnf makecache

2:集群所有节点查看本地仓库安装源中kubernetes相关安装包版本

dnf list kubeadm.x86_64 –showduplicates | sort -r

集群Master节点    安装Kubernetesv1.34+组件

dnf install -y kubelet-1.34* kubeadm-1.34* kubectl-1.34*

集群所有Node节点安装Kubernetesv1.34+组件

dnf install -y kubelet-1.34* kubeadm-1.34*

集群所有节点配置kubelet参数

cat <<-EOF >/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="–cgroup-driver=systemd"
EOF

集群所有节点启动kubelet

systemctl daemon-reload && systemctl enable –now kubelet


一般必要的初始化操作差不多已经做完了,剩下的就是集群的创建 ,在第二章!

谢谢大家!

    赞(0)
    未经允许不得转载:171主机测评 » (一)kubeadm方式搭建单master的k8s的集群
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址