如何部署高可用kubernetes集群

发布时间:2021-08-24 21:13:40 作者:chen
来源:亿速云 阅读:198
# 如何部署高可用Kubernetes集群

## 前言

在当今云原生时代,Kubernetes已成为容器编排的事实标准。生产环境中的关键业务系统对稳定性要求极高,部署高可用(High Availability, HA)的Kubernetes集群成为企业上云的必备能力。本文将详细讲解高可用Kubernetes集群的架构设计、部署方案和最佳实践。

## 一、高可用Kubernetes架构解析

### 1.1 高可用核心组件

一个真正高可用的Kubernetes集群需要保证以下核心组件的冗余:

- **控制平面(Control Plane)**:
  - API Server(需3个及以上实例)
  - Scheduler(需3个及以上实例)
  - Controller Manager(需3个及以上实例)
  - etcd集群(奇数节点,通常3或5个)

- **工作节点(Worker Nodes)**:
  - 至少分布在3个可用区(AZ)
  - 每个AZ建议2个以上节点

### 1.2 典型拓扑结构

[客户端] | 负载均衡器 ├── Master1 ├── Master2 └── Master3etcd集群Worker Nodes


## 二、部署前准备

### 2.1 硬件要求

| 角色       | CPU  | 内存 | 磁盘 | 数量 |
|------------|------|------|------|------|
| Master节点 | 4核+ | 8GB+ | 100GB+ | 3    |
| Worker节点 | 8核+ | 16GB+| 200GB+ | 6+   |

### 2.2 网络要求

- 所有节点间双向网络互通
- 开放端口:
  - Master节点:6443, 2379-2380, 10250-10259
  - Worker节点:10250, 30000-32767(NodePort范围)

### 2.3 软件依赖

```bash
# 所有节点通用准备
sudo apt-get update && sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 禁用swap
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

三、详细部署步骤

3.1 etcd集群部署(推荐使用kubeadm外置etcd)

# 在每个etcd节点执行
wget https://github.com/etcd-io/etcd/releases/download/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz

tar xvf etcd-v3.5.4-linux-amd64.tar.gz
sudo mv etcd-v3.5.4-linux-amd64/etcd* /usr/local/bin/

# 创建配置文件 /etc/etcd/etcd.conf
name: etcd1
data-dir: /var/lib/etcd
initial-advertise-peer-urls: https://192.168.1.1:2380
listen-peer-urls: https://192.168.1.1:2380
listen-client-urls: https://192.168.1.1:2379,https://127.0.0.1:2379
advertise-client-urls: https://192.168.1.1:2379
initial-cluster: etcd1=https://192.168.1.1:2380,etcd2=https://192.168.1.2:2380,etcd3=https://192.168.1.3:2380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
client-cert-auth: true
trusted-ca-file: /etc/kubernetes/pki/etcd/ca.crt
cert-file: /etc/kubernetes/pki/etcd/server.crt
key-file: /etc/kubernetes/pki/etcd/server.key

3.2 使用kubeadm部署控制平面

首节点初始化:

kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" \
    --upload-certs \
    --pod-network-cidr=10.244.0.0/16 \
    --service-cidr=10.96.0.0/12 \
    --image-repository registry.aliyuncs.com/google_containers

其他控制平面节点加入:

kubeadm join LOAD_BALANCER_DNS:6443 \
    --token <token> \
    --discovery-token-ca-cert-hash sha256:<hash> \
    --control-plane \
    --certificate-key <key>

3.3 负载均衡配置(以HAProxy为例)

frontend kubernetes
    bind *:6443
    option tcplog
    mode tcp
    default_backend k8s-masters

backend k8s-masters
    mode tcp
    balance roundrobin
    option tcp-check
    server master1 192.168.1.1:6443 check fall 3 rise 2
    server master2 192.168.1.2:6443 check fall 3 rise 2
    server master3 192.168.1.3:6443 check fall 3 rise 2

四、高可用验证测试

4.1 控制平面故障转移测试

# 查看当前leader
kubectl get endpoints kube-scheduler -n kube-system -o yaml
kubectl get endpoints kube-controller-manager -n kube-system -o yaml

# 模拟节点故障
sudo systemctl stop kube-apiserver

# 观察服务恢复情况
watch kubectl get pods -n kube-system

4.2 网络连通性测试

# 创建测试Pod
kubectl run -it --rm --restart=Never busybox --image=busybox -- sh

# 在Pod内测试
ping kubernetes.default.svc.cluster.local
nslookup kubernetes.default.svc.cluster.local

五、生产环境最佳实践

5.1 多可用区部署策略

# Pod反亲和性示例
affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - key: app
          operator: In
          values:
          - my-webapp
      topologyKey: "topology.kubernetes.io/zone"

5.2 集群自动伸缩配置

# 安装cluster-autoscaler
helm repo add autoscaler https://kubernetes.github.io/autoscaler
helm install my-release autoscaler/cluster-autoscaler \
    --set autoDiscovery.clusterName=<YOUR_CLUSTER_NAME>

5.3 监控与告警方案

推荐组合: - Prometheus + Grafana(集群监控) - Alertmanager(告警管理) - kube-state-metrics(资源指标)

六、常见问题排查

6.1 节点NotReady状态排查

# 检查kubelet状态
journalctl -u kubelet -f

# 检查网络插件
kubectl get pods -n kube-system | grep flannel/calico/cilium

6.2 API Server不可用

# 检查负载均衡
curl -k https://LOAD_BALANCER_DNS:6443/healthz

# 检查证书有效期
openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt

七、升级与维护

7.1 滚动升级策略

# 先升级kubeadm
apt-get update && apt-get install -y kubeadm=1.25.3-00

# 升级控制平面
kubeadm upgrade apply v1.25.3

# 升级各节点
kubeadm upgrade node

结语

部署高可用Kubernetes集群只是云原生旅程的第一步。要构建真正稳定的生产环境,还需要结合: - 完善的CI/CD流水线 - 细粒度的RBAC权限控制 - 定期的备份恢复演练 - 安全合规扫描

希望本文能为您构建企业级Kubernetes平台提供实用指导。随着Kubernetes生态的快速发展,建议持续关注上游版本更新和社区最佳实践。

注:本文部署示例基于Kubernetes 1.25版本,具体参数请根据实际环境调整。 “`

这篇技术文章包含了: 1. 架构设计原理 2. 详细部署步骤 3. 生产环境最佳实践 4. 故障排查指南 5. 版本升级策略

全文约2800字,采用Markdown格式编写,包含代码块、表格等技术文档常用元素,适合作为技术团队内部部署指南或技术博客内容。

推荐阅读:
  1. 如何快速部署Kubernetes集群?
  2. kubernetes集群的部署

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:vnc连接Linux后黑屏的处理办法

下一篇:如何利用Java处理Jmeter接口常用参数

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》