Описание ¶
Node Role Labeler давно руки чесались написать, примитивнейший оператор, но задачу выполняет. Проблема в том, что Kubernetes, а именно kubelet, не может назначить себе самому при создании узла label node-role.kubernetes.io/ROLE_NAME
, потому что kubernetes.io защищённый префикс. Очень не удобно.
Вот у меня Karpenter, или Cluster Autoscaler, да не важно, я хочу чтобы узлы сразу были с красивыми ролями, а из коробки так не получается, только руками. Теперь можно навесить node-role.cluster.local/NAME
и оператор создаст копию с доменом kubernetes.io автоматически. В обратную сторону тоже работает. Подробнее - читайте на GitHub.
Демо ¶
Karpenter конфигурация ¶
Вот таким образом можно сразу навешивать labels на узлы Karpenter-a.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
| apiVersion: karpenter.k8s.aws/v1beta1
kind: EC2NodeClass
metadata:
name: private
spec:
amiFamily: AL2
metadataOptions:
httpEndpoint: enabled
httpProtocolIPv6: disabled
httpPutResponseHopLimit: 2
httpTokens: required
role: Karpenter-development-role
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery: development
subnetSelectorTerms:
- tags:
karpenter.sh/discovery/development/subnet: private
tags:
karpenter.sh/discovery: development
---
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: on-demand-amd64
spec:
disruption:
budgets:
- nodes: 20%
- nodes: "5"
- duration: 20h
nodes: "0"
schedule: 0 5 * * *
consolidationPolicy: WhenUnderutilized
expireAfter: 720h
limits:
cpu: "200"
memory: 400Gi
template:
metadata:
labels:
node-role.cluster.local/on-demand-amd64: ""
spec:
nodeClassRef:
name: private
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- key: node.kubernetes.io/instance-type
operator: In
values:
- r5a.4xlarge
- r5a.2xlarge
- r5a.xlarge
- r5a.large
- r5a.medium
- r5.4xlarge
- r5.2xlarge
- r5.xlarge
- r5.large
- r5.medium
- m6i.4xlarge
- m6i.2xlarge
- m6i.xlarge
- m6i.large
- m6i.medium
- m5a.4xlarge
- m5a.2xlarge
- m5a.xlarge
- m5a.large
- m5a.medium
- m5.4xlarge
- m5.2xlarge
- m5.xlarge
- m5.large
- m5.medium
- c6a.4xlarge
- c6a.2xlarge
- c6a.xlarge
- c6a.large
- c6a.medium
- c6.4xlarge
- c6.2xlarge
- c6.xlarge
- c6.large
- c6.medium
- t3a.4xlarge
- t3a.2xlarge
- t3a.xlarge
- t3a.large
- t3a.medium
- key: karpenter.sh/capacity-type
operator: In
values:
- on-demand
|