产品动态
公告
产品发布记录

status.allocatable.tke.cloud.tencent.com/eni-ip 值。当 Pod 因为 ENI IP 不足而处于 Pending 状态时,网络组件会动态调整该值,但该过程中存在一定延迟,导致组件在检测到 Pod Pending 时会迅速启动新节点。强烈建议您在新建集群时开启固定 IP 网络模式(在 Terraform 中需配置 is_non_static_ip_mode = false),这样节点的 status.allocatable.tke.cloud.tencent.com/eni-ip 值会固定,可避免不必要的节点弹出。
apiVersion: karpenter.sh/v1kind: NodePoolmetadata:name: testannotations:kubernetes.io/description: "NodePool to restrict the number of cpus provisioned to 10"spec:# Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes# Configuration in this section constrains how aggressive Karpenter can be with performing operations# like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster costdisruption:consolidationPolicy: WhenEmptyOrUnderutilizedconsolidateAfter: 5mbudgets:- nodes: 10%template:metadata:annotations:# node.tke.cloud.tencent.com/automation-service 节点自动化服务(TAT登录能力)# node.tke.cloud.tencent.com/security-agent 节点安全加固# node.tke.cloud.tencent.com/monitor-service 云监控beta.karpenter.k8s.tke.machine.meta/annotations: node.tke.cloud.tencent.com/automation-service=true,node.tke.cloud.tencent.com/security-agent=true,node.tke.cloud.tencent.com/monitor-service=true# node.tke.cloud.tencent.com/beta-image 指定节点镜像,ts4-public对应tencentos server 4beta.karpenter.k8s.tke.machine.spec/annotations: node.tke.cloud.tencent.com/beta-image=ts4-publicspec:# Requirements that constrain the parameters of provisioned nodes.# These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.# Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operatorsrequirements:- key: kubernetes.io/archoperator: Invalues: ["amd64"]- key: kubernetes.io/osoperator: Invalues: ["linux"]- key: karpenter.k8s.tke/instance-familyoperator: Invalues: ["S5","SA2"]- key: karpenter.sh/capacity-typeoperator: Invalues: ["on-demand"]# - key: node.kubernetes.io/instance-type# operator: In# values: ["S5.MEDIUM2", "S5.MEDIUM4"]- key: "karpenter.k8s.tke/instance-cpu"operator: Gtvalues: ["1"]# - key: "karpenter.k8s.tke/instance-memory-gb"# operator: Gt# values: ["3"]# References the Cloud Provider's NodeClass resourcenodeClassRef:group: karpenter.k8s.tkekind: TKEMachineNodeClassname: default# Resource limits constrain the total size of the pool.# Limits prevent Karpenter from creating new instances once the limit is exceeded.limits:cpu: 10
Selector | Description |
topology.kubernetes.io/zone | 实例所在可用区,如 "900001" |
kubernetes.io/arch | 实例架构,目前仅支持 "amd64" |
kubernetes.io/os | 操作系统,目前仅支持 "linux" |
karpenter.k8s.tke/instance-family | 机型实例族,如 "S5","SA2" |
karpenter.sh/capacity-type | 实例计费模式,如 "on-demand" |
node.kubernetes.io/instance-type | 实例规格,如 "S5.MEDIUM2" |
karpenter.k8s.tke/instance-cpu | 实例的 CPU 数量,如 4 |
karpenter.k8s.tke/instance-memory-gb | 实例的 Memory 大小,如 8 |
topology.kubernetes.io/zone: "900001",同时使用 topology.com.tencent.cloud.csi.cbs/zone 的标签值(如 topology.com.tencent.cloud.csi.cbs/zone: ap-singapore-1)和实际可用区描述做对应。您可以使用命令 describe tmnc Namexxx 查看您子网的 zone 和 zone ID。karpenter.k8s.tke/instance-cpu: 2。但 nodepool 的要求已修改为:template: spec: requirements: - key: "karpenter.k8s.tke/instance-cpu" operator: Gt values: ["2"]
karpenter.k8s.tke/instance-cpu: 2 不是 Gt 2,因此 nodeclaim 将被替换。如果您想忽略 Drifted 中断,您应该在节点池中添加以下中断设置:disruption: consolidationPolicy: WhenEmptyOrUnderutilized consolidateAfter: 5m budgets: - nodes: "0" reasons: [Drifted] - nodes: 10%
expireAfter: 720h | Never
spec.template.spec.expireAfter 字段定义了节点在被移除之前可以在集群中存活的时间,减少长时间运行的节点会产生的如文件碎片或系统进程的内存泄漏等问题。由于该参数会导致节点定期销毁重建,为避免重建过程中对业务产生影响,您可以选择设置字符串值 “Never” 来完全禁用过期。spec.template.spec.nodeClassRef 引用 TKEMachineNodeClass,多个 NodePool 可能指向同一个 TKEMachineNodeClass。apiVersion: karpenter.k8s.tke/v1beta1kind: TKEMachineNodeClassmetadata:name: defaultannotations:kubernetes.io/description: "General purpose TKEMachineNodeClass"spec:## using kubectl explain tmnc.spec.internetAccessible to check how to use internetAccessible filed.# internetAccessible:# chargeType: TrafficPostpaidByHour# maxBandwidthOut: 2## using kubectl explain tmnc.spec.systemDisk to check how to use systemDisk filed.# systemDisk:# size: 60# type: CloudSSD## using kubectl explain tmnc.spec.dataDisks to check how to use systemDisk filed.# dataDisks:# - mountTarget: /var/lib/container# size: 100# type: CloudPremium# fileSystem: ext4subnetSelectorTerms:# repalce your tag which is already existed in https://console.tencentcloud.com/tag/taglist- tags:karpenter.sh/discovery: cls-xxx# - id: subnet-xxxsecurityGroupSelectorTerms:- tags:karpenter.sh/discovery: cls-xxx# - id: sg-xxxsshKeySelectorTerms:- tags:karpenter.sh/discovery: cls-xxx# - id: skey-xxx
# Get nodepoolkubectl get nodepool# Get nodeclaimkubectl get nodeclaim# Get TKEMachineNodeClass kubectl get tmnc# Check your cloud resources has been synced to nodeclasskubectl describe tmnc default
kubectl describe tmnc default 命令的示例输出:Status: Conditions: Last Transition Time: 2024-08-21T09:17:26Z Message: Reason: Ready Status: True Type: Ready Security Groups: Id: sg-xxx Ssh Keys: Id: skey-xxx Id: skey-xxx Id: skey-xxx Subnets: Id: subnet-xxx Zone: ap-singapore-1 Zone ID: 900001 Id: subnet-xxx Zone: ap-singapore-4 Zone ID: 900004
文档反馈