k8s集群自动化管理
项目地址
https://github.com/TimeBye/kubeadm-ha
准备安装包
# 离线安装环境
curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubeadm-ha-base-amd64.tar
# 集群运行所需的镜像
curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubernetes-1.30.2-images-amd64.tgz
# CentOS 7 系统对应软件包
curl -LO https://oss.choerodon.com.cn/kubeadm-ha/centos7/kubernetes-1.30.2-centos7-amd64.tgz
# 克隆脚本
git clone -b release-1.27 https://mirror.ghproxy.com/github.com/TimeBye/kubeadm-ha.git
节点信息
ip | hostname | OS | role |
---|---|---|---|
192.168.73.98 | k8s-master3 | CentOS 7.9 | master etcd worker |
192.168.73.99 | k8s-master2 | CentOS 7.9 | master etcd worker |
192.168.73.100 | k8s-master1 | CentOS 7.9 | master etcd worker |
192.168.73.101 | k8s-node1 | CentOS 7.9 | worker |
192.168.73.102 | k8s-deplay | CentOS 7.9 | kubeadm-ha(ansible) |
k8s-depaly 操作
解压离线包
tar -xzvf kubernetes-1.30.2-images-amd64.tgz
tar -xzvf kubernetes-1.30.2-centos7-amd64.tgz
配置yum源
cat <<EOF | tee /etc/yum.repos.d/kubeadm-ha.repo
[kubeadm-ha]
name=Kubeadm HA - \$basearch
baseurl=file:///data/packages/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
CentOS 类系统安装 containerd
# Kylin V10 需要移除以下软件包
yum remove -y selinux-policy python3-setools thin-provisioning-toolsyum install -y --disablerepo=\* --enablerepo=kubeadm-ha \containerd.io
配置 containerd
# root 为 containerd 存储目录,可修改为其他非共享存储目录。
cat <<EOF | tee /etc/containerd/config.toml
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = -999
[grpc]max_recv_message_size = 16777216max_send_message_size = 16777216
[debug]level = "info"
[metrics]address = ""grpc_histogram = false
[plugins][plugins."io.containerd.grpc.v1.cri"]sandbox_image = "registry.custom.local:12480/kubeadm-ha/pause:3.9"max_container_log_line_size = -1[plugins."io.containerd.grpc.v1.cri".containerd]default_runtime_name = "runc"snapshotter = "overlayfs"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes][plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]runtime_type = "io.containerd.runc.v2"runtime_engine = ""runtime_root = ""[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true[plugins."io.containerd.grpc.v1.cri".registry]config_path = "/etc/containerd/certs.d"
EOF
配置 crictl 命令行
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 30
debug: false
EOF
启动并加载 kubeadm-ha 镜像
systemctl enable containerd
systemctl restart containerd
gunzip -c kubeadm-ha-base-amd64.tar | ctr -n k8s.io images import -
运行 kubeadm-ha 镜像
ctr -n k8s.io run -d --net-host \--mount type=bind,src=$PWD/registry,dst=/var/lib/registry,options=rbind:ro \--mount type=bind,src=$PWD/packages,dst=/kubernetes/packages,options=rbind:ro \--mount type=bind,src=$PWD/kubeadm-ha,dst=/etc/ansible,options=rbind:ro \docker.io/setzero/kubeadm-ha:base \kubeadm-ha
当镜像仓库不能使用
[root@k8s-deplay data]# cat kubeadm-ha-images.sh
ctr -n k8s.io tasks ls
ctr -n k8s.io tasks kill kubeadm-hactr -n k8s.io containers rm kubeadm-hactr -n k8s.io run -d --net-host \--mount type=bind,src=$PWD/registry,dst=/var/lib/registry,options=rbind:ro \--mount type=bind,src=$PWD/packages,dst=/kubernetes/packages,options=rbind:ro \--mount type=bind,src=$PWD/kubeadm-ha,dst=/etc/ansible,options=rbind:ro \docker.io/setzero/kubeadm-ha:base \kubeadm-ha
推送镜像到已有镜像库(可选项,可跳过)
# 命令格式:sync-images 镜像库地址 镜像库用户名 镜像库用户密码# containerd 示例
ctr -n k8s.io task exec -t --exec-id "shell$RANDOM" kubeadm-ha bash
sync-images harbor.custom.io/kubeadm-ha admin Harbor12345# docker 示例
docker exec -it kubeadm-ha bash
sync-images harbor.custom.io/kubeadm-ha admin Harbor12345
编写配置文件
- 编辑变量文件 ./kubeadm-ha/example/variables.yaml,内容如下
# 自定义 hosts 记录,方便后期调整 IP;IP 配置为 kubeadm-ha 镜像运行的服务器的 IP
# 本例中 192.168.73.102 就是运行 kubeadm-ha 镜像的服务器
custom_hosts: "192.168.73.102": - "pkgs.custom.local"- "registry.custom.local"
# 安装时发现 docker 或者 containerd 配置被修改则强制其重启应用新配置
# 重启可能中断集群安装,再次执行集群安装命令即可
restar_container_manager_force: true
# 注意地址末尾 / 必须加上
base_yum_repo: http://pkgs.custom.local:12480/packages/
epel_yum_repo: http://pkgs.custom.local:12480/packages/
docker_yum_repo: http://pkgs.custom.local:12480/packages/
kubernetes_yum_repo: http://pkgs.custom.local:12480/packages/
base_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
docker_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
kubernetes_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
# 若使用 Docker 作为运行时,则添加此配置
cri_dockerd_download_url: http://pkgs.custom.local:12480/packages/cri-dockerd.tgz
# 设置信任镜像库
docker_insecure_registries:
- "registry.custom.local:12480"
containerd_registries:"registry.custom.local:12480": "http://registry.custom.local:12480"
# 配置镜像地址
kube_image_repository: registry.custom.local:12480/kubeadm-ha
参考 01-集群安装 编写 ansible inventory 文件
[root@localhost kubeadm-ha]# vi example/hosts.m-master.hostname.ini
[root@localhost kubeadm-ha]# cat example/hosts.m-master.hostname.ini
; 将所有节点的信息在这里填写
; 第一个字段 为 kubernetes 节点 nodeName,注意必须由小写字母、数字,“-”或“.”组成,并且必须以小写字母或数字开头和结尾
; 第二个字段 ansible_host 为节点内网IP
; 第三个字段 ansible_port 为节点 sshd 监听端口
; 第四个字段 ansible_user 为节点远程登录用户名
; 第五个字段 ansible_ssh_pass 为节点远程登录用户密码
[all]
k8s-master3 ansible_host=192.168.73.98 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-master2 ansible_host=192.168.73.99 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-master1 ansible_host=192.168.73.100 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-node1 ansible_host=192.168.73.101 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-deplay ansible_host=192.168.73.102 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"; 私有云:
; VIP 负载模式:
; 也就是负载均衡器 + keepalived 模式,比如常用的 haproxy + keepalived。
; 本脚本中负载均衡器有 nginx、haproxy 可供选择,设置 lb_mode 即可进行任意切换。
; 设置 lb_kube_apiserver_ip 即表示启用 keepalived,请先与服务器提供部门协商保留一个IP作为 lb_kube_apiserver_ip,
; 一般 lb 节点组中有两个节点就够了,lb节点组中第一个节点为 keepalived 的 master 节点,剩下的都为 backed 节点。
;
; 节点本地负载模式:
; 只启动负载均衡器,不启用 keepalived(即不设置 lb_kube_apiserver_ip),
; 此时 kubelet 链接 apiserver 地址为 127.0.0.1:lb_kube_apiserver_port。
; 使用此模式时请将 lb 节点组置空。
;
; 公有云:
; 不推荐使用 slb 模式,建议直接使用节点本地负载模式。
; 若使用 slb 模式,请先使用节点本地负载模式进行部署,
; 部署成功后再切换至 slb 模式:
; 将 lb_mode 修改为 slb,将 lb_kube_apiserver_ip 设置为购买到的 slb 内网ip,
; 修改 lb_kube_apiserver_port 为 slb 监听端口。
; 再次运行初始化集群脚本即可切换至 slb 模式。
[lb]
k8s-master3
k8s-master2
k8s-master1; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
k8s-master3
k8s-master2
k8s-master1[kube-master]
k8s-master3
k8s-master2
k8s-master1[kube-worker]
k8s-master3
k8s-master2
k8s-master1
k8s-node1; 预留组,后续添加master节点使用
[new-master]; 预留组,后续添加worker节点使用
[new-worker]; 预留组,后续添加etcd节点使用
[new-etcd]; 预留组,后续删除worker角色使用
[del-worker]; 预留组,后续删除master角色使用
[del-master]; 预留组,后续删除etcd角色使用
[del-etcd]; 预留组,后续删除节点使用
[del-node];-------------------------------------- 以下为基础信息配置 ------------------------------------;
[all:vars]
; 是否跳过节点物理资源校验,Master节点要求2c2g以上,Worker节点要求2c4g以上
skip_verify_node=false
; kubernetes版本
kube_version="1.30.2"; 容器运行时类型,可选项:containerd,docker;默认 containerd
container_manager="containerd"; 负载均衡器
; 有 nginx、haproxy 和 slb 可选,默认使用 nginx
lb_mode="nginx"
; 使用负载均衡后集群 apiserver ip,设置 lb_kube_apiserver_ip 变量,则启用负载均衡器 + keepalived
; lb_kube_apiserver_ip="192.168.56.15"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"; 网段选择:pod 和 service 的网段不能与服务器网段重叠,
; 若有重叠请配置 `kube_pod_subnet` 和 `kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
; 如果服务器网段为:10.0.0.1/8
; pod 网段可设置为:192.168.0.0/18
; service 网段可设置为 192.168.64.0/18
; 如果服务器网段��:172.16.0.1/12
; pod 网段可设置为:10.244.0.0/18
; service 网段可设置为 10.244.64.0/18
; 如果服务器网段为:192.168.0.1/16
; pod 网段可设置为:10.244.0.0/18
; service 网段可设置为 10.244.64.0/18
; 集群pod ip段,默认掩码位 18 即 16384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24 即 256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix="24"; node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
; https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods="110"; 集群网络插件,目前支持flannel,calico
network_plugin="calico"; 若服务器磁盘分为系统盘与数据盘,请修改以下路径至数据盘自定义的目录。
; Kubelet 根目录
kubelet_root_dir="/var/lib/kubelet"
; docker容器存储目录
docker_storage_dir="/var/lib/docker"
; containerd容器存储目录
containerd_storage_dir="/var/lib/containerd"
; Etcd 数据根目录
etcd_data_dir="/var/lib/etcd"
集群部署
- 使用 containerd 进行集群部署
ctr -n k8s.io task exec -t --exec-id "shell$RANDOM" kubeadm-ha bash
ansible-playbook -i example/hosts.m-master.hostname.ini -e @example/variables.yaml 90-init-cluster.yml
安装 helm(可选项,可跳过),k8s-master1上执行
下载helm客户端
curl -sO http://pkgs.custom.local:12480/packages/helm.tar.gz
解压压缩包(以linux-amd64为例)
tar -zxvf helm.tar.gz
将文件移动到PATH目录中(以linux-amd64为例)
sudo mv linux-amd64/helm /usr/bin/helm
执行命令,出现以下信息即部署成功。
$ helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}
相关文章:
k8s集群自动化管理
项目地址 https://github.com/TimeBye/kubeadm-ha准备安装包 # 离线安装环境 curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubeadm-ha-base-amd64.tar # 集群运行所需的镜像 curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubernetes-1.30.2-images-amd64.tgz # …...

yum库 docker的小白安装教程(附部分问题及其解决方案)
yum库 首先我们安装yum 首先在控制台执行下列语句 首先切换到root用户,假如已经是了就不用打下面的语句 su root #使用国内的镜像,不执行直接安装yum是国外的,那个有问题 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.al…...

python如何实现日期加减
首先通过import datetime,导入日期处理库。 然后把日期转化成datetime标准格式,使用datetime.datetime.strptime()方法将字符串格式的时间转化为标准格式。 其中"%Y/%m/%d %H:%M:%S"为time字符串的时间格式:Y为年,m为月…...

springboot实战学习笔记(4)(Spring Validation参数校验框架、全局异常处理器)
接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发。springboot实战学习笔记(3)(Lombok插件、postman测试工具、MD5加密算法、post请求、接口文档、注解、如何在IDEA中设置层级显示包结构、显示接口中的方法)-CSDN博客本篇博客主要是关…...
网络七层协议
网络七层协议,也称为OSI(Open Systems Interconnection)参考模型,是由国际标准化组织(ISO)提出的一种网络通信的协议分层模型。该模型将网络通信过程划分为七个层次,从下到上依次为物理层、数据…...
从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之一:生产环境与目标服务器详情
从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之一:生产环境与目标服务器详情 目录 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之一:生产环境与目标服务器详情一、操作系统环境二、Or…...

【软件测试】详解测试中常用的几种测试方法
目录 一、集成测试二、 系统测试三、验收测试四、回归测试 总结 一、集成测试 术语 集成测试是继组件测试之后的又一个层次。集成测试假定交给这个层次的测试对象已经经过了组件测试,并且任何组件内部的缺陷都已经尽可能地被纠正。 集成 开发人员、测试人员和专…...
开始学习深度学习-前言
作为一个外行,想学习一下深度学习。有些理解可能会很幼稚,特此记录一下。 深度学习,看起来高大上,其实用到的数学知识,也不是多高深,都是基本的数字。如果有不理解的,可以问一下chatGPT…...

Liveweb视频汇聚平台支持GB28181转RTMP、HLS、RTSP、FLV格式播放方案
GB28181协议凭借其在安防流媒体行业独有的大统一地位,目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准,目前基本所有厂家的安防摄像头…...

详解c++:new和delete
文章目录 前言一、new和mallocnew的用法(爽点)自动构造 delete和freedelete的用法(爽点) 提醒 前言 提示:这里可以添加本文要记录的大概内容: 在C中,new 和 delete 是两个非常重要的操作符&am…...

【深度学习】(5)--搭建卷积神经网络
文章目录 搭建卷积神经网络一、数据预处理1. 下载数据集2. 创建DataLoader(数据加载器) 二、搭建神经网络三、训练数据四、优化模型 总结 搭建卷积神经网络 一、数据预处理 1. 下载数据集 在PyTorch中,有许多封装了很多与图像相关的模型、…...
边学英语边学 Java|Synchronization in java
Why use Java Synchronization? Java Synchronization is used to make sure by some synchronization method that only one thread can access the resource at a given point in time. Java 同步用于确保通过某种同步方法,在给定的时间点只有一个线程可以访问资…...

k8s StorageClass 存储类
文章目录 一、概述1、StorageClass 对象定义2、StorageClass YAML 示例 二、StorageClass 字段1、provisioner(存储制备器)1.1、内置制备器1.2、第三方制备器 2、reclaimPolicy(回收策略)3、allowVolumeExpansion(允许…...

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展
3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展 1 官网下载最新3D Slicer image computing platform | 3D Slicer 版本5.7 2 安装torch依赖包: 2.1 进入安装目录C:\Users\wangzhenlin\AppData\Local\slicer.org\Slicer 5.7.0-2024-09-21\bin࿰…...

分布式光伏的发电监控
国拥有丰富的清洁可再生能源资源储量,积极开发利用可再生能源,为解决当前化石能源短缺与环境污染严重的燃眉之急提供了有效途径[1]。但是可再生能源的利用和开发,可再生能源技术的发展和推广以及可再生能源资源对环境保护的正向影响ÿ…...

微信小程序----日期时间选择器(自定义时间精确到分秒)
目录 页面效果 代码实现 注意事项 页面效果 代码实现 js Component({/*** 组件的属性列表*/properties: {pickerShow: {type: Boolean,},config: Object,},/*** 组件的初始数据*/data: {pickerReady: false,// pickerShow:true// limitStartTime: new Date().getTime()-…...

3D生成技术再创新高:VAST发布Tripo 2.0,提升AI 3D生成新高度
随着《黑神话悟空》的爆火,3D游戏背后的AI 3D生成技术也逐渐受到更多的关注。虽然3D大模型的热度相较于语言模型和视频生成技术稍逊一筹,但全球的3D大模型玩家们却从未放慢脚步。无论是a16z支持的Yellow,还是李飞飞创立的World Labsÿ…...
ONNX Runtime学习之InferenceSession模块
ONNXRuntime库学习之InferenceSession(模块) 一、简介 onnxruntime.InferenceSession 是 ONNX Runtime 中用于加载和运行 ONNX 模型的核心模块。它提供了一种灵活的方式来在多种硬件设备(如 CPU、GPU)上执行 ONNX 模型推理。通过 InferenceSession&…...
【TS】TypeScript内置条件类型-ReturnType
ReturnType 在TypeScript中,ReturnType 是一个内置的条件类型(Conditional Type),它用于获取一个函数返回值的类型。这个工具类型非常有用,特别是当你需要引用某个函数的返回类型,但又不想直接写出那个具体…...

【c语言数据结构】超详细!模拟实现双向链表(初始化、销毁、头删、尾删、头插、尾插、指定位置插入与删除、查找数据、判断链表是否为空)
特点: 结构:指向前一结点指针数据指向后一结点指针由于循环,尾结点的下一结点next指向头结点(哨兵结点)空的双向链表只有自循环的哨兵结点(头结点) 模拟实现双向链表 LIST.h #define _CRT_…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...