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

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

相关推荐
极小狐7 分钟前
如何减少极狐GitLab 容器镜像库存储?
运维·git·rpc·kubernetes·ssh·gitlab·terraform
韩先超2 小时前
2025年3月,韩先超对国网宁夏进行Python线下培训
python·ai·云原生·kubernetes·devops
小马爱打代码5 小时前
K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析
云原生·容器·kubernetes
C-200210 小时前
使用Deployment部署运行Nginx和Apache服务
运维·kubernetes·apache
斯普信专业组10 小时前
基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(下)
云原生·kubernetes·apache
张青贤18 小时前
k8s的pod挂载共享内存
云原生·容器·kubernetes
和计算机搏斗的每一天18 小时前
k8s术语之secret
云原生·容器·kubernetes
韩先超18 小时前
2022年8月,韩先超对中移信息进行微服务架构原理(Docker+k8s+DevOps+Go等)培训
docker·微服务·kubernetes·devops
_板栗_20 小时前
k8s 中 deployment 管理的多个 pod 构成集群吗
云原生·容器·kubernetes
和计算机搏斗的每一天1 天前
k8s术语之Horizontal Pod Autoscaling
云原生·容器·kubernetes