eks_cli 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -6
- data/lib/eks_cli/cloudformation/stack.rb +10 -5
- data/lib/eks_cli/config.rb +0 -1
- data/lib/eks_cli/k8s/auth.rb +10 -6
- data/lib/eks_cli/nodegroup.rb +35 -5
- data/lib/eks_cli/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8018b870965acb14650d78b33c8d7ff7ac3fd146
|
4
|
+
data.tar.gz: b4253ff9454d66f1ef2fa65fba9ccc5dead775ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00673c6ad254fb33cd2573f5558123c58682ad601cd431a7b7a244cbd98ce94c1a13574cf8f6bf17e9faff94d90c48a74c75f74f4a203eb3d223083f058b7755
|
7
|
+
data.tar.gz: ddec8dbd285e41a34cf2cef2a5f7fbc36ebefdd2ffac327e5eb2d309ae3f74a69ab33dce3c14a306ea4b0c244aa6a60f1965c8497e3f21761037c9a8ad58f512
|
data/README.md
CHANGED
@@ -11,23 +11,25 @@ EKS cluster bootstrap with batteries included
|
|
11
11
|
* Easily configure docker repository secrets to allow pulling private images
|
12
12
|
* Manage Route53 DNS records to point at your Kubernetes services
|
13
13
|
* Export nodegroups to SporInst Elastigroups
|
14
|
+
* Auto resolving AMIs by region & instance types (GPU enabled AMIs)
|
14
15
|
* Even more...
|
15
16
|
|
16
17
|
## Usage
|
17
18
|
|
18
19
|
```
|
19
|
-
$ gem install eks_cli -v 0.1.
|
20
|
+
$ gem install eks_cli -v 0.1.8
|
20
21
|
$ eks create us-west-2 --cluster-name My-EKS-Cluster
|
21
|
-
$ eks create-nodegroup --cluster-name My-EKS-Cluster --group-name nodes --ssh-key-name my-ssh-key --yes
|
22
|
+
$ eks create-nodegroup --cluster-name My-EKS-Cluster --group-name nodes --ssh-key-name <my-ssh-key> --yes
|
22
23
|
```
|
23
24
|
|
24
25
|
You can type `eks` in your shell to get the full synopsis of available commands
|
25
26
|
|
26
|
-
##
|
27
|
+
## Prerequisites
|
27
28
|
|
28
29
|
1. Ruby
|
29
|
-
2.
|
30
|
-
3.
|
30
|
+
2. [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) version >= 10 on your `PATH`
|
31
|
+
3. [aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator) on your `PATH`
|
32
|
+
4. [aws-cli](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) version >= 1.16.18 on your `PATH`
|
31
33
|
|
32
34
|
## Extra Stuff
|
33
35
|
|
@@ -94,7 +96,7 @@ Assuming you have some shared resources on another VPC (an RDS instance for exam
|
|
94
96
|
|
95
97
|
1. Creating and accepting a VPC peering connection from your EKS cluster VPC to the old VPC
|
96
98
|
2. Setting route tables on both directions to allow communication
|
97
|
-
3. Adding an ingress
|
99
|
+
3. Adding an ingress rule to SG_ID to accept all communication from your new cluster nodes.
|
98
100
|
|
99
101
|
### Exporting nodegroups to Spotinst
|
100
102
|
|
@@ -45,7 +45,11 @@ module EksCli
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def eks_worker?
|
48
|
-
|
48
|
+
worker_tag
|
49
|
+
end
|
50
|
+
|
51
|
+
def eks_cluster
|
52
|
+
get_tag("eks-cluster")
|
49
53
|
end
|
50
54
|
|
51
55
|
def node_instance_role_arn
|
@@ -103,12 +107,13 @@ module EksCli
|
|
103
107
|
client.describe_stacks(stack_name: @id).stacks.first
|
104
108
|
end
|
105
109
|
|
106
|
-
def
|
107
|
-
stack.tags.select {|t|
|
110
|
+
def get_tag(k)
|
111
|
+
tag = stack.tags.select {|t| t.key == k}.first
|
112
|
+
tag.value if tag
|
108
113
|
end
|
109
114
|
|
110
|
-
def worker_tag
|
111
|
-
|
115
|
+
def worker_tag
|
116
|
+
get_tag("eks-nodegroup")
|
112
117
|
end
|
113
118
|
|
114
119
|
end
|
data/lib/eks_cli/config.rb
CHANGED
data/lib/eks_cli/k8s/auth.rb
CHANGED
@@ -4,6 +4,7 @@ require 'config'
|
|
4
4
|
require 'cloudformation/client'
|
5
5
|
require 'cloudformation/stack'
|
6
6
|
require 'log'
|
7
|
+
require 'nodegroup'
|
7
8
|
|
8
9
|
module EksCli
|
9
10
|
module K8s
|
@@ -36,17 +37,20 @@ module EksCli
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def node_arns
|
39
|
-
|
40
|
-
.
|
41
|
-
.
|
42
|
-
.map(&:stack_id)
|
43
|
-
.map {|id| CloudFormation::Stack.new(@cluster_name, id)}
|
40
|
+
config["groups"]
|
41
|
+
.keys
|
42
|
+
.map {|name| NodeGroup.new(@cluster_name, name).cf_stack}
|
44
43
|
.select {|stack| stack.eks_worker?}
|
44
|
+
.select {|stack| stack.eks_cluster == @cluster_name}
|
45
45
|
.map {|stack| stack.node_instance_role_arn}
|
46
46
|
end
|
47
47
|
|
48
48
|
def users
|
49
|
-
|
49
|
+
config["users"]
|
50
|
+
end
|
51
|
+
|
52
|
+
def config
|
53
|
+
Config[@cluster_name]
|
50
54
|
end
|
51
55
|
|
52
56
|
def configmap
|
data/lib/eks_cli/nodegroup.rb
CHANGED
@@ -23,6 +23,16 @@ module EksCli
|
|
23
23
|
group_name: "NodeGroupName",
|
24
24
|
bootstrap_args: "BootstrapArguments"}
|
25
25
|
|
26
|
+
AMIS = {"us-west-2" => "ami-0a54c984b9f908c81",
|
27
|
+
"us-east-1" => "ami-0440e4f6b9713faf6",
|
28
|
+
"us-east-2" => "ami-0958a76db2d150238",
|
29
|
+
"us-west-1" => "ami-00c3b2d35bddd4f5c"}
|
30
|
+
|
31
|
+
GPU_AMIS = {"us-west-2" => "ami-08156e8fd65879a13",
|
32
|
+
"us-east-1" => "ami-0c974dde3f6d691a1",
|
33
|
+
"us-east-2" => "ami-089849e811ace242f",
|
34
|
+
"us-west-1" => "ami-0c3479bcd739094f0"}
|
35
|
+
|
26
36
|
CAPABILITIES = ["CAPABILITY_IAM"]
|
27
37
|
|
28
38
|
def initialize(cluster_name, name)
|
@@ -65,7 +75,14 @@ module EksCli
|
|
65
75
|
|
66
76
|
def export_to_spotinst
|
67
77
|
Log.info "exporting nodegroup #{@name} to spotinst"
|
68
|
-
Log.info Spotinst::Client.new.import_asg(
|
78
|
+
Log.info Spotinst::Client.new.import_asg(config["region"], asg, [instance_type])
|
79
|
+
end
|
80
|
+
|
81
|
+
def cf_stack
|
82
|
+
CloudFormation::Stack.find(@cluster_name, stack_name)
|
83
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
84
|
+
Log.error("could not find stack for nodegroup #{@name} - please make sure to run eks create-nodegroup --all --yes -c <cluster_name> to sync config")
|
85
|
+
raise e
|
69
86
|
end
|
70
87
|
|
71
88
|
private
|
@@ -74,10 +91,6 @@ module EksCli
|
|
74
91
|
@cf_template_body ||= File.read(File.join($root_dir, '/assets/nodegroup_cf_template.yaml'))
|
75
92
|
end
|
76
93
|
|
77
|
-
def cf_stack
|
78
|
-
CloudFormation::Stack.find(@cluster_name, stack_name)
|
79
|
-
end
|
80
|
-
|
81
94
|
def await(stack)
|
82
95
|
|
83
96
|
while stack.pending? do
|
@@ -105,6 +118,7 @@ module EksCli
|
|
105
118
|
|
106
119
|
def build_params
|
107
120
|
@group["bootstrap_args"] = bootstrap_args
|
121
|
+
@group["ami"] ||= default_ami
|
108
122
|
@group.except("taints").inject([]) do |params, (k, v)|
|
109
123
|
params << build_param(k, v)
|
110
124
|
end
|
@@ -128,6 +142,22 @@ module EksCli
|
|
128
142
|
parameter_value: v.to_s}
|
129
143
|
end
|
130
144
|
|
145
|
+
def default_ami
|
146
|
+
if gpu?
|
147
|
+
GPU_AMIS[config["region"]]
|
148
|
+
else
|
149
|
+
AMIS[config["region"]]
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def gpu?
|
154
|
+
@group["instance_type"].start_with?("p2.") || @group["instance_type"].start_with?("p3.")
|
155
|
+
end
|
156
|
+
|
157
|
+
def config
|
158
|
+
Config[@cluster_name]
|
159
|
+
end
|
160
|
+
|
131
161
|
end
|
132
162
|
|
133
163
|
end
|
data/lib/eks_cli/version.rb
CHANGED