k8s-master集群--haproxy

简介:

接着etcd的集群,现在用原有环境基础,增加master集群haproxy负载,机器受限 还是用1.5,1.6做master,把haproxy安装在1.5上

一般生产的时候,haproxy master etcd node 还是要分开集群

首先安装haproxy

yum install haproxy -y

yum install gcc -y

内核调优,修改系统文件

vim /etc/security/limits.conf

*    soft    nofile        65535 

*    hard    nofile        65535

配置日志文件,添加三行

vim /etc/rsyslog.conf

$ModLoad    imudp

$UDPServerRun    514

local3.*                        /var/log/haproxy.log


增加修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
global
 
maxconn    4096
 
log    127.0.0.1    local3    info
 
chroot     /var/lib/haproxy
 
user        haproxy
 
group       haproxy
daemon
 
nbproc    1
 
pidfile     /var/run/haproxy .pid
 
ulimit -n    65535
 
stats    socket     /var/lib/haproxy/stats
 
defaults
 
log    global
 
mode    http
 
maxconn    20480
 
option    httplog
 
option    httpclose
 
option    dontlognull
 
option    forwardfor
 
option    redispatch
 
option    abortonclose
 
stats    refresh    30
 
retries    3
 
balance    roundrobin
 
cookie    SRV
timeout    check    2000ms
 
timeout    connect    5000ms
 
timeout    server    50000ms
 
timeout    client    50000ms
 
listen    admin_status                                         #定义haproxy的监控界面
 
bind    0.0.0.0:6553
 
mode    http
 
log    127.0.0.1    local3 info
 
stats     enable
 
stats    refresh    5s                                             #监控页面自动刷新时间5s
 
stats    realm    Haproxy\    Statistics                 #登录监控页面提示符
 
stats    uri     /admin ?stats                                   #监控页面URL路径
 
stats    auth    admin:123456                              #监控页面的账户密码
 
stats    hide-version                                            #隐藏haproxy版本
 
frontend    web_service                                      #定义前端服务器
 
bind    0.0.0.0:80
 
mode    http
 
log    global
 
option    httplog
 
option    httpclose
 
option    forwardfor
 
#acl    inside_src src 192.168.1.0/24                    #定义acl
 
#use_backend    inside_servers if inside_src        #判断acl的源地址,把请求转发到inside_servers组
 
default_backend    external_servers                         #默认服务器组
 
 
 
backend    external_servers
 
mode    http
 
balance    roundrobin                                             #轮询真实服务器
 
option    httpchk    GET     /index .html                 #检查index文件,判断服务器是否健康
 
##定义后端真实服务器,向cookie中插入web1信息,check进行健康检查,检查时间间隔为2000ms,##连续两次健康则认为是正常开启的,连续三次检查失败则认为宕机,服务器权重1
 
server web1 192.168.1.5:8080 cookie web1 check inter 2000 rise 2 fall 3 weight 1
 
server web2 192.168.1.6:8080 cookie web2 check inter 2000 rise 2 fall 3 weight 1

其中注意修改

bind    0.0.0.0:80  #这个端口是用来做代理的前端口,通过该端口可以直达被代理的两台master机器,配置中采用轮询负载。

最后两行配置是定义被代理的2台master服务


启动haproxy服务

service rsyslog restart                #重启系统日志服务

haproxy -f /etc/haproxy/haproxy.cfg        #启动haproxy服务

echo "/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg" >> /etc/rc.local   #加入到开机启动


安装master组件并修改相应配置

yum -y install kubernetes-master

修改master配置

vi /etc/kubernetes/apiserver

1
2
3
4
5
6
7
8
9
10
11
12
13
KUBE_API_ADDRESS= "--insecure-bind-address=0.0.0.0"
 
KUBE_API_PORT= "--port=8080"
 
KUBELET_PORT= "--kubelet-port=10250"
 
KUBE_ETCD_SERVERS= "--etcd-servers=http://192.168.1.5:2379,192.168.1.6:2379"
 
KUBE_SERVICE_ADDRESSES= "--service-cluster-ip-range=10.254.0.0/16"
 
KUBE_ADMISSION_CONTROL= "--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
 
KUBE_API_ARGS= ""


vi /etc/kubernetes/config

1
2
3
4
5
6
7
KUBE_LOGTOSTDERR= "--logtostderr=true"
 
KUBE_LOG_LEVEL= "--v=0"
 
KUBE_ALLOW_PRIV= "--allow-privileged=true"
 
KUBE_MASTER= "--master=http://192.168.1.5:80"

KUBE_MASTER="--master=http://192.168.1.5:80"  这一项就是填写haproxy代理的页面地址,端口是可以在haproxy配置中自定义的


vi /etc/kubernetes/controller-manager

KUBE_CONTROLLER_MANAGER_ARGS="--leader-elect=true"

vi /etc/kubernetes/scheduler

KUBE_SCHEDULER_ARGS="--leader-elect=true"

##"--leader-elect=true"这一项必须在两个文件中添加,用于master集群可用节点选举


下面就要修改node节点的配置了

vi /etc/kubernetes/kubelet

1
2
3
4
5
6
7
8
KUBELET_ADDRESS= "--address=0.0.0.0"
 
 
KUBELET_HOSTNAME= "--hostname-override=192.168.1.5"
 
KUBELET_API_SERVER="--api-servers=    #修改成了haproxy代理页面地址
KUBELET_POD_INFRA_CONTAINER= "--pod-infra-container-image=192.168.1.5:5000/pod-infrastructure:latest"
KUBELET_ARGS= "--cluster-dns=10.254.10.20 --cluster-domain=atomic.io"


注意凡是用到api-servers地址的都必须修改为haproxy代理地址http://192.168.1.5:80



kubernetes-dashboard.yaml 文件里有用到,一定注意修改


修改完配置后重启各服务即可通过浏览器访问测试

192.168.1.5:80

测试中停掉一台master服务,通过页面依旧正常访问

for SERVICES in kube-apiserver kube-controller-manager kube-scheduler; do systemctl stop $SERVICES;done


在服务器上操作会出现下面问题

[root@k8s-master heapster]# kubectl get pods -o wide -n kube-system

The connection to the server localhost:8080 was refused - did you specify the right host or port?


kubectl 命令默认访问本机的8080端口,当master服务停了后,命令需要用-s 指定访问源地址也就是代理页面地址。

[root@k8s-master heapster]# kubectl get pods -o wide -n kube-system -s 192.168.1.5:80

NAME                                    READY     STATUS    RESTARTS   AGE       IP            NODE

heapster-3919175978-cfpqw               1/1       Running   0          7m        172.17.79.3   192.168.1.5

kubernetes-dashboard-1872927757-ft8pk   1/1       Running   0          7m        172.17.88.2   k8s-node-1

monitoring-grafana-3994812335-8cbnt     1/1       Running   0          7m        172.17.88.3   k8s-node-1

monitoring-influxdb-265709471-q3wlt     1/1       Running   0          7m        172.17.79.4   192.168.1.5

也可以用命令声明下,alias kubectl="kubectl -s 192.168.1.5:80" 就不用每次都加了


到此就完成了2个etcd,2个master,2个node,各个集群都在两个机器上了。

haproxy做前端分发最好用两台机器做主备,加上keepalived即可





















本文转自super李导51CTO博客,原文链接:http://blog.51cto.com/superleedo/2056041 ,如需转载请自行联系原作者



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
14天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
49 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
2月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
175 4
|
2月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
129 17
|
2月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
661 1
|
2月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
77 3
|
2月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
116 1
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
63 1
|
2月前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。