Commit Graph

1002 Commits

Author SHA1 Message Date
carlory
ea69a5ea98 in the new output API output.kubeadm.k8s.io/v1alpha3 modify the UpgradePlan structure to include a list of multiple available upgrades. 2024-02-27 15:05:29 +08:00
Kubernetes Prow Robot
821c0ef61e Merge pull request #123489 from yxxhero/print_etcd_ready_status
feat: print etcd ready status
2024-02-25 07:42:03 -08:00
yxxhero
e6d6d8e14c feat: print etcd ready status
Signed-off-by: yxxhero <aiopsclub@163.com>
2024-02-25 20:56:47 +08:00
Kubernetes Prow Robot
786510947b Merge pull request #123406 from SataQiu/fix-20240221
kubeadm: fix the invalid cross-device link bug during upgrade
2024-02-22 06:12:58 -08:00
Kubernetes Prow Robot
ec58e1f2fc Merge pull request #123372 from carlory/fix-kubeadm-494
kubeadm certs check-expiration support json/yaml output
2024-02-22 01:07:52 -08:00
SataQiu
f3cb5059a7 kubeadm: fix a bug during kubeadm upgrade, where it is not possible to mount a new device and create a symbolic link for /etc/kubernetes (or a sub-directory) so that kubeadm stores its information on the mounted device 2024-02-22 09:42:57 +08:00
carlory
98437cb4be fix json output when fetch kubeadm config from server 2024-02-21 18:21:33 +08:00
Lubomir I. Ivanov
c29450eb00 kubeadm: apply retries to all API calls in idempotency.go
The idempotency.go (perhaps not so accurately named) contains
API calls that kubeadm does against an API server using client-go.

Some users seem to have unstable setups where for unknown reasons
the API server can be unavailable or refuse to respond as expected.

Use PollUntilContextTimeout in all exported functions to ensure
such API calls are all retry-able.

NOTE: The context passed to PollUntilContextTimeout is not propagated
in the polled function. Instead the poll function creates it's own
context 'ctx := context.Background()', this is to avoid
breaking expectations on the side of the callers, that expect
a certain type of error and not "context timeout" errors.

Additional changes:
- Make all context.TODO() -> context.Background()
- Update all unit tests and make sure during testing the retry
interval and timeout are short. Test coverage of idempotency.go
is at ~97%.
- Remove the TestMutateConfigMapWithConflict test. It does not
contribute much, because conflict handling is done at the API,
server side, not on the side of kubeadm. This simulating this is not
needed.
2024-02-18 13:14:32 +02:00
Jordan Liggitt
4ae2b3f75f Revert "kubeadm: increase ut coverage for app/util"
This reverts commit 36904475db.
2024-02-12 20:13:30 -05:00
xin.li
36904475db kubeadm: increase ut coverage for app/util
Signed-off-by: xin.li <xin.li@daocloud.io>
2024-02-09 16:24:54 +08:00
xin.li
deec79ad8d kubeadm: increase ut coverage for apiclient/idempotency
Signed-off-by: xin.li <xin.li@daocloud.io>
2024-02-05 23:02:48 +08:00
Lubomir I. Ivanov
2cab79710d kubeadm: enhance encryption algorithm support in v1beta4
Previous v1beta4 work added support for
ClusterConfiguration.EncryptionAlgorithm, however the possible
values were limited to just "RSA" (2048 key size) and "ECDSA" (P256).

Allow more arbitrary algorithm types, that can also include key size
or curve type encoded in the name:
"RSA-2048" (default), "RSA-3072", "RSA-4096" or "ECDSA-P256".

Update the deprecation notice of the PublicKeysECDSA FeatureGate
as ideally it should be removed only after v1beta3 is removed.
2024-01-31 23:49:21 +02:00
Lubomir I. Ivanov
0ba903fd57 kubeadm: enable parallel pulls of images
- Update the logic in checks.go to separate serial and parallel image
pulls.
- Add a new CRI function PullImagesInParallel() with a private
implementation.
- Unit test the private implementation.
- Update other unit tests in checks_test.go.
2024-01-19 14:26:21 +02:00
Lubomir I. Ivanov
2cdd9a7130 kubeadm: use separate context in GetConfigMapWithShortRetry
Intentionally pass a new context to this API call.
This will let the API call run independently of the parent
context timeout, which is quite short and can cause the API
call to return abruptly.
2024-01-19 00:19:07 +02:00
Lubomir I. Ivanov
26a79e4c0b kubeadm: special case context errors in GetConfigMapWithShortRetry
If some code is about to go over the context deadline,
"x/time/rate/rate.go" would return and untyped error with the string
"would exceed context deadline". If some code already exceeded
the deadline the error would be of type DeadlineExceeded.
Ignore such context errors and only store API and connectivity errors.
2024-01-18 15:35:25 +02:00
Lubomir I. Ivanov
54a6e6a772 kubeadm: keep a function with short timeout in idempotency.go
- Name the function GetConfigMapWithShortRetry to be
easier to understand that the function is with a very short timeout.
Add note that this function should be used in cases there is a
fallback to local config.
- Apply custom hardcoded interval of 50ms and timeout of 350ms to it.
Previously the fucntion used exp backoff with 5 steps up to ~340ms.
2024-01-16 17:53:21 +02:00
Lubomir I. Ivanov
5f876b9d0a kubeadm: switch from ExponentialBackoff() to PollUntilContextTimeout()
Switch to PollUntilContextTimeout() everywhere to allow
usage of the exposed timeouts in the kubeadm API. Exponential backoff
options are more difficult to expose in this regard and a bit too
detailed for the common user - i.e. have "steps", "factor" and so on.
2024-01-14 15:07:56 +02:00
Lubomir I. Ivanov
caf5311413 kubeadm: start using the Timeouts struct values
Propagate usage of the Timeout struct values.
Apply sanitazation to timeout constants in contants.go.
2024-01-14 15:07:56 +02:00
Lubomir I. Ivanov
374e41cf66 kubeadm: replace deprecated wait.Poll() and wait.PollImmediate()
Replace the usage of the deprecated wait.Poll() and
wait.PollImmediate() functions with wait.PollUntilContextTimeout().
Since we don't have piping of context around kubeadm,
use context.Background() everywhere.

Some wait.Poll() functions were converted to "immediate" as there
is no point for them to not be. This is done for consistency.

Replace the only instance of wait.JitterUntil with
wait.PollUntilContextTimeout. JitterUntil is not deprecated
but this is also done for consistency.
2024-01-14 15:07:55 +02:00
Lubomir I. Ivanov
d9e48705ff kubeadm: make the active timeouts structure accessible from anywhere
Currently, timeouts are only accessible if a kubeadm runtime.Object{}
like InitConfiguration is passed around.

Any time a config is loaded or defaulted, store the Timeouts
structure in a thread-safe way in the main kubeadm API package
with SetActiveTimeouts(). Optionally, a deep-copy can be
performed before calling SetActiveTimeouts(). Make this struct
accessible with GetActiveTimeouts(). Ensure these functions
are thread safe.

On init() make sure the struct is defaulted, so that unit
tests can work with these values.
2024-01-05 14:41:16 +02:00
Lubomir I. Ivanov
ea0fa41445 kubeadm: implement mutators for "config migrate"
When upconverting from v1beta3 to v1beta4, it appears there is no
easy way to migrate some of the timeout values such as:
  ClusterConfiguration.APIServer.TimeoutForControlPlane
to a new location:
  InitConfiguration.Timeouts.<some-timeout-field>

Yes, the internal InitConfiguratio does embed a ClusterConfiguration,
but during conversion the ClusterConfiguration is converted from an
empty source.

K8s' API machinery has ways to register custom conversion functions,
such as v1beta3.ClusterConfiguration -> internal.InitConfiguration,
but these must be triggered explicitly with a decoder.
The overall migration of fields seems very awkward.

There might be hacks around that, such as storing intermediate state,
while trying to make the fuzzer rountrip happy, but instead
mutation functions can be implemented for the internal types when
calling kubeadm's migrate code. This seems much cleaner.
2024-01-05 14:41:16 +02:00
Kubernetes Prow Robot
a56093db9f Merge pull request #121958 from neolit123/1.30-remove-kubelet-and-func
kubeadm: drop concurrency when waiting for kubelet /healthz
2023-12-25 15:52:25 +01:00
xin.li
430fd83454 kubeadm: increase ut coverage for util/etcd
Signed-off-by: xin.li <xin.li@daocloud.io>
2023-12-25 11:14:05 +08:00
Lubomir I. Ivanov
32fbb23f3b kubeadm: remove usage of the TryRunCommand() function
The function TryRunCommand() uses an exponential backoff,
which is good, but it's inconsistent and only used in a couple
of places.

Remove its usage in the token.go#UpdateOrCreateTokens()
and switch to using the standard function used in other places -
PollUntilContextTimeout().

Remove wait.go#TryRunCommand(), as there are no other usages.
2023-12-20 08:51:00 +02:00
Lubomir I. Ivanov
557118897d kubeadm: drop concurrency when waiting for kubelet /healthz
The function wait.go#WaitForKubeletAndFunc() has been used in
a number of places in kubeadm. It starts a go routine to wait for
the kubelet /healthz and in parallel starts another go routine
to wait for an custom function.

This logic is problematic. If kubeadm is waiting for the kubelet
in parallel with something that requires the kubelet, the right
solution would be to first wait for the kubelet in serial and only
then proceed with the other action. The parallelism here particularly
during "init" required a unwanted "initial timeout" of 40s, before
the kubelet waiting even starts. In most cases, this makes the kubelet
waiter to not even start, while the main point of waiting becomes
the "other action".

- Remove the function WaitForKubeletAndFunc() from the Waiter interface.
- Rename the function WaitForHealthyKubelet() to just WaitForKubelet()
to be consistent with the naming WaitForAPI().
- Update WaitForKubelet() to not use TryRunCommand() and instead
use PollUntilContextTimeout().
- Remove the "initial timeout" of 40s in WaitForKubelet().
- Make both WaitForKubelet() and WaitForAPI() use similar error
handling and output.
- Update all usage of WaitForKubelet() to be a serial call before
any other action, such as another wait* call.
- Make the default wait timeout for the kubelet
/healthz to be 1 minute (kubeadmconstants.DefaultKubeletTimeout).
- Apply updates to all implementations of the Waiter interface.
2023-12-20 08:51:00 +02:00
Kubernetes Prow Robot
36d95c33b1 Merge pull request #122181 from SataQiu/clean-certs-20231205
kubeadm: cleanup unused CreateCSR and associated functions
2023-12-14 07:26:27 +01:00
xin.li
20b67a4d1a kubeadm: increase ut coverage of util/config
Signed-off-by: xin.li <xin.li@daocloud.io>
2023-12-06 21:21:52 +08:00
SataQiu
56262ca56a kubeadm: cleanup unused CreateCSR and associated functions 2023-12-05 18:17:14 +08:00
SataQiu
bda722bb68 kubeadm: support updating certificate organization during 'kubeadm certs renew' 2023-11-11 14:57:50 +08:00
Lubomir I. Ivanov
c2a04fa1cf kubeadm: fix export comments to make golangci-lint happy 2023-10-25 19:35:10 +03:00
SataQiu
259dd93e71 kubeadm: skip CRI detection for 'kubeadm config validate' 2023-10-19 15:08:47 +08:00
SataQiu
c281c70bac kubeadm: remove reference to UnknownCRISocket from getInitConfigurationFromCluster 2023-10-17 21:50:05 +08:00
SataQiu
32d2afe42b kubeadm: fill with the DefaultCRISocket when CRI socket detection is not required 2023-10-14 16:21:38 +08:00
carlory
db8e106e3f Code Refactor: using struct option rather than a long list of parameters
Co-authored-by: Shida Qiu <shidaqiu2018@gmail.com>
2023-10-13 17:17:03 +08:00
SataQiu
c3bf541ede kubeadm: clean up unnecessary references to UnknownCRISocket 2023-10-08 16:57:45 +08:00
Kubernetes Prow Robot
10827a193a Merge pull request #121045 from my-git9/fixetcdutk
kubeadm: fix wrong ut for util/etcd
2023-10-08 07:03:01 +02:00
xin.li
20db4ef3d6 kubeadm: fix wrong ut for util/etcd
Signed-off-by: xin.li <xin.li@daocloud.io>
2023-10-07 21:57:20 +08:00
Kubernetes Prow Robot
0554675d78 Merge pull request #121020 from chendave/set_opt
kubeadm: Optimize the logic to override the arguments
2023-10-07 11:58:31 +02:00
Kubernetes Prow Robot
bb06804e52 Merge pull request #120828 from SataQiu/fix-kubeadm-cri-20230922
kubeadm: fix the bug that kubeadm always do CRI detection when --config is passed even if it is not required by the subcommand
2023-10-07 11:58:22 +02:00
Dave Chen
e8e22f645d kubeadm: Optimize the logic to override the arguments
Signed-off-by: Dave Chen <dave.chen@arm.com>
2023-10-06 19:01:00 +08:00
SataQiu
1a68195626 kubeadm: fix the bug that kubeadm always do CRI detection when --config is passed even if it is not required by subcommand 2023-09-25 16:35:47 +08:00
Lubomir I. Ivanov
b5bffb6d97 kubeadm: add v1beta4.ClusterConfiguration.EncryptionAlgorithm
Add v1beta4.ClusterConfiguration.EncryptionAlgorithm field (string)
and allow the user to configure the cluster asymetric encryption
algorithm to be either "RSA" (default, 2048 pkey size) or "ECDSA" (P-256).
Add validation and fuzzing. Conversion from v1beta3 is not required
because an empty field value is accepted and defaulted to RSA if needed.

Leverage the existing configuration option (feature gate) PublicKeysECDSA
but rename the backend fields, arguments, function names to be more
generic - EncryptionAlgorithm instead of PublicKeyAlgorithm.
That is because once the feature gate is enabled the algorithm
configuration also applies to private keys. It also uses the kubeadm API
type (string) instead of the x509.PublicKeyAlgorithm enum (int).

Deprecate the PublicKeysECDSA feature gate with a message.
It should be removed with the release of v1beta4 or maximum one release
later (it is an alpha FG).
2023-09-21 11:48:48 +03:00
Kubernetes Prow Robot
0241da314e Merge pull request #120514 from fengxsong/patch-1
fix: check if initsystem service exists
2023-09-15 14:08:23 -07:00
SataQiu
15ce5dd990 kubeadm: fix flaky-test TestManifestFilesAreEqual 2023-09-12 23:44:44 +08:00
Kubernetes Prow Robot
e2b03d41c5 Merge pull request #120561 from chendave/dependency
kubeadm: remove reference of k8s.io/kubernetes/pkg/apis/core/v1
2023-09-12 03:44:12 -07:00
SataQiu
4e0c8a9752 kubeadm: remove reference of k8s.io/kubernetes/pkg/apis/core/v1
Co-authored-by: Dave Chen <dave.chen@arm.com>
2023-09-12 17:09:19 +08:00
Kubernetes Prow Robot
35199e42a4 Merge pull request #120549 from pacoxu/kubeadm-etcd-manifests
kubeadm: fix diff order and add tests for new default value manifest
2023-09-12 00:44:13 -07:00
Paco Xu
4d105eb1ce add TestUnmarshalJson for UniversalUnmarshal 2023-09-12 14:41:07 +08:00
Stephen Kitt
e2c1c0d34a kubeadm: drop deprecated pointer package
This replaces deprecated k8s.io/utils/pointer functions with their ptr
equivalent.

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2023-09-11 16:41:12 +02:00
Paco Xu
678b958567 use universal decoder and add a check on default dns Policy of static pod for test 2023-09-11 22:31:35 +08:00