K8S相关问题处理

1、k8s强制删除资源

强制删除 pvc
kubectl patch pvc pvc-9cd01e19-93b4-4bd8-bfc8-9d96cbe03f46 -p '{"metadata":{"finalizers":null}}' -n senyint
强制删除 pod
kubectl delete pod PODNAME  -n senyint --force --grace-period=0
强制删除 namespace
kubectl delete namespace NAMESPACENAME -n senyint --force --grace-period=0

2、kubeadm证书相关(版本1.21.1)

查看证书

kubeadm certs check-expiration

更新证书到期时间(更新至执行时间后的一年)

kubeadm  certs renew all

重启相关容器

docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' | xargs docker restart

第二种方法,更改源码中的时间定义
参考:

https://www.manongdao.com/article-2427313.html

3、k8s的网络插件的卸载

3.1、Calico

# 安装
export POD_SUBNET=10.244.0.0/16   # 更换位k8s网络范围
kubectl apply -f https://kuboard.cn/install-script/v1.22.x/calico-operator.yaml
wget https://kuboard.cn/install-script/v1.22.x/calico-custom-resources.yaml
sed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yaml
kubectl apply -f calico-custom-resources.yaml
# 卸载
ifconfig tunl0 down
ifconfig cni0 down
ip link delete cni0
ip link delete tul0
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
# 上面操作完成重启kubelet coredns eip-nfs ingress 以及重新部署所有工作负载

3.2、Flannel

# 安装
export POD_SUBNET=10.244.0.0/16   # 更换位k8s网络范围
wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
sed -i "s#10.244.0.0/16#${POD_SUBNET}#" flannel-v0.14.0.yaml
kubectl apply -f ./flannel-v0.14.0.yaml
# 卸载
kubectl delete -f ./flannel-v0.14.0.yaml
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
# 上面操作完成 重启kubelet coredns eip-nfs ingress 以及重新部署所有工作负载

3.3、网络插件出现问题

使用calico网络插件时,机器重启后,工作负载 calico-node 在该机器上起不来

3.3.1、修改环境变量

如下图:
image

将图上环境变量改为:IP_AUTODETECTION_METHOD=interface=eno3

3.3.2、删除错误网卡

如何查找错误网卡呢?

ifconfig -a | grep br

通过上面命令行查到错误网卡之后,如查到:br-b505d05fe3fe

ifconfig br-b505d05fe3fe down
ip link delete br-b505d05fe3fe

4、velero实现k8s资源备份

参考文档:

https://blog.51cto.com/kaliarch/4919159
https://blog.csdn.net/john1337/article/details/123335046

4.1、什么是velero?

Velero 是一个云原生的灾难恢复和迁移工具,它本身也是开源的, 采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。
Velero 是西班牙语,意思是帆船,非常符合 Kubernetes 社区的命名风格。Velero 的开发公司 Heptio,之前已被 VMware 收购,其创始人2014就职于Google,当时被认为是 Kubernetes 核心成员。
Velero 是一种云原生的Kubernetes优化方法,支持标准的K8S集群,既可以是私有云平台也可以是公有云。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。
Heptio Velero ( 以前的名字为 ARK) 是一款用于 Kubernetes 集群资源和持久存储卷(PV)的备份、迁移以及灾难恢复等的开源工具。
使用velero可以对集群进行备份和恢复,降低集群DR造成的影响。velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。可以从官方文档查看可接收的对象存储,本地存储可以使用Minio

4.2 特性

支持 Kubernetes 集群数据备份和恢复
支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
支持复制生产环境到开发以及测试环境
注意: 备份过程中创建的对象是不会被备份的。

4.3 与ETCD备份的区别

与 Etcd 备份相比,直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。

4.4、流程图

image

4.5、现在开始

4.5.1、安装velero二进制命令

wget https://github.com/vmware-tanzu/velero/releases/download/v1.4.2/velero-v1.4.2-linux-amd64.tar.gz
tar -zxvf velero-v1.4.2-linux-amd64.tar.gz

4.5.2、初始化velero

## 创建credentials-velero文件填入minio的信息,文件内容如下

[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin

## 使用install命令安装velero

velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--bucket velero \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://58.56.21.14:9000
## 注释:http://58.56.21.14:9000  这个地址是公司内网部署的minio,通过防火墙映射,用于公网环境下的备份存储

注:velero的命令参数详解

## 参数详解
--provider:声明使用的 Velero 插件类型。
--plugins:使用 S3 API 兼容插件 “velero-plugin-for-aws ”。
--bucket:在腾讯云 COS 创建的存储桶名。
--secret-file:访问 COS 的访问凭证文件,见上面创建的 “credentials-velero”凭证文件。
--use-restic:使用开源免费备份工具 restic 备份和还原持久卷数据。

(尝试过备份pv数据,但是没有成功,感兴趣的同事可以再试一下 =_=)
--default-volumes-to-restic:使用 restic 来备份所有Pod卷,前提是需要开启 --use-restic 参数。
--backup-location-config:备份存储桶访问相关配置。
--region:兼容 S3 API 的 COS 存储桶地区,例如创建地区是广州的话,region 参数值为“ap-guangzhou”。
--s3ForcePathStyle:使用 S3 文件路径格式。
--s3Url:COS 兼容的 S3 API 访问地址
--use-volume-snapshots=false 来关闭存储卷数据快照备份。

4.5.3、安装完成后,会自动创建velero的namespace

[root@k8s-master velero]# kubectl get pod -n velero
NAME READY STATUS RESTARTS AGE
velero-59b956f6b5-pj57n 1/1 Running 0 7s

4.5.4、创建备份任务

## 手动发起备份任务
velero backup create nginx-example --include-namespaces nginx-example

## 指定备份排除某些命名空间下面的资源
## --include-resources选项可以指定备份哪些资源类型;--exclude-resources`可以指定排除某些资源类型
velero backup create ${BACKUP_NAME} --exclude-namespaces ${NAMESPACE1},${NAMESPACE2}
velero backup create ${BACKUP_NAME} --include-resources pod,secret

# 每日1点进行备份
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *"

# 每日1点进行备份,备份保留72小时
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --ttl 72h

# 每5小时进行一次备份
velero create schedule <SCHEDULE NAME> --schedule="@every 5h"

# 每日对 指定 namespace 进行一次备份 (如panshi-qtc-dev)
velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces panshi-qtc-dev

4.5.5、查看备份资源

velero  get  backup   # 备份查看
velero  get  schedule # 查看定时备份
velero  get  restore  # 查看已有的恢复
velero  get  plugins  # 查看插件
velero restore create --from-backup all-ns-backup  #恢复集群所有备份,(对已经存在的服务不会覆盖)
velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example #仅恢复 default nginx-example namespace

Velero可以将资源还原到与其备份来源不同的命名空间中。为此,请使用--namespace-mappings标志
velero restore create RESTORE_NAME --from-backup BACKUP_NAME --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2
例如下面将test-velero 命名空间资源恢复到test-velero-1下面
velero restore create restore-for-test --from-backup everyday-1-20210203131802 --namespace-mappings test-velero:test-velero-1

4.5.6、恢复

velero restore create --from-backup $(BACKUP_NAME)

4.5.7、注意事项

在velero备份的时候,备份过程中创建的对象是不会被备份的。
velero restore 恢复不会覆盖已有的资源,只恢复当前集群中不存在的资源。已有的资源不会回滚到之前的版本,如需要回滚,需在restore之前提前删除现有的资源。
后期可以讲velero作为一个crontjob来运行,定期备份数据。
在高版本1.16.x中,报错error: unable to recognize "filebeat.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1" ,将yml配置文件内的api接口修改为 apps/v1 ,导致原因为之间使用的kubernetes 版本是1.14.x版本,1.16.x 版本放弃部分API支持!

5、etcd相关

5.1、查看ETCD集群信息

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.11.200:2379,https://192.168.11.201:2379,https://192.168.11.202:2379,https://192.168.11.203:2379,https://192.168.11.204:2379" endpoint health --write-out=table

5.2、查看网络

/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=https://192.168.11.200:2379,https://192.168.11.204:2379,https://192.168.11.201:2379,https://192.168.11.202:2379,https://192.168.11.203:2379 ls /coreos.com/network/subnets

posted @ 2023-08-25 09:18  中國颜值的半壁江山  阅读(18)  评论(0编辑  收藏  举报