k8s运维问题整理

1.宕机或异常重启导致etcd启动失败

服务器非正常关机(意外掉电、强制拔电)后 etcd 数据损坏。
查看apiserver日志发现出现报错Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused,2379是etcd的端口,那么apiserver是由于etcd无法连接而启动不了

参考资料:https://blog.csdn.net/kali_yao/article/details/126810964

处理办法
查看etcd和api-server服务状态及日志
docker ps -a|grep etcd
docker ps -a|grep api-server

#1.不知道路径可以查找etcd数据目录
find / -type d -name member
cd /var/lib/etcd/member
mv /var/lib/etcd/member /root/member.back
# 注:在故障节点执行,删除或者移走备份都可以

#1.重启etcd
docker ps -a|grep etcd
docker rm -f etcd的ID        # 所有节点执行
systemctl restart kubelet    # 重启kubelet

#2.查看
kubectl get pods
# 注:此时没有报错了
etcd数据备份与恢复

https://www.cnblogs.com/huanglingfa/p/13773397.html

# 首先需要安装etcdctl 命令行命令
yum install -y etcd

# 备份
# 可 export ETCDCTL_API=3 设定临时环境变量,防止每次重复输入
# 注意 snapshot.db 是当前路径,可以指定路径
ETCDCTL_API=3 etcdctl \
  snapshot save snapshot.db \  
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/peer.crt \
  --key=/etc/kubernetes/pki/etcd/peer.key

# 查看文件存储的信息
ETCDCTL_API=3 etcdctl snapshot status snapshot.db

# kubeadm 部署恢复etcd数据库
# 1、先暂停kube-apiserver和etcd容器
mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
mv /var/lib/etcd/ /var/lib/etcd.bak
# 2、恢复
ETCDCTL_API=3 etcdctl \
  snapshot restore snapshot.db \
  --data-dir=/var/lib/etcd
# 3、启动kube-apiserver和etcd容器
mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
mv /var/lib/etcd.bak  /var/lib/etcd/
# 环境准备,复制容器中的etcdctl命令出来
docker ps | grep etcd
docker cp baf3e1a53c2c:/usr/local/bin/etcdctl /usr/bin/

# 创建定时任务 crontab -e
0 * * * * /opt/k8s_bak/backup_etcd.sh

#!/bin/bash
BACKUP_FILE="snapshot.db"
BACKUP_PATH="/opt/k8s_bak/"
ETCDCTL_API=3 etcdctl snapshot save $BACKUP_PATH$BACKUP_FILE --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key
echo "etcd backup completed at $(date)"
2.安装k8s集群cilium一直重启
docker ps -a
# 查看已关闭容器日志
# 发现报错日志:nsenter: cannot open /hostproc/1/ns/cgroup: No such file or directory

- hostPath:
  path: /proc # 也就是说是宿主机的这个目录中没有 /proc/1/ns/cgroup 这个文件。

# 使用cilium,因linux内核版本过低无法启动,issues:https://github.com/rancher/rke2/issues/3571
3.K8S Flannel Pod 无法启动系列问题

“cni0” already has an IP address different from

# 可以使用 IP 命令直接修改
sudo ip address flush dev cni0
sudo ip address change 10.244.X.1/24 dev cni0

# 或是删除 cni0 让 K8S 自动重建
sudo ip link set cni0 down
sudo ip link delete cni0
4.修改默认端口范围
vim /etc/kubernetes/manifests/kube-apiserver.yaml

# 添加到如下位置就行了
- command:
   - kube-apiserver
   - --service-node-port-range=1-65535

# 直接删除kube-apiserver  pod 就行了 会自动重启
# 多master节点,需删除所有
# kubectl delete pod kube-apiserver-qa-01.df-emall.com -n kube-system
# kubectl delete pod kube-apiserver-qa-04.df-emall.com -n kube-system
5.k8s备份工具velero

Github:https://github.com/vmware-tanzu/velero
Velero(之前称为Heptio Ark)是一个备份和还原Kubernetes集群的流行工具,支持备份和还原Kubernetes对象、PV和Namespace等资源。Velero能够备份到本地存储和云存储(如AWS S3和Google Cloud Storage),还支持在不同集群之间迁移数据。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: K8s运维工程师需要具备哪些技能和经验? K8s是目前最流行的容器编排和管理平台,因此,K8s运维工程师需要掌握基本的Linux系统管理和网络知识,具备Docker和K8s的实践经验和技能。在面试中,以下问题K8s运维工程师经常会遇到的问题: 1.描述Docker镜像的构成和制作过程。 Docker容器是通过Docker镜像构建的,而Docker镜像是由多个层次构成的。运维工程师需要理解Docker镜像的构成和创建过程,掌握Dockerfile文件的编写和基本的构建命令。 2.如何使用Kubernetes创建和管理容器Kubernetes是一个开源的容器编排和管理平台。运维工程师需要理解Kubernetes的组件和工作原理,熟悉Kubernetes的部署和管理,能够使用Kubernetes创建和管理容器化应用程序。 3.Kubernetes中的Service和Ingress有什么区别? Kubernetes的Service和Ingress都是用于暴露服务和路由流量的机制。运维工程师需要理解Service和Ingress的区别和各自的使用场景,能够根据不同的要求配置和管理Service和Ingress。 4.如何管理Kubernetes集群的安全? Kubernetes集群的安全管理是K8s运维工程师必须掌握的关键技能。运维工程师需要了解Kubernetes的安全机制和最佳实践,能够配置和管理Kubernetes集群的安全策略和证书。 总之,K8s运维工程师需要具有扎实的英语和计算机技能、出色的问题解决能力、敏捷的反应能力和良好的团队合作能力。在实践中不断学习、不断探索,并遵循最佳实践,才能成为一名成功的K8s运维工程师。 ### 回答2: k8s运维工程师需要具备哪些技能和能力? 作为一名k8s运维工程师,需要具备以下几个方面的技能和能力: 1.熟练掌握k8s基础知识:k8s是目前最流行的容器编排平台,需要熟练掌握其概念模型、架构设计等基础知识,了解k8s各个组件的作用和相互关系。 2.熟悉Linux操作系统:Linux作为k8s最常用的操作系统,需要熟悉其操作和维护,包括文件系统、进程管理、网络配置等,可以快速解决生产环境中的问题。 3.编程语言:k8s的开源社区主要使用Go语言进行开发,因此需要掌握基础的Go语言编程能力,同时还需了解常用的Shell脚本语言。 4.容器技术:熟悉Docker容器技术,能够对镜像进行管理、发布和更新,了解容器网络、存储和安全领域的相关技术。 5.自动化和DevOps:熟练使用自动化工具,如Ansible、Puppet等,了解CI/CD的实践流程,掌握DevOps基本理念和实践方法。 6.团队合作和沟通能力:k8s运维工程师需要与开发人员、QA、安全、运维等不同部门进行沟通和协作,因此需要具备良好的团队合作和沟通能力。 在实际工作中,k8s运维工程师需要根据生产环境中的实际情况,灵活应用各种技能和能力,维护k8s平台的高可用性、高性能和高安全性,确保业务的稳定运行和快速迭代。 ### 回答3: K8sKubernetes)是一个开源的容器编排系统,可以将多个容器编排在同一个集群中,从而能够有效地管理和分发容器,在分布式系统中扮演着一个重要的角色。对于K8s运维工程师来说,需要掌握K8s集群的搭建和运维,具有一定的Linux操作系统基础和Docker容器技术。 在K8s运维工程师的面试过程中,常见的面试题目包括以下几个方面: 一、K8s基础知识:K8s的架构、常用概念、K8s资源对象、K8s组件和服务等。 二、K8s集群搭建:如何构建和部署一个K8s集群,如何管理Master和Node节点,如何配置Kubelet、Kube-proxy等。 三、K8s应用容器化:如何通过Docker将应用程序打包成容器,如何基于容器部署一个应用程序,如何将应用程序与K8s相关联。 四、K8s网络和存储:如何设置K8s网络和存储,如何配置网络插件和存储卷等。 五、K8s监控和调试:如何监控和调试K8s集群和应用程序,如何使用Prometheus、Grafana等监控工具。 综上所述,K8s运维工程师需要具备良好的K8s基础知识和实践经验,以及熟练的Linux系统操作和Docker容器技术,从而能够快速定位和解决K8s集群运维中的问题,提高系统的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值