upgrade k8s (by quqi99)
作者:张华 发表于:2023-11-17
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99)
本文只是从网上搜索一些升级k8s的理论学习,下面的步骤未实际测试。
理论学习 - upgrade k8s from 1.20.6 to 1.20.15 by kubeadm
refer: 云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15) - https://blog.csdn.net/cronaldo91/article/details/133789264
1, check verion
kubectl get nodes
kubectl version
kubeadm version
kubectl get componentstatuses
kubectl get deployments --all-namespaces2, upgrade kubeadm
apt install kubeadm=1.20.15*
kubeadm version3, upgrade master1
kubeadm upgrade plan
kubeadm upgrade apply v1.20.15
#in case it's offline mode, need to load the image first
docker image load -i kube-apiserver\:v1.15.1.tar
docker image load -i kube-scheduler\:v1.15.1.tar
docker image load -i kube-controller-manager\:v1.15.1.tar
docker image load -i kube-proxy\:v1.15.1.tar
docker image list4, upgrade master2, but pls use 'kubeadm upgrade node' instead of 'kubeadm upgrade apply'
apt install kubeadm=1.20.15*
kubeadm version
kubeadm upgrade node5, upgrade kubelet and kubectl on master1
kubectl drain master1 --ignore-daemonsets
apt install kubelet=1.20.15*
systemctl daemon-reload && systemctl restart kubelet
kubectl uncordon master1
kubectl get nodes6, upgrade kubelet and k on master2
kubectl drain master2 --ignore-daemonsets
apt install kubelet=1.20.15*
systemctl daemon-reload && systemctl restart kubelet
kubectl uncordon master2
kubectl get nodes7, upgrade worker
apt install kubeadm=1.20.15*
kubeadm version
kubeadm upgrade node
kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data
apt install kubelet=1.20.15*
systemctl daemon-reload && systemctl restart kubelet
kubectl uncordon worker1
kubectl get nodes8, verify the cluster
kubectl get nodes
kubeadm alpa certs check-expiration
kubectl get pods -n kube-system
理论学习 - Upgrade k8s from 1.21 to 1.26 by charm
参考: https://ubuntu.com/kubernetes/docs/1.26/upgrading
Upgrade path: 1.21 --> 1.22 --> 1.23 --> 1.24 --> 1.25 --> 1.26
1, backup db
juju run-action etcd/leader snapshot --wait
juju scp etcd/0:/home/ubuntu/etcd-snapshots/etcd-snapshot-bak.tar.gz .2, upgrade containerd, pls wait for the units to turn back to "active" and "idle" state
juju upgrade-charm containerd
watch juju status containerd
# fix 'blocked' and 'idle' state
juju run -u <unit_in_blocked_state> 'hooks/update-status'3, upgrade etcd
juju upgrade-charm etcd
watch juju status etcd4, upgrade the additional charms
juju upgrade-charm easyrsa
juju upgrade-charm calico
juju upgrade-charm hacluster-kubernetes-master
juju upgrade-charm hacluster-dashboard
juju upgrade-charm hacluster-keystone
juju upgrade-charm hacluster-vault
juju upgrade-charm telegraf
juju upgrade-charm public-policy-routing
juju upgrade-charm landscape-client
juju upgrade-charm filebeat
juju upgrade-charm ntp
juju upgrade-charm nfs-client
juju upgrade-charm nrpe-container
juju upgrade-charm nrpe-host
juju upgrade-charm prometheus-ceph-exporter5, upgrade k8s master from 1.21 to 1.22
juju upgrade-charm kubernetes-master
juju config kubernetes-master channel=1.22/stable
juju run-action kubernetes-master/0 upgrade
juju run-action kubernetes-master/1 upgrade
juju run-action kubernetes-master/2 upgrade6, upgrade k8s worker from 1.21 to 1.22
juju upgrade-charm kubernetes-worker
juju config kubernetes-worker channel=1.22/stable
juju run-action kubernetes-worker/0 upgrade
juju run-action kubernetes-worker/1 upgrade
juju run-action kubernetes-worker/2 upgrade7, when upgrading charmed k8s to 1.24, which has relocated from juju store to charmhub, this means that upgrading each charm will require the use of --switch during the upgrade.
juju upgrade-charm containerd --switch ch:containerd --channel 1.24/stable
juju upgrade-charm easyrsa --switch ch:easyrsa --channel 1.24/stable
juju upgrade-charm calico --switch ch:calico --channel 1.24/stable
juju upgrade-charm hacluster-kubernetes-master --switch ch:hacluster --channel latest/stable
juju upgrade-charm hacluster-dashboard --switch ch:hacluster --channel latest/stable
juju upgrade-charm hacluster-kesystone --switch ch:hacluster --channel latest/stable
juju upgrade-charm hacluster-vault --switch ch:hacluster --channel latest/stable
juju upgrade-charm telegraf --switch ch:telegraf --channel latest/stable
juju upgrade-charm public-policy-routing
juju upgrade-charm landscape-client
juju upgrade-charm filebeat --switch ch:filebeat --channel latest/stable
juju upgrade-charm ntp --switch ch:ntp --channel latest/stable
juju upgrade-charm nfs-client
juju upgrade-charm nrpe-container --switch ch:nrpe --channel latest/stable
juju upgrade-charm nrpe-host --switch ch:nrpe --channel latest/stable
juju upgrade-charm prometheus-ceph-exporter --switch ch:prometheus-ceph-exporter --channel latest/stable8, for the charm 1.24, kubernetes-master is renamed to kubernetes=control-plane as well
juju upgrade-charm kubernetes-master --switch ch:kubernetes-control-plane --channel 1.24/stable
juju config kubernetes-master channel=1.24/stable
juju run-action kubernetes-master/0 upgrade
juju run-action kubernetes-master/1 upgrade
juju run-action kubernetes-master/2 upgrade
# for the message "ceph-storage relation deprecated, use ceph-client instead"
juju remove-relation kubernetes-master:ceph-storage ceph-mon
juju upgrade-charm kubernetes-worker --switch ch:kubernetes-worker --channel 1.24/stable
juju run-action kubernetes-worker/0 upgrade
juju run-action kubernetes-worker/1 upgrade
juju run-action kubernetes-worker/2 upgrade9, charm 1.26 may need to use 'juju fresh' as well
juju upgrade-charm kubernetes-master
juju config kubernetes-master channel=1.26/stable
juju run-action kubernetes-master/0 upgrade
juju run-action kubernetes-master/1 upgrade
juju run-action kubernetes-master/2 upgrade
juju refresh kubernetes-master --channel 1.26/stable
客户问题
客户只是从1.21往1.22升级时运行‘juju upgrade-charm kubernetes-master’时发现charmhub里没有1.22 (1.22太老已经被删除了,它只有1.23到1.29, 可用‘juju info --series focal kubernetes-worker’查看), k8s升级没法从1.21直接跳到1.23啊。
那没有1.22怎么办?找产品team的把1.22加上?另外,可以使用local charm过渡吗 ( https://github.com/charmed-kubernetes/charm-kubernetes-worker/releases/tag/1.22%2Bck2 ). 下面方法可以build 1.22 charm, 但可以从1.21升级到local 1.22再升级到1.23 on charmhub? 这个需要测试
#'python_version < "3.8"\' don\'t match your environment\nIgnoring Jinja2: markers \'python_version >= "3.0" and python_version <= "3.4"\'
# ppa:deadsnakes/ppa only has >=python3.5 as well, so have to use xenial instead
#juju add-machine --series jammy --constraints "mem=16G cores=8 root-disk=100G" -n 2
juju add-machine --series xenial -n 1
juju ssh 0
# but xenial is also using python3.5, and it said:
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.那在这个xenial的基础上继续通过源码来编译python3.2之后再build charm成功了
sudo apt-get install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget -y
wget https://www.python.org/ftp/python/3.2.6/Python-3.2.6.tgz
tar -xf Python-3.2.6.tgz
cd Python-3.2.6/
./configure --enable-optimizations
make -j$(nproc)
sudo make altinstall
python3.2 --version
alias python=python3.2
alias python3=python3.2
sudo apt install build-essential -y
sudo apt install python3-pip python3-dev python3-nose python3-mock -y
cd $CHARM_LAYERS_DIR/..
charm build --debug ./layers/kubernetes-worker/
cd /home/ubuntu/charms/layers/builds/kubernetes-worker
zip -rq ../kubernetes-worker.charm .sudo snap install charm --classic
mkdir -p /home/ubuntu/charms
mkdir -p ~/charms/{layers,interfaces}
export JUJU_REPOSITORY=/home/ubuntu/charms
export CHARM_INTERFACES_DIR=$JUJU_REPOSITORY/interfaces
export CHARM_LAYERS_DIR=$JUJU_REPOSITORY/layers
export CHARM_BUILD_DIR=$JUJU_REPOSITORY/layers/builds
cd $CHARM_LAYERS_DIR
git clone https://github.com/charmed-kubernetes/charm-kubernetes-worker.git kubernetes-worker
cd kubernetes-worker && git checkout -b 1.22+ck2 1.22+ck2
sudo apt install python3-virtualenv tox -y
cd .. && charm build --debug layers/kubernetes-worker/
#cd ${JUJU_REPOSITORY}/layers/builds/kubernetes-worker && tox -e func
cd /home/ubuntu/charms/layers/builds/kubernetes-worker
zip -rq ../kubernetes-worker.charm .
还有一个问题是,在1.24时charm kubernetes-master被更名为kubernetes-control-plane, charmhub中的版本目前是从1.23开始的已经是kubernetes-control-plane了,所以‘juju info --series focal kubernetes-control-plane’能看到信息,而‘juju info --series focal kubernetes-master’是看不到的。
测试环境搭建
需要搭建一个和客户环境尽可能一样的环境, 客户环境还在使用下列768的charmstore里的老charm.
kubernetes-worker:charm: cs:~containers/kubernetes-worker-768channel: stable
目前测试工具默认生成的是用的charmhub中的latest/stable.
charm: ch:kubernetes-control-planechannel: latest/stable
我的初步想法是使用"–use-stable-charms --charmstore --k8s-channel stable --revision-info ./juju_export_bundle.txt"在产生bundle时将ch变回cs:
./generate-bundle.sh -s focal --name k8s --num-control-planes 2 --num-workers 2 --calico --use-stable-charms --charmstore --k8s-channel stable --revision-info ./juju_export_bundle.txt
但是因为客户给的是juju_export_bundle的输出,而不是juju status的输出,所以上面的–revision-info不work, 这样上面命令产生的输出是:
cs:~containers/kubernetes-worker
channel: latest/stable
这样我的设想是:
- 手动编辑b/k8s/kubernetes.yaml只是将k8s master与k8s worker改成和客户一样的版本。 另外,charmstore里的stable revision 768已经不存在了,目前charmstore website已经停服了,所以没法查比768还新一点的版本是哪个,可以通过’juju deploy --series focal cs:containers-kubernetes-worker-770 test’增加数字一个个试,最终试出来是770. 所以最后改成:cs:~containers/kubernetes-worker-770
- 其他charm还是用charmstore里最新的stable版本, 这样做upgrade测试的时候这些upgrade都省了,将精力只集中在客户有问题的k8s worker 上, 所以最后改成:cs:~containers/kubernetes-master-1008
修改完b/k8s/kubernetes.yaml之后运行‘./generate-bundle.sh --name k8s --replay --run’完成测试环境搭建。
./generate-bundle.sh --name k8s --replay --run
watch -c juju status --color
sudo snap install kubectl --classic
juju ssh kubernetes-control-plane/leader -- cat config > ~/.kube/config
source <(kubectl completion bash)
kubectl completion bash |sudo tee /etc/bash_completion.d/kubectl
kubectl cluster-info
相关文章:
upgrade k8s (by quqi99)
作者:张华 发表于:2023-11-17 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 本文只是从网上搜索一些升级k8s的理论学习,下面的步骤未实际测…...

CronExpression
CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JA…...

释放机器人潜力,INDEMIND深耕底层技术
市场转暖,但攘外需要同时安内。 市场降温之后,正迎来拐点 疫情之后,经济逐渐下行,服务机器人的“好日子”也随之结束,整个行业都在动荡中经历渡劫。根据TE智库报告显示,从2022年开始,我国服务…...

【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:JavaScript进阶指南 👐学习格言:成功不是终点,失败也并非末日,最重要的是继…...
流量2----2
2...

人工智能发展前景
随着人工智能的快速发展,这个行业对人才的需求也在不断增长。越来越多的有志之士开始关注人工智能,希望通过自学获得相关技能,进而在人工智能领域找到心仪的职业。本文将探讨人工智能职业发展的前景,并为大家提供自学人工智能的途…...

编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。
编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。 选择结构是编程语言中常用的一种控制结构&…...
AcWing 4520:质数 ← BFS
【题目来源】https://www.acwing.com/problem/content/4523/【题目描述】 给定一个正整数 X,请你在 X 后面添加若干位数字(至少添加一位数字;添加的数不能有前导0),使得结果为质数,在这个前提下所得的结果应…...
00、计算机视觉入门与调优简介
写在前面 每天更新1篇文章,共更新100篇以上 相关代码会放在gitee上 中间会按进度和反馈安排视频讲解 预计2023-11-11开始推送文章,持续3个月左右 专栏简介 本专栏带你从头开始入门计算机视觉。 内容会比之前写的文章更专业更全面,并且你…...
.L0CK3D来袭:如何保护您的数据免受致命攻击
尊敬的读者: 网络犯罪的威胁日益增长,其中.L0CK3D勒索病毒是一种极具挑战性的数字威胁。为了助您应对这一风险,本文将深入探讨.L0CK3D病毒的狡猾手法、毁灭性影响,提供详实的数据恢复方法,同时为您提供极具实战性的预…...

多媒体ffmpeg学习教程
多媒体ffmpeg 目前比较流行的音视频文件为:MP4 flv m3u8 ffmpeg ffmpeg ffplay ffprobe ffserverffmpeg -i INPUT -vf "split [main][tmp]; [tmp] cropiw:ih/2:0:0, vflip [flip];[main][flip] overlay0:H/2" OUTPUTffmpeg -i 2022.mp4 -vcodec mpeg4 -b:…...
SELinux零知识学习十五、SELinux策略语言之客体类别和许可(9)
接前一篇文章:SELinux零知识学习十四、SELinux策略语言之客体类别和许可(8) 一、SELinux策略语言之客体类别和许可 4. 客体类别许可实例 (3)进程客体类别许可 与文件许可不同,许多进程许可没有直接对应到…...

OpenSign:安全可靠的电子签名解决方案 | 开源日报 No.76
microsoft/Web-Dev-For-Beginners Stars: 71.5k License: MIT 这个开源项目是一个为期 12 周的全面课程,由微软云倡导者团队提供。它旨在帮助初学者掌握 JavaScript、CSS 和 HTML 的基础知识。每一节都包括预习和复习测验、详细的书面指南、解决方案、作业等内容。…...

Linux | 进程间通信
目录 前言 一、进程间通信的基本概念 二、管道 1、管道的基本概念 2、匿名管道 (1)原理 (2)测试代码 (3)读写控制相关问题 a、读端关闭 b、写端关闭 c、读快写慢 d、读慢些快 (4&a…...
Vue.js正式环境中配置多个请求的URL
在Vue.js中,你可以在正式环境中配置多个请求的URL,通常使用一些配置文件或者环境变量的方式。下面是一种常见的配置方式: 1. 创建配置文件:在项目的根目录下,创建一个配置文件,比如可以是config.js&#x…...

简单的 UDP 网络程序
文章目录: 简单的UDP网络程序服务端创建套接字服务端绑定启动服务器udp客户端本地测试INADDR_ANY 地址转换函数关于 inet_ntoa 简单的UDP网络程序 服务端创建套接字 我们将服务端封装为一个类,当定义一个服务器对象之后,需要立即进行初始化…...
人工智能-深度学习之文本预处理
文本预处理 对于序列数据处理问题, 这样的数据存在许多种形式,文本是最常见例子之一。 例如,一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 本节中,我们将解析文本的常见预处理步骤。 这些步骤通常包括…...

【Java 进阶篇】插上翅膀:JQuery 插件机制详解
在前端开发中,JQuery 作为一个广泛应用的 JavaScript 库,为开发者提供了丰富的工具和方法,简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中,插件机制是 JQuery 的一项重要特性,使得开发者能够轻松地…...
手动编译GDB
手动编译GDB 起因在于使用Clang-14编译C文件并生成调试信息,使用gdb调试时报DWARF相关错误。经检查原因在于虚拟机为Ubuntu 20.04,使用apt下载时官方提供gdb版本为9.2,不支持DWARF5,而Clang-14生成的调试信息是DWARF5版本的。为解决该问题,手…...

竞赛选题 深度学习花卉识别 - python 机器视觉 opencv
文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &a…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...