裸机器搭建k8s部署 1.28.10版本

问了搭建k8s集群踩了很多坑,问题主要出现在网络插件处,因此主要是master节点操作问题。重新走一下流程整理一下笔记。

目录

虚拟机准备

虚拟机

系统版本信息

修改镜像地址

配置静态ip

关闭防火前和交换分区

转发 IPv4 并让 iptables 看到桥接流量

​编辑

k8s集群安装

安装运行容器Containerd

配置 systemd cgroup 驱动

安装 kubeadm、kubelet 和 kubectl 

服务安装

初始化 (仅仅主机执行)

初始化执行成功结果

​编辑

根据提示执行

初始化完成后检查

装网络插件

问题排查


虚拟机准备

虚拟机

系统版本信息

[root@k8smaster ~]# hostnamectl
   Static hostname: k8smaster
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 58f72fdf6d904baab18787a82e3d7dce
           Boot ID: 38d7be129cb04282921c6d8e88d420dc
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.71.1.el7.x86_64
      Architecture: x86-64

修改镜像地址

虚拟机器centos7无法识别yum 命令异常处理笔记_虚拟机找不到yum命令-CSDN博客

安装常用的命令工具

yum install -y net-tools  vim  wget

配置静态ip

systemctl restart network  # 重启生效

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="node"
BROWSER_ONLY="no"
BOOTPROTO="static"  
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.110.143
NETMASK=255.255.255.0
GATEWAY=192.168.110.2
DNS1=8.8.8.8
DNS2=8.8.4.4
UUID="0539496e-433b-4973-9618-d721fb5592da"

3.修改用户名和hosts

hostnamectl set-hostname xxxxx  # 永久修改用户名

参考链接:

【Kubernetes】(K8S)彻底卸载详细教程_卸载kubernetes-CSDN博客

在 Linux 系统中安装并设置 kubectl | Kubernetes

安装 kubeadm | Kubernetes

关闭防火前和交换分区

1.确保每个节点上 MAC 地址和 product_uuid 的唯一性 

  • 你可以使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址
  • 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验

一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败

2. 在所有节点上关闭防护墙与核心防护,并且关闭swap交换

  • 交换分区的配置。kubelet 的默认行为是在节点上检测到交换内存时无法启动。 kubelet 自 v1.22 起已开始支持交换分区。自 v1.28 起,仅针对 cgroup v2 支持交换分区; kubelet 的 NodeSwap 特性门控处于 Beta 阶段,但默认被禁用。
  • 如果 kubelet 未被正确配置使用交换分区,则你必须禁用交换分区。 例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstabsystemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置。

安装 kubeadm | Kubernetes

systemctl stop firewalld  # 关闭防火墙
systemctl disable firewalld #禁止开启启动

 
# 关闭交换分区
swapoff -a         #交换分区必须要关闭  重启失效
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区


以下指令适用于 Kubernetes 1.28。

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

转发 IPv4 并让 iptables 看到桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
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

通过运行以下指令确认 br_netfilter 和 overlay 模块被加载:
 

lsmod | grep br_netfilter
lsmod | grep overlay

通过运行以下指令确认 net.bridge.bridge-nf-call-iptablesnet.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1:

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

k8s集群安装

如果没有说

### 部署 Kubernetes (K8s) 集群于 Ubuntu #### 准备工作 为了成功部署 Kubernetes 集群,在开始之前需确认所有节点的操作系统已更新至最新状态并重启。 ```bash sudo apt-get update && sudo apt-get upgrade -y sudo reboot ``` #### 安装 Docker CE 由于 Kubernetes 使用容器运行时来管理 Pod 中的容器,默认推荐使用 containerd 或者 Docker 作为容器运行时。这里介绍通过官方源安装 Docker 的方法: - 添加 Docker 的 GPG 密钥到 APT 键环中[^3] ```bash curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg ``` - 设置稳定版仓库 ```bash echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` - 更新包索引,安装 Docker Engine 并启动服务 ```bash sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -y sudo systemctl enable docker.service sudo systemctl start docker.service ``` #### 安装 kubeadm, kubeletkubectl 这些工具用于初始化集群、加入新节点以及命令行操作 K8s 资源对象。 - 将 Google Cloud 的签名密钥添加到本地信任库,并配置 Kubernetes APT 源 ```bash curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF ``` - 更新软件列表,指定版本号安装所需组件(此处以 `v1.24.17` 版本为例) ```bash sudo apt-y kubelet=1.24.17-00 kubeadm=1.24.17-00 kubectl=1.24.17-00 sudo apt-mark hold kubelet kubeadm kubectl ``` #### 初始化 Master 节点 完成上述准备工作之后就可以初始化 master 节点了。执行下面这条指令前,请先关闭 swap 功能以免影响后续步骤正常进行。 ```bash sudo swapoff -a ``` 接着可以利用 `kubeadm init` 命令创建一个新的控制平面实例;建议指明 pod 网络 CIDR 参数以便 Calico CNI 插件能够正确识别网络范围。 ```bash sudo kubeadm init --pod-network-cidr=192.168.0.0/16 ``` 按照提示设置好 `.kube/config` 文件权限后即可继续下一步骤——应用网络插件Calico。 ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 下载适用于当前环境的 Calico YAML 文件[^1],并通过kubectl apply 应用它: ```bash wget https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f calico.yaml ``` 此时应该已经拥有了一个基本可用的小型单机或多主机组成的 Kubernetes 集群了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值