eks_cli 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/assets/cf/eks_cluster.yaml.erb +5 -1
- data/lib/eks_cli/cli.rb +7 -2
- data/lib/eks_cli/cloudformation/eks.rb +7 -2
- data/lib/eks_cli/cloudformation/stack.rb +1 -1
- data/lib/eks_cli/eks/cluster.rb +46 -3
- data/lib/eks_cli/nodegroup.rb +18 -11
- data/lib/eks_cli/version.rb +1 -1
- data/lib/eks_cli/vpc/client.rb +10 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c2b086d65764f440991cea882ecc9a24737993481bccfd5668492a014c21040
|
4
|
+
data.tar.gz: c254941ebd5f50a57b003539bf9abf4495838afe91546c3144d8abfadbcb56f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b4418d049386d958e076c0a455b5e07e23c99dc08c1fd5129c6febc2d4028386885c496d27a7c8bdf728ab813be531dfa79979fe94c2d803029c8b8c9447516
|
7
|
+
data.tar.gz: 323b3b1e093617b49ecde03a5f99c18dc9c39eff7ab164c32450085f1ca8660d434249cd3ea601ba7f5d3bb5b4d3ae7cded6888057dfcb8b8992eb4f2228741a
|
@@ -7,6 +7,10 @@ Parameters:
|
|
7
7
|
ClusterName:
|
8
8
|
Type: String
|
9
9
|
Description: EKS cluster name
|
10
|
+
|
11
|
+
KubernetesVersion:
|
12
|
+
Type: String
|
13
|
+
Description: Kubernetes version - 1.10, 1.11, etc...
|
10
14
|
|
11
15
|
VpcBlock:
|
12
16
|
Type: String
|
@@ -192,7 +196,7 @@ Resources:
|
|
192
196
|
- !Ref Subnet02
|
193
197
|
- !Ref Subnet03
|
194
198
|
RoleArn: !GetAtt AWSServiceRoleForAmazonEKS.Arn
|
195
|
-
Version:
|
199
|
+
Version: !Ref KubernetesVersion
|
196
200
|
|
197
201
|
NodeGroupsInClusterSecurityGroup:
|
198
202
|
Type: AWS::EC2::SecurityGroup
|
data/lib/eks_cli/cli.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'version'
|
3
|
+
require 'log'
|
3
4
|
|
4
5
|
autoload :JSON, 'json'
|
5
6
|
|
@@ -51,14 +52,13 @@ module EksCli
|
|
51
52
|
subnet3_az: (options[:subnet3_az] || Config::AZS[options[:region]][2])}
|
52
53
|
config.bootstrap(opts)
|
53
54
|
cluster = EKS::Cluster.new(cluster_name).create
|
54
|
-
config.write(cluster.config)
|
55
55
|
cluster.update_kubeconfig
|
56
56
|
wait_for_cluster
|
57
57
|
enable_gpu if options[:enable_gpu]
|
58
58
|
create_default_storage_class if options[:create_default_storage_class]
|
59
59
|
create_dns_autoscaler if options[:create_dns_autoscaler]
|
60
60
|
update_cluster_cni if options[:warm_ip_target]
|
61
|
-
|
61
|
+
Log.info "cluster creation completed"
|
62
62
|
end
|
63
63
|
|
64
64
|
desc "show-config", "print cluster configuration"
|
@@ -133,6 +133,11 @@ module EksCli
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
desc "delete-cluster", "deleted cluster"
|
137
|
+
def delete_cluster
|
138
|
+
EKS::Cluster.new(cluster_name).delete
|
139
|
+
end
|
140
|
+
|
136
141
|
desc "delete-nodegroup", "deletes cloudformation stack for nodegroup"
|
137
142
|
option :all, type: :boolean, default: false, desc: "delete all nodegroups. can't be used with --name"
|
138
143
|
option :group_name, type: :string, desc: "delete a specific nodegroup. can't be used with --all"
|
@@ -17,7 +17,7 @@ module EksCli
|
|
17
17
|
s = Stack.create(@cluster_name, cf_config)
|
18
18
|
Stack.await([s])
|
19
19
|
s.reload
|
20
|
-
|
20
|
+
Log.info "Outputs are:
|
21
21
|
SecurityGroups: #{s.output("SecurityGroups")}
|
22
22
|
VpcId: #{s.output("VpcId")}
|
23
23
|
SubnetIds: #{s.output("SubnetIds")}
|
@@ -31,6 +31,10 @@ module EksCli
|
|
31
31
|
cluster_arn: s.output("EKSClusterARN")}
|
32
32
|
end
|
33
33
|
|
34
|
+
def delete
|
35
|
+
Stack.new(@cluster_name, stack_name).delete
|
36
|
+
end
|
37
|
+
|
34
38
|
private
|
35
39
|
|
36
40
|
def cf_config
|
@@ -66,7 +70,8 @@ module EksCli
|
|
66
70
|
"Subnet01AZ" => config["subnet1_az"],
|
67
71
|
"Subnet02AZ" => config["subnet2_az"],
|
68
72
|
"Subnet03AZ" => config["subnet3_az"],
|
69
|
-
"ClusterName" => @cluster_name
|
73
|
+
"ClusterName" => @cluster_name,
|
74
|
+
"KubernetesVersion" => config["kubernetes_version"]}.map do |(k,v)|
|
70
75
|
{parameter_key: k, parameter_value: v}
|
71
76
|
end
|
72
77
|
|
data/lib/eks_cli/eks/cluster.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'cloudformation/eks'
|
2
|
+
require 'vpc/client'
|
2
3
|
require 'config'
|
4
|
+
require 'nodegroup'
|
3
5
|
require 'log'
|
4
6
|
|
5
7
|
module EksCli
|
@@ -12,15 +14,56 @@ module EksCli
|
|
12
14
|
|
13
15
|
def create
|
14
16
|
Log.info "creating cluster #{@cluster_name}"
|
15
|
-
|
17
|
+
cf_stack_outputs = CloudFormation::EKS.new(@cluster_name).create
|
18
|
+
config.write(cf_stack_outputs)
|
16
19
|
self
|
17
20
|
end
|
18
21
|
|
19
|
-
def
|
22
|
+
def delete
|
23
|
+
delete_vpc_peering
|
24
|
+
delete_services
|
25
|
+
delete_nodegroups
|
26
|
+
delete_cf_stack
|
27
|
+
end
|
28
|
+
|
29
|
+
def config; Config[@cluster_name]; end
|
20
30
|
|
21
31
|
def update_kubeconfig
|
22
32
|
Log.info "updating kubeconfig for cluster #{@cluster_name}"
|
23
|
-
Log.info `aws eks update-kubeconfig --name=#{@cluster_name} --region=#{
|
33
|
+
Log.info `aws eks update-kubeconfig --name=#{@cluster_name} --region=#{config["region"]}`
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def delete_cf_stack
|
39
|
+
CloudFormation::EKS.new(@cluster_name).delete
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete_vpc_peering
|
43
|
+
VPC::Client.new(@cluster_name).delete_vpc_peering_connection
|
44
|
+
end
|
45
|
+
|
46
|
+
def k8s_client
|
47
|
+
@k8s_client ||= EksCli::K8s::Client.new(@cluster_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def services
|
51
|
+
k8s_client.get_services(namespace: "default").select {|s| s[:spec][:type] == "LoadBalancer"}
|
52
|
+
end
|
53
|
+
|
54
|
+
def delete_services
|
55
|
+
services.map {|s| s[:metadata][:name]}.each do |s|
|
56
|
+
Log.info "deleting service #{s}"
|
57
|
+
k8s_client.delete_service(s, "default")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def nodegroups
|
62
|
+
config["groups"] || {}
|
63
|
+
end
|
64
|
+
|
65
|
+
def delete_nodegroups
|
66
|
+
nodegroups.keys.each {|n| NodeGroup.new(@cluster_name, n).delete}
|
24
67
|
end
|
25
68
|
|
26
69
|
end
|
data/lib/eks_cli/nodegroup.rb
CHANGED
@@ -25,15 +25,21 @@ module EksCli
|
|
25
25
|
iam_policies: "NodeGroupIAMPolicies",
|
26
26
|
bootstrap_args: "BootstrapArguments"}
|
27
27
|
|
28
|
-
AMIS = {"us-west-2" => "ami-0923e4b35a30a5f53",
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
AMIS = {"1.12" => {"us-west-2" => "ami-0923e4b35a30a5f53",
|
29
|
+
"us-east-1" => "ami-0abcb9f9190e867ab",
|
30
|
+
"us-east-2" => "ami-04ea7cb66af82ae4a",
|
31
|
+
"us-west-1" => "ami-03612357ac9da2c7d"},
|
32
|
+
"1.13" => {"us-west-2" => "ami-089d3b6350c1769a6",
|
33
|
+
"us-east-1" => "ami-08c4955bcc43b124e",
|
34
|
+
"us-east-2" => "ami-07ebcae043cf995aa"}}
|
35
|
+
|
36
|
+
GPU_AMIS = {"1.12" => {"us-west-2" => "ami-0bebf2322fd52a42e",
|
37
|
+
"us-east-1" => "ami-0cb7959f92429410a",
|
38
|
+
"us-east-2" => "ami-0118b61dc2312dee2",
|
39
|
+
"us-west-1" => "ami-047637529a86c7237"},
|
40
|
+
"1.13" => {"us-west-2" => "ami-08e5329e1dbf22c6a",
|
41
|
+
"us-east-1" => "ami-02af865c0f3b337f2",
|
42
|
+
"us-east-2" => "ami-01f82bb66c17faf20"}}
|
37
43
|
|
38
44
|
EKS_IAM_POLICIES = %w{AmazonEKSWorkerNodePolicy
|
39
45
|
AmazonEKS_CNI_Policy
|
@@ -65,6 +71,7 @@ module EksCli
|
|
65
71
|
end
|
66
72
|
|
67
73
|
def delete
|
74
|
+
Log.info "deleting nodegroup #{@name}"
|
68
75
|
cf_stack.delete
|
69
76
|
if @group["spotinst"]
|
70
77
|
spotinst.delete_elastigroup(@group["spotinst"]["id"])
|
@@ -193,9 +200,9 @@ module EksCli
|
|
193
200
|
|
194
201
|
def default_ami
|
195
202
|
if gpu?
|
196
|
-
GPU_AMIS[config["region"]]
|
203
|
+
GPU_AMIS[config["kubernetes_version"]][config["region"]]
|
197
204
|
else
|
198
|
-
AMIS[config["region"]]
|
205
|
+
AMIS[config["kubernetes_version"]][config["region"]]
|
199
206
|
end
|
200
207
|
end
|
201
208
|
|
data/lib/eks_cli/version.rb
CHANGED
data/lib/eks_cli/vpc/client.rb
CHANGED
@@ -13,6 +13,7 @@ module EksCli
|
|
13
13
|
@old_vpc = vpc_by_id(old_vpc_id)
|
14
14
|
Log.info "setting vpc networking between #{new_vpc.id} and #{old_vpc.id}"
|
15
15
|
peering_connection_id = create_vpc_peering_connection
|
16
|
+
config.write(vpc_peering_connection_id: peering_connection_id)
|
16
17
|
update_route_tables(peering_connection_id)
|
17
18
|
allow_networking(old_vpc_sg_id, peering_connection_id)
|
18
19
|
end
|
@@ -35,6 +36,15 @@ module EksCli
|
|
35
36
|
return peering_connection_id
|
36
37
|
end
|
37
38
|
|
39
|
+
def delete_vpc_peering_connection
|
40
|
+
if id = config["vpc_peering_connection_id"]
|
41
|
+
Log.info "deleting vpc peering connection #{id}"
|
42
|
+
Log.info client.delete_vpc_peering_connection(vpc_peering_connection_id: id)
|
43
|
+
else
|
44
|
+
Log.info "no vpc peering connection found"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
38
48
|
def update_route_tables(peering_connection_id)
|
39
49
|
Log.info "updating route tables"
|
40
50
|
point_from(old_vpc, new_vpc, peering_connection_id)
|