kubernetes集群搭建(v1.29.2)

kubernetes集群搭建(v1.29.2)

系统软硬件配置

服务器数量: 主服务器一台,从服务器三
操作系统:RockyLinux9
配置
  中央处理器:8核 内存:16G 存储:100G

系统常规配置

#重命名 便于初始化
sudo hostnamectl set-hostname --static "XXX-<如果有业务就要标注>"
# 设置内网DNS地址(可选)
# 查询网卡名称
nmcli device
# DNS变为内网DNS
sudo nmcli connection modify <网卡名称> ipv4.dns "<dns-host>"
# 重新加载网络配置
sudo  nmcli connection down <网卡名称> && sudo  nmcli connection up <网卡名称>
# 查看网卡状态
cat /etc/resolv.conf 
# 测试内网DNS
ping <任意可通的内网域名>

# 设置hosts(可选)
sudo tee -a /etc/hosts <<EOF
# 添加的注释
<master-ip> <master-domain>
<node-1-ip> <node-1-domain>
<node-2-ip> <node-2-domain>
<node-3-ip> <node-3-domain>
<node-4-ip> <node-4-domain>
<node-5-ip> <node-5-domain>
# 更多的自定义条目
EOF

kubernetes前置配置

关闭swap分区

#临时关闭
sudo swapoff -a
#永久关闭
sudo sed -i '/swap/ s/^/#/' /etc/fstab
#后续重启机器后生效(这一步可以不做)

SELinux 设置为 permissive 模式(相当于将其禁用)

官方文档

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

配置防火墙

官方文档

# 这些配置是不能用的 最好解除所有端口限制
# 控制节点
# sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
# sudo firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
# sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent
# sudo firewall-cmd --zone=public --add-port=10259/tcp --permanent
# sudo firewall-cmd --zone=public --add-port=10257/tcp --permanent
# 工作节点
# sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent
# sudo firewall-cmd --zone=public --add-port=30000-32767/tcp --permanent
# 关闭所有端口限制
sudo firewall-cmd --set-default-zone=trusted
# 配置完毕后重新加载
sudo firewall-cmd --reload
# 或者关闭防火墙
sudo systemctl disable firewalld 
sudo systemctl stop firewalld 

配置内核网络加载策略

官方文档

# 配置内核网络加载策略(未知是否正确)
# 转发 IPv4 并让 iptables 看到桥接流量
cat <<EOF | sudo  tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
nf_conntrack
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system
lsmod | grep br_netfilter
lsmod | grep overlay


#IPVS
cat << EOF | sudo  tee  /etc/modules-load.d/ipvs.conf
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
sudo chmod 755 /etc/modules-load.d/ipvs.conf
sudo bash /etc/modules-load.d/ipvs.conf
lsmod | grep -e ip_vs -e nf_conntrack

启动时间同步

如使用本地虚拟机 则使用默认配置即可,在服务器环境则单纯配置客户端即可

服务端

# 注释默认配置
sudo sed -i 's/^pool/#&/' /etc/chrony.conf
#指定上游公共 ntp 服务器,并允许其他节点同步时间
sudo tee -a /etc/chrony.conf << EOF
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
allow all
EOF
#重启chronyd服务
sudo  systemctl restart chronyd
#开启网络时间同步功能
sudo timedatectl set-ntp true
# 执行chronyc sources命令,查看存在以^*开头的行,说明已经与服务器时间同步

客户端

#注释默认服务器
sed -i 's/^pool/#&/' /etc/chrony.conf
#指定内网 master节点为上游NTP服务器
echo "pool <master-address>  iburst" | sudo tee -a /etc/chrony.conf
#重启服务
sudo  systemctl restart chronyd
# 重启服务器,执行chronyc sources命令,查看存在以^*开头的行,说明已经与服务器时间同步

配置cgroup-v2 在安装containerd以及kubeadm时需要按情况配置
中文博客

官方文档

安装容器运行时

运行时选定为containerd,安装

参考博客

清华源镜像文档

github官方文档

#下载镜像仓库文件
sudo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
#替换为阿里源
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 更新缓存
sudo dnf makecache
#安装 containerd.io latest stable(最新稳定)版本
sudo dnf install -y containerd.io
#检测是否安装成功
containerd -v
runc -v
#生成配置文件
containerd config default | sudo tee /etc/containerd/config.toml
#修改配置CGroup
sudo sed -i 's/\bSystemdCgroup = false\b/SystemdCgroup = true/' /etc/containerd/config.toml

配置sandbox_image版本号 该版本号取决于kubernetes的依赖镜像版本

sudo sed -i 's/sandbox_image = ".\+"/sandbox_image = "registry.k8s.io\/pause:<pause-version>"/' /etc/containerd/config.toml

配置私有仓库(可选)
本地向私有仓库推送公有云镜像

# 新建镜像信息配置路径
sudo mkdir /etc/containerd/certs.d
# 修改配置文件引入配置项
sudo sed -i 's/config_path = ""/config_path = "\/etc\/containerd\/certs.d"/' /etc/containerd/config.toml
# docker hub镜像加速
sudo mkdir -p /etc/containerd/certs.d/docker.io
sudo tee /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://<docker.io私有仓库>"]
  capabilities = ["pull", "resolve"]
EOF
# registry.k8s.io镜像加速
sudo mkdir -p /etc/containerd/certs.d/registry.k8s.io
sudo tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml << 'EOF'
server = "https://registry.k8s.io"
[host."https://<registry.k8s.io私有仓库>"]
  capabilities = ["pull", "resolve"]
EOF
# gcr.io镜像加速
sudo mkdir -p /etc/containerd/certs.d/gcr.io
sudo tee /etc/containerd/certs.d/gcr.io/hosts.toml << 'EOF'
server = "https://gcr.io"
[host."https://<gcr.io私有仓库>"]
  capabilities = ["pull", "resolve"]
EOF
# k8s.gcr.io镜像加速
sudo mkdir -p /etc/containerd/certs.d/k8s.gcr.io
sudo tee /etc/containerd/certs.d/k8s.gcr.io/hosts.toml << 'EOF'
server = "https://k8s.gcr.io"
[host."https://<k8s.gcr.io私有仓库>"]
EOF
# quay.io镜像加速
sudo mkdir -p /etc/containerd/certs.d/quay.io
sudo tee /etc/containerd/certs.d/quay.io/hosts.toml << 'EOF'
server = "https://quay.io"
[host."https://<quay.io私有仓库>"]
  capabilities = ["pull", "resolve"]
EOF

配置代理(可选)

sudo mkdir /etc/systemd/system/containerd.service.d
sudo tee  /etc/systemd/system/containerd.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://<proxy-server>:<proxy-port>"
Environment="HTTPS_PROXY=http://<proxy-server>:<proxy-port>"
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.local,.internal"
EOF

启动和设置开机自启

sudo systemctl enable --now containerd

安装kubeadm

由于需调整为国内镜像 故而需根据如下信息进行配置

官方文档

阿里云镜像配置文档

# 配置镜像源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/<kubernetes-version>/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/<kubernetes-version>/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
# 安装kubeadm基础服务
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 配置CGroup
sudo sed -i 's/^KUBELET_EXTRA_ARGS=.*/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/' /etc/sysconfig/kubelet
# 设置开机自启
sudo systemctl enable  kubelet

kubeadm初始化配置

根据比较,确定采用资源清单文件的方式生成初始化文档
官方文档

# 查询所有需要拉取的镜像(可选 如使用代理环境 则无需此方式)
sudo kubeadm config images list
# 下载所有需要拉取的镜像(可选 如使用代理环境 则无需此方式)
sudo kubeadm config images pull
# 初始化主节点(--service-cidr可不配置 --pod-network-cidr必须配置)
kubeadm init  --service-cidr=<service-network> \
--pod-network-cidr=<pod-network>
# 执行成功后 按服务器提示操作

从节点接入集群

官方文档
根据服务器提示内容 输入接入命令

替换网络模式

# 替换网络
kubectl patch configmap kube-proxy -n kube-system --type merge -p '{"data":{"mode":"ipvs"}}'
# 删除之前的pod
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
# 状态检查
kubectl get pod -n kube-system | grep kube-proxy

安装Calico(pod 网络以后可替换)

官方文档

sudo tee /etc/NetworkManager/conf.d/calico.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:vxlan-v6.calico;interface-name:wireguard.cali;interface-name:wg-v6.cali
EOF
# 创建资源清单文件路径
mkdir -p  ~/kubernetes/calico/<calico-version>
#下载Tigera Calico 运算符和自定义资源定义资源清单文件 (如服务器网速慢 则本地通过特殊方式获取后上传)
curl -xhttp://<proxy-server>:<proxy-port> -o ~/kubernetes/calico/<calico-version>/tigera-operator.yaml https://raw.githubusercontent.com/projectcalico/calico/<calico-version>/manifests/tigera-operator.yaml 
# 创建Tigera Calico 运算符和自定义资源定义资源
kubectl create -f  ~/kubernetes/calico/<calico-version>/tigera-operator.yaml  



#安装自定义资源 (如服务器网速慢 则本地通过特殊方式获取后上传)
curl -xhttp://<proxy-server>:<proxy-port> -o  ~/kubernetes/calico/<calico-version>/custom-resources.yaml https://raw.githubusercontent.com/projectcalico/calico/<calico-version>/manifests/custom-resources.yaml 
#替换pod网络默认值(注意转译子网反斜杠)
sed -i 's/cidr:.*/cidr: <pod-network>/' ~/kubernetes/calico/<calico-version>/custom-resources.yaml
# 创建本地配置
kubectl create -f  ~/kubernetes/calico/<calico-version>/custom-resources.yaml
# 查看该有的pod是否被创建
watch kubectl get pods -n calico-system
# 删除控制平面上的污点,以便您可以在其上调度 Pod。
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
# 查看节点状态
kubectl get nodes -o wide
  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSLSSAH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值