krane 2.4.2 → 2.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 422192af588ad4f4eb53c73fbf56ee6b8fc7dad69c5cec7dfe5a4f7b7f702b98
4
- data.tar.gz: 413719980210e537b8c4d1958d7867224cb5743905f489680caac3261a4b60c7
3
+ metadata.gz: 0231d6f4ef50874282ebc4456e5a13ba48408ec22a2b9caef05229323561c2f3
4
+ data.tar.gz: b3007f0d090526b1552638e63aa3a350e6cc8182aab6abc536f1eafe0acb02fb
5
5
  SHA512:
6
- metadata.gz: a2ade15d59fe5fae20839c5aaa7002b3fbfc0e39373afbc7f66ddcde77f51f98451b2e5ac250147dd6cb4e0cc0cf23b234e764415a75764f53422f14f579ee74
7
- data.tar.gz: addcd5f11bdb4a6fe4b0eaf82056fbd7aff79831a6813888e01192fe7edd094b05f83399af4c0b34370076153f7bb469bee8ca4f2c4761fd3e8ae4f022dff56f
6
+ metadata.gz: 21b40ac3a9ad836e29f293a1ddd293991ab8c784c54869d705496a101500d22893f3033d28632f8175f49b23397fa74f8cd3b98f18bf614447c30568f13f7bfa
7
+ data.tar.gz: 89d62f90ddccbfcea97abd44dc304f846f639d6a94781efef2f99b361bdd2e604233e6a968a1f8b583ea213b9d6052f6c52ca9fa6526312bb52cc14ba2172e70
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  ## next
2
2
 
3
+ ## 2.4.5
4
+
5
+ *Bug fixes*
6
+
7
+ - Revert PR that tried to fail fast when there are container initialization issues to give pods time to be recreated and possible succeed [#885](https://github.com/Shopify/krane/pull/885)
8
+
9
+ ## 2.4.4
10
+
11
+ *Enhancements*
12
+
13
+ - Improve DaemonSet rollout by ignoring `Evicted` Pods [#883](https://github.com/Shopify/krane/pull/883)
14
+
15
+ ## 2.4.3
16
+
17
+ *Enhancements*
18
+
19
+ - Improve DaemonSet rollout [#881](https://github.com/Shopify/krane/pull/881)
20
+
3
21
  ## 2.4.2
4
22
 
5
23
  *Bug fixes*
@@ -9,7 +9,8 @@ module Krane
9
9
  def sync(cache)
10
10
  super
11
11
  @pods = exists? ? find_pods(cache) : []
12
- @nodes = find_nodes(cache) if @nodes.blank?
12
+
13
+ @nodes = refresh_nodes(cache)
13
14
  end
14
15
 
15
16
  def status
@@ -58,7 +59,7 @@ module Krane
58
59
  def relevant_pods_ready?
59
60
  return true if rollout_data["desiredNumberScheduled"].to_i == rollout_data["numberReady"].to_i # all pods ready
60
61
  relevant_node_names = @nodes.map(&:name)
61
- considered_pods = @pods.select { |p| relevant_node_names.include?(p.node_name) }
62
+ considered_pods = @pods.select { |p| relevant_node_names.include?(p.node_name) && !p.evicted? }
62
63
  @logger.debug("DaemonSet is reporting #{rollout_data['numberReady']} pods ready." \
63
64
  " Considered #{considered_pods.size} pods out of #{@pods.size} for #{@nodes.size} nodes.")
64
65
  considered_pods.present? &&
@@ -66,9 +67,24 @@ module Krane
66
67
  rollout_data["numberReady"].to_i >= considered_pods.length
67
68
  end
68
69
 
70
+ def refresh_nodes(cache)
71
+ new_nodes = find_nodes(cache)
72
+ return new_nodes if @nodes.blank?
73
+
74
+ # Remove non-existent nodes
75
+ @nodes.select do |node|
76
+ new_nodes.find { |n| n.name == node.name } != nil
77
+ end
78
+ end
79
+
69
80
  def find_nodes(cache)
70
81
  all_nodes = cache.get_all(Node.kind)
71
- all_nodes.map { |node_data| Node.new(definition: node_data) }
82
+ all_nodes.each_with_object([]) do |node_data, relevant_nodes|
83
+ next if node_data.dig('spec', 'unschedulable').to_s.downcase == 'true'
84
+ cond = node_data.dig('status', 'conditions').find { |c| c['type'].downcase == 'ready' }
85
+ next if (!cond.nil? && cond['status'].downcase != 'true')
86
+ relevant_nodes << Node.new(definition: node_data)
87
+ end
72
88
  end
73
89
 
74
90
  def rollout_data
@@ -105,6 +105,10 @@ module Krane
105
105
  @instance_data.dig('spec', 'nodeName')
106
106
  end
107
107
 
108
+ def evicted?
109
+ phase == "Failed" && reason == "Evicted"
110
+ end
111
+
108
112
  private
109
113
 
110
114
  def failed_schedule_reason
@@ -225,7 +229,9 @@ module Krane
225
229
  elsif limbo_reason == "ErrImagePull" && limbo_message.match(/not found/i)
226
230
  "Failed to pull image #{@image}. "\
227
231
  "Did you wait for it to be built and pushed to the registry before deploying?"
228
- elsif limbo_reason == "CreateContainerConfigError"
232
+ # Only fail fast when message doesn't include `failed to sync secret cache`.
233
+ # It's possible that a secret is being created and the pod could get recreated and succeed
234
+ elsif limbo_reason == "CreateContainerConfigError" && !limbo_message.include?("failed to sync secret cache")
229
235
  "Failed to generate container configuration: #{limbo_message}"
230
236
  elsif @status.dig("lastState", "terminated", "reason") == "ContainerCannotRun"
231
237
  # ref: https://github.com/kubernetes/kubernetes/blob/562e721ece8a16e05c7e7d6bdd6334c910733ab2/pkg/kubelet/dockershim/docker_container.go#L353
data/lib/krane/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Krane
3
- VERSION = "2.4.2"
3
+ VERSION = "2.4.5"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: krane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.2
4
+ version: 2.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Verey
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2022-03-08 00:00:00.000000000 Z
13
+ date: 2022-04-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport