Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Kube OVN
Commits
9524c93f
Commit
9524c93f
authored
3 years ago
by
hzma
Browse files
Options
Download
Email Patches
Plain Diff
delete attachment ips
parent
ae41d47a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
pkg/controller/pod.go
+58
-30
pkg/controller/pod.go
pkg/controller/subnet.go
+1
-1
pkg/controller/subnet.go
with
59 additions
and
31 deletions
+59
-31
pkg/controller/pod.go
+
58
-
30
View file @
9524c93f
...
...
@@ -79,11 +79,11 @@ func (c *Controller) enqueueAddPod(obj interface{}) {
if
isStateful
{
if
isStatefulSetPodToDel
(
c
.
config
.
KubeClient
,
p
,
statefulSetName
)
{
klog
.
V
(
3
)
.
Infof
(
"enqueue delete pod %s"
,
key
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
obj
)
}
}
else
{
klog
.
V
(
3
)
.
Infof
(
"enqueue delete pod %s"
,
key
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
obj
)
}
return
}
...
...
@@ -131,11 +131,11 @@ func (c *Controller) enqueueDeletePod(obj interface{}) {
if
isStateful
{
if
isStatefulSetPodToDel
(
c
.
config
.
KubeClient
,
p
,
statefulSetName
)
{
klog
.
V
(
3
)
.
Infof
(
"enqueue delete pod %s"
,
key
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
obj
)
}
}
else
{
klog
.
V
(
3
)
.
Infof
(
"enqueue delete pod %s"
,
key
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
obj
)
}
}
...
...
@@ -179,7 +179,7 @@ func (c *Controller) enqueueUpdatePod(oldObj, newObj interface{}) {
isStateful
,
statefulSetName
:=
isStatefulSetPod
(
newPod
)
if
!
isPodAlive
(
newPod
)
&&
!
isStateful
{
klog
.
V
(
3
)
.
Infof
(
"enqueue delete pod %s"
,
key
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
newObj
)
return
}
...
...
@@ -188,7 +188,7 @@ func (c *Controller) enqueueUpdatePod(oldObj, newObj interface{}) {
// In case node get lost and pod can not be deleted,
// the ipaddress will not be recycled
time
.
Sleep
(
time
.
Duration
(
*
newPod
.
Spec
.
TerminationGracePeriodSeconds
)
*
time
.
Second
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
newObj
)
}()
return
}
...
...
@@ -197,7 +197,7 @@ func (c *Controller) enqueueUpdatePod(oldObj, newObj interface{}) {
if
isStateful
{
if
isStatefulSetPodToDel
(
c
.
config
.
KubeClient
,
newPod
,
statefulSetName
)
{
klog
.
V
(
3
)
.
Infof
(
"enqueue delete pod %s"
,
key
)
c
.
deletePodQueue
.
Add
(
key
)
c
.
deletePodQueue
.
Add
(
newObj
)
return
}
}
...
...
@@ -270,21 +270,21 @@ func (c *Controller) processNextDeletePodWorkItem() bool {
now
:=
time
.
Now
()
err
:=
func
(
obj
interface
{})
error
{
defer
c
.
deletePodQueue
.
Done
(
obj
)
var
key
string
var
pod
*
v1
.
Pod
var
ok
bool
if
key
,
ok
=
obj
.
(
string
);
!
ok
{
if
pod
,
ok
=
obj
.
(
*
v1
.
Pod
);
!
ok
{
c
.
deletePodQueue
.
Forget
(
obj
)
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"expected
string
in workqueue but got %#v"
,
obj
))
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"expected
pod
in workqueue but got %#v"
,
obj
))
return
nil
}
klog
.
Infof
(
"handle delete pod %s"
,
key
)
if
err
:=
c
.
handleDeletePod
(
key
);
err
!=
nil
{
c
.
deletePodQueue
.
AddRateLimited
(
key
)
return
fmt
.
Errorf
(
"error syncing '%s': %s, requeuing"
,
key
,
err
.
Error
())
klog
.
Infof
(
"handle delete pod %s"
,
pod
.
Name
)
if
err
:=
c
.
handleDeletePod
(
pod
);
err
!=
nil
{
c
.
deletePodQueue
.
AddRateLimited
(
obj
)
return
fmt
.
Errorf
(
"error syncing '%s': %s, requeuing"
,
pod
.
Name
,
err
.
Error
())
}
c
.
deletePodQueue
.
Forget
(
obj
)
last
:=
time
.
Since
(
now
)
klog
.
Infof
(
"take %d ms to handle delete pod %s"
,
last
.
Milliseconds
(),
key
)
klog
.
Infof
(
"take %d ms to handle delete pod %s"
,
last
.
Milliseconds
(),
pod
.
Name
)
return
nil
}(
obj
)
...
...
@@ -468,20 +468,15 @@ func (c *Controller) handleAddPod(key string) error {
return
nil
}
func
(
c
*
Controller
)
handleDeletePod
(
key
string
)
error
{
func
(
c
*
Controller
)
handleDeletePod
(
pod
*
v1
.
Pod
)
error
{
var
key
string
var
err
error
if
key
,
err
=
cache
.
MetaNamespaceKeyFunc
(
pod
);
err
!=
nil
{
return
err
}
c
.
podKeyMutex
.
Lock
(
key
)
defer
c
.
podKeyMutex
.
Unlock
(
key
)
namespace
,
name
,
err
:=
cache
.
SplitMetaNamespaceKey
(
key
)
if
err
!=
nil
{
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"invalid resource key: %s"
,
key
))
return
nil
}
pod
,
err
:=
c
.
podsLister
.
Pods
(
namespace
)
.
Get
(
name
)
if
err
!=
nil
{
if
!
k8serrors
.
IsNotFound
(
err
)
{
return
err
}
}
if
pod
!=
nil
&&
pod
.
DeletionTimestamp
==
nil
&&
isPodAlive
(
pod
)
{
// Pod with same name exists, just return here
return
nil
...
...
@@ -508,14 +503,14 @@ func (c *Controller) handleDeletePod(key string) error {
}
}
ports
,
err
:=
c
.
ovnClient
.
ListPodLogicalSwitchPorts
(
name
,
n
amespace
)
ports
,
err
:=
c
.
ovnClient
.
ListPodLogicalSwitchPorts
(
pod
.
Name
,
pod
.
N
amespace
)
if
err
!=
nil
{
klog
.
Errorf
(
"failed to list lsps of pod '%s', %v"
,
n
ame
,
err
)
klog
.
Errorf
(
"failed to list lsps of pod '%s', %v"
,
pod
.
N
ame
,
err
)
return
err
}
// Add additional default ports to compatible with previous versions
ports
=
append
(
ports
,
ovs
.
PodNameToPortName
(
name
,
n
amespace
,
util
.
OvnProvider
))
ports
=
append
(
ports
,
ovs
.
PodNameToPortName
(
pod
.
Name
,
pod
.
N
amespace
,
util
.
OvnProvider
))
for
_
,
portName
:=
range
ports
{
if
err
:=
c
.
ovnClient
.
DeleteLogicalSwitchPort
(
portName
);
err
!=
nil
{
klog
.
Errorf
(
"failed to delete lsp %s, %v"
,
portName
,
err
)
...
...
@@ -528,6 +523,9 @@ func (c *Controller) handleDeletePod(key string) error {
}
}
}
if
err
:=
c
.
deleteAttachmentNetWorkIP
(
pod
);
err
!=
nil
{
klog
.
Errorf
(
"failed to delete attach ip for pod %v, %v, please delete attach ip manually"
,
pod
.
Name
,
err
)
}
c
.
ipam
.
ReleaseAddressByPod
(
key
)
return
nil
}
...
...
@@ -957,3 +955,33 @@ func (c *Controller) acquireStaticAddress(key, ip, mac, subnet string) (string,
}
return
v4IP
,
v6IP
,
mac
,
nil
}
func
(
c
*
Controller
)
deleteAttachmentNetWorkIP
(
pod
*
v1
.
Pod
)
error
{
var
providers
[]
string
for
k
,
v
:=
range
pod
.
Annotations
{
if
!
strings
.
Contains
(
k
,
util
.
AllocatedAnnotationSuffix
)
||
v
!=
"true"
{
continue
}
providerName
:=
strings
.
ReplaceAll
(
k
,
util
.
AllocatedAnnotationSuffix
,
""
)
if
providerName
==
util
.
OvnProvider
{
continue
}
else
{
providers
=
append
(
providers
,
providerName
)
}
}
if
len
(
providers
)
==
0
{
return
nil
}
klog
.
Infof
(
"providers are %v for pod %v"
,
providers
,
pod
.
Name
)
for
_
,
providerName
:=
range
providers
{
portName
:=
ovs
.
PodNameToPortName
(
pod
.
Name
,
pod
.
Namespace
,
providerName
)
if
err
:=
c
.
config
.
KubeOvnClient
.
KubeovnV1
()
.
IPs
()
.
Delete
(
context
.
Background
(),
portName
,
metav1
.
DeleteOptions
{});
err
!=
nil
{
if
!
k8serrors
.
IsNotFound
(
err
)
{
klog
.
Errorf
(
"failed to delete ip %s, %v"
,
portName
,
err
)
return
err
}
}
}
return
nil
}
This diff is collapsed.
Click to expand it.
pkg/controller/subnet.go
+
1
-
1
View file @
9524c93f
...
...
@@ -214,7 +214,7 @@ func (c *Controller) processNextDeleteSubnetWorkItem() bool {
var
ok
bool
if
subnet
,
ok
=
obj
.
(
*
kubeovnv1
.
Subnet
);
!
ok
{
c
.
deleteSubnetQueue
.
Forget
(
obj
)
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"expected s
tring
in workqueue but got %#v"
,
obj
))
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"expected s
ubnet
in workqueue but got %#v"
,
obj
))
return
nil
}
if
err
:=
c
.
handleDeleteSubnet
(
subnet
);
err
!=
nil
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment