kubeadm方式部署 k8s 1.21

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

目录

前言

一、基础知识

[Master 节点需要安装的内容](#Master 节点需要安装的内容)

[Node 节点需要安装的内容](#Node 节点需要安装的内容)

二、具体操作

1.准备工作

[(1)关 swap](#(1)关 swap)

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

[(3)并安装 bridge 模块:](#(3)并安装 bridge 模块:)

[(4)容器 runtime](#(4)容器 runtime)

2.安装kubelet

(1)创建临时目录

[(2)下载 kubeadm/kubelet/kubectl 1.21.10](#(2)下载 kubeadm/kubelet/kubectl 1.21.10)

(3)解压并安装

(4)设置可执行权限

[3. 安装 kubeadm, kubelet, kubectl](#3. 安装 kubeadm, kubelet, kubectl)

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

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

(3)验证版本

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

[(5)启动 kubelet](#(5)启动 kubelet)

(6)如需要移除此版本

[(7) 预拉取镜像](#(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这个命令,会初始化所有内容


总结

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

相关推荐
小肥君16 小时前
docker无法连接GPU资源解决方案
docker·容器·eureka
liux352817 小时前
K8s存储卷全解析:PV/PVC/StorageClass 关系
kubernetes
江华森19 小时前
从零搭建 Kubernetes 集群并部署 Kuboard v3 管理面板 —— 国内环境完整实战教程
容器·kubernetes
友莘居士21 小时前
KingbaseES Docker速查表
运维·docker·容器
小肥君1 天前
docker镜像配置
运维·docker·容器
某林2121 天前
Isaac Lab (v2.3.2) Docker 本地化部署与底层排障全解析
运维·docker·容器·架构·iassc
iDao技术魔方1 天前
WSL 配 GPU 用 Docker 的折腾指南(2026 年版)
运维·docker·容器
步步为营DotNet1 天前
.NET 11 中 Native AOT 在云原生场景下的深度剖析与实践
云原生·.net
跳动的世界线1 天前
WSL 2 + Docker 本地全栈开发环境配置指南
运维·docker·容器