文章目录
- 简介
- [一. 集群环境规划](#一. 集群环境规划)
-
- [1.1. 系统及软件版本介绍](#1.1. 系统及软件版本介绍)
- [1.2. 域名、IP、网段规划](#1.2. 域名、IP、网段规划)
- [二. 服务器系统初始化](#二. 服务器系统初始化)
简介
k8s1.34.2的安装总体没什么变化,主要在于结合最新版本的containerd、gateway Api、istio、cilium进行安装,新版本的一些软件和旧的存在一些区别。本章节主要是通过搭建最新版的k8s集群,并搭建gateway Api来进行一些xkube开发环境的调试和部署,现将整个k8s1.34.2的安装过程进行记录。
一. 集群环境规划
1.1. 系统及软件版本介绍
etcd节点,主机名可以根据自己的规则定义,后边的cluster.local可以采用域名
| 角色 | ip | 主机名 |
|---|---|---|
| etcd01 | 192.168.10.185 | etcd01-dx-k8s1.cluster.local |
| etcd02 | 192.168.10.186 | etcd02-dx-k8s1.cluster.local |
| etcd03 | 192.168.10.187 | etcd03-dx-k8s1.cluster.local |
k8s节点
| 角色 | ip | 主机名 |
|---|---|---|
| master | 192.168.10.185 | master185-dx-k8s1.cluster.local |
| worker | 192.168.10.186 | node186-dx-k8s1.cluster.local |
| worker | 192.168.10.187 | node187-dx-k8s1.cluster.local |
| worker | 192.168.10.188 | node188-dx-k8s1.cluster.local |
系统及内核版本
| 系统 | 版本 | Col3 |
|---|---|---|
| Ubuntu | 24.04.3 | |
| 内核 | 6.8.0-71-generic |
需要的软件及下载地址
注:非必须的,如果用不着可以不用安装
1.2. 域名、IP、网段规划
| 产品 | 规划 | 说明 | 必需 |
|---|---|---|---|
| k8s集群名称 | dx-k8s1 | k8s的集群名称尽量用字母、数字、横线定义,可以根据机房、用途来定义:eg:dx-k8s1 | 是 |
| service网段 | 10.96.0.0/16 | 定义service的网段,尽量分配一个没有被其他集群使用过的网段,在kube-apiserver,kube-controller-manager,cilium都会用到,配置参数:--service-cluster-ip-range | 是 |
| pod网段 | 10.244.0.0/16 | 定义pod分派IP的网段,配置参数:--cluster-cidr | 是 |
| dns ip | 10.96.0.10 | 定义coredns的service IP | 是 |
| etcd主机名 | etcd01-dx-k8s1.cluster.local etcd02-dx-k8s1.cluster.local etcd03-dx-k8s1.cluster.local | 通常etcd的集群用3台机来做,如果是三台机就定义三个主机名,主机名中的cluster.local可以更换成一个正式的顶级域名,并且在etcd的服务器/etc/hosts中做上和IP的映射关系,做映射是为了提高解析速度和避免dns故障影响,例如: 192.168.10.185 etcd01-dx-k8s1.cluster.local 192.168.10.186 etcd02-dx-k8s1.cluster.local 192.168.10.187 etcd03-dx-k8s1.cluster.local 定义主机名的好处就是在有出现机器故障需要替换时,不需要修改配置里的IP,但是需要修改/etc/hosts映射。 | 否 |
| apiserver域名 | apiserver-dx-k8s1.cluster.local | 给apiserver定义一个域名,cluster.local可以改成域名例如:xxx.com,如果未做内部dns解析的话,则需要做/etc/hosts映射,例如: 192.168.10.185 apiserver-dx-k8s1.cluster.local | 否 |
| 节点主机名 | master185-dx-k8s1.cluster.local node186-dx-k8s1.cluster.local node187-dx-k8s1.cluster.local | 给节点配置好主机名,是在注册到k8s时可以通过主机名清晰的知道是哪台机 | 是 |
| etcd vip | 如果etcd配置配置负载均衡的话,可以规划一个内网的vip | 否 | |
| etcd 域名 | etcd-dx-k8s1.cluster.local | 有条件可以分配一个etcd的域名然后解析到etcd的vip | 否 |
| apiserver vip | 如果api-server有配置负载均衡的话,可以分派一个内网的vip,然后将api-server域名解析到此IP | 否 |
注:非必须表示,如果没有分配主机名或域名,就需要直接用IP,在后续的配置中也需要修改成IP
软件安装路径规划:
| 名称 | 路径 | 备注 |
|---|---|---|
| kubernetes | /opt/kubernetes/{conf,bin,ssl,logs} | 安装在master和node上 |
| etcd | /opt/etcd/{conf,bin,ssl,logs} | 安装在master上,或者独立的etcd集群 |
| containerd | /etc/containerd/config.toml /usr/local/bin | 安装在master和node上 |
| runc | /usr/local/sbin/ | 安装在master和node上 |
| cni-plugin-linux | /opt/cni/bin | 安装在master和node上 |
| helm | /usr/local/bin/ | 可以安装在其中一台master上、或能联通master的机器 |
| cilium | /usr/local/bin/ | 可以安装在其中一台master上、或能联通master的机器 |
| cfssl cfssl-certinfo cfssljson | /usr/local/bin/ | 可以安装在其中一台master上、或能联通master的机器 |
| kubectl | /usr/local/bin/ | 可以安装在其中一台master上、或能联通master的机器 |
二. 服务器系统初始化
1.基础安装说明:
sudo apt-get install wget vim net-tools jq telnet lvm2 git tar curl nfs-kernel-server chrony ipvsadm ipset sysstat conntrack -y
2.禁用防火墙
ufw disable
sudo ufw status
2.关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
3.设置时间同步,检查时区、设置成24小时制
timedatectl status
timedatectl set-timezone Asia/Shanghai
4.配置一些需要的内核模块
bash
一.
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
四.
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
- 内核参数优化
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
vm.max_map_count = 262144
EOF
6.文件句柄调优
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655350
* hard nofile 655350
* soft nproc 20480
* hard nproc 20480
EOF
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
7.修改master和node的主机名,并设置hosts,针对apiserver的域名和etcd的域名,有需要可以做上域名解析
1.maste和node机器都需要修改主机名,命令参考如下:
hostnamectl set-hostname new_hostname
2.编辑/etc/hosts,在每个etcd节点都加上,在部署apiserver的节点都加上:
192.168.10.185 etcd01-dx-k8s1.cluster.local
192.168.10.186 etcd02-dx-k8s1.cluster.local
192.168.10.187 etcd03-dx-k8s1.cluster.local
3.编辑/etc/hosts,在执行kubectl的节点都加上加上apiserver域名hosts:
192.168.10.185 apiserver-dx-k8s1.cluster.local
4.编辑/etc/hosts,在执行etcdctl的节点上加上etcd域名hosts,在部署api-server的节点都加上:
192.168.10.185 etcd-dx-k8s1.cluster.local