kubernets学习笔记——使用kubeadm构建kubernets集群及排错

news2024/12/24 8:35:22

使用kubeadm构建kubernets集群

  • 一、准备工作
    • 1、repo源配置:阿里巴巴开源镜像源
    • 2、更新软件包并安装必要的系统工具
    • 3、同步时间
    • 4、禁用selinux
    • 5、禁用交换分区swap
    • 6、关闭防火墙
  • 二、安装docker-ce、docker、cri-docker
    • 1、安装docker-ce
    • 2、开启内核转发,转发 IPv4 并让 iptables 看到桥接流量,执行下述指令
    • 3、安装docker
    • 4、安装cri-dockerd
  • 三、安装kubernets
    • 1、配置源
    • 2、安装kubelet、kubeadm、kubectl
    • 3、使用 kubeadm 创建集群
      • (1)查找需要的镜像文件
      • (2)下载镜像并改成上图需要的名称
      • (3)初始化,该步骤只需要在 master 服务器上执行即可。
      • (4)重要信息
  • 四、安装通信插件
    • 1、获取 yaml 文件
    • 2、查看需要用到的镜像文件
    • 3、解压后加载镜像
    • 4、执行命令 kubectl apply -f calico.yaml
    • 5、将 node 节点加入集群。
  • 五、排错
    • 1、在 node 节点执行命令 kubectl apply -f calico.yaml 时出现如下错误,此时你执行 kubectl get nodes 命令也会出现类似的错误。
        • 原因分析:
        • 解决方法:
    • 写在最后,讲一讲我的排错思路。

Kubernets 为绝大部分的操作系统平台都提供了相应的软件包。通过软件包来安装Kubernets 是一种最为简单的安装方式。对于初学者来说,通过这种方式可以快速搭建起 kubernets 的运行环境。本章我以 CentOS7.9 为例,使用 kubeadm 构架 kubernets 集群。

一、准备工作

操作系统hostnameIPCPU内存kubernet version
centos7.9master192.168.111.119/242核2G1.28.12
centos7.9node1192.168.111.120/242核2G1.28.12
centos7.9node2192.168.111.121/242核2G1.28.12
centos7.9node3192.168.111.122/242核2G1.28.12

1、repo源配置:阿里巴巴开源镜像源

# 删除系统包管理器下的所有源配置文件
sudo rm -rf /etc/yum.repos.d/*
# 下载阿里巴巴开源镜像源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 创建 YUM 缓存
sudo yum makecache

2、更新软件包并安装必要的系统工具

# 安装必要工具
sudo  yum install -y bash-completion lrzsz ntpdate ntp wget lsof telnet
sudo  yum install -y update
# 修改主机名
hostnamectl set-hostname master
bash
# 修改hosts文件,将hostname、ip更新至/etc/hosts文件中
echo 192.168.111.119 master >> /etc/hosts
echo 192.168.111.120 node1 >> /etc/hosts
echo 192.168.111.121 node2 >> /etc/hosts

3、同步时间

sudo ntpdate -u ntp.aliyun.com

4、禁用selinux

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo sestatus
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

5、禁用交换分区swap

# 不建议使用 sudo swapoff -a 该命令临时禁用交换分区,而是直接编辑 /etc/fstab 文件,将如下图所示的内容注释掉。
vi /etc/fstab
# 查看修改操作是否生效
sudo grep swap /etc/fstab

在这里插入图片描述

6、关闭防火墙

sudo systemctl disable firewalld --now
sudo systemctl status firewalld

二、安装docker-ce、docker、cri-docker

1、安装docker-ce

# 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 安装指定版本的Docker-CE:
# 查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r|grep 19.03
yum list docker-ce.x86_64 --showduplicates | sort -r|grep 3:19.03.15-3.el7
# 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
sudo yum clean all
sudo yum makecache

sudo  yum install -y docker-ce-19.03.15
sudo systemctl enable docker --now

2、开启内核转发,转发 IPv4 并让 iptables 看到桥接流量,执行下述指令

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe 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
# 通过运行以下指令确认 br_netfilter 和 overlay 模块被加载
lsmod | grep br_netfilter
lsmod | grep overlay
# 通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

3、安装docker

sudo yum install -y  docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 配置 Docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=cgroupfs"],
  "registry-mirrors": ["https://cyzzkyky.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "experimental": true,
  "features": {
    "buildkit": true
  }
}
EOF
sudo systemctl daemon-reload
sudo systemctl enable docker --now
sudo systemctl status docker 

4、安装cri-dockerd

sudo wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14-3.el7.x86_64.rpm

sudo rpm -ivh cri-dockerd-0.3.14-3.el7.x86_64.rpm
sudo rpm -ql cri-dockerd
# sudo vi /etc/containerd/config.toml 
# sudo grep disa /etc/containerd/config.toml 
# disabled_plugins = ["cri"]
sudo systemctl enable cri-docker.service --now 
sudo systemctl status cri-docker.service

三、安装kubernets

1、配置源

sudo cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

2、安装kubelet、kubeadm、kubectl

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

3、使用 kubeadm 创建集群

(1)查找需要的镜像文件

# 查看需要的镜像文件
kubeadm config images list

在这里插入图片描述

(2)下载镜像并改成上图需要的名称

# 下载镜像
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.12
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.12
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.12
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.12
docker pull registry.aliyuncs.com/google_containers/pause:3.9
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.12-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
# 重命名镜像
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.12 registry.k8s.io/kube-apiserver:v1.28.12
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.12 registry.k8s.io/kube-controller-manager:v1.28.12
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.12 registry.k8s.io/kube-scheduler:v1.28.12
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.28.12 registry.k8s.io/kube-proxy:v1.28.12
docker tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9
docker tag registry.aliyuncs.com/google_containers/etcd:3.5.12-0 registry.k8s.io/etcd:3.5.12-0
docker tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1

(3)初始化,该步骤只需要在 master 服务器上执行即可。

以下内容只需 master 服务器执行即可

# 重置
sudo kubeadm  reset --cri-socket=unix:///var/run/cri-dockerd.sock
# 初始化
sudo  kubeadm init --kubernetes-version=v1.28.10 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.111.119 --image-repository registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock

以上内容只需 master 服务器执行即可
当出现如下内容则表示安装成功。
在这里插入图片描述

(4)重要信息

根据提示依次执行如下命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join 192.168.111.115:6443 --token vhqvk4.fkbpwefn6l2r56wr --discovery-token-ca-cert-hash sha256:116ab3b7ff9f2c5b1658281e0258a9edca724af28f10c4624d219f6c4a4b97ef,该命令是 node 节点加入集群的凭证,需要保存好。

此时执行 kubectl get nodes 命令,会出现 NotReady 状态,这个时候我们就需要安装通信插件。
在这里插入图片描述

四、安装通信插件

1、获取 yaml 文件

sudo wget https://projectcalico.docs.tigera.io/manifests/calico.yaml

2、查看需要用到的镜像文件

grep image calico.yaml

在这里插入图片描述
由于一些原因,该镜像无法正常pull,附载链接,请自行下载。
链接:https://pan.baidu.com/s/1UvKWKUz_K-Kierr3ncskdw?pwd=0o0n
提取码:0o0n

3、解压后加载镜像

tar zxvf release-v3.25.0.tgz
cd release-v3.25.0/images/
docker load -i calico-cni.tar
docker load -i calico-node.tar
docker load -i calico-kube-controllers.tar

4、执行命令 kubectl apply -f calico.yaml

测试 kubectl get nodes,状态即为 Ready 状态。
在这里插入图片描述

5、将 node 节点加入集群。

# 在node节点中执行,即可将 node 节点加入集群
kubeadm join 192.168.111.115:6443 --token vhqvk4.fkbpwefn6l2r56wr --discovery-token-ca-cert-hash sha256:116ab3b7ff9f2c5b1658281e0258a9edca724af28f10c4624d219f6c4a4b97ef

五、排错

1、在 node 节点执行命令 kubectl apply -f calico.yaml 时出现如下错误,此时你执行 kubectl get nodes 命令也会出现类似的错误。

在这里插入图片描述
在这里插入图片描述

原因分析:

  报错信息中提到了连接被拒绝,并指出了连接的主机和端口为localhost:8080。这个错误通常是由于kubectl无法与Kubernetes API服务器建立连接导致的。Kubernetes API服务器是集群的控制平面,负责管理集群的各种操作和资源。当kubectl无法连接到API服务器时,就无法获取节点的信息,从而导致了报错。

说的直白一点就是没有找到你的 kubernets API

解决方法:

  1、将 master 服务器 /etc/kubernetes/admin.conf 文件拷贝到该节点服务器相对应目录下。

scp root@192.168.111.119:/etc/kubernetes/admin.conf /etc/kubernetes/

  2、在用户目录下创建文件夹 .kube ,并将 /etc/kubernetes/admin.conf 文件拷贝到 .kube目录下,并命名为config。

mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config

  3、将.kube/config文件的所有者更改为当前用户。

chown $(id -u):$(id -g) $HOME/.kube/config

问题解决
在这里插入图片描述

写在最后,讲一讲我的排错思路。

首先要确保交换分区已经关闭,
其次查看docker运行状态是否正常,systemctl status docker
再看cri-docker运行状态是否正常,systemctl status cri-docker
再次看kubelet运行状态是否正常,systemctl status kubelet
如果以后都正常,则看容器是否启动。docker ps

本章内容就到这里,大家在安装过程中遇到任何问题,评论区留言,我第一时间为大家解答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】A2X通信的协议(四)- A2X PC5通信(二)

目录 6.1.2.4 A2X PC5单播链接释放程序 6.1.2.4.1 概述 6.1.2.4.2 发起UE启动A2X PC5单播链接释放程序 6.1.2.4.3 目标UE接受的A2X PC5单播链接释放程序 6.1.2.4.4 发起UE完成的A2X PC5单播链接释放程序 6.1.2.4.5 异常情况 6.1.2.4.5.1 发起UE的异常情况 6.1.2.5 A2X …

Linux——嵌入式学习——C++学习(1)

一、环境配置 由于之前安装过QT&#xff0c;所以直接连接网络之后&#xff0c;运行 运行之后检查安装版本 接着用qt的使用步骤 创建工程即可 三、 1、注释 单行注释&#xff1a;// 多行注释/* */ 2、auto 自动推导类型 2.1声明变量 使…

Linux小组件:makefile

引言&#xff1a; 我们在Windows下编程时使用vs这种集成开发环境&#xff0c;里面什么编译运行调试清理等等服务都被一连串打包好了。在Linux下怎么实现呢&#xff1f;使用我们伟大的makefile&#xff01; makefile是Linux下的一个工具&#xff0c;通过文本编辑器vim对文件内…

Linux内核编程(十一)设备模型

本文目录 一、知识点1. 设备模型2. sysfs 文件系统3. kobject、kset设备模型框架 二、kobject实验1. 创建kobject2. 释放kobject★示例 三、kset实验1. 创建kset2. 注销kset★示例 四、引用计数器1. 概念2. 为什么要引入引用计数器&#xff1f;3. 常用函数&#xff08;1&#x…

【Nuxt】发送请求

概述 以下方式只能在 setup / 生命周期钩子 里面使用。 useFetch 下面的 API / hooks 具体用法查看官网文档。 const BASE_URL http://codercba.com:9060/juanpi/api;// 1. $fetch server and client // $fetch(BASE_URL /homeInfo, { // method: GET // }).then(res &…

python爬虫04 | Reuqests库快速入门,干穿urllib

文章目录 Requests库简介提出请求响应内容二进制响应内容JSON 响应内容原始响应内容自定义标头更复杂的 POST 请求POST 多部分编码的文件响应状态代码响应标头Cookie重定向和历史记录超时错误和异常 Ending Requests库简介 什么是Requests库 Requests是一个简单易用的HTTP库&…

分享一个基于SpringBoot和Vue的闲置物品交易与物品租赁平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

人工智能计算机视觉先锋——OpenCv 的颜色检测

红色 在计算机的世界里&#xff0c;只有 0 或者1&#xff0c;如何让计算机认识颜色是计算机视觉工作者首先需要考虑的事情&#xff0c;我们知道整个世界的颜色虽然五彩缤纷&#xff0c;但是都是3种原色彩合成的&#xff08;R G B&#xff09;&#xff0c;有了&#xff08;R G …

C语言 | Leetcode C语言题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; #define FATHER_NODE(i) (0 (i) ? -1 : ((i) - 1 >> 1)) #define LEFT_NODE(i) (((i) << 1) 1) #define RIGHT_NODE(i) (((i) << 1) 2)/* 优先队列&#xff08;小根堆&#xff09;。 */ typedef s…

数字人解决方案——音频驱动机器人

音频集成 机器人 标志着 人工智能&#xff08;AI&#xff09;。 想象一下&#xff0c;机器人可以通过视觉和听觉导航并与周围环境互动。音频驱动的机器人使这成为可能&#xff0c;提高了它们更高效、更直观地执行任务的能力。这一发展可能会影响到各个领域&#xff0c;包括家庭…

解决PermissionError: [Errno 13] Permission denied: “xx“报错

这个报错我是使用 shutil.copy(src_file, dst_file) 语句产生的&#xff0c;因此有些问题我会围绕此句代码来进行解决&#xff0c;如果有更好的建议&#xff0c;欢迎积极留言。 目录 1.路径拼写错误&#xff0c;建议使用绝对路径 2.此文件正在使用&#xff0c;关闭当前打开的…

vba 保存word里面的图片_1分钟批量处理100张图片,有Word在

天下苦Word久矣&#xff01;Word不仅是个码字工具&#xff0c;还是个排版工具&#xff0c;而Word在排版方面经常遇到的问题&#xff0c;恐怕说个三天三夜都说不完&#xff01; 好不容易做完了100页的活动方案&#xff0c;交到处女座上司那里&#xff0c;他告诉我&#xff1a;“…

调用azure的npm实现outlook_api模拟查看邮件、发送邮件(实现web版接受outlook邮件第一步)

文章目录 ⭐前言⭐注册azure应用&#x1f496;添加权限 ⭐调用npm 实现收发邮件&#x1f496;安装依赖&#x1f496;创建appSettings.js 放置密钥&#x1f496;创建graphHelper.js封装功能&#x1f496;主文件index.js 对外暴露&#x1f496;效果 ⭐结束 ⭐前言 大家好&#x…

我的cesium for UE踩坑之旅(蓝图、UI创建)

我的小小历程 过程创建对应目录&#xff0c;并将要用到的图片、资源放入对应目录下内容浏览器 窗口中右键&#xff0c;创建一个控件蓝图&#xff0c;用来编辑界面UI绘制画布面板&#xff08;canvas&#xff09;调整整体布局加入对应的控件将UI加入到关卡中 备注搜索不到 Add To…

【原创】简易学生成绩查询系统Excel版

简易学生成绩查询系统通常是为了方便学校、教师和学生能够快速查询和管理成绩而设计的一种工具。从之前提供的信息来看&#xff0c;我们可以总结出简易学生成绩查询系统的一些常见功能&#xff1a; ### 易查分成绩查询系统功能特点&#xff1a; - **成绩导入与管理**&#xff…

Spark_获取id对应日期的所在月份的天数完整指南

开发背景 前段时间有一个开发需求的一小块用到了这&#xff0c;是一个利用率的计算。规则是某id下的近半年的值的小时利用率。 计算规则是某值除以近半年 天数以及24h,但是月份里面数据有空值&#xff0c;所以要计算一下id对应的月份的天数&#xff0c;并且过滤掉数据有空值的天…

Azure openai connection with javascript

题意&#xff1a;使用JavaScript与Azure OpenAI进行连接 问题背景&#xff1a; I have created my chatbot with javascript and used open ai. I need to change it to azure open ai but can not find the connection details for javascript. This is how i connect with p…

十九、虚拟机VMware Workstation(CentOSDebian)的安装

目录 &#x1f33b;&#x1f33b; 一、安装 VMware Workstation1.1 安装 VMware Workstation1.2 虚拟机上安装 CentOS1.3 虚拟机安装 Debian 二、配置Debian方便第三方工具远程连接2.1 配置debian2.2 安装远程SSH工具并连接 一、安装 VMware Workstation 官网下载 本地资源库…

端到端自动驾驶:终局还是误区?

近年来&#xff0c;端到端自动驾驶技术成为了汽车行业的热议话题。尤其是在2024年&#xff0c;各家新兴车企纷纷打出端到端的旗号&#xff0c;似乎谁没有搞端到端&#xff0c;就会被市场淘汰。然而&#xff0c;端到端自动驾驶真的是自动驾驶技术的终局吗&#xff1f;本文将深入…

使用QML的ListView自制树形结构图TreeView

背景 感觉QML自带的TreeView不是很好用&#xff0c;用在文件路径树形结构比较多&#xff0c;但是想用在自己数据里&#xff0c;就不太方便了&#xff0c;所以自己做一个。 用‘ListView里迭代ListView’的方法&#xff0c;制作树形结构&#xff0c;成果图&#xff1a; 代码…