前言

不要问,只要做™
不知道问我现在有什么用
我就单纯想折腾

禁用 SWAP 交换分区

您可能了解硬盘驱动器上的交换空间,操作系统尝试将其当作 RAM 来使用。操作系统尝试将访问频率较低的数据移至交换空间,以释放 RAM 以执行更直接的任务。然而,访问交换区中的数据比访问 RAM 中的数据慢得多,因为硬盘驱动器比 RAM 慢。
Kubernetes 根据对可用资源的了解来安排工作。如果工作负载开始使用交换,Kubernetes 就很难做出准确的调度决策。因此,建议在安装 Kubernetes 之前禁用 SWAP 分区。

查看内存分区

1
sudo free -m

暂时禁用 SWAP 交换分区

1
sudo swapoff -a

永久关闭 SWAP 交换分区

  • 直接注释掉 /swap 行即可
1
sudo vim /etc/fstab

确认 SWAP 分区已关闭

  • 重启后确认 SWAP 分区已关闭
1
2
sudo reboot
sudo free -m

设置主机名

修改主机名称

当我们使用 Kubernetes 集群时,我们必须为节点提供唯一的主机名,以便 Kubernetes 可以使用这些名称来识别节点。

  1. 设置主机名(hostname)
1
sudo hostnamectl set-hostname "hostname"
  1. 刷新 Bash 会话
1
exec bash

修改主机名称解析

设置主机名还不够。我们还必须将主机名映射到它们的 IP 地址。您应该更新/etc/hosts所有节点(或至少主节点)的文件。

  1. 更新 /etc/hosts 文件
1
sudo vim /etc/hosts

设置 IPV4 网桥

要在所有节点上配置 IPV4 网桥

加载内核模块

1
2
3
4
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
  • overlay: 用于实现容器的文件系统层叠。
  • br_netfilter: 用于配置 Linux 桥接网络的过滤规则。

加载其他必要的内核模块

1
2
sudo modprobe overlay
sudo modprobe br_netfilter

配置 sysctl 参数

1
2
3
4
5
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
  • net.bridge.bridge-nf-call-iptables: 允许 iptables 处理桥接流量。
  • net.bridge.bridge-nf-call-ip6tables: 允许 ip6tables 处理桥接流量。
  • net.ipv4.ip_forward: 启用 IPv4 转发。

加载 sysctl 参数

  • 应用上述配置的 sysctl 参数,确保参数在系统重启后仍然有效。
1
sudo sysctl --system

安装 Kubernetes 组件

让我们在每个节点上安装 kubelet、kubeadm 和 kubectl 以创建 Kubernetes 集群。它们在管理 Kubernetes 集群中发挥着重要作用。
Kubelet 是在每个节点上运行的节点代理,负责确保容器按照 Pod 规范的指定在 Pod 中运行。(Pod 是 Kubernetes 集群中最小的可部署单元)。
kubeadm 用于引导 Kubernetes 集群,包括设置主节点并帮助工作节点加入集群。
Kubectl 是 Kubernetes 的 CLI 工具,用于运行命令来执行各种操作,例如直接从终端部署应用程序、检查资源和管理集群操作。

添加 apt 依赖包

  1. 更新 apt 软件源
1
sudo apt-get update
  1. 确认软件包依赖安装完成
1
sudo apt-get install -y apt-transport-https ca-certificates curl

添加 Kubernetes 软件包源

  1. 创建一个目录,在其中存储一个特殊密钥,用于验证 Kubernetes 包的真实性。
1
sudo mkdir /etc/apt/keyrings
  1. Google 获取公钥并将其存储在我们在上一步中创建的文件夹中。
1
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  1. 添加 Kubernetes 软件包源
1
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  1. 更新 apt 软件源
1
sudo apt-get update

安装 Kubernetes 组件

1
sudo apt install -y kubelet kubeadm kubectl
  • 需要使用特定版本指定版本安装
1
sudo apt install -y kubelet=1.29.0-1.1 kubeadm=1.29.0-1.1  kubectl=1.29.0-1.1

配置 Docker 环境

安装 Docker

Docker平台允许您在容器内创建、分发和运行应用程序。
这些容器提供了一个轻量级和便携式环境,确保在各种设置中保持一致的性能。
Docker 作为容器运行时,通过促进容器化应用程序的高效管理和部署,在 Kubernetes 中发挥着至关重要的作用。

  1. 安装 Docker 简简单单一条指令
1
sudo apt install docker.io
  1. 配置 Docker 开机启动
1
2
sudo systemctl start docker
sudo systemctl enable docker

配置 containerd

  1. 创建 containerd 配置文件夹
1
sudo mkdir /etc/containerd
  1. 创建默认配置文件并保存为 config.toml
1
sudo sh -c "containerd config default > /etc/containerd/config.toml"
  1. 修改 config.toml 文件,将 "SystemdCgroup" 设置为 true
1
sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml

重新启动服务

  • 重新启动 containerdkubelet 服务,以应用对 containerd 配置文件的更改。
1
2
sudo systemctl restart containerd.service
sudo systemctl restart kubelet.service

启用 kubelet 服务自启动

1
sudo systemctl enable kubelet.service

主节点上初始化 Kubernetes 集群

下载 Kubernetes 组件镜像

1
sudo kubeadm config images pull

初始化主节点

  • 按照自己需求修改内网地址
  • --pod-network-cidr 标志设置 pod 网络的 IP 地址范围。
1
sudo kubeadm init --pod-network-cidr=192.168.8.0/24

配置 kubectl

  1. 创建 .kube 目录
1
mkdir -p $HOME/.kube
  1. 复制集群管理配置文件到用户目录
1
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  1. 更改配置文件的所有权,以便用户拥有交互权限
1
sudo chown $(id -u):$(id -g) $HOME/.kube/config

配置 kubectl 和 Calico

部署 Calico Operator

  • 使用以下命令在主节点上部署 Calico Operator
1
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml

下载 Calico 自定义资源文件

1
curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml -O

修改 CIDR 地址

  • 修改下载的自定义资源中的 CIDR 以匹配您的 Pod 网络
1
sed -i 's/cidr: 192\.168\.0\.0\/16/cidr: 192.168.8.0\/24/g' custom-resources.yaml

创建 Calico 资源

1
kubectl create -f custom-resources.yaml

检查 Calico 组件运行状态

1
kubectl get pods -n kube-system

参考 & 引用

https://www.cherryservers.com/blog/install-kubernetes-on-ubuntu