generated from bing/readnotes
134 lines
4.0 KiB
Markdown
134 lines
4.0 KiB
Markdown
# haproxy安装与配置
|
||
|
||
安装之前,请确认已经按要求准备好正确数量的节点并已经根据[配置运行环境](config_run_env.md)完成了环境配置。
|
||
|
||
**若无特别说明,本文档所述操作,均在第一个controlplane节点上执行。**
|
||
|
||
## 安装软件
|
||
|
||
```bash
|
||
export HA_HOSTS=(192.168.0.201 192.168.0.202 192.168.0.203)
|
||
export VIP=192.168.0.200
|
||
export HAPASSWORD="hapassword2020"
|
||
export HOST_PREFIX="k8smaster"
|
||
for HOST in ${HA_HOSTS[@]}
|
||
do
|
||
ssh ${HOST} "yum install corosync pacemaker pcs fence-agents resource-agents -y && systemctl enable --now pcsd"
|
||
done
|
||
```
|
||
|
||
## 创建VIP
|
||
|
||
```bash
|
||
for HOST in ${HA_HOSTS[@]}
|
||
do
|
||
ssh ${HOST} "echo ${HAPASSWORD} | passwd --stdin hacluster && pcs cluster auth -u hacluster -p ${HAPASSWORD} ${HA_HOSTS}"
|
||
ssh ${HOST} "pcs cluster setup --start --name k8s_cluster ${HA_HOSTS}"
|
||
ssh ${HOST} "pcs cluster enable --all && pcs cluster start --all && pcs cluster status && pcs status corosync"
|
||
ssh ${HOST} "pcs property set stonith-enabled=false && pcs property set no-quorum-policy=ignore && crm_verify -L -V"
|
||
done
|
||
ssh ${HA_HOSTS[0]} "pcs resource create vip ocf:heartbeat:IPaddr2 ip=${VIP} cidr_netmask=28 op monitor interval=28s"
|
||
```
|
||
|
||
## 创建haproxy配置
|
||
|
||
```bash
|
||
#haproxy 配置
|
||
cat <<EOF >/tmp/haproxy.cfg
|
||
# /etc/haproxy/haproxy.cfg
|
||
#---------------------------------------------------------------------
|
||
# Global settings
|
||
#---------------------------------------------------------------------
|
||
global
|
||
log /dev/log local0
|
||
log /dev/log local1 notice
|
||
daemon
|
||
|
||
#---------------------------------------------------------------------
|
||
# common defaults that all the 'listen' and 'backend' sections will
|
||
# use if not designated in their block
|
||
#---------------------------------------------------------------------
|
||
defaults
|
||
mode http
|
||
log global
|
||
option httplog
|
||
option dontlognull
|
||
option http-server-close
|
||
option forwardfor except 127.0.0.0/8
|
||
option redispatch
|
||
retries 1
|
||
timeout http-request 10s
|
||
timeout queue 20s
|
||
timeout connect 5s
|
||
timeout client 20s
|
||
timeout server 20s
|
||
timeout http-keep-alive 10s
|
||
timeout check 10s
|
||
|
||
#---------------------------------------------------------------------
|
||
# apiserver frontend which proxys to the masters
|
||
#---------------------------------------------------------------------
|
||
frontend apiserver
|
||
bind *:8443
|
||
mode tcp
|
||
option tcplog
|
||
default_backend apiserver
|
||
|
||
#---------------------------------------------------------------------
|
||
# round robin balancing for apiserver
|
||
#---------------------------------------------------------------------
|
||
backend apiserver
|
||
option httpchk GET /healthz
|
||
http-check expect status 200
|
||
mode tcp
|
||
option ssl-hello-chk
|
||
balance roundrobin
|
||
EOF
|
||
INDEX=0
|
||
for HOST in ${HA_HOSTS[@]}
|
||
do
|
||
echo " server ${HOST} ${HOST_PREFIX}${INDEX}:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3\n" >> /tmp/haproxy.cfg
|
||
INDEX=$(expr ${INDEX} + 1)
|
||
done
|
||
#haproxy pod配置
|
||
cat <<EOF >/tmp/haproxy.yaml
|
||
apiVersion: v1
|
||
kind: Pod
|
||
metadata:
|
||
name: haproxy
|
||
namespace: kube-system
|
||
spec:
|
||
containers:
|
||
- image: registry.bing89.com/dockerhub/haproxy:lts-alpine
|
||
name: haproxy
|
||
livenessProbe:
|
||
failureThreshold: 8
|
||
httpGet:
|
||
host: localhost
|
||
path: /healthz
|
||
port: 8443
|
||
scheme: HTTPS
|
||
volumeMounts:
|
||
- mountPath: /usr/local/etc/haproxy/haproxy.cfg
|
||
name: haproxyconf
|
||
readOnly: true
|
||
hostNetwork: true
|
||
volumes:
|
||
- hostPath:
|
||
path: /etc/haproxy/haproxy.cfg
|
||
type: FileOrCreate
|
||
name: haproxyconf
|
||
EOF
|
||
```
|
||
|
||
## 配置并启动haproxy
|
||
|
||
```bash
|
||
for HOST in ${HA_HOSTS[@]}
|
||
do
|
||
ssh ${HOST} "if [ ! -d /etc/haproxy ];then mkdir /etc/haproxy; fi"
|
||
scp /tmp/haproxy.cfg ${HOST}:/etc/haproxy/haproxy.cfg
|
||
scp /tmp/haproxy.yaml ${HOST}:/etc/kubernetes/manifests/haproxy.yaml
|
||
ssh ${HOST} "systemctl restart kubelet"
|
||
done
|
||
``` |