当前位置: 首页 > article >正文

K8S高可用集群-小白学习之二进制部署(ansible+shell)

一.K8S高可用集群配置概述

序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图是由博主绘制,但是可能不是完全正确,有问题可以留言指出,大家一起学习进步~

1.主机配置清单

在这里插入图片描述

2.各应用及组件版本清单

在这里插入图片描述

3.架构及运行原理图

在这里插入图片描述

4.部署文件目录概览

4.1.目录结构及概述

├── k8s                          # Kubernetes 相关文件的根目录
│   ├── containerd               # 容器运行时相关文件
│   │   ├── cni-plugins-linux-amd64-v1.4.1.tgz  # CNI 插件压缩包
│   │   ├── containerd-1.7.14-linux-amd64.tar.gz # containerd 二进制文件压缩包
│   │   ├── containerd.service    # systemd 服务文件
│   │   ├── crictl-v1.26.0-linux-amd64.tar.gz   # CRI 工具压缩包
│   │   └── runc.amd64            # runc 二进制文件
│   ├── image  (此目录为离线镜像包,为防止在线拉取异常后可手动导入用)     # Kubernetes 镜像文件
│   │   ├── docker.io_kubernetesui_dashboard_v2.7.0.tar
│   │   ├── docker.io_kubernetesui_metrics-scraper_v1.0.8.tar
│   │   ├── registry.cn-hangzhou.aliyuncs.com_chenby_cni_v3.26.1.tar
│   │   ├── registry.cn-hangzhou.aliyuncs.com_chenby_coredns_v1.10.0.tar
│   │   ├── registry.cn-hangzhou.aliyuncs.com_chenby_kube-controllers_v3.26.1.tar
│   │   ├── registry.cn-hangzhou.aliyuncs.com_chenby_metrics-server_v0.5.2.tar
│   │   └── registry.cn-hangzhou.aliyuncs.com_chenby_node_v3.26.1.tar
│   ├── pkg                       # 配置文件和工具包
│   │   ├── calico.yaml           # Calico 网络插件配置文件
│   │   ├── cfssl_1.6.5_linux_amd64  # CFSSL 二进制文件
│   │   ├── cfssljson_1.6.5_linux_amd64 # CFSSL JSON 处理工具
│   │   ├── dashboard-user.yaml    # Dashboard 用户配置文件
│   │   ├── libseccomp-2.5.1-1.el8.x86_64.rpm # libseccomp RPM 包
│   │   └── recommended.yaml       # Kubernetes 图形化配置文件
│   ├── pki  (此目录文件均为部署中生成,后脚本自动拷贝备份至此,部署前为空置 # 公钥基础设施相关文件
│   │   ├── admin.csr             # 管理员证书签名请求
│   │   ├── admin-csr.json        # 管理员 CSR JSON 文件
│   │   ├── admin-key.pem         # 管理员私钥
│   │   ├── admin.kubeconfig      # 管理员 kubeconfig 文件
│   │   ├── admin.pem             # 管理员证书
│   │   ├── apiserver.csr         # API 服务器证书签名请求
│   │   ├── apiserver-csr.json    # API 服务器 CSR JSON 文件
│   │   ├── apiserver-key.pem     # API 服务器私钥
│   │   ├── apiserver.pem         # API 服务器证书
│   │   ├── bootstrap-kubelet.kubeconfig # kubelet 启动配置文件
│   │   ├── bootstrap.secret.yaml  # 启动密钥的 YAML 配置
│   │   ├── ca-config.json        # CA 配置文件
│   │   ├── ca.csr                # CA 证书签名请求
│   │   ├── ca-csr.json           # CA CSR JSON 文件
│   │   ├── ca-key.pem            # CA 私钥
│   │   ├── ca.pem                # CA 证书
│   │   ├── controller-manager.csr # 控制器管理器证书签名请求
│   │   ├── controller-manager-key.pem # 控制器管理器私钥
│   │   ├── controller-manager.kubeconfig # 控制器管理器 kubeconfig 文件
│   │   ├── controller-manager.pem # 控制器管理器证书
│   │   ├── coredns.yaml          # CoreDNS 配置文件
│   │   ├── etcd-ca-csr.json      # etcd CA CSR JSON 文件
│   │   ├── etcd-csr.json         # etcd 证书签名请求
│   │   ├── front-proxy-ca.csr    # 前端代理 CA 证书签名请求
│   │   ├── front-proxy-ca-csr.json # 前端代理 CA CSR JSON 文件
│   │   ├── front-proxy-ca-key.pem # 前端代理 CA 私钥
│   │   ├── front-proxy-ca.pem    # 前端代理 CA 证书
│   │   ├── front-proxy-client.csr # 前端代理客户端证书签名请求
│   │   ├── front-proxy-client-csr.json # 前端代理客户端 CSR JSON 文件
│   │   ├── front-proxy-client-key.pem # 前端代理客户端私钥
│   │   ├── front-proxy-client.pem # 前端代理客户端证书
│   │   ├── kubelet-csr.json      # kubelet 证书签名请求
│   │   ├── kube-proxy.csr        # kube-proxy 证书签名请求
│   │   ├── kube-proxy-csr.json   # kube-proxy CSR JSON 文件
│   │   ├── kube-proxy-key.pem     # kube-proxy 私钥
│   │   ├── kube-proxy.kubeconfig  # kube-proxy kubeconfig 文件
│   │   ├── kube-proxy.pem         # kube-proxy 证书
│   │   ├── manager-csr.json      # 管理员证书签名请求
│   │   ├── metrics-server.yaml    # 指标服务器配置文件
│   │   ├── sa.key                 # 服务账户私钥
│   │   ├── sa.pub                 # 服务账户公钥
│   │   ├── scheduler.csr          # 调度器证书签名请求
│   │   ├── scheduler-csr.json     # 调度器 CSR JSON 文件
│   │   ├── scheduler-key.pem      # 调度器私钥
│   │   ├── scheduler.kubeconfig   # 调度器 kubeconfig 文件
│   │   └── scheduler.pem          # 调度器证书
│   ├── start                      # 启动脚本和配置
│   │   ├── 1-passwd.sh            # 批量免密登录脚本
│   │   ├── 2-start.sh             # 主机环境初始化脚本
│   │   ├── 3-containerd.sh        # 容器服务部署脚本
│   │   ├── 4-k8stargz.sh          # K8S 组件部署脚本
│   │   ├── 5-pki.sh               # K8S 集群证书配置生成脚本
│   │   ├── 6-cfssl.sh             # CFSSL 工具部署脚本
│   │   ├── 7-certs.sh             # K8S 集群证书生成与分发脚本
│   │   ├── 8-etcdyml.sh           # etcd 配置生成与分发脚本
│   │   ├── 9-haproxy.sh           # HAProxy 安装与配置脚本
│   │   ├── 10-keepalived.sh       # Keepalived 安装与配置脚本
│   │   ├── 11-apiserver.sh        # kube-apiserver 服务配置脚本
│   │   ├── 12-kube_controller_manager.sh  # kube-controller-manager 服务配置脚本
│   │   ├── 13-kube-scheduler.sh   # kube-scheduler 服务配置脚本
│   │   ├── 14-tlsbootstrapping.sh # TLS Bootstrapping 配置脚本
│   │   ├── 15-kubelet.sh          # Kubelet 服务配置脚本
│   │   ├── 16-kubeproxy.sh        # Kube-proxy 服务配置脚本
│   │   ├── ansible_group    (部署前按需修改)   # Ansible 组配置文件,部分脚本引用
│   │   └── start_variables  (部署前按需修改)   # 通用变量配置文件,所有脚本均有引用
│   └── targz                     # 压缩包目录
│       ├── etcd-v3.5.6-linux-amd64.tar.gz # etcd 压缩包
│       └── kubernetes-server-linux-amd64.tar.gz # Kubernetes 服务器压缩包

4.2.主要压缩包下载地址

cni-plugins-linux-amd64-v1.4.1.tgz
containerd-1.7.14-linux-amd64.tar.gz
crictl-v1.26.0-linux-amd64.tar.gz
runc.amd64
etcd-v3.5.6-linux-amd64.tar.gz
kubernetes-server-linux-amd64.tar.gz
其他文件在本文中均已写出或另在文件概述中附加了原版文件下载地址。

5.脚本文件概述

1-passwd.sh(批量免密登录脚本)

脚本名:1-passwd.sh(批量免密登录脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化配置集群所有主机的 SSH 免密登录,并分发公用变量文件。
运行逻辑:
1. 加载通用变量 → 2. 生成 SSH 密钥 → 3. 安装 sshpass → 4. 交互式输入密码 → 5. 分发公钥至所有主机 → 6. Ansible 检查 → 7. 分发变量文件至所有主机
生成的文件:
~/.ssh/id_rsa(SSH 私钥)
~/.ssh/id_rsa.pub(SSH 公钥)
引用的文件:
/share/k8s/start/start_variables(变量文件)
/share/k8s/start/ansible_group(Ansible 主机清单文件)

2-start.sh(主机环境初始化脚本)

脚本名:2-start.sh(主机环境初始化脚本)
执行方式:master组第一个主机上使用ansible对all组执行执行
脚本目标:自动化配置系统环境,包括主机映射、共享目录挂载、主机名设置、防火墙关闭、内核优化等,为后续部署(如 Kubernetes)做好准备。
运行逻辑:
1. 加载通用变量 → 2. 添加主机映射 → 3. 挂载共享目录 → 4. 设置主机名 → 5. 关闭防火墙 → 6. 清除 iptables 规则 → 7. 关闭 SELinux → 8. 关闭 Swap → 9. 禁用 IPv6 → 10. 配置阿里云 YUM 源 → 11. 安装工具包 → 12. 配置 Ansible → 13. 配置 NTP 时间同步 → 14. 加大文件描述符 → 15. 内核优化 → 16. 加载 br_netfilter 模块
生成的文件:
/etc/hosts(更新主机映射)
/etc/fstab(更新挂载配置)
/etc/default/grub(更新 GRUB 配置)
/etc/yum.repos.d/CentOS-Base.repo(阿里云 YUM 源)
/etc/yum.repos.d/epel.repo(EPEL 源)
/etc/ansible/ansible.cfg(Ansible 配置)
/etc/sysctl.conf(内核优化配置)
/etc/sysctl.d/k8s.conf(K8S 内核优化配置)
引用的文件:
/tmp/start_variables(1-passwd.sh分发的公用变量文件)
/etc/hosts(主机映射文件)

3-containerd.sh(容器服务部署脚本)

脚本名:3-containerd.sh(容器服务部署脚本)
执行方式:master组第一个主机上使用ansible对all组执行执行
脚本目标:自动化安装和配置 Containerd 容器运行时,包括相关工具(如 runc、CNI 插件、crictl)的安装和配置,为 Kubernetes 部署做好准备。
运行逻辑:
1. 拷贝 Containerd 相关文件 → 2. 安装 Containerd → 3. 配置 Containerd 服务 → 4. 生成默认配置文件 → 5. 修改容器镜像源 → 6. 配置 Systemd Cgroup 驱动 → 7. 重启 Containerd → 8. 安装 runc → 9. 安装 CNI 插件 → 10. 配置 crictl 工具
生成的文件:
/etc/systemd/system/containerd.service(Containerd 服务文件)
/etc/containerd/config.toml(Containerd 配置文件)
/etc/crictl.yaml(crictl 配置文件)
引用的文件:
/share/k8s/containerd/*(Containerd 安装包和配置文件)
/share/k8s/pkg/libseccomp-2.5.1-1.el8.x86_64.rpm(libseccomp 依赖包)

4-k8stargz.sh(K8S组件部署脚本)

脚本名:4-k8stargz.sh(K8S组件部署脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化部署 Kubernetes 和 etcd 的二进制文件到所有节点,并创建必要的目录结构,为 Kubernetes 集群的初始化做好准备。
运行逻辑:
1. 加载变量文件 → 2. 解压 Kubernetes 二进制文件 → 3. 解压并移动 etcd 二进制文件 → 4. 验证版本 → 5. 从 Ansible 分组文件中提取 Master 和 Worker 节点 → 6. 将二进制文件复制到 Master 节点 → 7. 将二进制文件复制到 Worker 节点 → 8. 在所有节点上创建 CNI 和其他配置目录
生成的文件:
/usr/local/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}(Kubernetes 二进制文件)
/usr/local/bin/etcd*(etcd 二进制文件)
/opt/cni/bin(CNI 插件目录)
/etc/kubernetes/manifests/(Kubernetes 静态 Pod 目录)
/etc/systemd/system/kubelet.service.d/(Kubelet 服务配置目录)
/var/lib/kubelet(Kubelet 数据目录)
/var/log/kubernetes(Kubernetes 日志目录)
引用的文件:
/share/k8s/start/start_variables(变量文件)
/share/k8s/start/ansible_group(Ansible 分组文件)
/share/k8s/targz/kubernetes-server-linux-amd64.tar.gz(Kubernetes 二进制文件包)
/share/k8s/targz/etcd*.tar.gz(etcd 二进制文件包)

5-pki.sh(K8S集群证书配置生成脚本)

脚本名:5-pki.sh(K8S集群证书配置生成脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化生成 Kubernetes 集群所需的 PKI  CSR  CA JSON等证书请求文件及其他yaml配置文件,并将其分发到所有 Master 节点,为 Kubernetes 集群的安全通信和组件配置做好准备。
运行逻辑:
1. 加载变量文件 → 2. 提取 Master 节点的主机名和 IP 地址 → 3. 定义源目录和目标目录 → 4. 生成各类证书签名请求(CSR)文件 → 5. 生成集群初始化所需的 YAML 配置文件 → 6. 分发 PKI 文件和配置文件到所有 Master 节点
生成的文件(/share/k8s/pki/也有一份):
CSR 文件
/etc/kubernetes/pki/admin-csr.json(管理员证书请求文件)
/etc/kubernetes/pki/ca-csr.json(CA 证书请求文件)
/etc/kubernetes/pki/apiserver-csr.json(API Server 证书请求文件)
/etc/kubernetes/pki/apiserver-kubelet-client-csr.json(API Server 与 Kubelet 通信证书请求文件)
/etc/kubernetes/pki/controller-manager-csr.json(Controller Manager 证书请求文件)
/etc/kubernetes/pki/front-proxy-ca-csr.json(Front Proxy CA 证书请求文件)
/etc/kubernetes/pki/front-proxy-client-csr.json(Front Proxy 客户端证书请求文件)
/etc/kubernetes/pki/kubelet-csr.json(Kubelet 证书请求文件)
/etc/kubernetes/pki/metrics-server-csr.json(Metrics Server 证书请求文件)
/etc/kubernetes/pki/scheduler-csr.json(Scheduler 证书请求文件)
集群初始化配置文件
/etc/kubernetes/pki/bootstrap.secret.yaml(Bootstrap Secret 配置文件)
/etc/kubernetes/pki/coredns.yaml(CoreDNS 配置文件)
/etc/kubernetes/pki/metrics-server.yaml(Metrics Server 配置文件)
/etc/kubernetes/pki/kube-controller-manager.yaml(Controller Manager 配置文件)
/etc/kubernetes/pki/kube-scheduler.yaml(Scheduler 配置文件)
/etc/kubernetes/pki/kube-proxy.yaml(Kube Proxy 配置文件)
/etc/kubernetes/pki/kubelet-config.yaml(Kubelet 配置文件)
/etc/kubernetes/pki/kubelet.service(Kubelet 服务文件)
/etc/kubernetes/pki/kube-apiserver.yaml(API Server 配置文件)
/etc/kubernetes/pki/etcd.yaml(etcd 配置文件)
证书文件
/etc/kubernetes/pki/ca.pem(CA 证书)
/etc/kubernetes/pki/ca-key.pem(CA 私钥)
/etc/kubernetes/pki/apiserver.pem(API Server 证书)
/etc/kubernetes/pki/apiserver-key.pem(API Server 私钥)
/etc/kubernetes/pki/apiserver-kubelet-client.pem(API Server 与 Kubelet 通信证书)
/etc/kubernetes/pki/apiserver-kubelet-client-key.pem(API Server 与 Kubelet 通信私钥)
/etc/kubernetes/pki/controller-manager.pem(Controller Manager 证书)
/etc/kubernetes/pki/controller-manager-key.pem(Controller Manager 私钥)
/etc/kubernetes/pki/front-proxy-ca.pem(Front Proxy CA 证书)
/etc/kubernetes/pki/front-proxy-ca-key.pem(Front Proxy CA 私钥)
/etc/kubernetes/pki/front-proxy-client.pem(Front Proxy 客户端证书)
/etc/kubernetes/pki/front-proxy-client-key.pem(Front Proxy 客户端私钥)
/etc/kubernetes/pki/kubelet.pem(Kubelet 证书)
/etc/kubernetes/pki/kubelet-key.pem(Kubelet 私钥)
/etc/kubernetes/pki/metrics-server.pem(Metrics Server 证书)
/etc/kubernetes/pki/metrics-server-key.pem(Metrics Server 私钥)
/etc/kubernetes/pki/scheduler.pem(Scheduler 证书)
/etc/kubernetes/pki/scheduler-key.pem(Scheduler 私钥)
引用的文件:
/share/k8s/start/start_variables(变量文件)
/share/k8s/start/ansible_group(Ansible 分组文件)

6-cfssl.sh(CFSSL 工具部署脚本)

脚本名:6-cfssl.sh(CFSSL 工具部署脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化部署 CFSSL 工具到目标路径,并验证安装结果。
运行逻辑:
1. 检查本地 CFSSL 工具文件 → 2. 复制文件到目标路径 → 3. 赋予可执行权限 → 4. 验证安装结果
生成的文件:
/usr/local/bin/cfssl(CFSSL 可执行文件)
/usr/local/bin/cfssljson(CFSSLJSON 可执行文件)
引用的文件:
/share/k8s/pkg/cfssl_1.6.5_linux_amd64(本地 CFSSL 文件)
/share/k8s/pkg/cfssljson_1.6.5_linux_amd64(本地 CFSSLJSON 文件)

7-certs.sh(K8S 集群证书生成与分发脚本)

脚本名:7-certs.sh(K8S 集群证书生成与分发脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化生成 Kubernetes 集群所需的各类证书和配置文件,并将其分发到所有 Master 节点,确保集群的安全通信和组件配置。
运行逻辑:
1. 加载变量文件 → 2. 提取 Master 节点信息 → 3. 检查 PKI 目录和文件 → 4. 生成 etcd 证书 → 5. 生成 Kubernetes 根证书 → 6. 生成 front-proxy 证书 → 7. 生成 API Server 证书 → 8. 生成 Controller Manager 证书和 kubeconfig → 9. 生成 Scheduler 证书和 kubeconfig → 10. 生成 Admin 证书和 kubeconfig → 11. 生成 Kube-Proxy 证书和 kubeconfig → 12. 生成 Service Account 密钥对 → 13. 分发证书和配置文件到所有 Master 节点
生成的文件:
/etc/etcd/ssl/etcd-ca.pem(etcd CA 证书)
/etc/etcd/ssl/etcd-ca-key.pem(etcd CA 私钥)
/etc/etcd/ssl/etcd.pem(etcd 证书)
/etc/etcd/ssl/etcd-key.pem(etcd 私钥)
/etc/kubernetes/pki/ca.pem(Kubernetes CA 证书)
/etc/kubernetes/pki/ca-key.pem(Kubernetes CA 私钥)
/etc/kubernetes/pki/apiserver.pem(API Server 证书)
/etc/kubernetes/pki/apiserver-key.pem(API Server 私钥)
/etc/kubernetes/pki/controller-manager.pem(Controller Manager 证书)
/etc/kubernetes/pki/controller-manager-key.pem(Controller Manager 私钥)
/etc/kubernetes/pki/scheduler.pem(Scheduler 证书)
/etc/kubernetes/pki/scheduler-key.pem(Scheduler 私钥)
/etc/kubernetes/pki/admin.pem(Admin 证书)
/etc/kubernetes/pki/admin-key.pem(Admin 私钥)
/etc/kubernetes/pki/kube-proxy.pem(Kube-Proxy 证书)
/etc/kubernetes/pki/kube-proxy-key.pem(Kube-Proxy 私钥)
/etc/kubernetes/pki/sa.key(Service Account 私钥)
/etc/kubernetes/pki/sa.pub(Service Account 公钥)
/etc/kubernetes/pki/front-proxy-ca.pem(Front Proxy CA 证书)
/etc/kubernetes/pki/front-proxy-ca-key.pem(Front Proxy CA 私钥)
/etc/kubernetes/pki/front-proxy-client.pem(Front Proxy 客户端证书)
/etc/kubernetes/pki/front-proxy-client-key.pem(Front Proxy 客户端私钥)
/etc/kubernetes/controller-manager.kubeconfig(Controller Manager kubeconfig)
/etc/kubernetes/scheduler.kubeconfig(Scheduler kubeconfig)
/etc/kubernetes/admin.kubeconfig(Admin kubeconfig)
/etc/kubernetes/kube-proxy.kubeconfig(Kube-Proxy kubeconfig)
引用的文件:
/share/k8s/start/start_variables(变量文件)
/share/k8s/start/ansible_group(Ansible 分组文件)
/etc/kubernetes/pki/*.json(证书签名请求文件)

8-etcdyml.sh(etcd 配置生成与分发脚本)

脚本名:8-etcdyml.sh(etcd 配置文件生成与分发脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化生成 etcd 配置文件,并将其分发到所有 Master 节点,同时配置 systemd 服务并启动 etcd。
运行逻辑:
1. 加载变量文件 → 2. 提取 Master 节点的主机名和 IP 地址 → 3. 生成 etcd 配置文件 → 4. 分发配置文件到各个 Master 节点 → 5. 创建 systemd 服务文件 → 6. 创建证书目录并链接 → 7. 重新加载 systemd 配置并启动 etcd 服务 → 8. 检查 etcd 状态
生成的文件:
/etc/etcd/etcd.config.yml(etcd 配置文件)
/etc/etcd/etcd-主机名.config.yml(etcd 临时配置文件)
/usr/lib/systemd/system/etcd.service(etcd systemd 服务文件)
引用的文件:
/share/k8s/start/start_variables(变量文件)
/share/k8s/start/ansible_group(Ansible 分组文件)
/etc/kubernetes/pki/etcd/*(etcd 证书文件)

9-haproxy.sh(HAProxy 安装与配置脚本)

脚本名:9-haproxy.sh(HAProxy 安装与配置脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化生成 HAProxy 配置文件,并将其分发到所有 Master 节点,同时安装并启动 HAProxy 服务。
运行逻辑:
1. 加载变量文件 → 2. 提取 Master 节点的主机名和 IP 地址 → 3. 生成 HAProxy 配置文件内容 → 4. 将 Master 节点的主机名和 IP 地址添加到 backend 配置中 → 5. 在每个 Master 节点上安装 HAProxy 并分发配置文件
生成的文件:
/etc/haproxy/haproxy.cfg(HAProxy 配置文件)
/etc/haproxy/haproxy.cfg.bak(HAProxy 配置文件备份)
引用的文件:
/share/k8s/start/start_variables(变量文件)
/share/k8s/start/ansible_group(Ansible 分组文件)

10-keepalived.sh(Keepalived 安装与配置脚本)

脚本名:10-keepalived.sh(Keepalived 安装与配置脚本)
执行方式:master 组第一个主机上切换至共享目录 /share/k8s/start 目录下,./脚本名 执行。
脚本目标:自动化生成 Keepalived 配置文件,并将其分发到所有 Master 节点,同时安装并启动 Keepalived 服务。
运行逻辑:
1. 加载变量文件 → 2. 提取 Master 节点的主机名和 IP 地址 → 3. 确保至少有 3 台 Master 节点 → 4. 在每个 Master 节点上安装 Keepalived 并写入配置文件 → 5. 创建 check_apiserver.sh 脚本 → 6. 启动并启用 Keepalived 服务
生成的文件:
/etc/keepalived/keepalived.conf(Keepalived 配置文件)
/etc/keepalived/keepalived.conf.bak(Keepalived 配置文件备份)
/etc/keepalived/check_apiserver.sh(HAProxy 健康检查脚本)
引用的文件ÿ

相关文章:

K8S高可用集群-小白学习之二进制部署(ansible+shell)

一.K8S高可用集群配置概述 序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图…...

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数: 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有,简称为空类。 空类中…...

利用Ollama+AnythingLLM+本地向量数据库Milvus+本地DeepSeek大模型实现知识库的搭建

1. Ollama的搭建 基本介绍 Ollama是一个支持在Windows、Linux和MacOS上本地运行大语言模型的工具。它允许用户非常方便地运行和使用各种大语言模型,比如Qwen模型等。用户只需一行命令就可以启动模型。 Ollama 下载:https://ollama.com/download Ollama 官方主页&a…...

攻防世界WEB(新手模式)19-file_include

先进行代码分析 include("./check.php");:包含并执行当前目录下的check.php文件,通常用于引入一些通用的函数、类或配置信息。if(isset($_GET[filename])):检查是否通过 GET 请求传递了名为filename的参数。如果传递了filename参数…...

Facebook 的隐私保护数据存储方案研究

Facebook 的隐私保护数据存储方案研究 在这个信息爆炸的时代,数据隐私保护已成为公众关注的热点。Facebook,作为全球最大的社交媒体平台之一,承载着海量用户数据,其隐私保护措施和数据存储方案对于维护用户隐私至关重要。本文将深…...

app UI自动化测试框架都包含哪些内容?

UI自动化测试框架是指用于自动化执行用户界面(UI)相关测试的工具和库。它们可以帮助开发团队提高测试效率、发现和解决应用程序中的问题,并确保应用程序的正确性和稳定性。下面将详细介绍一个完整的UI自动化测试框架应该具备的内容。 1. 测试环境配置 UI自动化测试框…...

C++ 中 `shared_ptr` 的用法及常见陷阱解析

shared_ptr 是 C 标准库&#xff08;<memory> 头文件&#xff09;中提供的一种智能指针&#xff0c;用于管理动态分配的内存。它通过引用计数&#xff08;reference counting&#xff09;来实现多个 shared_ptr 对象共享同一块内存的所有权。当最后一个 shared_ptr 被销毁…...

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手&#xff0c;详细阐述居家养老管理模式兴起的…...

ORB-SLAM2源码学习(六):相机跟踪(局部地图跟踪和关键帧创建)

目录 1.局部地图跟踪 1.1 更新局部关键帧UpdateLocalKeyFrames 1.2 更新局部地图点&#xff08;来自局部关键帧&#xff09;UpdateLocalPoints() 1.3 投影匹配 2. 对比四种跟踪方式以及使用的投影匹配 3.关键帧创建 3.1 判断是否需要创建新关键帧: NeedNewKeyFrame() 3…...

视频格式有哪些视频格式汇总

视频格式是指视频文件的编码和封装方式&#xff0c;不同的格式适用于不同的应用场景。以下是一些常见的视频格式及其特点&#xff1a; 1. MP4&#xff08;MPEG-4 Part 14&#xff09; 特点&#xff1a;最流行的视频格式之一&#xff0c;支持多种视频编码标准&#xff08;如H.…...

【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?

https://time.geekbang.org/column/article/118826 2.6 渲染流程&#xff08;下&#xff09;&#xff1a;HTML、CSS和JavaScript&#xff0c;是如何变成页面的&#xff1f; 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段&#xff0c;2.6讲解渲染流水线后面的阶段…...

浏览器WEB播放RTSP

注意&#xff1a;浏览器不能直接播放RTSP&#xff0c;必须转换后才能播放。这一点所有的播放都是如此。 参考 https://github.com/kyriesent/node-rtsp-stream GitHub - phoboslab/jsmpeg: MPEG1 Video Decoder in JavaScript 相关文件方便下载 https://download.csdn.net…...

DeepSeek开源Day4:DualPipeEPLB技术详解

2 月 24 日&#xff0c;DeepSeek 启动 “开源周”&#xff0c;第四个开源的代码库为 DualPipe 与 EPLB&#xff08;一下发布了两个&#xff09;。DualPipe 与 EPLB 依然使用了大量与 Hopper 架构绑定的技术。 DualPipe 是由 DeepSeek-AI 团队开发的一种双向流水线并行通信算法&…...

阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1

阿里Qwen 团队正式发布了他们最新的研究成果——QwQ-32B大语言模型&#xff01;这款模型不仅名字萌萌哒(QwQ)&#xff0c;实力更是不容小觑&#xff01;&#x1f60e; QwQ-32B 已在 Hugging Face 和 ModelScope 开源&#xff0c;采用了 Apache 2.0 开源协议。大家可通过 Qwen C…...

vue实现一个pdf在线预览,pdf选择文本并提取复制文字触发弹窗效果

[TOC] 一、文件预览 1、安装依赖包 这里安装了disjs-dist2.16版本&#xff0c;安装过程中报错缺少worker-loader npm i pdfjs-dist2.16.105 worker-loader3.0.8 2、模板部分 <template><div id"pdf-view"><canvas v-for"page in pdfPages&qu…...

Unity自定义渲染管线(Scriptable Render Pipeline)架构设计与实现指南

一、SRP技术体系概述 1. 核心设计理念 全托管渲染控制&#xff1a;通过C#脚本完全掌控渲染流程 模块化架构&#xff1a;将渲染流程拆分为可组合的RenderPass GPU友好设计&#xff1a;支持CommandBuffer与Compute Shader混合编程 对惹&#xff0c;这里有一个游戏开发交流小组…...

时间复杂度分析与递归,以新南UNSW的COMP2521作业题为例

作者&#xff1a;Smooth&#xff08;连接教育高级讲师&#xff09; 首发于&#xff1a;⁠⁠⁠⁠⁠⁠⁠UNSW学习知识库&#xff08;UNSW Study Wiki&#xff09; 创作时间&#xff1a;2025年3月5日 如何测度算法的时间性能&#xff1f;理论分析Theoretical Analysis 测度算法时…...

RxJS与Redux革命性协同:打造高效、解耦的前端状态管理方案

摘要 本文探讨RxJS与Redux的融合应用&#xff0c;通过真实用户场景揭示其必要性&#xff0c;系统讲解整合策略&#xff0c;从基础到高级涵盖响应式编程优化、异步操作处理、状态流控制等核心主题。提供可落地的架构方案与性能优化技巧&#xff0c;包含10可复用代码示例和20实战…...

蓝桥杯P1259-奇怪的馈赠 (贪心题解)

题目&#xff1a;奇怪的捐赠 题目来源&#xff1a;1.奇怪的捐赠 - 蓝桥云课 题目描述 需要将 100 万&#xff08;1,000,000&#xff09;正好分成若干个 7 的次方形式的数&#xff08;如 7^01, 7^17, 7^249 等&#xff09;&#xff0c;且每种金额&#xff08;即每个 7 的次方…...

todo: 使用融云imserve做登录(android)

使用融云做登录注册思路 注册界面需要name, email, password考虑到融云注册用户的post格式 POST http://api.rong-api.com/user/getToken.json?userId1690544550qqcom&nameIronman这里的userId可以使用用户的email&#xff0c;但是要截断和 . 符号&#xff0c;即1690544…...

如何设置爬虫的User-Agent?

在爬虫开发中&#xff0c;设置合适的 User-Agent 是非常重要的一步。User-Agent 是 HTTP 请求头中的一个字段&#xff0c;用于标识客户端&#xff08;通常是浏览器&#xff09;的类型、版本、操作系统等信息。通过设置 User-Agent&#xff0c;可以模拟正常的浏览器访问行为&…...

C++ 二叉搜索树代码

C 二叉搜索树代码 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){} };template<typena…...

OpenAI Whisper:开启语音转文本的智能时代

在人工智能技术飞速发展的今天,OpenAI推出的Whisper语音识别系统正悄然改变着人类与机器的交互方式。作为一款开源的AI驱动语音转文本工具,Whisper凭借其跨语言能力、高精度识别和灵活的生态系统,成为开发者和普通用户共同追捧的技术标杆。 核心技术与突破 Whisper基于深度…...

基于CSDN资源,搭建AI赋能农业典型场景落地方案

农业场景&#xff0c;不但是信息化、自动化等薄弱的产业&#xff0c;更是AI落地困难的场景。基于此&#xff0c;想通过这篇文章查找一个CSDN相关资源&#xff0c;论证一下AI赋能农业三个典型场景的实现思路。 场景1&#xff1a;水质-土壤智能调控 **痛点&#xff1a;**水质恶…...

python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#x…...

RoboBrain:从抽象到具体的机器人操作统一大脑模型

25年2月来自北大、北京智源、中科院自动化所等的论文“RoboBrain: A Unified Brain Model for Robotic Manipulation from Abstract to Concrete”。 目前的多模态大语言模型&#xff08;MLLM&#xff09; 缺少三项必备的机器人大脑能力&#xff1a;规划能力&#xff0c;将复杂…...

DeepSeek本地接口调用(Ollama)

前言 上篇博文&#xff0c;我们通过Ollama搭建了本地的DeepSeek模型&#xff0c;本文主要是方便开发人员&#xff0c;如何通过代码或工具&#xff0c;通过API接口调用本地deepSeek模型 前文&#xff1a;DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注&#xff1a;本文不仅…...

数据库索引的作用:提升数据检索效率的关键

在数据库管理系统中&#xff0c;数据如同浩瀚海洋中的宝藏&#xff0c;如何快速准确地找到所需信息&#xff0c;成为了一个关键问题。这时候&#xff0c;数据库索引就如同一张精确的航海图&#xff0c;指引着我们高效地定位数据。那么&#xff0c;数据库索引究竟是什么&#xf…...

高效便捷的 Spring Boot 通用控制器框架

✨高效便捷的 Spring Boot 通用控制器框架✨ 一、简介 在 Java 开发中&#xff0c;重复性的基础接口编写工作常令人头疼。本框架基于 Spring Boot 与 MyBatis-Plus&#xff0c;精心构建通用控制器类BaseController&#xff0c;旨在为开发者排忧解难&#xff0c;极大减少繁琐的…...

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…...