news 2026/5/16 11:15:16

kubeadm方式部署 k8s 1.21

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kubeadm方式部署 k8s 1.21

比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。

目录

前言

一、基础知识

Master 节点需要安装的内容

Node 节点需要安装的内容

二、具体操作

1.准备工作

(1)关 swap

(2)内核参数调优(必做)

(3)并安装 bridge 模块:

(4)容器 runtime

2.安装kubelet

(1)创建临时目录

(2)下载 kubeadm/kubelet/kubectl 1.21.10

(3)解压并安装

(4)设置可执行权限

3. 安装 kubeadm, kubelet, kubectl

(1)使用阿里云等国内源安装指定版本的 Kubernetes 组件。

(2) 安装指定版本,例如 1.21.10

(3)验证版本

(4) 阻止这三者被意外升级

(5)启动 kubelet

(6)如需要移除此版本

(7) 预拉取镜像

(8)master执行初始化集群

(9)给它搞个日志

总结


前言

之前做的部署了,很久之前也做过二进制的部署。对比起来,kubedam确实更迅速更方便,个人认为kube-proxy 作为 Pod 运行更省心


一、基础知识

Master 节点需要安装的内容

kubeadm 功能:用来初始化集群(kubeadm init)、加入节点(kubeadm join)、升级集群等。

kubelet 功能:负责节点上 Pod 的生命周期管理。

kubectl 功能:命令行客户端,用于操作 Kubernetes API。

container Runtime 功能:kubelet 需要容器运行时来启动 Pod。

CNI插件(Calico/Flannel) 功能:Pod 网络通信。

Node 节点需要安装的内容

kubeadm 功能:用 kubeadm join 将节点加入集群。

kubelet 功能:管理 Node 上的 Pod 生命周期,与 Master 通信。

kubectl(可选) 功能:Node 节点不一定需要安装 kubectl,但方便调试,可以安装。

Container Runtime 功能:Node 节点的核心依赖,所有 Pod 都需要通过容器运行时启动。

CNI 插件 功能:Node 节点需要 CNI 插件,Pod 网络才会正常工作。

二、具体操作

1.准备工作

(1)关 swap

sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

(2)内核参数调优(必做)

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0 EOF sudo sysctl --system

(3)并安装 bridge 模块:

sudo modprobe br_netfilter echo br_netfilter | sudo tee /etc/modules-load.d/br_netfilter.conf

(4)容器 runtime

sudo apt-get install containerd -y sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl enable containerd

2.安装kubelet

(1)创建临时目录

mkdir -p /tmp/k8s && cd /tmp/k8s

(2)下载 kubeadm/kubelet/kubectl 1.21.10

curl -LO https://dl.k8s.io/v1.21.10/kubernetes-node-linux-amd64.tar.gz

(3)解压并安装

tar -xzvf kubernetes-node-linux-amd64.tar.gz sudo cp kubernetes/node/bin/kubeadm /usr/local/bin/ sudo cp kubernetes/node/bin/kubelet /usr/local/bin/ sudo cp kubernetes/node/bin/kubectl /usr/local/bin/

(4)设置可执行权限

sudo chmod +x /usr/local/bin/kubeadm /usr/local/bin/kubelet /usr/local/bin/kubectl sudo mkdir -p /etc/systemd/system/kubelet.service.d
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/home/ Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/local/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reexec sudo systemctl start kubelet sudo systemctl enable kubelet

3. 安装 kubeadm, kubelet, kubectl

(1)使用阿里云等国内源安装指定版本的 Kubernetes 组件。

sudo apt-get update && sudo apt-get install -y apt-transport-https curl

# 添加 Kubernetes 阿里云 GPG **

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

# 添加 Kubernetes 阿里源

sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF sudo apt-get update

(2) 安装指定版本,例如 1.21.10

sudo apt-get install -y kubelet=1.21.10-00 kubeadm=1.21.10-00 kubectl=1.21.10-00

(3)验证版本

kubeadm version kubelet --version kubectl version --client

(4) 阻止这三者被意外升级

sudo apt-mark hold kubelet kubeadm kubectl

(5)启动 kubelet

sudo systemctl start kubelet sudo systemctl enable kubelet

(6)如需要移除此版本


这一步是防止临时要改版本而记录的,如果不需要,直接去执行7就行。

查看被锁定的包:会显示出所有包的名字

sudo apt-mark showhold

取消锁定

sudo apt-mark unhold kubelet kubeadm kubectl

移除

sudo apt-get remove -y kubelet kubeadm kubectl

(7) 预拉取镜像

kubeadm config images pull --kubernetes-version=v1.21.10

(8)master执行初始化集群

sudo kubeadm init \ --kubernetes-version=v1.21.10 \ --pod-network-cidr=192.168.0.0/16

(9)给它搞个日志

sudo kubeadm init --kubernetes-version=v1.21.10 --pod-network-cidr=192.168.0.0/16 |& tee kubeadm-init.log

注意:这里 pod 网络要写 192.168.0.0/16,Calico 默认就是这个网段。--pod-network-cidr 不是指你服务器的 IP 段,而是 集群中 Pod 所使用的虚拟网络段,必须和宿主机实际使用的网段 不冲突。集群启用后慎用init这个命令,会初始化所有内容


总结

大概一年前部署的,没有及时记录成文章,找都不好找,再也不偷懒了,补上补上,都补上!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 11:13:22

怎样轻松掌握macOS OBS虚拟摄像头:新手必备的完整配置手册

怎样轻松掌握macOS OBS虚拟摄像头&#xff1a;新手必备的完整配置手册 【免费下载链接】obs-mac-virtualcam ARCHIVED! This plugin is officially a part of OBS as of version 26.1. See note below for info on upgrading. &#x1f389;&#x1f389;&#x1f389;Creates …

作者头像 李华
网站建设 2026/5/16 11:12:14

draw.io桌面版终极指南:免费跨平台Visio VSDX文件编辑解决方案

draw.io桌面版终极指南&#xff1a;免费跨平台Visio VSDX文件编辑解决方案 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为不同操作系统间的Visio文件兼容性问题而烦恼吗…

作者头像 李华
网站建设 2026/5/16 11:10:27

C#调用 AI学习从0开始-第1阶段(基础与工具)-第3天FewShot少样本测试

1.什么是Few-Shot Few-Shot也就是在提词中写的几个示例或者样本&#xff0c;让AI理解你想要得格式和输出风格&#xff0c;然后应用到新的输出上。 2.为什么需要Few-Shot 因为不给示例&#xff0c;直接让AI做&#xff0c;输出不稳定&#xff0c;AI可能理解偏差。 给出2-5个示例&…

作者头像 李华
网站建设 2026/5/16 11:09:22

告别‘面板失联’:在Armbian上用UFW为1Panel设置精细端口规则的全记录

深度防护&#xff1a;在Armbian上为1Panel构建UFW精细化安全策略 当你的Armbian服务器暴露在公网环境中&#xff0c;简单的端口放行已无法满足安全需求。本文将带你超越基础命令&#xff0c;探索如何为1Panel管理面板设计一套兼顾便利与安全的UFW防火墙策略。 1. 理解Armbian…

作者头像 李华
网站建设 2026/5/16 11:07:35

Trae IDE中Git 使用保姆级攻略,从安装到首次提交,新手零踩坑

作为字节跳动推出的 AI 原生 IDE,Trae 凭借智能编码、无缝迁移等优势,成为越来越多开发者的首选工具。但很多新手在 Trae 中使用 Git 时,常会遇到「git 命令不识别」「仓库初始化失败」等问题,尤其是各类项目的版本管理,踩坑后往往无从下手。 本文结合本人实际操作(从报…

作者头像 李华