k8s学习笔记——k8s升级

前一段时间,由于搭建k8s集群的硬件设备故障,老化导致k8s需要重装。使用原来的kubeadm安装方式却发现装不了了。查了一下官方文档,说从v1.24版本之后,kubelet移除了容器引擎,容器及镜像管理将有第三方工具来接管,也就是说用docker pull下拉下来的镜像,如果不安装第三方插件,将不再能使用!!!官方给推荐的三款容器引擎分别是:containerd、cri-o和cri-dockerd。这三款任意安装一款就行。好像要想继续使用docker原有的镜像及容器管理模式和其最匹配的是安装cri-dockerd。官网首推的是安装containerd组件,然后管理工具用nerdctl,其命令及参数和原来docker的命令一致,只是将docker替换为nerdctl。记住这里用containerd管理,在用docker pull下拉下来的镜像,在kubeadm安装过程中将不被识别,必须用nerdctl pull下拉的镜像才能识别、运行。我姑且把其变化称之为K8S升级吧,其步骤如下:

1、删除老版本的docker、kubelet、containerd

sudo systemctl stop docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo groupdel docker
sudo systemctl stop containerd
sudo apt-get purge containerd
sudo systemctl stop kubelet
sudo apt-get purge kubelet kubeadm kubectl
sudo apt autoreomve

2、安装haproxy、keepalived

如果需要做高可用集群话执行此步骤,如果就一台控制节点就忽略此步骤。

这里可以选择在linux上直接安装,也可以启动k8s容器安装,我使用的是前者,其配置和我之前写过的文章中的相关配置一致,在此不做赘述。

3、安装containerd

安装过程中一定要注意安装的版本,不然,可能多个节点安装的版本不一致,组群的时候可能会有奇奇怪怪的问题。

安装containerd  1.7.12-0ubuntu2~20.04.1
//这里安装的是1.7.12-0ubuntu2~20.04.1版本
sudo apt install containerd=1.7.12-0ubuntu2~20.04.1
//默认安装路径/usr/bin/containerd
systemctl status containerd.service 启动路径 /usr/local/bin/containerd
ln -s /usr/bin/containerd /usr/local/bin/containerd
sudo systemctl enable containerd

配置containerd

sudo containerd config dump > /etc/containerd/config.toml
//修改下面两个配置项
SystemdCgroup = true
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
sudo systemctl daemon-reload
sudo systemctl restart containerd

查看containerd是否可以正常启动,可以正常启动进行下一步。

sudo systemctl status containerd

4、安装docker

这里使用的是5:26.1.4-1~ubuntu.20.04~focal版本

sudo apt-get update
sudo apt-get install docker-ce=5:26.1.4-1~ubuntu.20.04~focal
sudo apt-get install docker-ce-cli=5:26.1.4-1~ubuntu.20.04~focal 
sudo apt-get install containerd.io=1.6.33-1

修改docker配置

//修改镜像仓库地址
sudo vim /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
// Docker 修改为使用 systemd cgroup 驱动
sudo vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd -H fd://
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable dockersudo docker login --username=*** registry.cn-hangzhou.aliyuncs.com

5、安装nerdctl

安装nerdctl
sudo apt install make
sudo apt install go
git clone https://github.com/containerd/nerdctl.git
cd nerdctl
go test -exec sudo -v ./cmd/nerdctl/...
go mod tidy
make && sudo make install
//查验是否正常安装
sudo nerdctl version

6、安装kubeadm、kubectl、kubelet

安装之前如果是第一台控制节点先检查容器是否正常运行

journalctl -xe |grep containerd
//6443端口是否正常启动,检查正常
nc 127.0.0.1 6443 -v
//Connection to 127.0.0.1 6443 port [tcp/*] succeeded!

添加下载源的授权,这里选择的版本是1.28

sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpgcurl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg# 此操作会覆盖 /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

检验当前节点已有kubeadm 的1.28相应版本

//sudo apt list -a kubeadm

下载安装

sudo apt-get update
sudo apt install kubeadm=1.28.2-1.1 kubelet=1.28.2-1.1 kubectl=1.28.2-1.1
sudo systemctl enable kubelet
//锁定当前版本
sudo apt-mark hold kubelet kubeadm kubectl
//取消锁定
//sudo apt-mark unhold kubelet kubectl

7、下载必要的安装镜像

执行自编写的两个脚本

#!/bin/bashfor i in `kubeadm config images list --kubernetes-version=v1.28.2`; doimageName=${i#registry.k8s.io/}ctr images pull registry.aliyuncs.com/google_containers/$imageNamectr images tag registry.aliyuncs.com/google_containers/$imageName registry.k8s.io/$imageNamectr images rm registry.aliyuncs.com/google_containers/$imageName
done;
#registry.aliyuncs.com/google_containers/coredns:v1.10.1
ctr images pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
ctr images tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
ctr images del registry.aliyuncs.com/google_containers/coredns:v1.10.1
ctr images pull registry.aliyuncs.com/google_containers/pause:3.9
#!/bin/bashimageNames=()
imageNames+=(calico/typha:v3.26.4)
imageNames+=(calico/pod2daemon-flexvol:v3.26.4)
imageNames+=(calico/cni:v3.26.4)
imageNames+=(calico/node:v3.26.4)
imageNames+=(calico/kube-controllers:v3.26.4)
imageNames+=(calico/node-driver-registrar:v3.26.4)
imageNames+=(calico/csi:v3.26.4)
imageNames+=(calico/apiserver:v3.26.4)for i in "${imageNames[@]}"; dosudo nerdctl pull quay.io/$isudo nerdctl tag quay.io/$i docker.io/$isudo nerdctl rmi quay.io/$i
done;

8、安装calico

这里可以安装的网络组件可选很多,我这里选用了calico。如果不安装网络组件,使用kubeadm初始化时会报如下错误。

//kubelet.go:2855] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized"

具体安装步骤和可选择的组件可参考链接

https://github.com/containernetworking/cni
https://docs.tigera.io/calico/latest/about

9、清除遗留配置信息

sudo kubeadm reset
//按照提示说明,删除相关文件

10、初始化第一个节点,使用kubeadm安装k8s控制节点

写一个配置文件kubeadm-config.yaml,内容如下

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.2
controlPlaneEndpoint: "10.12.70.130:8443" //这里的10.12.70.130是keepalived的虚拟地址
imageRepository: "registry.aliyuncs.com/google_containers"
networking:podSubnet: "22.244.0.0/16"serviceSubnet: "22.96.0.0/12"
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

安装

kubeadm init --config=kubeadm-config.yaml//显示如下内容说明安装正常
To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/

//验证安装情况

kubectl get node//反馈结果如下,就说明k8s第一个控制节点安装成功,后续添加节点方法和以前写的安装方法无异,在此不做赘述。
NAME       STATUS   ROLES           AGE    VERSION
k8s70131   Ready    control-plane   4d8h   v1.28.2

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

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

相关文章

Vue.js有哪些优点和缺点

Vue.js 作为一个流行的前端框架,具有许多优点和一些潜在的缺点。以下是 Vue.js 的一些主要优点和缺点: 优点: 轻量级和灵活性:Vue.js 的核心库专注于视图层,这使得它非常轻量级(压缩后只有几十KB&#xff…

Web 反爬指南

本质上说,防抓的目的在于增加脚本或机器获取你网站内容的难度,而不要影响真实用户的使用或搜索引擎的收录 不幸的是这挺难的,你需要在防抓和降低真实用户以及搜索引擎的可访问性之间做一下权衡。 为了防爬(也称为网页抓取、屏幕…

智谱AI: ChatGLM API的使用

一、获取API 1、打开网址:智谱AI开放平台 注册账号登录 2、登录,查看API key (注册后赠送100万token,实名认证后多赠送400万, 有效期一个) 二、安装及调用 安装质谱SDK pip install zhipuai调用方式 流式调用 from zhipuai import ZhipuA…

开放签电子签章,让签字有迹可循

开放签(企业版)V2.0.5版本上线后,系统支持一键查询电子文件的签署操作记录,支持一键生成详细的签署记录报告,详细请看下图: 1、操作记录详情: 从合同发起、填写、签署、撤销等环节全流程展示操…

【Linux从入门到放弃】探究进程如何退出以进程等待的前因后果

🧑‍💻作者: 情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 进…

常见反爬及应对

一,特殊混淆的还原 1.1 还原 AAEncode 与 JJEncode AAEncode是一种JavaScript代码混淆算法,利用它,可以将代码转换成 颜文字 表示的JavaScript代码。 去掉代码最后的 (‘‘),这是函数的自调用,去除后就是函数的声明…

【CSharp】定义结构体并指定字段对齐

【CSharp】定义结构体并指定字段对齐 1.背景2.代码3.分析1.背景 在 C# 中可以通过 StructLayout 属性来定义结构体并指定字段对齐方式。 在 C# 中,内存对齐是指数据在内存中的排列方式,使用StructLayout 特性用于控制结构体的内存布局。其特性可以指定字段的内存排列顺序(例…

【揭秘】国内十大顶尖AI大模型,引领智能科技新纪元

大模型大模型通常指的是参数量非常大、数据量也非常大的深度学习模型。这些模型由数百万到数十亿甚至更多的参数组成,需要海量的数据和强大的计算资源进行训练和推理学习的模型。大模型设计的目的在于提高模型的表示能力和性能、应对复杂数据集和任务、提升泛化能力…

6、限界上下文:定义领域边界的利器

在DDD限界上下文:定义领域边界的利器领域建模和微服务建设过程中,会有很多项目参与者,包括领域专家、产品经理、项目经理、架构师、开发经理和测试经理等。对于同样的领域知识,不同的参与者可能会有不同的理解。而且有的时候同一个…

嵌入式学习——硬件(Linux系统在2440上的启动)——day57

1. Linux2.6系统在s3c2440上的启动过程分三个阶段 1.1 启动u-boot 1.2 启动Linux内核 1.3 挂载根文件系统 2. bootloader 2.1 定义 bootloader的本质是一个裸机程序,bootlood专门是为了能够正确地启动linux操作系 统,在系统初上电时需要对系统做一些…

BK145FRC10HSK、BK165FRC10HSK电液比例开环控制变量泵放大器

BK15FRC10HAK、BK35FRC10HAK、BK45FRC10HAK、BK55FRC10HAK、BK70FRC10HSK、BK80FRC10HSK、BK90FRC10HSK、BK100FRC10HSK、BK120FRC10HSK、BK145FRC10HSK、BK165FRC10HSK、BK180FRC10HSK电液比例开环控制柱塞泵主要是在传统的液压泵基础上,增加了电液比例控制先导阀。…

从零开始实现大语言模型(二):文本数据处理

1. 前言 神经网络不能直接处理自然语言文本,文本数据处理的核心是做tokenization,将自然语言文本分割成一系列tokens。 本文介绍tokenization的基本原理,OpenAI的GPT系列大语言模型使用的tokenization方法——字节对编码(BPE, byte pair en…

重采样(上采样或下采样)是什么?

重采样(Resampling)是在数据处理中常用的一种技术,主要用于处理数据集中的不平衡问题。具体来说,重采样可以分为上采样(Oversampling)和下采样(Undersampling),它们分别是…

【bug报错已解决】ERROR: Could not find a version that satisfies the requirement

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析 二、解决方法2.1 方法一2.2 方法二 三、总结 引言 有没有遇到过那种让人…

软件开发中常用环境你都知道哪些?

目录 本地环境(Local Environment,简称 LOCAL) 开发环境(Development Environment,简称 DEV) 测试环境(Testing Environment,简称 TEST) 集成测试环境(Sy…

墨烯的C语言技术栈-C语言基础-003

三.数据类型 1.char // 字符数据型 2.short // 短整型 3.int // 整型 4.long // 长整型 5.long long // 更长的整型 6.float // 单精度浮点数 7.double // 双精度浮点数 为什么写代码? 为了解决生活中的问题 购物,点餐,看电影 为什么有这么多类型呢? 因为说的话都是字符型…

CM-UNet: Hybrid CNN-Mamba UNet for Remote Sensing Image Semantic Segmentation

论文:CM-UNet: Hybrid :CNN-Mamba UNet for Remote Sensing Image Semantic Segmentation 代码:https://github.com/XiaoBuL/CM-UNet Abstrcat: 由于大规模图像尺寸和对象变化,当前基于 CNN 和 Transformer 的遥感图像语义分割方…

mysql 中 单独获取已知日期的年月日其中之一

限定条件:2021年8月,写法有很多种,比如用year/month函数的year(date)2021 and month(date)8,比如用date_format函数的date_format(date, "%Y-%m")"202108"每天:按天分组group by date题目数量&…

java之静态属性方法

在java中有一个static的关键字,它用来修饰类的成员。如果用static修饰属性,该属性被称为静态属性 静态属性的访问格式如下 类名.属性名 如果没有修饰静态属性示例代码如下 class Xuesheng1{String name;int age;String school"A大学";publ…

openGauss真的比PostgreSQL差了10年?

前不久写了MogDB针对PostgreSQL的兼容性文章,我在文中提到针对PostgreSQL而言,MogDB兼容性还是不错的,其中也给出了其中一个能源客户之前POC的迁移报告数据。 But很快我发现总有人回留言喷我,而且我发现每次喷的这帮人是根本不看文…