eks_cli 0.4.1 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|