Commit Graph

1056 Commits

Author SHA1 Message Date
k8s-merge-robot
62a8394eb4 Merge pull request #25263 from jsafrane/devel/adopt-recycle-pod
Automatic merge from submit-queue

volume recycler: Don't start a new recycler pod if one already exists.

Recycling is a long duration process and when the recycler controller is restarted in the meantime, it should not start a new recycler pod if there is one already running.

This means that the recycler pod must have deterministic name based on name of the recycled PV, we then get name conflicts when creating the pod.

Two things need to be changed:

- recycler controller and recycler plugins must pass the PV.Name to place, where the pod is created. This is most of the patch and it should be pretty straightforward.

- create recycler pod with deterministic name and check "already exists" error.

When at it, remove useless 'resourceVersion' argument and make log messages starting with lowercase.

There is an unit test to check the behavior + there is an e2e test that checks that regular recycling is not broken (it does not try to run two recycler pods in parallel as the recycler is single-threaded now).
2016-05-21 02:28:26 -07:00
mqliang
17d5a302bb make podcidr mask size configurable 2016-05-20 20:44:40 +08:00
mqliang
cf7a3475f3 Don't allow node controller to allocate into service CIDR range 2016-05-20 20:44:40 +08:00
mqliang
69b8453fa0 cidr allocator 2016-05-20 20:44:40 +08:00
k8s-merge-robot
3b0a6dac1f Merge pull request #25571 from gmarek/nodecontroller
Automatic merge from submit-queue

NodeController doesn't evict Pods if no Nodes are Ready

Fix #13412 #24597

When NodeControllers don't see any Ready Node it goes into "network segmentation mode". In this mode it cancels all evictions and don't evict any Pods.

It leaves network segmentation mode when it sees at least one Ready Node. When leaving it resets all timers, so each Node has full grace period to reconnect to the cluster.

cc @lavalamp @davidopp @mml @wojtek-t @fgrzadkowski
2016-05-20 05:31:34 -07:00
k8s-merge-robot
bd8033e2b0 Merge pull request #25864 from jsafrane/devel/pv-fix-log
Automatic merge from submit-queue

volume controller: Fix method name in a log message

It's deleteVolume, not deleteClaim.

@kubernetes/sig-storage
2016-05-20 03:53:22 -07:00
Daniel Smith
5448400b1c Merge pull request #25243 from smarterclayton/explore_quantity
Provide an int64 version of Quantity that is much faster
2016-05-19 16:56:48 -07:00
Clayton Coleman
5e4308f91d
Update use of Quantity in other classes 2016-05-19 08:41:43 -04:00
Robert Rati
e388c137bb Separate sync and list functionality in the reflector. #23394 2016-05-19 07:41:24 -04:00
Jan Safranek
0ee9160f88 volume recycler: Don't start a new recycler pod if one already exists.
Recycling is a long duration process and when the recycler controller is
restarted in the meantime, it should not start a new recycler pod if there is
one already running.

This means that the recycler pod must have deterministic name based on name
of the recycled PV, we then get name conflicts when creating the pod.

Two things need to be changed:
- recycler controller and recycler plugins must pass the PV.Name to place,
  where the pod is created.

- create recycler pod with deterministic name and check "already exists" error.

When at it, remove useless 'resourceVersion' argument and make log messages
starting with lowercase.
2016-05-19 12:58:25 +02:00
Jan Safranek
61d630ddf7 volume controller: Fix method name in a log message
It's deleteVolume, not deleteClaim.
2016-05-19 12:54:17 +02:00
k8s-merge-robot
c63ac4e664 Merge pull request #24331 from jsafrane/devel/refactor-binder
Automatic merge from submit-queue

Refactor persistent volume controller

Here is complete persistent controller as designed in https://github.com/pmorie/pv-haxxz/blob/master/controller.go

It's feature complete and compatible with current binder/recycler/provisioner. No new features, it *should* be much more stable and predictable.

Testing
--
The unit test framework is quite complicated, still it was necessary to reach reasonable coverage (78% in `persistentvolume_controller.go`). The untested part are error cases, which are quite hard to test in reasonable way - sure, I can inject a VersionConflictError on any object update and check the error bubbles up to appropriate places, but the real test would be to run `syncClaim`/`syncVolume` again and check it recovers appropriately from the error in the next periodic sync. That's the hard part.

Organization
---
The PR starts with `rm -rf kubernetes/pkg/controller/persistentvolume`. I find it easier to read when I see only the new controller without old pieces scattered around.
[`types.go` from the old controller is reused to speed up matching a bit, the code looks solid and has 95% unit test coverage].

I tried to split the PR into smaller patches, let me know what you think.

~~TODO~~
--

* ~~Missing: provisioning, recycling~~.
* ~~Fix integration tests~~
* ~~Fix e2e tests~~

@kubernetes/sig-storage

<!-- Reviewable:start -->
---
This change is [<img src="http://reviewable.k8s.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](http://reviewable.k8s.io/reviews/kubernetes/kubernetes/24331)
<!-- Reviewable:end -->

Fixes #15632
2016-05-19 03:06:46 -07:00
k8s-merge-robot
4f09f51486 Merge pull request #24800 from thockin/validation_pt8-3
Automatic merge from submit-queue

Make name validators return string slices

Part of the larger validation PR, broken out for easier review and merge.  Builds on previous PRs in the series.
2016-05-19 02:15:27 -07:00
Daniel Smith
6dc1437015 Merge pull request #25671 from deads2k/fix-add-indexer
make addIndexers safe for sharedInformer
2016-05-18 14:48:43 -07:00
k8s-merge-robot
48c90f15c5 Merge pull request #24509 from caesarxuchao/primitive-gc
Automatic merge from submit-queue

Adding garbage collector controller

Adding the propagator and garbage processor of the gc.

Design doc is at https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/garbage-collection.md

<!-- Reviewable:start -->
---
This change is [<img src="http://reviewable.k8s.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](http://reviewable.k8s.io/reviews/kubernetes/kubernetes/24509)
<!-- Reviewable:end -->
2016-05-18 03:14:25 -07:00
Jan Safranek
01b20d8e77 Generate shorter provisioned PV names.
GCE PD names are generated out of provisioned PV.Name, therefore it should be
as short as possible and still unique.
2016-05-18 10:06:51 +02:00
Jan Safranek
79b91b9ee0 Refactor persistent volume initialization
There should be only one initialization function, shared by the real
controller and unit tests.
2016-05-18 10:06:51 +02:00
Jan Safranek
7f549511e2 Big move and rename
- remove persistentvolume_ prefix from all files
- split controller.go into controller.go and controller_base.go (to have them
  under 1500 lines for github)
2016-05-18 10:06:51 +02:00
Jan Safranek
c5fe1f943c Fixed binder logging
- we need the original volume/claim in error paths
- don't report version conflicts as errors (they happen pretty often and we
  recover from them)
2016-05-18 10:06:51 +02:00
Jan Safranek
41adcc5496 Speed up binding of provisioned volumes
This fixes e2e test for provisioning - it expects that provisioned volumes
are bound quickly.

Majority of this patch is update of test framework needs to initialize the
controller appropriately.
2016-05-18 10:06:51 +02:00
Jan Safranek
c6f05c8056 provisioning: Add unit testso for provisioning errors. 2016-05-18 10:06:51 +02:00
Jan Safranek
c24b33793c unit test: Add possibility to inject kubeclient errors. 2016-05-18 10:06:51 +02:00
Jan Safranek
92dc159ab6 Delete provisioned volumes that are not needed.
We should delete volumes that are provisioned for a claim and the claim
gets bound to different volume during the provisioning.
2016-05-18 10:06:51 +02:00
Jan Safranek
9fb0f7a3fd provisioning: Unit tests 2016-05-18 10:06:51 +02:00
Jan Safranek
514d595881 provisioning: Implement provisioner 2016-05-18 10:06:51 +02:00
Jan Safranek
75b0e2ad63 provisioning: Refactor volume plugins.
NewPersistentVolumeTemplate() and Provision() are merged into one call.
2016-05-18 10:06:51 +02:00
Jan Safranek
dd7890c362 delete: Implement Deleter 2016-05-18 10:06:51 +02:00
Jan Safranek
22e68d4622 recycler: unit tests
- Add reclaim policy to newVolume() call.
- Implement reactor Volumes().Get().
- Implement mock volume plugin.
- Add recycler tests.
- Add a synchronization condition to controller.scheduleOperation
  - we need to pause the controller here, let the test to do some bad things
    to the controller and test error cases in recycleVolumeOperation.

Test framework gets more and more complicated... But this is the last piece,
I promise.
2016-05-18 10:06:24 +02:00
Jan Safranek
a08d826ca5 Make a separate functions to emit events and change status.
These two seem to be always used together.
2016-05-18 10:06:24 +02:00
Jan Safranek
1feb346830 recycler: implement recycler
Also update the old unit test to pass. New unit tests will be added in
subsequent commit.
2016-05-18 10:06:24 +02:00
Jan Safranek
56cae2dc20 unit test framework: Wait for all running operations to finish during all tests. 2016-05-18 10:06:24 +02:00
Jan Safranek
cf68370371 recycler: Maintain a list of long-running operations.
We need to keep list of running recyclers, deleters and provisioners in
memory in order not to start a new recycling/deleting/provisioning twice
for the same volume/claim.

This will be eventually replaced by GoRoutineMap from PR #24838.
2016-05-18 10:06:24 +02:00
Jan Safranek
4e47f69cba recycler: Implement volume host interfaces.
We need the controller to implement volume.VolumeHost interface to be able
to call recycle plugins.
2016-05-18 10:06:24 +02:00
Jan Safranek
a17f0d5949 Move release logic to standalone function. 2016-05-18 10:06:23 +02:00
Jan Safranek
7b73384fda Add controller method tests. 2016-05-18 10:05:14 +02:00
Tim Hockin
152c86ab06 Make name validators return string slices 2016-05-18 00:48:01 -07:00
gmarek
6d27009db1 NodeController doesn't evict Pods if no Nodes are Ready 2016-05-17 23:03:21 +02:00
k8s-merge-robot
a24f03c3c9 Merge pull request #25669 from deads2k/fix-npe
Automatic merge from submit-queue

prevent nil pointer when starting controllers before running the shar…

Fixes https://github.com/kubernetes/kubernetes/issues/25643.

https://github.com/kubernetes/kubernetes/pull/23795 changed initialization order, so the controller isn't guaranteed to be present at startup.

@mqliang @wojtek-t I'm pretty sure that we're not guaranteed to get back the correct `cache.Indexer` or `cache.Store` either.  I'll look at re-plumbing the `AddIndexer` path to use the same instance so that its safe to use again.
2016-05-17 07:54:12 -07:00
Jan Safranek
af295719f6 Add events. 2016-05-17 15:14:11 +02:00
Jan Safranek
61019b2401 Process deleted PVs
To speed up marking claims as "lost".
2016-05-17 15:14:10 +02:00
Jan Safranek
50b61ae168 Add "multi-sync" tests.
These test will call syncVolume/syncClaim until they reach consistent state.
2016-05-17 15:14:09 +02:00
Jan Safranek
f4f252e81c Implement syncVolume. 2016-05-17 15:14:08 +02:00
Jan Safranek
5949b956f5 Implement syncClaim with bound claims. 2016-05-17 15:14:06 +02:00
Jan Safranek
eff6b50b93 Bind unbound claims in syncClaim. 2016-05-17 15:14:06 +02:00
Jan Safranek
e620bfc9cc Add unit test framework.
It's quite complicated one, see subsequent commits for usage.
2016-05-17 15:14:05 +02:00
Jan Safranek
a195802d3e Make standalone function to check for (pre-)bound volumes.
Note the semantic change, we now check for UID=""
2016-05-17 15:14:04 +02:00
Jan Safranek
20305f9235 Don't process events until fully initialized.
We do not want to process any volume / claim events until both PV and claim
caches are fully loaded.
2016-05-17 15:14:03 +02:00
Jan Safranek
71aa892a86 Implement volume controller skeleton.
This is a simple controller that watches changes of PersistentVolumes and
PersistentVolumeClaims.
2016-05-17 15:14:02 +02:00
Jan Safranek
b86e5923b2 Rename types.go to persistentvolume_index.go
With some changes:
- make some method private, nobody seems to use them.
- adapt to framework.NewIndexerInformer instead of using custom cache.
2016-05-17 15:14:01 +02:00
k8s-merge-robot
a57fd9adfb Merge pull request #25651 from 249043822/249043822-patch-1
Automatic merge from submit-queue

MatchingCache lock optimize
2016-05-17 01:56:03 -07:00