kubeadm k8s 集群扩容
该文档基于具体需求编写,标为斜体的部分以及所有的 ip 值都是依赖具体环境的,参考时需要做修改
风险评估时放弃了该方案,所以该文档并没有写完,只是写完了 etcd 的扩容和控制平面扩容的一部分准备工作,且没有真正实操。该文全局的前置工作是基于全部扩容写的,所以会有一部分 kubeadm 等的校验及配置,如果只是 etcd 的扩容的话可以忽略相关配置校验及警告
总的来说我不建议这么干,最好是搭建一个新的集群然后迁移服务
场景
现有集群包含一个 master 和一个 node,无法满足基础的高可用需求
需求
- etcd 扩容,将单点 etcd 扩容为三节点集群,由于推举机制,至少需要有三个节点(本文仅完成了该部分)
- 控制平面扩容,将单 master 升级为多 master,由于推举机制,至少需要有三个 master 节点
- 节点扩容,为确保单个服务器不可用后服务整体不受影响,至少需要两个 node 节点
扩容
前置工作
扩容操作本身比从零搭建一个集群更复杂,因此一个详尽的前置工作必不可少
该部分操作均为安全操作,不会对现有集群的运行状态产生任何副作用
1. 环境确认
- 确认安装方式与版本
登录 master 节点服务器 10.198.32.206
确认集群安装方式是否为 kubeadm 并记录版本
kubeadm version
- 获取并分析核心配置
# 保存集群核心配置文件,该文件包含了集群的CIDR(Pod和Service的IP段)、controlPlaneEndpoint(当前可能为空或指向单Master)、证书信息,需要作为后续操作的参考
kubectl get configmap -n kube-system kubeadm-config -o yaml > kubeadm-config.yaml
10.198.32.206 服务器的 kubeadm-config.yaml 需关注并记录标注了注释的配置
apiVersion: v1
data:
ClusterConfiguration: |
apiServer:
certSANs:
- 10.198.32.206
- wfk8smaster1
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki # 证书存放路径
clusterName: kubernetes
controlPlaneEndpoint: 10.198.32.206:16443 # 控制平面统一访问入口
controllerManager: {}
dns:
type: CoreDNS
etcd:
external:
caFile: ""
certFile: ""
endpoints:
- http://10.198.32.206:2379 # etcd 集群地址
keyFile: ""
imageRepository: docker.repos.cscec81.com:4433/kubectl # 所有 Kubernetes 镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: v1.20.15 # 【关键】集群版本,新节点必须安装相同版本
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16 # Pod 网段
serviceSubnet: 10.96.0.0/12 # Service 网段
scheduler: {}
ClusterStatus: |
apiEndpoints:
wfk8smaster1:
advertiseAddress: 10.198.32.206
bindPort: 6443
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterStatus
kind: ConfigMap
metadata:
creationTimestamp: "2024-07-02T01:42:00Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {
}
f:ClusterConfiguration: {
}
f:ClusterStatus: {
}
manager: kubeadm
operation: Update
time: "2024-07-02T01:42:00Z"
name: kubeadm-config
namespace: kube-system
resourceVersion: "301"
uid: 92e389d5-4a74-48c9-937b-b9f1fb12fc9b
分析 kubeadm-config.yaml 文件,记录以下关键信息:
kubernetesVersion: v1.20.15
controlPlaneEndpoint: 10.198.32.206:16443
certificatesDir: /etc/kubernetes/pki
imageRepository: docker.repos.cscec81.com:4433/kubectl
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
Etcd模式: 外部Etcd,单点,端点为 http://10.198.32.206:2379
- 确认容器运行时版本
# 查看 docker 版本
yum list installed | grep docker
docker-buildx-plugin.x86_64 0.11.2-1.el7 installed
docker-ce.x86_64 3:19.03.15-3.el7 installed
docker-ce-cli.x86_64 1:19.03.15-3.el7 installed
docker-compose-plugin.x86_64 2.21.0-1.el7 installed
- 确认控制平面入口服务
# 查看该端口进程id
ss -tulnp | grep 16443
# 查看该端口进程详情
ps -aux | grep 1161
经确认该端口运行的是一个 HAProxy 服务负责负载均衡
# 查看服务详情,同时该命令会返回服务配置文件的位置
systemctl status haproxy
# 查看配置文件
cat /usr/lib/systemd/system/haproxy.service
## /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
EnvironmentFile=/etc/sysconfig/haproxy # 配置文件位置
ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
[Install]
WantedBy=multi-user.target
##----------------------------------------------------------------
## /etc/sysconfig/haproxy
OPTIONS=""
##----------------------------------------------------------------
## /etc/haproxy/haproxy.cfg
global
log

最低0.47元/天 解锁文章
1393

被折叠的 条评论
为什么被折叠?



