比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。
目录
[Master 节点需要安装的内容](#Master 节点需要安装的内容)
[Node 节点需要安装的内容](#Node 节点需要安装的内容)
[(1)关 swap](#(1)关 swap)
[(3)并安装 bridge 模块:](#(3)并安装 bridge 模块:)
[(4)容器 runtime](#(4)容器 runtime)
[(2)下载 kubeadm/kubelet/kubectl 1.21.10](#(2)下载 kubeadm/kubelet/kubectl 1.21.10)
[3. 安装 kubeadm, kubelet, kubectl](#3. 安装 kubeadm, kubelet, kubectl)
[(1)使用阿里云等国内源安装指定版本的 Kubernetes 组件。](#(1)使用阿里云等国内源安装指定版本的 Kubernetes 组件。)
[(2) 安装指定版本,例如 1.21.10](#(2) 安装指定版本,例如 1.21.10)
[(4) 阻止这三者被意外升级](#(4) 阻止这三者被意外升级)
[(5)启动 kubelet](#(5)启动 kubelet)
[(7) 预拉取镜像](#(7) 预拉取镜像)
前言
之前做的部署了,很久之前也做过二进制的部署。对比起来,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这个命令,会初始化所有内容
总结
大概一年前部署的,没有及时记录成文章,找都不好找,再也不偷懒了,补上补上,都补上!