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这个命令,会初始化所有内容


总结

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

相关推荐
运维开发故事12 小时前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson2 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
阿里云云原生2 天前
AI 开发新常态:当 Cursor、Claude、Codex 并行,如何统一管理散落的 Skill 资产?
云原生·ai编程
探索云原生3 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭3 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美3 天前
从edge-trigger到level-trigger,谈谈 Kubernetes controller 的开发范式
云原生
阿里云云原生3 天前
深度解构:当 Append-only 的 SLS 遇上 Update/Delete,是如何实现设计权衡的?
云原生
Java之美4 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
秋播4 天前
nerdctl推送rancher本地镜像到harbor
云原生