使用kubeadm部署kubernetes1.27.1版本教程

 更新时间:2025年08月13日 09:08:16   作者:珂玥c  
文章概述了K8s集群搭建的准备与两种部署方式:kubeadm(快速)和二进制(手动),涵盖单master配置、硬件要求、网络设置及初始化流程,适用于测试环境,提供参考经验

一、搭建前的准备

1. 搭建k8s的平台规划

单master集群:只有一个master,管理多个node节点。

多master集群:拥有多个master,管理多个node节点。高可用模式。比单master集群多一个负载均衡的步骤。

 

test环境搭建,因此采用单master集群,如后续有需要可再增加master。

2. 服务器硬件配置要求

  • master节点:
测试环境生产环境
CPU28
内存

4G

16G
硬盘20G100G
  • node节点:
测试环境生产环境
CPU416
内存8G

64G

硬盘

40G

500G

3. 搭建部署的方式

目前常见的有两种方式:

1)kubeadm方式

  • kubeadm是k8s的一个部署工具,部署方式比较简单。只需要用到两个命令,kubeadm init(初始化)和 kubeadm join(将node节点加入到master中)。可以快速部署k8s集群。
  • 优点是快速,无需额外自己处理。比较常见且节约时间

官方链接:https://kubernetes.io/docs/reference/setup-tools/kubeadm/

2)二进制方式

  • 从 github 下载二进制包,手动部署每个组件,过程比较麻烦。
  • 优点是,遇到问题后可以精准定位,有利于后续维护。毕竟是自己一步一步操作的,更清楚里面的弯弯绕绕~

二、搭建流程

1. kubeadm搭建方式

大致流程:

1)创建一个master节点 kubeadm init

2)将node节点加入到当前集群中 kubeadm join <master节点的ip和端口>

3)配置网络插件和测试k8s集群

机器配置:

  • -- 准备了一台master,一台node。硬件配置CPU 2核,内存251G,硬盘500G
  • -- 机器之间可以互相ping通,操作系统为CentOS7
  • -- 禁止swap分区
  • -- 可以拉取镜像
master: 192.10.18.102
node: 192.10.18.103

a. 准备工作,系统初始化

由于自己用的是之前配置好的旧物理机,所以跳过此流程。如果需要用虚拟机的话。要进行安装3台Centos7.x的操作系统,之后进行如下初始化:

  • 1)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 2)关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config   #永久关闭
setenforce 0  #临时关闭
  • 3)关闭swap
swapoff -a  #临时关闭
sed -ri 's/."swap."/#&/' /etc/fstab  #永久关闭
  • 4)设置主机名
hostnamectl set-hostname <hostname>
  • 5)只在master添加hosts
cat >> /etc/hosts << EOF
ip master
ip node1
ip node2
EOF
  • 6)将桥接的ipv4流量传递到iptables的链,配置内核参数和优化 
cat > /etc/sysctl.d/k8s.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF


sysctl --system   #生效命令
  • 7)时间同步
yum install ntpdate -y
ntpdate time.windows.com
  • 8)安装ipset、ipvsadm 
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

cat > /etc/modules-load.d/ipvs.conf <<EOF
# Load IPVS at boot
ip_vs

ip_vs_rr

ip_vs_wrr

ip_vs_sh

nf_conntrack

nf_conntrack_ipv4

EOF


systemctl enable --now systemd-modules-load.service
###注!!!若此处失败,可能是因为内核版本低导致的,可升级内核后,再执行此命令#####


#确认内核模块加载成功
lsmod |egrep "ip_vs|nf_conntrack_ipv4"

b. 升级内核(根据自己情况进行选择,满足时可不升级)

  • 1)查看系统版本
cat /etc/redhat-release
  • 2)查看当前内核版本
uname -r
  • 3)检查是否安装ELRepo
yum  --disablerepo="*"  --enablerepo="elrepo-kernel"  list  available

看到error说明没有安装ELRepo

  • 4)升级安装ELRepo

安装

yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

或升级

rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
  • 5)查看可用安装包, 长期维护版本为lt,最新主线稳定版为ml
yum  --disablerepo="*"  --enablerepo="elrepo-kernel"  list  available
  • 6)安装最新的内核
yum  --enablerepo=elrepo-kernel  install  -y  kernel-lt
  • 7)查看可用内核版本及启动顺序
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
  • 8)安装辅助工具(非必须,有些系统自带该工具):grub2-pc
yum install -y grub2-pc
  • 9)设置内核默认启动顺序
grub2-set-default 0
vim /etc/default/grub
GRUB_DEFAULT=0  #这里从原来的saved改为0
  • 10)生成grub配置文件

# 运行grub2-mkconfig命令来重新创建内核配置

grub2-mkconfig -o /boot/grub2/grub.cfg
  • 11)重启机器
reboot
  • 12)查看内核版本是否正确
uname -r
  • 13)安装 yum-utils 工具

当系统安装的内核大于3个时,会自动删除旧的内核版本或自己查看已经安装的内核后手动yum  remove -y 进行删除旧版本

yum install -y  yum-utils
  • 14)删除旧的工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64
  • 15)安装新版本的工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64
  • 16)查看已安装内核
rpm -qa | grep kernel

c. 设置一下ipv4,否则会失败(此处为坑,不设置无法初始化成功)

vim /etc/sysconfig/modules/ipvs.modules

cat /etc/sysconfig/modules/ipvs.modules
nf_conntrack

systemctl enable --now systemd-modules-load.service

lsmod |egrep "ip_vs|nf_conntrack_ipv4"

lsmod |egrep "ip_vs|nf_conntrack_ipv"


d. 安装containerd

1)安装依赖软件包

yum -y install yum-utils device-mapper-persistent-data lvm2

2)添加阿里Docker源

[root@k8s-master ~]
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3)添加overlay和netfilter模块

cat >>/etc/modules-load.d/containerd.conf <<EOF

overlay

br_netfilter

EOF
modprobe overlay

modprobe br_netfilter

4)安装Containerd,这里安装最新版本(1.5版本及以下不可使用)

yum -y install containerd.io

5)创建Containerd的配置文件

mkdir -p /etc/containerd

containerd config default > /etc/containerd/config.toml

sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml

sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml

6)启动containerd

systemctl enable containerd

systemctl start containerd

e.安装kubectl、kubelet、kubeadm

1)添加阿里kubernetes源 

vim /etc/yum.repos.d/kubernetes.repo 

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

2)安装kubectl、kubelet、kubeadm

查看所有的可用版本

 yum list kubelet --showduplicates |grep 1.27

这里安装当前最新版本1.27.1

yum -y install kubectl-1.27.1 kubelet-1.27.1 kubeadm-1.27.1

设置开机自启kubelet(此时并没有kubelet配置文件无法启动,正常状况)

systemctl enable kubelet

systemctl start kubelet

f. master节点进行初始化操作

1)查看k8s v1.27.1初始化所需要的镜像

kubeadm config images list --kubernetes-version=v1.27.1

2)初始化命令

kubeadm init --kubernetes-version=1.27.1 --apiserver-advertise-address=10.142.50.190 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

注:pod的网段为: 10.244.0.0/16,api server地址为Master本机IP,网段可以自定义,不冲突即可。

参数详解:

指定版本。(可按需修改版本)

  • -- 设置了apiserver,即当前节点的ip。
  • -- 指定镜像仓库地址,拉取镜像。
  • -- service-cidr是svc网络  kubectl get svc #查看svc信息   

默认使用10.96.0.0/12

  • -- pod-network-cidr 是pod网络    kubectl get pods -o wide #查看pod网络信息
  • -- k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,默认使用10.244.0.0/16

此操作,等待时间较长

3)成功返回信息,执行返回内容即可

Your Kubernetes control-plane has initialized successfully!

 
To start using your cluster, you need to run the following as a regular user:
 

  mkdir -p $HOME/.kube

  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:


kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \

  --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

master节点执行

  mkdir -p $HOME/.kube

  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点执行

kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \

  --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2. 二进制搭建流程

  • a. 创建多台虚拟机,安装linux操作系统
  • b. 操作系统初始化(各种关关关)
  • c. 为etcd和apiserver自签证书(相当于门禁卡,保证互通)
  • d. 部署etcd集群
  • e. 部署master组件
kube-apiserver   kube-controller-manager   kube-scheduler  etcd
  • f. 部署node组件
kubelet   kube-proxy  docker  etcd 
  • g. 部署集群网络

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 云原生技术kubernetes调度单位pod的使用详解

    云原生技术kubernetes调度单位pod的使用详解

    这篇文章主要介绍了云原生技术kubernetes调度单位pod的使用详解,帮助大家更好的理解和学习使用K8S,感兴趣的朋友可以了解下
    2021-03-03
  • k8s部署Pyroscope并分析golang性能瓶颈(最新推荐)

    k8s部署Pyroscope并分析golang性能瓶颈(最新推荐)

    这篇文章主要介绍了k8s部署Pyroscope并分析golang性能瓶颈,Pyroscope支持多种编程语言并提供了丰富的性能数据,可以帮助我们跟踪应用程序的执行情况,并根据收集到的数据来识别性能瓶颈,需要的朋友可以参考下
    2023-04-04
  • Rancher部署配置开源Rainbond云原生应用管理平台

    Rancher部署配置开源Rainbond云原生应用管理平台

    这篇文章主要为大家介绍了Rancher部署配置开源Rainbond云原生应用管理平台,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Kubernetes组件和架构简介

    Kubernetes组件和架构简介

    Kubernetes是google开源的容器编排工具,本质是一组服务器集群,在集群的各个节点上运行程序来进行容器进行管理,最终实现资源管理智能化、自动化,这篇文章主要介绍了Kubernetes组件和架构简介,需要的朋友可以参考下
    2023-09-09
  • K8S中五种控制器的介绍以及使用

    K8S中五种控制器的介绍以及使用

    这篇文章主要给大家介绍了关于K8S中五种控制器及使用的相关资料,控制器 又称之为工作负载,本文通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Rainbond功能架构及应用管理官方文档介绍

    Rainbond功能架构及应用管理官方文档介绍

    这篇文章主要为大家介绍了Rainbond功能机构及使用官方文档,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • k8s容器资源限制方式

    k8s容器资源限制方式

    K8s通过request和limit管理容器资源,内存单位为字节,CPU为核心数,内存超限会终止容器,CPU超限不影响,LimitRange设namespace资源上下限,ResourceQuota限制总资源配额及Pod数量,二者均在创建时生效,不影响已有资源
    2025-07-07
  • K8s容器的定向调度与亲和性详解

    K8s容器的定向调度与亲和性详解

    这篇文章主要介绍了K8s容器的定向调度与亲和性,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • k8s之ingress-nginx详解和部署方案

    k8s之ingress-nginx详解和部署方案

    Ingress是一种向k8s集群外部的客户端公开服务的方法,下面这篇文章主要给大家介绍了关于k8s之ingress-nginx详解和部署方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Linux安装Kubernetes(k8s)超详细教程

    Linux安装Kubernetes(k8s)超详细教程

    Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务,通过Kubernetes能够进行应用的自动化部署和扩缩容,这篇文章主要给大家介绍了关于Linux安装Kubernetes(k8s)的相关资料,需要的朋友可以参考下
    2024-07-07

最新评论