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

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

相关推荐
Johny_Zhao10 分钟前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
木鱼时刻1 天前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
chuanauc2 天前
Kubernets K8s 学习
java·学习·kubernetes
庸子2 天前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
李白你好2 天前
高级运维!Kubernetes(K8S)常用命令的整理集合
运维·容器·kubernetes
Connie14512 天前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
伤不起bb3 天前
Kubernetes 服务发布基础
云原生·容器·kubernetes
别骂我h3 天前
Kubernetes服务发布基础
云原生·容器·kubernetes
weixin_399380693 天前
k8s一键部署tongweb企业版7049m6(by why+lqw)
java·linux·运维·服务器·云原生·容器·kubernetes
斯普信专业组3 天前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl