一、Evictedk8s是什么?
Evictedk8s是一个自动将Kubernetes节点上故障pod转移并维护Kubernetes集群稳定性的工具。它利用Kubernetes集群的调度机制,通过将故障pod调度到其他节点中来自动避免节点故障对集群造成的影响。
二、Evictedk8s的工作原理
Evictedk8s通过Kubernetes的事件通知机制,监听节点上pod的调度事件。当一个节点上的pod被标记为unschedulable时,Evictedk8s会自动将其转移到其他节点。流程如下:
- Evictedk8s监听节点上pod的调度事件
- 当一个节点上的pod被标记为unschedulable时,Evictedk8s会自动将其转移到其他节点
- Evictedk8s会删除原节点上的pod和相关的pvc
- Evictedk8s会记录pod的状态和转移记录,以便Kubernetes Autoscaler优化节点资源的分配
三、如何部署Evictedk8s
部署Evictedk8s需要经过以下步骤:
- 创建一个名为evictedk8s的命名空间
- 创建一个配置map,其中需要指定pod转移超时时间、pod转移的最大重试次数和pod日志保存路径等参数
- 部署Evictedk8s的Pod,可以使用官方提供的Docker镜像。Pod需要挂载宿主机上的/var/log/pods目录,以保存pod的日志信息
- 创建一个Service,并为其指定一个ClusterIP。这样可以确保Evictedk8s可以访问Kubernetes API server
四、使用Evictedk8s的注意事项
在使用Evictedk8s时,需要注意以下事项:
- Pod的重试次数和超时时间要合理设置,默认情况下,每个Pod会尝试转移到其他节点3次,转移的超时时间为60秒
- Evictedk8s会自动处理所有的pod转移,可以减少管理员工作量,但同时也会带来一定的风险。因此,在使用Evictedk8s前,需要做好相关的测试和评估
代码示例
apiVersion: v1
kind: Namespace
metadata:
name: evictedk8s
---
apiVersion: v1
kind: ConfigMap
metadata:
name: evictedk8s-config
namespace: evictedk8s
data:
pod-eviction-timeout-seconds: "60"
max-number-of-pod-retries: "3"
pod-eviction-log-path: "/var/log/pods/"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: evictedk8s
namespace: evictedk8s
spec:
replicas: 1
selector:
matchLabels:
app: evictedk8s
template:
metadata:
labels:
app: evictedk8s
spec:
containers:
- name: evictedk8s
image: evictedk8s:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: podlogs
mountPath: /var/log/pods
volumes:
- name: podlogs
hostPath:
path: /var/log/pods
serviceAccountName: evictedk8s
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: evictedk8s
namespace: evictedk8s
spec:
ports:
- name: evictedk8s
port: 80
targetPort: 80
selector:
app: evictedk8s