在 Ubuntu 22.04 上安装 Kubernetes(Kubeadm 安装方式)

server/2025/1/23 2:54:08/

使用 Kubeadm、Containerd 和 Calico 网络插件搭建 Kubernetes 集群教程

1.安装前准备(所有节点执行)
  • 关闭防火墙
sudo systemctl disable --now ufw
  • 设置服务时区
# 设置为亚洲的上海时区
sudo timedatectl set-timezone Asia/Shanghai
# 重启时间同步服务
sudo systemctl restart systemd-timesyncd.service
# 确保时间同步服务正常运行
timedatectl status
  • 关闭swap分区
vim /etc/fstab
注释掉下面的内容
最后执行:sudo swapoff -a

在这里插入图片描述

  • 关闭SELinux
sudo apt install -y policycoreutils
# 检查selinux关闭状态
sestatus
  • 配置hosts
# 修改机器名称
vim /etc/hostname 
# 修改hosts
vim /etc/hosts
# 添加以下内容,这里的ip地址和hostname根据实际情况填写
192.168.80.130 k8s-master
192.168.80.131 k8s-node
  • 转发 IPv4 并让 iptables 看到桥接流量
#转发 IPv4 并让 iptables 看到桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter
lsmod | grep br_netfilter #验证br_netfilter模块
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
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# 应用 sysctl 参数而不重新启动
sudo sysctl --system

通过运行以下命令确认 net.bridge.bridge-nf-call-iptables 、net.bridge.bridge-nf-cal1-ip6tables 和 net.ipv4.ip_forward 系统变量在你的sysctl 配置中被设置为 1:

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

本次安装的是containerd的容器运行时,下载地址:https://github.com/containerd/containerd/releases/download/v1.7.13/crictl-containerd-cni-1.7.13-linux-amd64.tar.gz,可以通过下面命令进行下载:

curl -LO https://github.com/containerd/containerd/releases/download/v1.7.13/cri-containerd-cni-1.7.13-linux-amd64.tar.gz

然后解压到根目录:

sudo tar -zxvf cri-containerd-cni-1.7.13-linux-amd64.tar.gz -C /

然后可以通过下面这行命令查看安装的版本:

containerd -v

通过下面命令创建配置文件目录:

sudo mkdir /etc/containerd

然后通过下面命令先将配置文件创建出来:

先运行:containerd config default

再运行:containerd config default | sudo tee /etc/containerd/config.toml

然后修改一下这个文件:

sudo vi /etc/containerd/config.toml

大概在65行位置修改 sandbox_image 值为 registry.aliyuncs.com/google_containers/pause:3.9 :

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"

大概在137行位置修改 SystemdCgroup 为 true:

 Root = ""ShimCgroup = ""SystemdCgroup = true

然后保持推出之后通过下面命令启动containerd:

sudo systemctl enable --now containerd

设置containerd配置镜像加速器:

https://www.cnblogs.com/fsdstudy/p/18355827

  • 安装Kubernetes

配置并安装apt包
以下内容直接在官网复制的,安装的1.28版本,参考连接:

https://v1-28.docs.kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:

sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

添加 Kubernetes apt 仓库。请注意,此仓库仅包含适用于 Kubernetes 1.28 的软件包;对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本为匹配你所需要的次要版本(你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update
sudo apt-get install-y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

通过下面命令查看安装的kubeadm版本:

kubeadm version

在这里插入图片描述

2.初始化集群(在主节点上执行)
  • 初始化集群

上一步已经确定了安装v1.28.15的版本,接下来可以在主节点上执行这行命令将主节点的镜像拉取下来:

sudo kubeadm config images pull
--image-repository=registry.aliyuncs.com/google_containers
--kubernetes-version=v1.28.15
--cri-socket unix:///run/containerd/containerd.sock

成功后可以看到:

root@k8s-master:~/dny# crictl images
IMAGE                                                             TAG                 IMAGE ID            SIZE
registry.aliyuncs.com/google_containers/coredns                   v1.10.1             ead0a4a53df89       16.2MB
registry.aliyuncs.com/google_containers/etcd                      3.5.15-0            2e96e5913fc06       56.9MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.28.15            9dc6939e7c573       34.4MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.28.15            10541d8af03f4       33.3MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.28.15            ba6d7f8bc25be       28.3MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.28.15            9d3465f8477c6       18.5MB
registry.aliyuncs.com/google_containers/pause                     3.9                 e6f1816883972       322kB

接下来通过下面命令初始化集群(注意修改主节点IP地址和版本号): (主节点执行)

sudo kubeadm init \
--apiserver-advertise-address=192.168.80.130 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.15 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock

在这里插入图片描述

接下来,在本机上执行:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后在所有工作节点上执行这行命令(注意修改为自己的token),注意后面拼接上 --cri-socket=unix:///var/run/containerd/containerd.sock 参数:

kubeadm join 192.168.80.130:6443 --token gyknuw.pb20crsddgovgiqm \--discovery-token-ca-cert-hash sha256:cbd8b9102a6dabac26c1d9a4d60b721720de89b08b5a4df45d8678921c0c8ce4 \--cri-socket=unix:///run/containerd/containerd.sock

然后就可以通过下面命令在主节点上查看所有节点:

kubectl get nodes -o wide

在这里插入图片描述

kubectl get pod -A

在这里插入图片描述

  • 安装calico网络组件

安装Tigera Calico操作符和自定义资源定义:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/tigera-operator.yaml

在这里插入图片描述

接下来需要安装必须的客户端资源,因为我们pod的网段与calico官网不相同,所以先将这个文件下载下来然后更改一下网段地址:

# 下载客户端资源文件
curl -LO https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/custom-resources.yaml
# 修改pod的网段地址
sed -i 's/cidr: 192.168.0.0/cidr: 10.244.0.0/g' custom-resources.yaml
# 这里的网段地址10.244.0.0是通过以下方式查询的:
root@k8s-master:~/dny/k8s# kubectl get node -oyaml |grep CIDRpodCIDR: 10.244.0.0/24podCIDRs:podCIDR: 10.244.1.0/24  # 这个网段CIDR是/24,custom-resources.yaml中的网段要包含10.244.1.0/24才行podCIDRs:

在这里插入图片描述

最后根据这个文件创建资源,执行下面这行命令:

kubectl apply -f custom-resources.yaml

然后可以开始使用下面这行命令监控创建过程:

watch kubectl get all -o wide -n calico-system

在这里插入图片描述

如果想要在node节点执行kubectl命令,在每个node节点运行以下命令:(ip地址替换成master节点ip)

scp root@192.168.80.130:/etc/kubernetes/admin.conf /etc/kubernetes/
export KUBECONFIG=/etc/kubernetes/admin.conf
3.遇到的问题:
  • 更换镜像下载源,修改deploy一直不生效

解决方法:https://blog.csdn.net/m0_46423830/article/details/145285971


http://www.ppmy.cn/server/160629.html

相关文章

Uniapp判断设备是安卓还是 iOS,并调用不同的方法

在 UniApp 中&#xff0c;可以通过 uni.getSystemInfoSync() 方法来获取设备信息&#xff0c;然后根据系统类型判断当前设备是安卓还是 iOS&#xff0c;并调用不同的方法。 示例代码 export default {onLoad() {this.checkPlatform();},methods: {checkPlatform() {// 获取系…

52.this.DataContext = new UserViewModel(); C#例子 WPF例子

“对于这个(this)窗口(View)&#xff0c;请使用这个实例(UserViewModel)作为其数据源(DataContent)。” 下面是对this.DataContext new UserViewModel();这行代码的详细解释&#xff1a; this关键字&#xff1a; 在这个上下文中&#xff0c;this指的是当前的View对象&#xf…

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…

Vue3轮播图左右联动

1、轮播图部分&#xff0c;右边鼠标移入&#xff0c;左边对应展示轮播图 可以在swiper 官网 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 选择vue中使用swiper npm i swiper 左右两边的联动&#xff1a;左边的轮播图和右边的小的列表他们的列表组成结构是一样的&#…

【Red Hat8】:搭建FTP服务器

目录 一、匿名FTP访问 1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 5、安装VSFTPD 6、 打开配置文件 7、设置配置文件如下几个参数 8、重启vsftpd服务 9、进入图形化界面配置网络 10、查看IP地址 11、安装ftp服务 12、遇到拒绝连接 13、测试 二、本地…

Golang的网络编程安全

Golang的网络编程安全 一、Golang网络编程的基本概念 作为一种现代化的编程语言&#xff0c;具有优秀的并发特性和网络编程能力。在Golang中&#xff0c;网络编程是非常常见的需求&#xff0c;可以用于开发各种类型的网络应用&#xff0c;比如Web服务、API服务、消息队列等。Go…

C#中的语句

C#提供了各式各样的语句&#xff0c;大多数是由C和C发展而来&#xff0c;当然&#xff0c;在C#中做了相应修改。语句和表达式一样&#xff0c;都是C#程序的基本组成部分&#xff0c;在本文我们来一起学习C#语句。 1.语句 语句是构造所有C#程序的过程构造块。在语句中可以声明…

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测 目录 WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-GRU-Attention、…