CA
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: <EKS_Cluster_Name>
version: "<EKS_Version>"
region: <Region>
cloudWatch:
clusterLogging:
enableTypes: ["*"]
iamIdentityMappings:
- arn: arn:aws:iam::<Account ID>:role/<Role name>
groups:
- system:masters
username: admin
noDuplicateARNs: true
iam:
withOIDC: true
serviceAccounts:
- metadata:
name: aws-load-balancer-controller
namespace: kube-system
wellKnownPolicies:
awsLoadBalancerController: true
- metadata:
name: cert-manager
namespace: cert-manager
wellKnownPolicies:
certManager: true
- metadata:
name: cluster-autoscaler
namespace: kube-system
labels: {aws-usage: "cluster-ops"}
wellKnownPolicies:
autoScaler: true
- metadata:
name: autoscaler-service
namespace: kube-system
attachPolicy:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "autoscaling:DescribeAutoScalingGroups"
- "autoscaling:DescribeAutoScalingInstances"
- "autoscaling:DescribeLaunchConfigurations"
- "autoscaling:DescribeTags"
- "autoscaling:SetDesiredCapacity"
- "autoscaling:TerminateInstanceInAutoScalingGroup"
- "ec2:DescribeLaunchTemplateVersions"
Resource: '*'
vpc:
subnets:
public:
<Region>a: { id: public_a }
<Region>b: { id: public_b }
<Region>c: { id: public_c }
private:
<Region>a: { id: private_a }
<Region>b: { id: private_b }
<Region>c: { id: private_c }
managedNodeGroups:
- name: <Worker Node Group name>
labels: { <key>: <value> }
instanceName: <Instance name>
instanceType: <Instance Type>
desiredCapacity: 2
minSize: 2
maxSize: 20
privateNetworking: true
tags:
k8s.io/cluster-autoscaler/enabled: "true"
k8s.io/cluster-autoscaler/<EKS_Cluster_Name>: "owned"
YAML
복사
Karpenter
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: <EKS_Cluster_Name>
version: "<EKS_Version>"
region: <Region>
tags:
karpenter.sh/discovery: <EKS_Cluster_Name>
cloudWatch:
clusterLogging:
enableTypes: ["*"]
iamIdentityMappings:
- arn: arn:aws:iam::<Account ID>:role/<Role name>
groups:
- system:masters
username: admin
noDuplicateARNs: true
iam:
withOIDC: true
serviceAccounts:
- metadata:
name: aws-load-balancer-controller
namespace: kube-system
wellKnownPolicies:
awsLoadBalancerController: true
- metadata:
name: cert-manager
namespace: cert-manager
wellKnownPolicies:
certManager: true
karpenter:
version: '0.37.0'
createServiceAccount: true
vpc:
subnets:
public:
<Region>a: { id: public_a }
<Region>b: { id: public_b }
<Region>c: { id: public_c }
private:
<Region>a: { id: private_a }
<Region>b: { id: private_b }
<Region>c: { id: private_c }
managedNodeGroups:
- name: <Worker Node Group name>
labels: { <key>: <value> }
instanceName: <Instance name>
instanceType: <Instance Type>
desiredCapacity: 2
minSize: 2
maxSize: 20
privateNetworking: true
YAML
복사
•
provisioner.yaml
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: apps
spec:
requirements:
- key: karpenter.k8s.aws/instance-size
operator: NotIn
values: [nano, micro, small] # Instance Size
- key: "node.kubernetes.io/instance-type"
operator: In
values: ["c5.large"] # Instance Type
- key: "kubernetes.io/arch"
operator: In
values: ["amd64"]
- key: "karpenter.sh/capacity-type"
operator: In
values: ["on-demand"] # ["on-demand", "spot"]
- key: "topology.kubernetes.io/zone" # AZ
operator: In
values: ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]
providerRef:
name: apps-provider
taints:
- key: dedicated
value: app
effect: NoSchedule
ttlSecondsAfterEmpty: 300
# ttlSecondsUntilExpired: 2592000 # 30 Days = 60 * 60 * 24 * 30 Seconds;
---
apiVersion: karpenter.k8s.aws/v1alpha1
kind: AWSNodeTemplate
metadata:
name: apps-provider
spec:
amiFamily: Bottlerocket
subnetSelector: # required
karpenter.sh/discovery: skills-cluster
securityGroupSelector: # required, when not using launchTemplate
karpenter.sh/discovery: skills-cluster
blockDeviceMappings:
- deviceName: /dev/xvda
ebs:
volumeType: gp3
volumeSize: 20Gi
deleteOnTermination: true
# userData: ""
metadataOptions:
httpEndpoint: enabled
httpProtocolIPv6: disabled
httpPutResponseHopLimit: 2
httpTokens: required
YAML
복사