返回

打造高可用 Kubernetes 1.13.3 集群:基于 kubeadm 的实践指南

见解分享

前言

Kubernetes 是一个容器编排系统,已成为云原生应用程序部署和管理的事实标准。为了确保 Kubernetes 集群的持续可用性和可靠性,部署高可用 (HA) 集群至关重要。本教程将指导您使用 kubeadm 部署高可用 Kubernetes 1.13.3 集群,并提供详细的分步说明。

先决条件

  • 三台 Red Hat Enterprise Linux 7.5 服务器(控制节点和两台工作节点)
  • root 访问权限或具有 sudo 权限的用户
  • 稳定的互联网连接
  • 防火墙已禁用或配置为允许必要的端口

第 1 步:准备控制节点

1.1. 更新系统

yum update -y

1.2. 安装必需的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.3. 设置网络

编辑 /etc/hosts 文件并添加以下条目:

192.168.0.100 master.example.com
192.168.0.101 worker1.example.com
192.168.0.102 worker2.example.com

1.4. 初始化 Kubernetes

kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.0.100 \
--kubernetes-version=1.13.3

1.5. 创建 kubeconfig 文件

mkdir -p /home/kubeadmin/.kube
cp -i /etc/kubernetes/admin.conf /home/kubeadmin/.kube/config
chown kubeadmin:kubeadmin /home/kubeadmin/.kube/config

第 2 步:部署 keepalived 和 HAProxy

2.1. 安装 keepalived 和 HAProxy

在所有三台服务器上运行以下命令:

yum install -y keepalived haproxy

2.2. 配置 keepalived

编辑 /etc/keepalived/keepalived.conf 文件并添加以下配置:

global_defs {
    router_id master
}

vrrp_script chk_apiserver {
    script "/usr/bin/curl -s --cacert /var/lib/kubernetes/pki/ca.crt https://127.0.0.1:6443/healthz"
    interval 2
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    interface eth0
    state MASTER
    priority 100
    advert_int 1
    virtual_router_id 51
    unicast_src_ip 192.168.0.100
    virtual_ipaddress {
        192.168.0.100/24
    }
    track_script {
        chk_apiserver
    }
}

2.3. 配置 HAProxy

编辑 /etc/haproxy/haproxy.cfg 文件并添加以下配置:

global
    log /dev/log local0 info
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    maxconn 4096
    user haproxy
    group haproxy
    daemon

defaults
    mode http
    log global
    option httplog
    option dontlognull
    retries 3
    timeout connect 5s
    timeout client 50s
    timeout server 50s

frontend kubernetes-api
    bind 192.168.0.100:6443
    mode tcp
    default_backend kubernetes-api-backend

backend kubernetes-api-backend
    mode tcp
    balance roundrobin
    server master 127.0.0.1:6443 check

第 3 步:部署 Kubernetes

3.1. 部署 worker 节点

在两台 worker 节点上运行以下命令:

kubeadm join 192.168.0.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>

3.2. 安装网络插件

安装 Flannel 网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

第 4 步:验证 HA 集群

4.1. 检查 Kubernetes 集群状态

kubectl get nodes
kubectl get pods --all-namespaces

4.2. 模拟故障转移

在 master 节点上停止 keepalived 服务:

systemctl stop keepalived

检查 worker 节点是否已接管集群:

kubectl get pods --all-namespaces

第 5 步:部署监控和日志记录

5.1. 部署 ELK Stack

在 Kubernetes 上部署 ELK Stack

5.2. 部署 Prometheus 和 Grafana

在 Kubernetes 上部署 Prometheus 和 Grafana

结论

恭喜!您现在已经成功部署了一个高可用 Kubernetes 1.13.3 集群。通过使用 keepalived 和 HAProxy,您确保了集群在出现故障时仍然可用。此外,通过部署 ELK Stack 和 Prometheus,您还集成了监控和日志记录功能,从而可以深入了解集群的性能和活动。