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

节点信息

iphostnameOSrole
192.168.73.98k8s-master3CentOS 7.9master etcd worker
192.168.73.99k8s-master2CentOS 7.9master etcd worker
192.168.73.100k8s-master1CentOS 7.9master etcd worker
192.168.73.101k8s-node1CentOS 7.9worker
192.168.73.102k8s-deplayCentOS 7.9kubeadm-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-tools

yum 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 = 16777216
  max_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-ha

ctr -n k8s.io containers rm 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
推送镜像到已有镜像库(可选项,可跳过)
# 命令格式: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段,默认掩码位 1816384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24256 个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"}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++掉血迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <string> #include <cstring> using namespace std; enum RBYG {R 1,B 2,Y 4,G 7, }; struct heal {int ix…

python_uiautoanimation实现自动化微信聊天

文章目录 ⭐前言⭐微软inspect工具定位元素&#x1f496;工具查找属性 ⭐查找微信窗口&#x1f496;命令行查找运行窗口 ⭐查找微信的聊天窗口⭐封装发送消息⭐定时查询消息⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享python_uiautoanimation实现自动化微…

平价头戴式蓝牙耳机有哪些?四款公认平价性能超强品牌机型推荐

在追求高品质音乐体验的同时&#xff0c;许多消费者希望找到价格亲民的头戴式蓝牙耳机&#xff0c;市场上不乏性能卓越、价格实惠的产品&#xff0c;它们凭借出色的音质、舒适的佩戴体验和可靠的续航能力赢得了用户的青睐&#xff0c;那么在众多的头戴式蓝牙耳机内&#xff0c;…

提高数据集成稳定性:EMQX Platform 端到端规则调试指南

自 5.7.0 版本起&#xff0c;EMQX 支持了 SQL 调试&#xff0c;并支持在数据集成全流程中进行规则调试&#xff0c;使用户能够在开发阶段就全面验证和优化规则&#xff0c;确保它们在生产环境中的稳定高效运行。 点击此处下载 EMQX 最新版本&#xff1a;https://www.emqx.com/z…

移动开发(三):使用.NET MAUI打包第一个安卓APK完整过程

目录 一、修改AndroidManifest.xml 配置APP基本信息权限 二、修改项目属性调整输出Android包格式为APK 三、项目发布 四、APP分发 五、总结 之前给大家介绍过使用使用.NET MAUI开发第一个安卓APP,今天给大家介绍如何打包成APK,然后安装到安卓手机正常运行。这里还是沿用…

java序列化对象后读取数据错误的问题

今天学到了对象的序列化&#xff0c;就是将对象写入到文件中去&#xff0c;大家要直到我们普通的输入输出文件只是把数据的值写入了文件&#xff0c;而没有把数据的类型与之绑定&#xff0c;比如我向文件中写入100&#xff0c;那么这是字符串”100“还是整数100还是高精度浮点数…

算法.图论-建图/拓扑排序及其拓展

文章目录 建图的三种方式邻接矩阵邻接表链式前向星 拓扑排序拓扑排序基础原理介绍拓扑排序步骤解析拓扑排序模板leetcode-课程表 拓扑排序拓展食物链计数喧闹与富有并行课程 建图的三种方式 我们建图的三种方式分别是邻接矩阵, 邻接矩阵, 链式前向星 邻接矩阵 假设我们的点的…

Android14请求动态申请存储权限

Android14请求动态申请存储权限 Android14和Android15存储权限有增加多了选择部分&#xff0c;还是全部。一个小小的存储权限真的被它玩出了花来。本来Android13就将存储权限进行了3个细分&#xff0c;是图片&#xff0c;音频还是视频文件。 步骤一&#xff1a;AndroidManife…

24年蓝桥杯及攻防世界赛题-MISC-2

11 Railfence fliglifcpooaae_hgggrnee_o{cr} 随波逐流编码工具 分为5栏时,解密结果为:flag{railfence_cipher_gogogo} 12 Caesar rxms{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz} mode1 #12: flag{you_have_learned_caesar_encryption} 随波逐流编码工具 13 base64 base64解…

【machine learning-十-梯度下降-学习率】

学习率 学习率不同的学习率 在梯度下降算法中&#xff0c;学习率的选择很重要&#xff0c;不恰当的选择&#xff0c;甚至可能导致损失发散&#xff0c;而非收敛&#xff0c;下面就看一下学习率的影响。 学习率 学习率是下图中的红框圈出来的部分&#xff0c; 学习率是模型的超…

虹科干货 | CAN/CAN FD故障揭秘:快速排查与解决技巧

是否在处理CAN总线问题时感到头疼&#xff1f;是否在寻找简单直接的方法来解决那些看似复杂的连接故障&#xff1f;本文将为您提供实用技巧&#xff0c;让您能够轻松应对这些难题。 CAN总线因其高效、可靠的数据交换能力&#xff0c;在汽车、工业控制、航空航天等多个关键领域得…

《黑神话悟空》开发框架与战斗系统解析

本文主要围绕《黑神话悟空》的开发框架与战斗系统解析展开 主要内容 《黑神话悟空》采用的技术栈 《黑神话悟空》战斗系统的实现方式 四种攻击模式 连招系统的创建 如何实现高扩展性的战斗系统 包括角色属性系统、技能配置文件和逻辑节点的抽象等关键技术点 版权声明 本…

Linux Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 注&#xff1a;本章内容全部基于Centos7进行操作&#xff0c;查阅本章节内容前请确保您当前所在的Linux系统版本&#xff0c;且具有足够的权限执行操作。 一、命令模式快捷键 二…

图像生成大模型imagen

Imagen 是由谷歌研究团队开发的一种先进的图像生成大模型。它基于文本描述生成高质量的图像&#xff0c;是人工智能在生成视觉内容方面的一大突破。 Imagen 的主要特点包括&#xff1a; 1. 高分辨率和高质量&#xff1a;Imagen 生成的图像具有高分辨率和高质量&#xff0c;细…

springboot宠物智慧医院-计算机毕业设计源码99362

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3微信开发者工具 1.4小程序框架以及目录结构介绍 1.5论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2…

模拟电路分析基础知识总结笔记(电子电路分析与设计前置知识)

必备条件 电子电路的直流分析电子电路的正弦稳态分析RC电路的瞬态分析戴维南定理和诺顿定理拉普拉斯变换&#xff08;看不懂&#xff0c;根本看不懂&#xff09; 电子电路的直流分析 欧姆定律 ​ 在恒定温度下&#xff0c;电压与电流成正比&#xff0c;电压与电阻成正比&am…

对 JavaScript 原型的理解

笔者看了一些有关 JavaScript 原型的文章有感而发&#xff0c;就将所感所悟画了下来如果有理解错误和不足的地方&#xff0c;欢迎各位大佬指出&#xff0c;笔者感激不尽

企业热门进销存管理系统源码 助力中小企业实现低成本实现信息化 带源代码包以及搭建部署教程

系统概述 这款企业热门进销存管理系统是专为中小企业设计开发的综合性管理平台。它涵盖了采购、销售、库存管理等核心业务流程&#xff0c;能够实现企业内部各个环节的紧密连接和协同运作。通过信息化手段&#xff0c;系统能够实时记录和监控企业的业务数据&#xff0c;为企业…

微服务保护学习笔记(五)Sentinel授权规则、获取origin、自定义异常结果、规则持久化

文章目录 前言4 授权规则4.1 基本原理4.2 获取origin4.3 配置授权规则 5 自定义异常结果6 规则持久化 前言 微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装 微服务保护学习笔记(二)簇点链路、流控操作、流控模式(关联、链路) 微服务保护学习笔记(三)流控效果(…

【STL】string 基础,应用与操作

string 1.string相关介绍 STL&#xff08;标准模板库&#xff09;中的string容器是C标准库提供的用于处理和操作字符串的类&#xff0c;位于头文件中。std::string提供了比传统的C风格字符串&#xff08;字符数组&#xff09;更方便和安全的功能&#xff0c;具有动态内存管理…