《2025最新版Kubernetes(k8s)kubeadm集群全栈部署教程:从零到生产环境实战》

# 本文为原创内容,若需转载,请联系博主获取授权

一、基础设置

  • 修改主机名
arduino 复制代码
sudo hostnamectl set-hostname master-node1&&bash
sudo hostnamectl set-hostname worker-node1&&bash
  • 添加主机域名解析
bash 复制代码
sudo vim /etc/hosts
172.168.20.1     master-node1
172.168.20.2     worker-node1
  • 关闭防火墙 (测试环境下)
arduino 复制代码
sudo systemctl stop firewalld
sudo systemctl disable firewalld
  • 关闭Selinux (测试环境下)
ini 复制代码
sudo vim /etc/sysconfig/selinux
Selinux=disabled
  • 关闭swap交换分区
bash 复制代码
sudo swapoff -a
#永久关闭swap
sudo vim /etc/fstab (注释swap这行)
#/dev/mapper/rl-swap   none   swap    defaults    0 0
  • 更新系统内核
bash 复制代码
sudo yum upgrade
#更新内核后需重启
  • 加载永久变量、移除空规则
bash 复制代码
sudo vim /etc/modules-load.d/k8s.conf
br_netfilter

#使配置文件生效
sudo systemctl restart systemd-modules-load.service
sudo iptables  -F
  • 修改linux内核(开启数据包转发功能)
ini 复制代码
sudo vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1

#加载配置文件
sudo sysctl -p /etc/sysctl.d/k8s.conf
  • 为kube-proxy设置前置条件
bash 复制代码
#下载ipvs转发包
sudo yum -y install ipvsadm

添加转发模块
sudo vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

#为文本添加权限,并使其生效
sudo chmod 755 /etc/sysconfig/modules/ipvs.modules
sudo /bin/bash /etc/sysconfig/modules/ipvs.modules
sudo lsmod | grep -e ip_vs -e nf_conntrack_ipv4
  • 设置时间同步
bash 复制代码
#系统默认自带chrony时间同步
sudo vim /etc/chrony.conf
server ntp.aliyun.com iburst  (在ntp行,添加阿里云ntp时间同步器)

#重启时间同步chrony
sudo systemctl restart chrony.d

二、安装集群前依赖工具

  • 下载yum仓库

    sudo yum -y install yum-utils

  • 添加docker-ce yum源

arduino 复制代码
sudo yum-config-manager \
     --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 下载docker-ce软件包(默认最新版本)

    sudo yum -y install docker-ce

  • 启动docker服务

bash 复制代码
sudo systemctl enable docker
sudo systemctl start docker
复制代码
注:虽然新版本已经弃用docker作容器运行时,但我们启动docker,可为后期拉取镜像上传镜像仓库做辅助作用,建议启动docker服务
  • 配置docker加速器
bash 复制代码
sudo vim /etc/docker/daemon.json
{
  "registry-mirrors": [
 "https://docker.xuanyuan.me"]
}
  • 载入配置文件,并重启docker服务
bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
  • 下载crictl工具软件包并解压 (该工具主要用来把容器运行时与kubelet交互,替代了旧版本的dockeshim)
bash 复制代码
#下载软件包
sudo wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz
#解压软件包,并生效crictl工具
sudo tar zxvf crictl-v1.26.1-linux-amd64.tar.gz -C /usr/local/bin
  • 生成containerd配置文件
arduino 复制代码
sudo containerd config default > /etc/containerd/config.toml
  • 修改pause、添加containerd加速器路径 (原文修改)
ini 复制代码
sudo vim /etc/containerd/config.toml
sandbox_image="registry.aliyuncs.com/google_containers/pause:3.10"
SystemdCgroup = true
config_path = "/etc/containerd/certs.d"

  • 配置containerd加速器路径
ini 复制代码
#创建在containerd目录下的路径文件
sudo mkdir -p /etc/containerd/certs.d/docker.io

#为containerd添加加速器地址
sudo vim /etc/containerd/certs.d/docker.io/hosts.toml
server = "https://docker.io"
[host.["https://docker.xuanyuan.me"]
 capabilities = ["pull", "resolve"]
  • 启动containerd容器
bash 复制代码
sudo systemctl deamon-reload
sudo systemctl enable containerd
sudo systemctl start containerd
  • 配置容器运行时和拉取镜像时使用containerd
bash 复制代码
#为容器运行时设置参数
sudo vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false

#重启containerd容器
sudo systemctl restart containerd
  • 设置容器运行时为containerd
arduino 复制代码
sudo crictl config runtime-endpoint unix:///run/containerd/containerd.sock

三、安装k8s的三大组件kubeadm、kubelet、kubectl

  • 定义k8s yum源
ini 复制代码
sudo vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key
  • 下载kubeadm、kubelet、kubectl软件包
rust 复制代码
sudo yum -y install kubelet  kubeadm  kubectl
  • 启动kubelet
bash 复制代码
sudo systemctl enable kubelet --now kubelet

四、k8s集群初始化

  • kubeadm初始化集群
ini 复制代码
sudo kubeadm init \
--apiserver-advertise-address=你的masterIP地址 \
--kubernetes-version=你的k8s版本 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket unix:///run/containerd/containerd.sock \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
复制代码
集群初始化过程需要等待一段时间
  • 启动kubelet
bash 复制代码
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
  • 集群完之后可以在集群上找到这个代码
  • 工作节点加入,这个跟kubectl启动代码一样,也可以在集群初始化完后查看到,然后直接把这个代码复制到工作节点上。
  • 观察集群状态 这时候可以观察到有些pod是处于悬挂状态和各节点状态为NotReady,只有集群主件才运行起的;这个因为我们这个集群还没有安装网络插件,pod无法获取网络,导致pod一直处于悬挂状态。

  • 安装网络插件(这里选择calico插件)
bash 复制代码
#创建operator,方便网络管理
sudo kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml

#下载资源到本地
sudo wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml

#修改pod网段地址
sudo vim custom-resources.yaml

这里修改为跟集群初始化指定pod-cidr网段一致,其他都不变

bash 复制代码
#把资源创建到集群中
sudo kubectl apply -f custom-resources.yaml
  • 再次查看pod状态,pod已经全部都是运行状态和各节点状态为Ready;该过程需要等待一段拉取镜像的时间。

恭喜各位热爱K8s的爱好者迈出了走向成功的第一步

关注博主,博主会定期更新文章

相关推荐
企鹅侠客4 小时前
k8s-dashboard-v2.0.0-beta6部署
云原生·容器·kubernetes
奋斗的蛋黄4 小时前
SRE 进阶:AI 驱动的集群全自动化排查指南(零人工干预版)
运维·人工智能·kubernetes·自动化
戮戮6 小时前
一次深入排查:Spring Cloud Gateway TCP 连接复用导致 K8s 负载均衡失效
tcp/ip·spring cloud·kubernetes·gateway·负载均衡·netty
能不能别报错8 小时前
K8s学习笔记(二十四) ingress
笔记·学习·kubernetes
能不能别报错8 小时前
K8s学习笔记(二十三) 网络策略 NetworkPolicy
笔记·学习·kubernetes
suknna9 小时前
记一次 Kubebuilder Operator 开发中的 CRD 注解超限问题
kubernetes
victory043111 小时前
K8S 安装 部署 文档
算法·贪心算法·kubernetes
能不能别报错1 天前
K8s学习笔记(二十二) 网络组件 Flannel与Calico
笔记·学习·kubernetes
lijun_xiao20091 天前
DevOps(devops/k8s/docker/Linux)学习笔记
docker·kubernetes·devops
k3s中文社区1 天前
K3s + Sysbox:让容器拥有“虚拟机的灵魂”
kubernetes·rancher·k3s