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 健康检查脚本)
引用的文件ÿ

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

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

相关文章

K8S学习之基础十六:k8s中Deployment更新策略

滚动更新 滚动更新是一种自动化程度较高的发布方式、用户体验比较平滑、是目前成熟型技术组织采用的主流发布方式,一次滚动发布一般有若干发布批次组成,每批的数量一般都是可配置的,可通过发布模板定义,例如第一批10%&#xff0c…

dify + ollama + deepseek-r1+ stable-diffusion 构建绘画智能体

故事背景 stable-diffusion 集成进 dify 后,我们搭建一个小智能体,验证下文生图功能 业务流程 #mermaid-svg-6nSwwp69eMizP6bt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nSwwp69eMiz…

如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能

作者:来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中,通过使用 LLM 生成的词汇,为搜索应用增强自动补全功能,实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能,它通过在用户输入时实…

AI学习有感

和前辈聊天,谈到了现在的ai技术,这里对那天的谈话进行总结: AI是无状态的 我们在使用ai时有时候会有一个错觉,认为和ai聊天久了,ai就会像人与人之间交流一样,会保留一种对聊天对象的认知状态,这…

Java 8 Stream API 详解

目录 引言 一、Stream 简介 1.1 什么是 Stream? 1.2 Stream 与集合的区别 1.3 Stream 的操作分类 二、Stream 的创建 2.1 从集合创建 2.2 从数组创建 2.3 使用 Stream.of 创建 2.4 使用 Stream.generate 或 Stream.iterate 创建 三、Stream 的常…

Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)

Ubuntu20.04本地配置IsaacLab的G1训练环境(一) 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面,如果Ubuntu剩余空间低于60G,则空间不足,除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…

从厨电模范到数字先锋,看永洪科技如何助力方太集团开启数字新征程

在数字化洪流席卷全球的宏大背景下,企业转型升级的紧迫性与重要性日益凸显,成为驱动行业进步的关键引擎。在这一波澜壮阔的转型浪潮中,方太集团——厨电领域的璀璨明珠,以其前瞻性的战略视野和不懈的创新精神,携手数据…

蓝桥杯4T平台(串口打印电压值)

知识点:串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…

[Computer Vision]实验七:图像检索

目录 一、实验内容 二、实验过程 2.1 准备数据集 2.2 SIFT特征提取 2.3 学习“视觉词典”(vision vocabulary) 2.4 建立图像索引并保存到数据库中 2.5 用一幅图像查询 三、实验小结 一、实验内容 实现基于颜色直方图、bag of word等方法的以图搜…

利用 ArcGIS Pro 快速统计省域各市道路长度的实操指南

在地理信息分析与处理的工作中,ArcGIS Pro 是一款功能强大的 GIS 软件,它能够帮助我们高效地完成各种复杂的空间数据分析任务。 现在,就让我们一起深入学习如何借助 ArcGIS Pro 来统计省下面各市的道路长度,这一技能在城市规划、…

关于后端接口的返回值问题

1、后端接口中,get请求能返回给前端一个整数么? 问题说明: 解释: 在 Spring MVC 项目中,GET 请求的后端接口可以返回一个整数给前端。因为我们在controller层中,设置了RestController注解,这表明…

React Native 实现滑一点点内容区块指示器也滑一点点

效果图如上,内容滑一点点,指示器也按比例话一点点,列表宽度跟数据有关。 实现思路如下: 1.监听列表滑动事件,获取列表横向滑动距离,假设为A; 2.获取列表的宽度,及列表可滑动的宽度…

Cursor + IDEA 双开极速交互

相信很多开发者朋友应该和我一样吧,都是Cursor和IDEA双开的开发模式:在Cursor中快速编写和生成代码,然后在IDEA中进行调试和优化 在这个双开模式的开发过程中,我就遇到一个说大不大说小不小的问题: 得在两个编辑器之间来回切换查…

JS一些小知识点

一、|| 运算符 plain this.ctx.body { type: type || 0, // ||在此处用法用于默认值填充,判断是否传参或该值是否存在,如果不存在就使用||后买你的值作为默认值 code: code || 0, msg: msg || SUCCESS, data: data || {}, ...others }; 二、trim() 方…

【孟德尔随机化】PhenoScanner不能用的,替代方法

https://ldlink.nih.gov/?tabldtrait 目前PhenoScanner数据库限制使用,可选择LDlink数据库替代。 可以在网页下载变异数据 还有就是library(gwasrapidd)包提取 # remotes::install_github("ramiromagno/gwasrapidd") library(gwasrapidd)# 官方文档写单…

ALG(Alloy+Loki+Grafana)轻量级日志系统

ALG(AlloyLokiGrafana)轻量级日志系统 前提要求 GrafanaMinioNginxPrometheus Grafana日志收集系统旧版是PLG(ProtailLokiGrafana), Protail收集日志, Loki存储, Grafana展示, 后续的Protail不维护了, Grafana推出了Alloy代替Pritial, 除了收集日志外, 还集成管理Prometheus各种…

捣鼓180天,我写了一个相册小程序

🙋为什么要做土著相册这样一个产品? ➡️在高压工作之余,我喜欢浏览B站上的熊猫幼崽视频来放松心情。有天在家族群里看到了大嫂分享的侄女卖萌照片,同样感到非常解压。于是开始翻阅过去的聊天记录,却发现部分图片和视…

JDK ZOOKEEPER KAFKA安装

JDK17下载安装 mkdir -p /usr/local/develop cd /usr/local/develop 将下载的包上传服务器指定路径 解压文件 tar -zxvf jdk-17.0.14_linux-x64_bin.tar.gz -C /usr/local/develop/ 修改文件夹名 mv /usr/local/develop/jdk-17.0.14 /usr/local/develop/java17 配置环境变量…

5c/c++内存管理

1. C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);i…

Tomcat-web服务器介绍以及安装部署

一、Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用…