Kubernetes 入门 篇 Master 节点的安装与部署

2023-11-05

在安装K8s 的时候,遇到了很多问题,花了几天的时间排错,记录一下环境搭建的完整过程,希望对入门K8s 的朋友有所帮助

操作系统版本: CentOS Linux 8
Docker 版本: Docker version 23.0.1

运行 Kubernetes 服务前 的准备工作:

  1. 关闭防火墙 firewalld 服务
systemctl stop firewalld.service 
systemctl disable firewalld.service
  1. 关闭 交换分区 swap
swapoff -a 
### 修改 fstab 文件,将 swap 的配置 注释掉(在行首加一个 # )
#/dev/mapper/cl-swap     none                    swap    defaults        0 0 
systemctl daemon-reload
  1. 禁用 Selinux
setenforce 0
### 修改 /etc/sysconfig/selinux 文件,将 SELINUX=permissive 修改成 SELINUX=disabled 
sed -i 's#SELINUX=permissive#SELINUX=disabled#' /etc/sysconfig/selinux
  1. 配置 kubernetes 的 yum 源
vim /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
name=Kubernetes repository  
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 
enabled=1
gpgcheck=0
  1. 使用配置好的 yum 安装 kubelet, kubeadm, kubectl
yum install -y kubelet kubeadm kubectl 

完成上面的准备工作之后,下面开始配置与启动 kubernetes Master 节点
6. 启动 docker 与 kubelet 服务

systemctl enable docker.service 
systemctl start docker.service
systemctl enable kubelet.service
systemctl start kubelet.service 

启动 docker 服务
启动 kubelet 服务
7. 使用 kubeadm 安装并初始化 Master 节点,运行 以下命令

kubeadm init  

注意: 这一步常常会报错,原因 是 默认的镜像库 registry.k8s.io 访问 不畅导致无法拉取需要的镜像
[ERROR ImagePull]: failed to pull image registry.k8s.io/kube-apiserver:v1.26.1
在这里插入图片描述
运行如下的命令,确认一下需要安装的镜像列表(不同的操作系统版本,得到的结果可能不一样,大家按照自己的实际情况做相应的修改):

kubeadm config images list 

registry.k8s.io/kube-apiserver:v1.26.1
registry.k8s.io/kube-controller-manager:v1.26.1
registry.k8s.io/kube-scheduler:v1.26.1
registry.k8s.io/kube-proxy:v1.26.1
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3
在这里插入图片描述
解决上面的问题,需要将默认的镜像库 registry.k8s.io 更改一下,进入 docker 官方镜像库: https://hub.docker.com/, 搜索 上面镜像列表中的镜像名称 kube-apiserver ,选择一个 下载量多的镜像库进去看看,我选的是 k8simage/kube-apiserver
在这里插入图片描述

根据 上面的 镜像列表 registry.k8s.io/kube-apiserver:v1.26.1 ,筛选相应的 tag v1.26.1

在这里插入图片描述
找到目标镜像库之后,修改初始化配置文件,将默认的 镜像库 registry.k8s.io 更改成 k8simage

### 生成 默认的初始化配置文件
kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml 
cat /etc/kubernetes/init-default.yaml | grep imageRepository  ### 查看默认镜像库
### 将默认的镜像仓库 registry.k8s.io 修改成 k8simage( 之前在 docker 官方镜像库筛选出来的)
sed -i 's#registry.k8s.io#k8simage#' /etc/kubernetes/init-default.yaml 
### 将 配置文件 init-default.yaml  里面  advertiseAddress: 1.2.3.4  中 的 ip 地址 改成你自己的 ip 地址 
sed -i 's#advertiseAddress: 1.2.3.4#advertiseAddress: 10.0.2.5#' /etc/kubernetes/init-default.yaml

运行 以下的命令,重新安装并初始化 Master 节点

### 重置 kubeadm
kubeadm reset 
### 使用配置文件 安装并初始化 Master 节点
kubeadm init --config="/etc/kubernetes/init-default.yaml" 

上面那个步骤通常还是会报错,错误信息: [kubelet-check] Initial timeout of 40s passed. Unfortunately, an error has occurred: timed out waiting for the condition
报错信息
根据上面的 提示信息 ,运行 以下命令 查看报错的具体日志信息

journalctl -xeu kubelet 

查看到 具体的报错信息:“Failed to create sandbox for pod” err="rpc error: code = Unknown desc = failed to get sandbox image “registry.k8s.io/pause:3.6”: failed to pull image “registry.k8s.io/pause:3.6” ,从错误信息来看,像是拉取 registry.k8s.io/pause:3.6 镜像失败 导致sandbox 创建不了而报错 。要解决这个问题,就需要重新配置 sandbox 镜像 仓库,将默认的 registry.k8s.io/pause:3.6 修改成 “k8simage/pause:3.6” ,具体操作如下

### 生成 containerd 的默认配置文件
containerd config default > /etc/containerd/config.toml 
### 查看 sandbox 的默认镜像仓库在文件中的第几行 
cat /etc/containerd/config.toml | grep -n "sandbox_image"  
### 使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 k8simage/pause:3.6
vim /etc/containerd/config.toml  
sandbox_image = "k8simage/pause:3.6"  
### 重启 containerd 服务  
systemctl daemon-reload  
systemctl restart containerd.service 

运行下面的命令,重置 kubeadm, 并重新初始化,安装 Master 节点

### 重置 
kubeadm reset 
### 初始化
kubeadm init --config="/etc/kubernetes/init-default.yaml" 

如果看到下面的信息,就是 Master 节点 已经创建成功了 Your Kubernetes control-plane has initialized successfully!

在这里插入图片描述
总结: 新手在 学习 Kubernetes 的安装 与配置 的 时候可能会遇到很多问题,因为 Kubernetes 还在快速的更新迭代中,跟之前的版本 相比,可能会有变动。遇到报错时,要学会使用 journalctl 日志工具 定位具体的报错信息,具体问题具体分析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes 入门 篇 Master 节点的安装与部署 的相关文章

随机推荐

  • 《从零开始编写一个直播服务器》 C++ 实现一个最简单的RTSP流媒体服务器

    流媒体开发系列文章 文章目录 流媒体开发系列文章 前言 一 rtsp流是什么 二 使用步骤 1 服务器代码 总结 前言 在安防行业中 onvif协议与gb协议是两种标准 gb是国内安防行业的标准 onvif是国外的安防行业的标准 其中gb2
  • 【华为OD机试】数字游戏【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 小明玩一个游戏 系统发1 n张牌 每张牌上有一个整数 第一张给小明 后n张按照发牌顺序排成连续的一行 需要小明判断 后n张牌中 是否存在连续的若干张牌 其和可以整除小
  • Heroku 部署有关 opencv 的 Django 后端应用(pdf2docx)

    文章目录 场景 解决方案 Aptfile Buildpacks Dashboard 上手动构建 Heroku CLI 终端构建 Requirements txt 提交改变 场景 我使用 heroku 部署了一个 Django 后端项目 里面
  • C/C++内存布局

    下图是c c 的进程的内存分布布局图 搞清楚内存布局对于理解一个程序是非常重要的 一个程序运行起来 操作系统会给每个进程分配一个 4G 的程序地址空间 当然这都是虚拟地址空间 因为如果一个进程分 4G 的内存 那么就算有再多的内存也不够分
  • windows下的另一个辅助工具Devcon.exe(用会了绝对是神器)

    Device Console Help devcon exe r m
  • Unity3D关于iTween回调函数

    ITween一共三个回调函数 onstart onupdate和oncomplete 顾名思义可以从名字中看出来 常用到最后一个 要是我以后项目中用到了前两个函数 我会把例子添加上 关于oncomplete 就是在itween移动完成以后所
  • Spring Data Jpa

    spring data介绍 Spring Data s mission is to provide a familiar and consistent Spring based programming model for data acce
  • 单元测试、集成测试、系统测试

  • 串口通信——发送和接收数据(8位和16位数据之间的转换)

    1 实验目的 1 发送两个字节数据 就是16位的数据 每一次发送8位 发送两次 这里要进行数据的拆分 如发送一个0XFF56 接收得到的也是FF56 16进制显示 2 接收两个字节的数据 这里通过串口助手以16进制发送一个数据 将拼接的数据
  • winMain函数

    WinMain函数 int WINAPI WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int nShowCmd 函数名 WinMain 返回值 in
  • QT界面工程导出成dll并在其他界面工程调用示例

    一 首先是生成dll 1 新建一个qt工程 2 在 pro文件做如下修改 TARGET qtdll TEMPLATE app DEFINES dllMainWindow LIBRARY TEMPLATE lib 其中qtdll 是自己dll
  • C#中Dictionary的用法总结

    可以实现通过键值查找 插入 删除一个键 值对的操作 这些如果用数组实现都非常麻烦 Key就是键 value就是值 我们在很多地方都会用到字典 他的特点就是查找很快 当然比List快 字典必须包含名空间System Collection Ge
  • pandas写入excel指定行_使用pandas操作excel

    pandas操作excel 最近由于要处理一些excel表格 发现pandas可以免去很多的繁琐的人工劳动 在这里记录一下我所用到的知识 导入文档 将excel中的工作表导入 filename xls data pd read excel
  • python中random.random()用法

    Python中的random模块用于生成随机数 下面介绍一下random模块中最常用的几个函数 random random random random 用于生成一个0到1的随机符点数 0 lt n lt 1 0 参考链接 https www
  • 拓扑布局和建立小型网络

    练习 2 6 1 拓扑布局和建立小型网络 地址表 本实验不包括地址表 拓扑图 学习目标 正确识别网络中使用的电缆 物理连接点对点交换网络 验证每个网络的基本连通性 简介 许多网络问题都可以在网络的物理层解决 因此 必须清楚了解网络连接使用哪
  • Android ffmpeg4.1 arm64位库裁剪

    ffmpeg4 1 Android arm64位库裁剪移植 目录 ffmpeg4 1 Android arm64位库裁剪移植 1 绪言 2 编译环境 3 源代码下载 4 编写编译脚本 4 1 编译脚本 4 2 常见问题 5 库裁剪 5 1
  • 使用vscode把代码或文件夹上传进gitee库里

    1 首先读者自行下载 git 2 在gitee中新建一个仓库 3 建完仓库后会出现以下界面 4 复制图中1 选择你个你想要的文件夹 右键选择 5 之后会跳出来一个小框框 把图中2和3分别复制进小框框里 ctrl v没用 右键选择Paste
  • CObject/CCmdTarget/CCmdTarget三个类的能力

    三个类的能力分别为 CObject 运行时类型识别 RTTI 动态创建 Dynamic Creation 文件读写 Serialization CCmdTarget 消息机制 拥有DECLARE MESSAGE MAP宏 从而可以接收WM
  • 二十二、SQL 数据分析实战(案例1~案例10)

    文章目录 案例1 用户信息表 stu table 案例2 员工绩效表 score table 案例3 销售冠军信息表 month table 案例4 月销售额记录表 sale table 案例5 每季度员工绩效得分表 score info
  • Kubernetes 入门 篇 Master 节点的安装与部署

    在安装K8s 的时候 遇到了很多问题 花了几天的时间排错 记录一下环境搭建的完整过程 希望对入门K8s 的朋友有所帮助 操作系统版本 CentOS Linux 8 Docker 版本 Docker version 23 0 1 运行 Kub