《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的爱好者迈出了走向成功的第一步

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

相关推荐
极客奇点8 小时前
容器化成本优化:K8s资源请求与限制的黄金法则——从资源画像分析到25%成本削减的实战指南
云原生·容器·kubernetes·降本增效·成本优化
LCY1338 小时前
Linux系统部署k8s集群
linux·运维·kubernetes
TransPlus9 小时前
K8s集群两者不同的对外暴露服务的方式
云原生·容器·kubernetes
only_Klein11 小时前
openeuler24.03部署k8s1.32.7集群(一主两从)
linux·运维·容器·kubernetes
塑遂15 小时前
Kubernetes高级调度01
容器·kubernetes
东风微鸣16 小时前
AI 赋能的故障排除:技术趋势与实践
docker·云原生·kubernetes·可观察性
杰克逊的日记1 天前
k8s的csi对接GPFS
云原生·容器·kubernetes·存储·gpfs
岚天start1 天前
云服务器以域名形式访问机房Kubernetes集群服务之解决方案
nginx·docker·kubernetes·kubesphere·解决方案·云服务器·机房
终端行者1 天前
k8s之ingress定义https访问方式
容器·https·kubernetes
东风微鸣2 天前
AI 赋能的云原生应用:技术趋势与实践
docker·云原生·kubernetes·可观察性