Karpenter现在已经部署完毕,我们来探索它是如何管理node的生命周期
运行以下命令,创建一个deployement:
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: inflate
spec:
replicas: 0
selector:
matchLabels:
app: inflate
template:
metadata:
labels:
app: inflate
spec:
terminationGracePeriodSeconds: 0
containers:
- name: inflate
image: public.ecr.aws/eks-distro/kubernetes/pause:3.7
resources:
requests:
cpu: 1
EOF
将replica的数量扩容为5,观察机器数量的变化:
kubectl scale deployment inflate --replicas 5
kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controller
由于上面的pod每个都需要1核CPU,创建出5个pod出来,原来集群的容量不够,就会触发karpenter扩容节点。
karpenter先计算出来100种满足条件的机型,然后直接交给ec2-fleet,让它来决定开出哪种机器。最终开出来了c7a.xlarge机型:
在这个过程中,观察kube-ops-view的页面,可以看到整个过程,首先检查到有3个pending pod(另外两个部署到了原来两个节点上):
karpenter开出新的机器(下面两个是daemonset pod):
三个pending pod部署到新的节点上面:
在EC2控制台上也能看到新开出来的节点:
将replica的数量重新调回0:
kubectl scale deployment -n workshop inflate --replicas 0
此时karpenter检查到有节点上pod数量为空,触发缩容,将原来扩展出来的节点下掉:
查看karpenter日志:
kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controller
日志如下,karpenter确认要删除的节点后,触发termination: