k8s apiserver高可用方案

目前官方推荐有 2 种方式部署k8s apiserver 高可用

keepalived and haproxy

部署有2种方式,一种是systemd管理的,另一种是pod形式,使用那种可以根据实际情况选择

服务部署

systemd方式

可以通过包管理工具安装,正常启动之后,通过 kubeadm init 安装集群,配置好 apiserver 地址 VIP:${APISERVER_DEST_PORT},配置参数见下面👇

pod方式

如果 keepalived 和 haproxy 将在控制平面节点上运行,则可以将它们配置作为静态 Pod 运行,这里所需要的只是在引导集群之前将相应的清单文件放置在 /etc/kubernetes/manifests 目录中,在引导过程中,kubelet 将启动这些 pod,这种方式比较优雅

keepalived

apiVersion: v1
kind: Pod
metadata:creationTimestamp: nullname: keepalivednamespace: kube-system
spec:containers:- image: osixia/keepalived:2.0.20name: keepalivedresources: {}securityContext:capabilities:add:- NET_ADMIN- NET_BROADCAST- NET_RAWvolumeMounts:- mountPath: /usr/local/etc/keepalived/keepalived.confname: config- mountPath: /etc/keepalived/check_apiserver.shname: checkhostNetwork: truevolumes:- hostPath:path: /etc/keepalived/keepalived.confname: config- hostPath:path: /etc/keepalived/check_apiserver.shname: check
status: {}
apiVersion: v1
kind: Pod
metadata:name: haproxynamespace: kube-system
spec:containers:- image: haproxy:2.8name: haproxylivenessProbe:failureThreshold: 8httpGet:host: localhostpath: /healthzport: ${APISERVER_DEST_PORT}scheme: HTTPSvolumeMounts:- mountPath: /usr/local/etc/haproxy/haproxy.cfgname: haproxyconfreadOnly: truehostNetwork: truevolumes:- hostPath:path: /etc/haproxy/haproxy.cfgtype: FileOrCreatename: haproxyconf
status: {}

${APISERVER_DEST_PORT} 值需要和配置文件一致,配置好后,执行kubeadm init引导集群

服务配置

keepalived

keepalived配置包含服务配置文件和健康检查文件,配置文件放在**/etc/keepalived**目录,以下配置文件适用于2.0.20 and 2.2.4

! /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_DEVEL
}
vrrp_script check_apiserver {script "/etc/keepalived/check_apiserver.sh"interval 3weight -2fall 10rise 2
}vrrp_instance VI_1 {state ${STATE}interface ${INTERFACE}virtual_router_id ${ROUTER_ID}priority ${PRIORITY}authentication {auth_type PASSauth_pass ${AUTH_PASS}}virtual_ipaddress {${APISERVER_VIP}}track_script {check_apiserver}
}

根据具体情况把上面配置文件变量替换成具体值

  • ${STATE} 对于一台主机来说是 MASTER,对于所有其他主机来说是 BACKUP,虚拟 IP 最初将分配给 MASTER。
  • ${INTERFACE} VIP 需要绑定的网络接口,例如eth0。
  • ${ROUTER_ID} 应该相同,但在同一子网中的所有集群中是唯一的。许多发行版将其值预先配置为 51,需要确认清楚
  • ${PRIORITY} MASTER 节点应高于BACKUP节点上的 ${PRIORITY}。因此 101 和 100 分别就足够了。
    对于所有 keepalived 集群主机,
  • ${AUTH_PASS} 验证密码,所有配置文件保持一致,例如123456
  • ${APISERVER_VIP} 需要使用的 VIP 地址。

keepalived的健康检查脚本放在/etc/keepalived/check_apiserver.sh。

#!/bin/sh
APISERVER_DEST_PORT=6443
errorExit() {echo "*** $*" 1>&2exit 1
}curl -sfk --max-time 2 https://localhost:${APISERVER_DEST_PORT}/healthz -o /dev/null || errorExit "Error GET https://localhost:${APISERVER_DEST_PORT}/healthz"
haproxy

配置文件目录/etc/haproxy,适配版本 2.4 and 2.8

# /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
globallog stdout format raw local0daemon#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaultsmode                    httplog                     globaloption                  httplogoption                  dontlognulloption http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 1timeout http-request    10stimeout queue           20stimeout connect         5stimeout client          35stimeout server          35stimeout http-keep-alive 10stimeout check           10s#---------------------------------------------------------------------
# apiserver frontend which proxys to the control plane nodes
#---------------------------------------------------------------------
frontend apiserverbind *:${APISERVER_DEST_PORT}mode tcpoption tcplogdefault_backend apiserverbackend#---------------------------------------------------------------------
# round robin balancing for apiserver
#---------------------------------------------------------------------
backend apiserverbackendoption httpchkhttp-check connect sslhttp-check send meth GET uri /healthzhttp-check expect status 200mode tcpbalance     roundrobinserver ${HOST1_ID} ${HOST1_ADDRESS}:${APISERVER_SRC_PORT} check verify none# [...]
  • ${APISERVER_DEST_PORT} haproxy 监听的端口,转发 apiserver 请求
  • ${APISERVER_SRC_PORT} API Server 实例使用的端口
  • ${HOST1_ID} 第一个负载平衡 API Server 主机名称,随意起,有多个可以再添加多个 server
  • ${HOST1_ADDRESS} 第一个负载平衡 API Server 主机的可解析地址(DNS 名称、IP 地址)

kube-vip

kube-vip官方文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚类分析 | AP近邻传播聚类算法

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 AP近邻传播聚类算法 AP(Affinity Propagation)近邻传播聚类算法是一种基于数据点之间的相似度矩阵来进行聚类的算法。该算法不需要事先设定聚类簇的个数,而是通过在数据点之间传播…

tomcat默认并发数200

Tomcat的默认并发数是有限制的,但是这个限制是指在一个连接器(Connector)上的。如果你的应用部署在Tomcat上,并且想要增加Tomcat的并发处理能力,你需要调整连接器的参数。 Tomcat 7 及以前版本,在server.x…

GAN(Generative Adversarial Nets)

GAN(Generative Adversarial Nets) 引言 GAN由Ian J. Goodfellow等人提出,是Ian J. Goodfellow的代表作之一,他还出版了大家耳熟能详的花书(Deep Learning深度学习),GAN主要的思想是同时训练两个模型,生成…

根据请求错误的状态码判断代理配置问题

SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注入、命…

【面试宝典】深入Python高级:直戳痛点的题目演示(下)

目录 🍔 Python下多线程的限制以及多进程中传递参数的⽅式 🍔 Python是如何进⾏内存管理的? 🍔 Python⾥⾯如何拷⻉⼀个对象? 🍔 Python⾥⾯search()和match()的区别? 🍔 lambd…

力扣LeetCode-链表中的循环与递归使用

标题做题的时候发现循环与递归的使用差别: 看两道题: 两道题都是不知道链表有多长,所以需要用到循环,用到循环就可以把整个过程分成多个循环体,就是每一次循环要执行的内容。 反转链表: 把null–>1…

springboot 整合 rabbitMQ(1)

目录 一、MQ概述 二、MQ的优势和劣势 三、常见的MQ产品 RabbitMQ使用步骤 第一步:确保rabbitmq启动并且可以访问15672 第二步:导入依赖 第三步:配置 auto自动确认 manual手工确认(推荐使用!可以防止消息丢失&a…

告别node-sass报错 gyp ERR,让你不再折腾!!!

前言 ​​node-sass: Command failed.​​, ​​gyp ERR! build error​​ 这几个词相信很多小伙伴一定看着眼熟,当你的终端出现这些词时那么毫无疑问,你的项目跑不起来了。。。。。。 你可能通过各种方式去解决了这个报错,但是应该没有人去深究到底是咋回事,接下来让我…

数字电路尚硅谷学习笔记

学习视频:01_数字电路_从零搭建计算机引导_哔哩哔哩_bilibili 第1章数字电路基础 1.引言 数字电路是现代科技和工程领域中不可或缺的基础。从计算机系统到通信设备,从家庭电子产品到工业自动化,数字电路无处不在,影响着我们的生…

websocket心跳检测笔记

判断设备是否在线少不了检测。当然大部分人写的心跳检测会存在一个潜在的bug,比如我明明做了心跳检测,为什么设备在线的状态却检测出来为下线的状态呢? 心跳检测其实原理也很简单,写一个定时器,比如没3秒向客户端发送消息,如果客户端回复消息了则说明设备在线中,如果没…

物流系统原有40T数据加上每天至少要比之前多3G数据产品,这种该怎么解决

今天早上接到一个学生的电话,说他现在有40T物流数据,且今年比去年每天至少要多3G数据,访问量也要比去年每天多1千万次。在少量增加成本或是在原有的服务器的前提下,将系统进行升级及拓展。希望我给他提供方案。 听完之后&#xff…

Ubuntu 22.04 安装 KVM

首先检查是否支持 CPU 虚拟化,现在的 CPU 都应该支持,运行下面的命令,大于0 就是支持。 egrep -c (vmx|svm) /proc/cpuinfo安装 Libvirt apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-uti…

华为FreeBuds 6i戴久了会耳朵胀痛吗?该怎么办?

华为FreeBuds 6i戴久了,会有耳朵胀痛的感觉吗?其实可能是没选对适合自己的耳塞,给你们分享几个佩戴更舒服的方法,一起来看看~ 首先和大家说说为什么华为FreeBuds 6i戴久了不舒服,一方面是耳塞尺寸不合适,另…

数据结构-5.5.二叉树的存储结构

一.二叉树的顺序存储: a.完全二叉树: 1.顺序存储中利用了静态数组,空间大小有限: 2.基本操作: (i是结点编号) 1.上述图片中i所在的层次后面的公式应该把n换成i(图片里写错了); 2.上述图片判断i是否有左…

VLAN:虚拟局域网

VLAN:虚拟局域网 交换机和路由器协同工作后,将原先的一个广播域,逻辑上,切分为多个广播域。 第一步:创建VLAN [SW1]dispaly vlan 查询vlan VID(VLAN ID):用来区分和标定不同的vlan 由12位二进制构成 范围: 0-4…

@Autowired List<PayStrategy> payStrategies

在Java中&#xff0c;Autowired注解是Spring框架提供的一个强大的依赖注入工具&#xff0c;它允许自动地将Spring容器中的bean注入到类中。在您给出的代码片段中&#xff0c;Autowired被用来注入一个List< PayStrategy>类型的bean列表。这里有几个关键点需要解释&#xf…

Python中函数的使用方法

1 问题 在python的学习中&#xff0c;一个相同的程序可能会有多种不同的代码输入方式&#xff0c;那么函数这种方式是否方便快捷呢&#xff1f;今天我们来简单介绍函数的部分使用方法。 2 方法 定义函数&#xff1a;代码清单1Def function name (arguments):return result在上面…

手撕数据结构 —— 带头双向循环链表(C语言讲解)

目录 0.前言 1.什么是带头双向循环链表 理解带头 ​编辑 理解双向 理解循环 2.带头双向循环链表的实现 List.h文件中接口总览 具体实现 结点的定义 申请结点 初始化 打印链表 尾插 尾删 头插 头删 ​编辑​编辑 获取大小 查找 在指定位置前插入 ​编辑…

基于顺序表实现通讯录项目

目录 1.通讯录的基本构成 2.通讯录的底层原理 3.通讯录的底层——顺序表 ——————————————————————————————————————————— 正文开始 1. 通讯录的基本构成 1.1 联系人信息的主要内容 ●姓名 ●性别 ●年龄 ●电话 ●住址 1.2 数…

基于ABAQUS的传热学、热应力分析和有限元计算的相关概念和原理

背景 在工业产品生产和结构制造中&#xff0c;热分析往往是设计和生产不可或缺的环节&#xff0c;该方面的计算分析越来越受到工程界的重视。宏新环宇&#xff08;北京&#xff09;信息技术研究院有限公司特举办《ABAQUS热传导与热应力分析》研修班。研修班将系统地梳理传热学…