kubernetes集群异常
POD级别异常
灾难级别 | 影响程度 | 遭遇频率 | 处理难度 | 依赖条件 |
---|---|---|---|---|
✩ | ✩ | ✩✩✩✩✩ | ✩ | pod避免单副本 |
程序具备就绪与健康检查条件并进行正确配置,能够对pod故障进行重启自愈.
不具备自愈条件的需要根据具体的业务场景和时间进行一下处理.
处理关键考虑因素: 1.健康检查是否正常 2.cpu、内存与磁盘指标是否达到配额限制 3.程序报错是否有明显异常 4.同宿主其他pod是否正常 5.同应用其他pod是否正常 6.pod所属应用最近时间线是否有更新
NODE级别异常
灾难级别 | 影响程度 | 遭遇频率 | 处理难度 | 依赖条件 |
---|---|---|---|---|
✩✩ | ✩✩ | ✩✩✩ | ✩ | node资源有冗余 |
处理node级别故障,优先禁止调度,防止影响范围增长.视故障场景,判断是否需要做当前业务pod驱逐.
需要判断是主机问题还是组件问题,之后针对故障点进行修复
处理关键考虑因素: 1.node节点状态 2.cpu、内存与磁盘指标是否达到配额限制 3.主机与组件是否有明显异常 4.是否有同时有相同症状node现象
MASTER级别异常
灾难级别 | 影响程度 | 遭遇频率 | 处理难度 | 依赖条件 |
---|---|---|---|---|
✩✩✩ | ✩✩✩ | ✩✩✩ | ✩✩ | master节点高可用 |
首先要确认影响范围,根据范围和影响程度做出控制范围.如果属于常规异常遭遇,根据具体场景进行处理.非常规异常,尽量先通过流量权重摘除故障master节点.如果是多master节点异常需要升级为集群级别异常.
处理关键考虑因素: 1.优先确认是单master异常还是多master异常 2.确认etcd集群状态是否正常 3.确认为主机问题还是组件问题 4.cpu、内存与磁盘指标是否达到配额限制 5.异常时间点前后是否有更新事件 6.重启组件或主机是否能恢复 7.是否存在其他源导致该故障
集群级别异常
灾难级别 | 影响程度 | 遭遇频率 | 处理难度 | 依赖条件 |
---|---|---|---|---|
✩✩✩✩ | ✩✩✩✩ | ✩ | ✩✩✩ | master节点高可用,etcd数据进行备份 |
优先查看etcd集群是否正常,同时做一份当前etcd数据备份. 关闭集群服务更新窗口. 进行故障详细确认.
处理关键考虑因素: 1.故障是主机问题还是组件问题 2.etcd集群是否健康 3.组件状态是否正常 4.是否可以通过紧急增资源缓解 5.是否可以限制故障源 6.如果集群变更,是否可以回滚
机房级别异常
灾难级别 | 影响程度 | 遭遇频率 | 处理难度 | 依赖条件 |
---|---|---|---|---|
✩✩✩✩✩ | ✩✩✩✩✩ | ✩ | ✩✩✩✩✩ | 1.必须对集群的etcd数据有备份副本 2.具备集群恢复资源 3.用于复原的集群的ip地址划分与原集群一致 3.业务镜像可以正常使用 4.业务数据可以正常使用 |
此场景为只存留一份etcd数据的情况进行业务恢复.
两种方案: 1.使用备份的etcd进行集群恢复 2.使用备份的etcd数据导出对应业务能运行的资源(包括不限于 ds deploy svc ingress )进行重新部署
使用etcd数据进行集群恢复(不考虑镜像仓库与数据库因素)
实验集群信息
IP | 系统版本 | 内核版本 | 角色 |
---|---|---|---|
192.168.100.200 | centos7.5 | 5.4 | master |
192.168.100.201 | centos7.5 | 5.4 | node,ingress |
192.168.100.202 | centos7.5 | 5.4 | node |
原始集群信息
数据备份
export ETCDCTL_API=3 && etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.pem --cert=/etc/kubernetes/pki/etcd/etcd.pem --key=/etc/kubernetes/pki/etcd/etcd-key.pem snapshot save snapshot20220926.db
重置集群机器模拟全新机器场景
机器初始化
master节点安装ansible
yum install ansible -y
# 并需要对相关集群节点做秘钥互通
[host]
192.168.100.200
192.168.100.201
192.168.100.202
进行节点初始化
curl -s http://ip:port/soft/shell/init/init_vm.sh |sh
集群初始化
拉取集群自动化安装包
# 在master安装节点操作即可
wget -c http://ip:port/install-20220929.tar.gz
# install 需在/root路径下
# hosts
[master]
192.168.100.200
[node]
192.168.100.201
192.168.100.202
[elb]
[haproxy]
[etcd]
192.168.100.200
[registry]
192.168.100.200
[trust]
# install.sh
#!/bin/bashecho "----------------------开始安装ansible-------------------------------"
install_dir=$(cd "$(dirname "$0")";pwd)
#cd /root/install/package/ansible && rpm -ivh PyYAML*rpm libyaml*rpm python-babel*rpm python-backports*rpm python-backports-ssl_match_hostname*rpm python-cffi*rpm python-enum34*rpm python-httplib2*rpm python-idna*rpm python-ipaddress*rpm python-jinja2*rpm python-markupsafe*rpm python-paramiko*rpm python-passlib*rpm python-ply*rpm python-pycparser*rpm python-setuptools*rpm python-six*rpm python2-cryptography*rpm python2-jmespath*rpm python2-pyasn1*rpm sshpass*rpm --nodeps --force
#cd /root/install/package/ansible && rpm -ivh ansible-2.4.2.0-2.el7.noarch.rpm
ver=$(ansible --version)
echo "---------------------ansible已安装,版本为$ver----------------------"
ansible-playbook -i /root/install/hosts /root/install/playbook/mkdir.yml
core=$(python /root/install/script/file.py)
echo $core
if [ $core != 200 ]
thenecho $coreexit
fi
echo "-------------------开始初始化服务器---------------------------------"
cp /root/install/package/cfssl/* /usr/bin/
ansible-playbook -i /root/install/hosts /root/install/playbook/env_init.yml
echo "--------------------开始修改主机名称------------------------------------"
cd /root/install/script && python name.py
echo "--------------------开始安装etcd集群------------------------------------"
cd /root/install/script && python etcd.py
echo "--------------------开始安装apiserver------------------------------------"
#python /root/install/script/haproxy.py
sh /root/install/script/apiserver.sh
echo "--------------------开始配置kubectl------------------------------------"
python /root/install/script/kubectl.py
echo "--------------------开始安装controller------------------------------------"
python /root/install/script/controller.py
echo "--------------------开始安装scheduler------------------------------------"
python /root/install/script/scheduler.py
python /root/install/script/registry.py
echo "--------------------开始安装kubelet------------------------------------"
python /root/install/script/kubelet.py
echo "--------------------开始安装kube-proxy------------------------------------"
python /root/install/script/proxy.py
python /root/install/script/calico.py
数据恢复
暂停apiserver
systemctl stop kube-apiserver.service
暂停etcd
systemctl stop etcd
备份当前etcd数据目录
恢复之前版本数据至数据目录
etcdctl snapshot restore snapshot-20220926.db --data-dir=“/data/etcd/default.etcd”
启动etcd并验证服务可用性
启动apiserver并验证服务可用性
重建dns
重建calico
重建ingress
http://ip:port/ingress-nginx.yaml