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


总结

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

相关推荐
小义_2 小时前
【Kubernetes】(十九)监控与升级
云原生·容器·kubernetes
炸炸鱼.3 小时前
Kubernetes Pod 深度理解:从入门到实战
云原生·容器·kubernetes·pod
云游牧者3 小时前
K8S网络策略全解-NetworkPolicy与GlobalNetworkPolicy实战
网络·容器·kubernetes·cni
宇明一不急4 小时前
k8s 常用的正则表达式
云原生·容器·kubernetes
云游牧者5 小时前
K8S-HPA自动扩缩容实战指南
云原生·容器·kubernetes·hpa·弹性伸缩·hpv
念恒123065 小时前
Docker(容器技术发展史)
docker·容器
成为你的宁宁5 小时前
【K8S存储管理:PV/PVC动态供应及NFS动态供给实战】
云原生·容器·kubernetes
容器魔方5 小时前
“驾驭工程”下一跳?JiuwenClaw AgentTeam开启“协同工程”全新范式
人工智能·云原生·容器·架构·开源
YuanDaima20485 小时前
Docker 核心架构与底层技术原理解析
运维·人工智能·docker·微服务·容器·架构·个人开发