1 - 特性门控

本页详述了管理员可以在不同的 Kubernetes 组件上指定的各种特性门控。

关于特性各个阶段的说明,请参见特性阶段

概述

特性门控是描述 Kubernetes 特性的一组键值对。你可以在 Kubernetes 的各个组件中使用 --feature-gates flag 来启用或禁用这些特性。

每个 Kubernetes 组件都支持启用或禁用与该组件相关的一组特性门控。 使用 -h 参数来查看所有组件支持的完整特性门控。 要为诸如 kubelet 之类的组件设置特性门控,请使用 --feature-gates 参数,并向其 传递一个特性设置键值对列表:

--feature-gates="...,DynamicKubeletConfig=true"

下表总结了在不同的 Kubernetes 组件上可以设置的特性门控。

  • 引入特性或更改其发布阶段后,"开始(Since)" 列将包含 Kubernetes 版本。
  • "结束(Until)" 列(如果不为空)包含最后一个 Kubernetes 版本,你仍可以在其中使用特性门控。
  • 如果某个特性处于 Alpha 或 Beta 状态,你可以在 Alpha 和 Beta 特性门控表中找到该特性。
  • 如果某个特性处于稳定状态,你可以在 已毕业和废弃特性门控表 中找到该特性的所有阶段。
  • 已毕业和废弃特性门控表 还列出了废弃的和已被移除的特性。

Alpha 和 Beta 状态的特性门控

处于 Alpha 或 Beta 状态的特性门控
特性默认值状态开始(Since)结束(Until)
APIListChunkingfalseAlpha1.81.8
APIListChunkingtrueBeta1.9
APIPriorityAndFairnessfalseAlpha1.171.19
APIPriorityAndFairnesstrueBeta1.20
APIResponseCompressionfalseAlpha1.71.15
APIResponseCompressionfalseBeta1.16
APIServerIdentityfalseAlpha1.20
AllowInsecureBackendProxytrueBeta1.17
AnyVolumeDataSourcefalseAlpha1.18
AppArmortrueBeta1.4
BalanceAttachedNodeVolumesfalseAlpha1.11
BoundServiceAccountTokenVolumefalseAlpha1.13
CPUManagerfalseAlpha1.81.9
CPUManagertrueBeta1.10
CRIContainerLogRotationfalseAlpha1.101.10
CRIContainerLogRotationtrueBeta1.11
CSIInlineVolumefalseAlpha1.151.15
CSIInlineVolumetrueBeta1.16-
CSIMigrationfalseAlpha1.141.16
CSIMigrationtrueBeta1.17
CSIMigrationAWSfalseAlpha1.14
CSIMigrationAWSfalseBeta1.17
CSIMigrationAWSCompletefalseAlpha1.17
CSIMigrationAzureDiskfalseAlpha1.151.18
CSIMigrationAzureDiskfalseBeta1.19
CSIMigrationAzureDiskCompletefalseAlpha1.17
CSIMigrationAzureFilefalseAlpha1.15
CSIMigrationAzureFileCompletefalseAlpha1.17
CSIMigrationGCEfalseAlpha1.141.16
CSIMigrationGCEfalseBeta1.17
CSIMigrationGCECompletefalseAlpha1.17
CSIMigrationOpenStackfalseAlpha1.141.17
CSIMigrationOpenStacktrueBeta1.18
CSIMigrationOpenStackCompletefalseAlpha1.17
CSIMigrationvSpherefalseBeta1.19
CSIMigrationvSphereCompletefalseBeta1.19
CSIServiceAccountTokenfalseAlpha1.20
CSIStorageCapacityfalseAlpha1.19
CSIVolumeFSGroupPolicyfalseAlpha1.191.19
CSIVolumeFSGroupPolicytrueBeta1.20
ConfigurableFSGroupPolicyfalseAlpha1.181.19
ConfigurableFSGroupPolicytrueBeta1.20
CronJobControllerV2falseAlpha1.20
CustomCPUCFSQuotaPeriodfalseAlpha1.12
DefaultPodTopologySpreadfalseAlpha1.191.19
DefaultPodTopologySpreadtrueBeta1.20
DevicePluginsfalseAlpha1.81.9
DevicePluginstrueBeta1.10
DisableAcceleratorUsageMetricsfalseAlpha1.191.19
DisableAcceleratorUsageMetricstrueBeta1.20
DownwardAPIHugePagesfalseAlpha1.20
DynamicKubeletConfigfalseAlpha1.41.10
DynamicKubeletConfigtrueBeta1.11
EfficientWatchResumptionfalseAlpha1.20
EndpointSlicefalseAlpha1.161.16
EndpointSlicefalseBeta1.17
EndpointSlicetrueBeta1.18
EndpointSliceNodeNamefalseAlpha1.20
EndpointSliceProxyingfalseAlpha1.181.18
EndpointSliceProxyingtrueBeta1.19
EndpointSliceTerminatingConditionfalseAlpha1.20
EphemeralContainersfalseAlpha1.16
ExpandCSIVolumesfalseAlpha1.141.15
ExpandCSIVolumestrueBeta1.16
ExpandInUsePersistentVolumesfalseAlpha1.111.14
ExpandInUsePersistentVolumestrueBeta1.15
ExpandPersistentVolumesfalseAlpha1.81.10
ExpandPersistentVolumestrueBeta1.11
ExperimentalHostUserNamespaceDefaultingfalseBeta1.5
GenericEphemeralVolumefalseAlpha1.19
GracefulNodeShutdownfalseAlpha1.20
HPAContainerMetricsfalseAlpha1.20
HPAScaleToZerofalseAlpha1.16
HugePageStorageMediumSizefalseAlpha1.181.18
HugePageStorageMediumSizetrueBeta1.19
IPv6DualStackfalseAlpha1.15
ImmutableEphemeralVolumesfalseAlpha1.181.18
ImmutableEphemeralVolumestrueBeta1.19
KubeletCredentialProvidersfalseAlpha1.20
KubeletPodResourcestrueAlpha1.131.14
KubeletPodResourcestrueBeta1.15
LegacyNodeRoleBehaviorfalseAlpha1.161.18
LegacyNodeRoleBehaviortrueTrue1.19
LocalStorageCapacityIsolationfalseAlpha1.71.9
LocalStorageCapacityIsolationtrueBeta1.10
LocalStorageCapacityIsolationFSQuotaMonitoringfalseAlpha1.15
MixedProtocolLBServicefalseAlpha1.20
NodeDisruptionExclusionfalseAlpha1.161.18
NodeDisruptionExclusiontrueBeta1.19
NonPreemptingPriorityfalseAlpha1.151.18
NonPreemptingPrioritytrueBeta1.19
PodDisruptionBudgetfalseAlpha1.31.4
PodDisruptionBudgettrueBeta1.5
PodOverheadfalseAlpha1.161.17
PodOverheadtrueBeta1.18
ProcMountTypefalseAlpha1.12
QOSReservedfalseAlpha1.11
RemainingItemCountfalseAlpha1.15
RemoveSelfLinkfalseAlpha1.161.19
RemoveSelfLinktrueBeta1.20
RootCAConfigMapfalseAlpha1.131.19
RootCAConfigMaptrueBeta1.20
RotateKubeletServerCertificatefalseAlpha1.71.11
RotateKubeletServerCertificatetrueBeta1.12
RunAsGrouptrueBeta1.14
SCTPSupportfalseAlpha1.121.18
SCTPSupporttrueBeta1.19
ServerSideApplyfalseAlpha1.141.15
ServerSideApplytrueBeta1.16
ServiceAccountIssuerDiscoveryfalseAlpha1.181.19
ServiceAccountIssuerDiscoverytrueBeta1.20
ServiceLBNodePortControlfalseAlpha1.20
ServiceNodeExclusionfalseAlpha1.81.18
ServiceNodeExclusiontrueBeta1.19
ServiceTopologyfalseAlpha1.17
SetHostnameAsFQDNfalseAlpha1.191.19
SetHostnameAsFQDNtrueBeta1.20
SizeMemoryBackedVolumesfalseAlpha1.20
StorageVersionAPIfalseAlpha1.20
StorageVersionHashfalseAlpha1.141.14
StorageVersionHashtrueBeta1.15
SysctlstrueBeta1.11
TTLAfterFinishedfalseAlpha1.12
TopologyManagerfalseAlpha1.161.17
TopologyManagertrueBeta1.18
ValidateProxyRedirectsfalseAlpha1.121.13
ValidateProxyRedirectstrueBeta1.14
WarningHeaderstrueBeta1.19
WinDSRfalseAlpha1.14
WinOverlayfalseAlpha1.141.19
WinOverlaytrueBeta1.20
WindowsEndpointSliceProxyingfalseAlpha1.19

已毕业和已废弃的特性门控

已毕业或不推荐使用的特性门控
特性默认值状态开始(Since)结束(Until)
AcceleratorsfalseAlpha1.61.10
Accelerators-Deprecated1.11-
AdvancedAuditingfalseAlpha1.71.7
AdvancedAuditingtrueBeta1.81.11
AdvancedAuditingtrueGA1.12-
AffinityInAnnotationsfalseAlpha1.61.7
AffinityInAnnotations-Deprecated1.8-
AllowExtTrafficLocalEndpointsfalseBeta1.41.6
AllowExtTrafficLocalEndpointstrueGA1.7-
BlockVolumefalseAlpha1.91.12
BlockVolumetrueBeta1.131.17
BlockVolumetrueGA1.18-
CSIBlockVolumefalseAlpha1.111.13
CSIBlockVolumetrueBeta1.141.17
CSIBlockVolumetrueGA1.18-
CSIDriverRegistryfalseAlpha1.121.13
CSIDriverRegistrytrueBeta1.141.17
CSIDriverRegistrytrueGA1.18
CSINodeInfofalseAlpha1.121.13
CSINodeInfotrueBeta1.141.16
CSINodeInfotrueGA1.17
AttachVolumeLimitfalseAlpha1.111.11
AttachVolumeLimittrueBeta1.121.16
AttachVolumeLimittrueGA1.17-
CSIPersistentVolumefalseAlpha1.91.9
CSIPersistentVolumetrueBeta1.101.12
CSIPersistentVolumetrueGA1.13-
CustomPodDNSfalseAlpha1.91.9
CustomPodDNStrueBeta1.101.13
CustomPodDNStrueGA1.14-
CustomResourceDefaultingfalseAlpha1.151.15
CustomResourceDefaultingtrueBeta1.161.16
CustomResourceDefaultingtrueGA1.17-
CustomResourcePublishOpenAPIfalseAlpha1.141.14
CustomResourcePublishOpenAPItrueBeta1.151.15
CustomResourcePublishOpenAPItrueGA1.16-
CustomResourceSubresourcesfalseAlpha1.101.10
CustomResourceSubresourcestrueBeta1.111.15
CustomResourceSubresourcestrueGA1.16-
CustomResourceValidationfalseAlpha1.81.8
CustomResourceValidationtrueBeta1.91.15
CustomResourceValidationtrueGA1.16-
CustomResourceWebhookConversionfalseAlpha1.131.14
CustomResourceWebhookConversiontrueBeta1.151.15
CustomResourceWebhookConversiontrueGA1.16-
DryRunfalseAlpha1.121.12
DryRuntrueBeta1.131.18
DryRuntrueGA1.19-
DynamicAuditingfalseAlpha1.131.18
DynamicAuditing-Deprecated1.19-
DynamicProvisioningSchedulingfalseAlpha1.111.11
DynamicProvisioningScheduling-Deprecated1.12-
DynamicVolumeProvisioningtrueAlpha1.31.7
DynamicVolumeProvisioningtrueGA1.8-
EnableAggregatedDiscoveryTimeouttrueDeprecated1.16-
EnableEquivalenceClassCachefalseAlpha1.81.14
EnableEquivalenceClassCache-Deprecated1.15-
ExperimentalCriticalPodAnnotationfalseAlpha1.51.12
ExperimentalCriticalPodAnnotationfalseDeprecated1.13-
EvenPodsSpreadfalseAlpha1.161.17
EvenPodsSpreadtrueBeta1.181.18
EvenPodsSpreadtrueGA1.19-
ExecProbeTimeouttrueGA1.20-
GCERegionalPersistentDisktrueBeta1.101.12
GCERegionalPersistentDisktrueGA1.13-
HugePagesfalseAlpha1.81.9
HugePagestrueBeta1.101.13
HugePagestrueGA1.14-
HyperVContainerfalseAlpha1.101.19
HyperVContainerfalseDeprecated1.20-
InitializersfalseAlpha1.71.13
Initializers-Deprecated1.14-
KubeletConfigFilefalseAlpha1.81.9
KubeletConfigFile-Deprecated1.10-
KubeletPluginsWatcherfalseAlpha1.111.11
KubeletPluginsWatchertrueBeta1.121.12
KubeletPluginsWatchertrueGA1.13-
KubeletPodResourcesfalseAlpha1.131.14
KubeletPodResourcestrueBeta1.15
KubeletPodResourcestrueGA1.20
MountContainersfalseAlpha1.91.16
MountContainersfalseDeprecated1.17-
MountPropagationfalseAlpha1.81.9
MountPropagationtrueBeta1.101.11
MountPropagationtrueGA1.12-
NodeLeasefalseAlpha1.121.13
NodeLeasetrueBeta1.141.16
NodeLeasetrueGA1.17-
PVCProtectionfalseAlpha1.91.9
PVCProtection-Deprecated1.10-
PersistentLocalVolumesfalseAlpha1.71.9
PersistentLocalVolumestrueBeta1.101.13
PersistentLocalVolumestrueGA1.14-
PodPriorityfalseAlpha1.81.10
PodPrioritytrueBeta1.111.13
PodPrioritytrueGA1.14-
PodReadinessGatesfalseAlpha1.111.11
PodReadinessGatestrueBeta1.121.13
PodReadinessGatestrueGA1.14-
PodShareProcessNamespacefalseAlpha1.101.11
PodShareProcessNamespacetrueBeta1.121.16
PodShareProcessNamespacetrueGA1.17-
RequestManagementfalseAlpha1.151.16
ResourceLimitsPriorityFunctionfalseAlpha1.91.18
ResourceLimitsPriorityFunction-Deprecated1.19-
ResourceQuotaScopeSelectorsfalseAlpha1.111.11
ResourceQuotaScopeSelectorstrueBeta1.121.16
ResourceQuotaScopeSelectorstrueGA1.17-
RotateKubeletClientCertificatetrueBeta1.81.18
RotateKubeletClientCertificatetrueGA1.19-
RuntimeClassfalseAlpha1.121.13
RuntimeClasstrueBeta1.141.19
RuntimeClasstrueGA1.20-
ScheduleDaemonSetPodsfalseAlpha1.111.11
ScheduleDaemonSetPodstrueBeta1.121.16
ScheduleDaemonSetPodstrueGA1.17-
SCTPSupportfalseAlpha1.121.18
SCTPSupporttrueBeta1.191.19
SCTPSupporttrueGA1.20-
ServiceAppProtocolfalseAlpha1.181.18
ServiceAppProtocoltrueBeta1.19
ServiceAppProtocoltrueGA1.20-
ServiceLoadBalancerFinalizerfalseAlpha1.151.15
ServiceLoadBalancerFinalizertrueBeta1.161.16
ServiceLoadBalancerFinalizertrueGA1.17-
StartupProbefalseAlpha1.161.17
StartupProbetrueBeta1.181.19
StartupProbetrueGA1.20-
StorageObjectInUseProtectiontrueBeta1.101.10
StorageObjectInUseProtectiontrueGA1.11-
StreamingProxyRedirectsfalseBeta1.51.5
StreamingProxyRedirectstrueBeta1.61.18
StreamingProxyRedirects-Deprecated1.19-
SupportIPVSProxyModefalseAlpha1.81.8
SupportIPVSProxyModefalseBeta1.91.9
SupportIPVSProxyModetrueBeta1.101.10
SupportIPVSProxyModetrueGA1.11-
SupportNodePidsLimitfalseAlpha1.141.14
SupportNodePidsLimittrueBeta1.151.19
SupportNodePidsLimittrueGA1.20-
SupportPodPidsLimitfalseAlpha1.101.13
SupportPodPidsLimittrueBeta1.141.19
SupportPodPidsLimittrueGA1.20-
TaintBasedEvictionsfalseAlpha1.61.12
TaintBasedEvictionstrueBeta1.131.17
TaintBasedEvictionstrueGA1.18-
TaintNodesByConditionfalseAlpha1.81.11
TaintNodesByConditiontrueBeta1.121.16
TaintNodesByConditiontrueGA1.17-
TokenRequestfalseAlpha1.101.11
TokenRequesttrueBeta1.121.19
TokenRequesttrueGA1.20-
TokenRequestProjectionfalseAlpha1.111.11
TokenRequestProjectiontrueBeta1.121.19
TokenRequestProjectiontrueGA1.20-
VolumeSnapshotDataSourcefalseAlpha1.121.16
VolumeSnapshotDataSourcetrueBeta1.171.19
VolumeSnapshotDataSourcetrueGA1.20-
VolumePVCDataSourcefalseAlpha1.151.15
VolumePVCDataSourcetrueBeta1.161.17
VolumePVCDataSourcetrueGA1.18-
VolumeSchedulingfalseAlpha1.91.9
VolumeSchedulingtrueBeta1.101.12
VolumeSchedulingtrueGA1.13-
VolumeSubpathtrueGA1.10-
VolumeSubpathEnvExpansionfalseAlpha1.141.14
VolumeSubpathEnvExpansiontrueBeta1.151.16
VolumeSubpathEnvExpansiontrueGA1.17-
WatchBookmarkfalseAlpha1.151.15
WatchBookmarktrueBeta1.161.16
WatchBookmarktrueGA1.17-
WindowsGMSAfalseAlpha1.141.15
WindowsGMSAtrueBeta1.161.17
WindowsGMSAtrueGA1.18-
WindowsRunAsUserNamefalseAlpha1.161.16
WindowsRunAsUserNametrueBeta1.171.17
WindowsRunAsUserNametrueGA1.18-

使用特性

特性阶段

处于 AlphaBetaGA 阶段的特性。

Alpha 特性代表:

  • 默认禁用。
  • 可能有错误,启用此特性可能会导致错误。
  • 随时可能删除对此特性的支持,恕不另行通知。
  • 在以后的软件版本中,API 可能会以不兼容的方式更改,恕不另行通知。
  • 建议将其仅用于短期测试中,因为开启特性会增加错误的风险,并且缺乏长期支持。

Beta 特性代表:

  • 默认启用。
  • 该特性已经经过良好测试。启用该特性是安全的。
  • 尽管详细信息可能会更改,但不会放弃对整体特性的支持。
  • 对象的架构或语义可能会在随后的 Beta 或稳定版本中以不兼容的方式更改。当发生这种情况时,我们将提供迁移到下一版本的说明。此特性可能需要删除、编辑和重新创建 API 对象。编辑过程可能需要慎重操作,因为这可能会导致依赖该特性的应用程序停机。
  • 推荐仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果你具有多个可以独立升级的,则可以放宽此限制。
说明:

请试用 Beta 特性并提供相关反馈! 一旦特性结束 Beta 状态,我们就不太可能再对特性进行大幅修改。

General Availability (GA) 特性也称为 稳定 特性,GA 特性代表着:

  • 此特性会一直启用;你不能禁用它。
  • 不再需要相应的特性门控。
  • 对于许多后续版本,特性的稳定版本将出现在发行的软件中。

特性门控列表

每个特性门控均用于启用或禁用某个特定的特性:

  • APIListChunking:启用 API 客户端以块的形式从 API 服务器检索(“LIST” 或 “GET”)资源。
  • APIPriorityAndFairness: 在每个服务器上启用优先级和公平性来管理请求并发。(由 RequestManagement 重命名而来)
  • APIResponseCompression:压缩 “LIST” 或 “GET” 请求的 API 响应。
  • APIServerIdentity:为集群中的每个 API 服务器赋予一个 ID。
  • Accelerators:使用 Docker 时启用 Nvidia GPU 支持。
  • AdvancedAuditing:启用高级审计功能
  • AffinityInAnnotations已弃用 ):启用 Pod 亲和或反亲和
  • AllowExtTrafficLocalEndpoints:启用服务用于将外部请求路由到节点本地终端。
  • AllowInsecureBackendProxy:允许用户在执行 Pod 日志访问请求时跳过 TLS 验证。
  • AnyVolumeDataSource: 允许使用任何自定义的资源来做作为 PVC 中的 DataSource.
  • AppArmor:使用 Docker 时,在 Linux 节点上启用基于 AppArmor 机制的强制访问控制。 请参见 AppArmor 教程 获取详细信息。
  • AttachVolumeLimit:启用卷插件用于报告可连接到节点的卷数限制。有关更多详细信息,请参阅 动态卷限制
  • BalanceAttachedNodeVolumes:在进行平衡资源分配的调度时,考虑节点上的卷数。 调度器在决策时会优先考虑 CPU、内存利用率和卷数更近的节点。
  • BlockVolume:在 Pod 中启用原始块设备的定义和使用。有关更多详细信息,请参见 原始块卷支持
  • BoundServiceAccountTokenVolume:迁移 ServiceAccount 卷以使用由 ServiceAccountTokenVolumeProjection 组成的投射卷。集群管理员可以使用 serviceaccount_stale_tokens_total 度量值来监控依赖于扩展令牌的负载。 如果没有这种类型的负载,你可以在启动 kube-apiserver 时添加 --service-account-extend-token-expiration=false 参数关闭扩展令牌。查看 绑定服务账号令牌 获取更多详细信息。
  • CPUManager:启用容器级别的 CPU 亲和性支持,有关更多详细信息,请参见 CPU 管理策略
  • CRIContainerLogRotation:为 cri 容器运行时启用容器日志轮换。
  • CSIBlockVolume:启用外部 CSI 卷驱动程序用于支持块存储。有关更多详细信息,请参见 csi 原始块卷支持
  • CSIDriverRegistry:在 csi.storage.k8s.io 中启用与 CSIDriver API 对象有关的所有逻辑。
  • CSIInlineVolume:为 Pod 启用 CSI 内联卷支持。
  • CSIMigration:确保封装和转换逻辑能够将卷操作从内嵌插件路由到相应的预安装 CSI 插件。
  • CSIMigrationAWS:确保填充和转换逻辑能够将卷操作从 AWS-EBS 内嵌插件路由到 EBS CSI 插件。 如果节点未安装和配置 EBS CSI 插件,则支持回退到内嵌 EBS 插件。 这需要启用 CSIMigration 特性标志。
  • CSIMigrationAWSComplete:停止在 kubelet 和卷控制器中注册 EBS 内嵌插件, 并启用 shims 和转换逻辑将卷操作从AWS-EBS 内嵌插件路由到 EBS CSI 插件。 这需要启用 CSIMigration 和 CSIMigrationAWS 特性标志,并在集群中的所有节点上安装和配置 EBS CSI 插件。
  • CSIMigrationAzureDisk:确保填充和转换逻辑能够将卷操作从 Azure 磁盘内嵌插件路由到 Azure 磁盘 CSI 插件。如果节点未安装和配置 AzureDisk CSI 插件, 支持回退到内建 AzureDisk 插件。这需要启用 CSIMigration 特性标志。
  • CSIMigrationAzureDiskComplete:停止在 kubelet 和卷控制器中注册 Azure 磁盘内嵌插件, 并启用 shims 和转换逻辑以将卷操作从 Azure 磁盘内嵌插件路由到 AzureDisk CSI 插件。 这需要启用 CSIMigration 和 CSIMigrationAzureDisk 特性标志, 并在集群中的所有节点上安装和配置 AzureDisk CSI 插件。
  • CSIMigrationAzureFile:确保封装和转换逻辑能够将卷操作从 Azure 文件内嵌插件路由到 Azure 文件 CSI 插件。如果节点未安装和配置 AzureFile CSI 插件, 支持回退到内嵌 AzureFile 插件。这需要启用 CSIMigration 特性标志。
  • CSIMigrationAzureFileComplete:停止在 kubelet 和卷控制器中注册 Azure-File 内嵌插件, 并启用 shims 和转换逻辑以将卷操作从 Azure-File 内嵌插件路由到 AzureFile CSI 插件。 这需要启用 CSIMigration 和 CSIMigrationAzureFile 特性标志, 并在集群中的所有节点上安装和配置 AzureFile CSI 插件。
  • CSIMigrationGCE:启用 shims 和转换逻辑,将卷操作从 GCE-PD 内嵌插件路由到 PD CSI 插件。如果节点未安装和配置 PD CSI 插件,支持回退到内嵌 GCE 插件。 这需要启用 CSIMigration 特性标志。
  • CSIMigrationGCEComplete:停止在 kubelet 和卷控制器中注册 GCE-PD 内嵌插件, 并启用 shims 和转换逻辑以将卷操作从 GCE-PD 内嵌插件路由到 PD CSI 插件。 这需要启用 CSIMigration 和 CSIMigrationGCE 特性标志,并在集群中的所有节点上 安装和配置 PD CSI 插件。
  • CSIMigrationOpenStack:确保填充和转换逻辑能够将卷操作从 Cinder 内嵌插件路由到 Cinder CSI 插件。如果节点未安装和配置 Cinder CSI 插件,支持回退到内嵌 Cinder 插件。 这需要启用 CSIMigration 特性标志。
  • CSIMigrationOpenStackComplete:停止在 kubelet 和卷控制器中注册 Cinder 内嵌插件, 并启用 shims 和转换逻辑将卷操作从 Cinder 内嵌插件路由到 Cinder CSI 插件。 这需要启用 CSIMigration 和 CSIMigrationOpenStack 特性标志,并在集群中的所有节点上 安装和配置 Cinder CSI 插件。
  • CSIMigrationvSphere: 允许封装和转换逻辑将卷操作从 vSphere 内嵌插件路由到 vSphere CSI 插件。如果节点未安装和配置 vSphere CSI 插件,则支持回退到 vSphere 内嵌插件。这需要启用 CSIMigration 特性标志。
  • CSIMigrationvSphereComplete: 停止在 kubelet 和卷控制器中注册 vSphere 内嵌插件, 并启用 shims 和转换逻辑以将卷操作从 vSphere 内嵌插件路由到 vSphere CSI 插件。 这需要启用 CSIMigration 和 CSIMigrationvSphere 特性标志,并在集群中的所有节点上 安装和配置 vSphere CSI 插件。
  • CSINodeInfo:在 csi.storage.k8s.io 中启用与 CSINodeInfo API 对象有关的所有逻辑。
  • CSIPersistentVolume:启用发现和挂载通过 CSI(容器存储接口) 兼容卷插件配置的卷。
  • CSIServiceAccountToken: 允许 CSI 驱动接收挂载卷目标 Pods 的服务账户令牌。 参阅令牌请求(Token Requests)
  • CSIStorageCapacity: 使 CSI 驱动程序可以发布存储容量信息,并使 Kubernetes 调度程序在调度 Pod 时使用该信息。参见 存储容量。 详情请参见 csi 卷类型
  • CSIVolumeFSGroupPolicy: 允许 CSIDrivers 使用 fsGroupPolicy 字段. 该字段能控制由 CSIDriver 创建的卷在挂载这些卷时是否支持卷所有权和权限修改。
  • ConfigurableFSGroupPolicy:在 Pod 中挂载卷时,允许用户为 fsGroup 配置卷访问权限和属主变更策略。请参见 为 Pod 配置卷访问权限和属主变更策略
  • CronJobControllerV2:使用 CronJob 控制器的一种替代实现。否则,系统会选择同一控制器的 v1 版本。 控制器的 v2 版本提供试验性的性能改进。
  • CustomCPUCFSQuotaPeriod:使节点能够更改 kubelet 配置. 中的 cpuCFSQuotaPeriod
  • CustomPodDNS:允许使用 Pod 的 dnsConfig 属性自定义其 DNS 设置。 更多详细信息,请参见 Pod 的 DNS 配置
  • CustomResourceDefaulting:为 CRD 启用在其 OpenAPI v3 验证模式中提供默认值的支持。
  • CustomResourcePublishOpenAPI:启用 CRD OpenAPI 规范的发布。
  • CustomResourceSubresources:对于用 CustomResourceDefinition 创建的资源启用其 /status/scale 子资源。
  • CustomResourceValidation:对于用 CustomResourceDefinition 创建的资源启用基于模式的验证。
  • CustomResourceWebhookConversion:对于用 CustomResourceDefinition 创建的资源启用基于 Webhook 的转换。
  • DynamicKubeletConfig:启用 kubelet 的动态配置。请参阅 重新配置 kubelet
  • DynamicProvisioningScheduling:扩展默认调度器以了解卷拓扑并处理 PV 配置。 此特性已在 v1.12 中完全被 VolumeScheduling 特性取代。
  • DynamicVolumeProvisioning已弃用 ):启用持久化卷到 Pod 的 动态预配置
  • EfficientWatchResumption:允许从存储发起的 bookmark(进度通知)事件被 通知到用户。此特性仅适用于 watch 操作。
  • EnableAggregatedDiscoveryTimeout已弃用 ):对聚集的发现调用启用五秒钟超时设置。
  • EnableEquivalenceClassCache:调度 Pod 时,使 scheduler 缓存节点的等效项。
  • EndpointSlice:启用 EndpointSlice 以实现可扩缩性和可扩展性更好的网络端点。 参阅启用 EndpointSlice
  • EndpointSliceNodeName:允许使用 EndpointSlice 的 nodeName 字段。
  • EndpointSliceProxying:启用此特性门控时,Linux 上运行的 kube-proxy 会使用 EndpointSlices 而不是 Endpoints 作为其主要数据源,从而使得可扩缩性和性能 提升成为可能。参阅 启用 EndpointSlice
  • EndpointSliceTerminatingCondition:允许使用 EndpointSlice 的 terminatingserving 状况字段。
  • EphemeralContainers:启用添加 临时容器 到正在运行的 Pod 的特性。
  • EvenPodsSpread:使 Pod 能够在拓扑域之间平衡调度。请参阅 Pod 拓扑扩展约束
  • ExecProbeTimeout:确保 kubelet 会遵从 exec 探针的超时值设置。 此特性门控的主要目的是方便你处理现有的、依赖于已被修复的缺陷的工作负载; 该缺陷导致 Kubernetes 会忽略 exec 探针的超时值设置。 参阅就绪态探针.
  • ExperimentalHostUserNamespaceDefaultingGate:启用主机默认的用户名字空间。 这适用于使用其他主机名字空间、主机安装的容器,或具有特权或使用特定的非名字空间功能 (例如 MKNODE、SYS_MODULE 等)的容器。 如果在 Docker 守护程序中启用了用户名字空间重新映射,则启用此选项。
  • GCERegionalPersistentDisk:在 GCE 上启用带地理区域信息的 PD 特性。
  • GenericEphemeralVolume:启用支持临时的内联卷,这些卷支持普通卷 (可以由第三方存储供应商提供、存储容量跟踪、从快照还原等等)的所有功能。请参见 临时卷
  • GracefulNodeShutdown:在 kubelet 中启用体面地关闭节点的支持。 在系统关闭时,kubelet 会尝试监测该事件并体面地终止节点上运行的 Pods。参阅 体面地关闭节点 以了解更多细节。
  • HPAContainerMetrics:允许 HorizontalPodAutoscaler 基于目标 Pods 中各容器 的度量值来执行扩缩操作。
  • HPAScaleToZero:使用自定义指标或外部指标时,可将 HorizontalPodAutoscaler 资源的 minReplicas 设置为 0。
  • HugePages:启用分配和使用预分配的 巨页资源
  • HugePageStorageMediumSize:启用支持多种大小的预分配 巨页资源
  • HyperVContainer:为 Windows 容器启用 Hyper-V 隔离
  • IPv6DualStack:启用双协议栈 以支持 IPv6。
  • ImmutableEphemeralVolumes:允许将各个 Secret 和 ConfigMap 标记为不可变更的, 以提高安全性和性能。
  • KubeletConfigFile已弃用):启用从使用配置文件指定的文件中加载 kubelet 配置。 有关更多详细信息,请参见 通过配置文件设置 kubelet 参数
  • KubeletCredentialProviders:允许使用 kubelet exec 凭据提供程序来设置 镜像拉取凭据。
  • KubeletPluginsWatcher:启用基于探针的插件监视应用程序,使 kubelet 能够发现 类似 CSI 卷驱动程序这类插件。
  • KubeletPodResources:启用 kubelet 的 Pod 资源 GRPC 端点。更多详细信息,请参见 支持设备监控
  • LegacyNodeRoleBehavior:禁用此门控时,服务负载均衡器中和节点干扰中的原先行为 会忽略 node-role.kubernetes.io/master 标签,使用 NodeDisruptionExclusionServiceNodeExclusion 对应特性所提供的标签。
  • LocalStorageCapacityIsolation:允许使用 本地临时存储 以及 emptyDir 卷sizeLimit 属性。
  • LocalStorageCapacityIsolationFSQuotaMonitoring:如果 本地临时存储 启用了 LocalStorageCapacityIsolation,并且 emptyDir 卷 的后备文件系统支持项目配额,并且启用了这些配额,将使用项目配额来监视 emptyDir 卷的存储消耗 而不是遍历文件系统,以此获得更好的性能和准确性。
  • MixedProtocolLBService:允许在同一 LoadBalancer 类型的 Service 实例中使用不同 的协议。
  • MountContainers:允许使用主机上的工具容器作为卷挂载程序。
  • MountPropagation:启用将一个容器安装的共享卷共享到其他容器或 Pod。 更多详细信息,请参见挂载传播
  • NodeDisruptionExclusion:启用节点标签 node.kubernetes.io/exclude-disruption, 以防止在可用区发生故障期间驱逐节点。
  • NodeLease:启用新的 Lease(租期)API 以报告节点心跳,可用作节点运行状况信号。
  • NonPreemptingPriority:为 PriorityClass 和 Pod 启用 NonPreempting 选项。
  • PVCProtection:启用防止仍被某 Pod 使用的 PVC 被删除的特性。
  • PersistentLocalVolumes:允许在 Pod 中使用 local(本地)卷类型。 如果请求 local 卷,则必须指定 Pod 亲和性属性。
  • PodDisruptionBudget:启用 PodDisruptionBudget 特性。
  • PodOverhead:启用 PodOverhead 特性以考虑 Pod 开销。
  • PodPriority:根据优先级 启用 Pod 的调度和抢占。
  • PodReadinessGates:启用 podReadinessGate 字段的设置以扩展 Pod 准备状态评估。 有关更多详细信息,请参见 Pod 就绪状态判别
  • PodShareProcessNamespace:在 Pod 中启用 shareProcessNamespace 的设置, 以便在 Pod 中运行的容器之间共享同一进程名字空间。更多详细信息,请参见 在 Pod 中的容器间共享同一进程名字空间
  • ProcMountType:允许容器通过设置 SecurityContext 的 procMount 字段来控制 对 proc 文件系统的挂载方式。
  • QOSReserved:允许在 QoS 级别进行资源预留,以防止处于较低 QoS 级别的 Pod 突发进入处于较高 QoS 级别的请求资源(目前仅适用于内存)。
  • RemainingItemCount:允许 API 服务器在 分块列表请求 的响应中显示剩余条目的个数。
  • RemoveSelfLink:将 ObjectMeta 和 ListMeta 中的 selfLink 字段废弃并删除。
  • ResourceLimitsPriorityFunction已弃用 ):启用某调度器优先级函数, 该函数将最低得分 1 指派给至少满足输入 Pod 的 CPU 和内存限制之一的节点, 目的是打破得分相同的节点之间的关联。
  • ResourceQuotaScopeSelectors:启用资源配额范围选择器。
  • RootCAConfigMap:配置 kube-controller-manager,使之发布一个名为 kube-root-ca.crtConfigMap,到 所有名字空间中。该 ConfigMap 包含用来验证与 kube-apiserver 之间连接的 CA 证书包。参阅 绑定服务账户令牌 以了解更多细节。
  • RotateKubeletClientCertificate:在 kubelet 上启用客户端 TLS 证书的轮换。 更多详细信息,请参见 kubelet 配置
  • RotateKubeletServerCertificate:在 kubelet 上启用服务器 TLS 证书的轮换。 更多详细信息,请参见 kubelet 配置
  • RunAsGroup:启用对容器初始化过程中设置的主要组 ID 的控制。
  • RuntimeClass:启用 RuntimeClass 特性用于选择容器运行时配置。
  • ScheduleDaemonSetPods:启用 DaemonSet Pods 由默认调度程序而不是 DaemonSet 控制器进行调度。
  • SCTPSupport:在 Pod、Service、Endpoints、NetworkPolicy 定义中 允许将 SCTP 用作 protocol 值。
  • ServerSideApply:在 API 服务器上启用 服务器端应用(SSA)
  • ServiceAccountIssuerDiscovery:在 API 服务器中为服务帐户颁发者启用 OIDC 发现端点 (颁发者和 JWKS URL)。详情参见 为 Pod 配置服务账户
  • ServiceAppProtocol:为 Service 和 Endpoints 启用 appProtocol 字段。
  • ServiceLBNodePortControl:为服务启用 spec.allocateLoadBalancerNodePorts 字段。
  • ServiceLoadBalancerFinalizer:为服务负载均衡启用终结器(finalizers)保护。
  • ServiceNodeExclusion:启用从云提供商创建的负载均衡中排除节点。 如果节点标记有 node.kubernetes.io/exclude-from-external-load-balancers, 标签,则可以排除该节点。
  • ServiceTopology:启用服务拓扑可以让一个服务基于集群的节点拓扑进行流量路由。 有关更多详细信息,请参见 服务拓扑
  • SetHostnameAsFQDN:启用将全限定域名(FQDN)设置为 Pod 主机名的功能。 请参见为 Pod 设置 setHostnameAsFQDN 字段
  • SizeMemoryBackedVolumes:允许 kubelet 检查基于内存制备的卷的尺寸约束 (目前主要针对 emptyDir 卷)。
  • StartupProbe:在 kubelet 中启用 启动探针
  • StorageObjectInUseProtection:如果仍在使用 PersistentVolume 或 PersistentVolumeClaim 对象,则将其删除操作推迟。
  • StorageVersionAPI: 启用 存储版本 API
  • StorageVersionHash:允许 API 服务器在版本发现中公开存储版本的哈希值。
  • StreamingProxyRedirects:指示 API 服务器拦截(并跟踪)后端(kubelet) 的重定向以处理流请求。 流请求的例子包括 execattachport-forward 请求。
  • SupportIPVSProxyMode:启用使用 IPVS 提供内服务负载平衡。更多详细信息,请参见 服务代理
  • SupportPodPidsLimit:启用支持限制 Pod 中的进程 PID。
  • SupportNodePidsLimit:启用支持,限制节点上的 PID 用量。 --system-reserved--kube-reserved 中的参数 pid=<数值> 可以分别用来 设定为整个系统所预留的进程 ID 个数和为 Kubernetes 系统守护进程预留的进程 ID 个数。
  • Sysctls:允许为每个 Pod 设置的名字空间内核参数(sysctls)。 更多详细信息,请参见 sysctls
  • TTLAfterFinished:资源完成执行后,允许 TTL 控制器清理资源。
  • TaintBasedEvictions:根据节点上的污点和 Pod 上的容忍度启用从节点驱逐 Pod 的特性。 更多详细信息可参见污点和容忍度
  • TaintNodesByCondition:根据节点状况 启用自动为节点标记污点。
  • TokenRequest:在服务帐户资源上启用 TokenRequest 端点。
  • TokenRequestProjection:启用通过 projected 将服务帐户令牌注入到 Pod 中的特性。
  • TopologyManager:启用一种机制来协调 Kubernetes 不同组件的细粒度硬件资源分配。 详见控制节点上的拓扑管理策略
  • VolumePVCDataSource:启用对将现有 PVC 指定数据源的支持。
  • VolumeScheduling:启用卷拓扑感知调度,并使 PersistentVolumeClaim(PVC) 绑定能够了解调度决策;当与 PersistentLocalVolumes 特性门控一起使用时, 还允许使用 local 卷类型。
  • VolumeSnapshotDataSource:启用卷快照数据源支持。
  • VolumeSubpathEnvExpansion:启用 subPathExpr 字段用于将环境变量在 subPath 中展开。
  • WarningHeaders:允许在 API 响应中发送警告头部。
  • WatchBookmark:启用对 watch 操作中 bookmark 事件的支持。
  • WinDSR:允许 kube-proxy 为 Windows 创建 DSR 负载均衡。
  • WinOverlay:允许 kube-proxy 在 Windows 的覆盖网络模式下运行。
  • WindowsGMSA:允许将 GMSA 凭据规范从 Pod 传递到容器运行时。
  • WindowsRunAsUserName:提供使用非默认用户在 Windows 容器中运行应用程序的支持。 详情请参见 配置 RunAsUserName
  • WindowsEndpointSliceProxying:启用此特性门控后,Windows 上运行的 kube-proxy 将使用 EndpointSlices 取代 Endpoints 作为主要数据源,进而提高扩展性和性能。参见 启用 EndpointSlice

接下来

  • Kubernetes 的弃用策略 介绍了项目针对已移除特性和组件的处理方法。

2 - kubelet

简介

kubelet 是在每个 Node 节点上运行的主要 “节点代理”。它可以使用以下之一向 apiserver 注册: 主机名(hostname);覆盖主机名的参数;某云驱动的特定逻辑。

kubelet 是基于 PodSpec 来工作的。每个 PodSpec 是一个描述 Pod 的 YAML 或 JSON 对象。 kubelet 接受通过各种机制(主要是通过 apiserver)提供的一组 PodSpec,并确保这些 PodSpec 中描述的容器处于运行状态且运行状况良好。 kubelet 不管理不是由 Kubernetes 创建的容器。

除了来自 apiserver 的 PodSpec 之外,还可以通过以下三种方式将容器清单(manifest)提供给 kubelet。

文件(File):利用命令行参数传递路径。kubelet 周期性地监视此路径下的文件是否有更新。 监视周期默认为 20s,且可通过参数进行配置。

HTTP 端点(HTTP endpoint):利用命令行参数指定 HTTP 端点。 此端点的监视周期默认为 20 秒,也可以使用参数进行配置。

HTTP 服务器(HTTP server):kubelet 还可以侦听 HTTP 并响应简单的 API (目前没有完整规范)来提交新的清单。

kubelet [flags]

选项

--add-dir-header
设置为 true 表示将文件目录添加到日志消息的头部
--address ip     默认值:0.0.0.0
kubelet 用来提供服务的 IP 地址(设置为0.0.0.0 表示使用所有 IPv4 接口, 设置为 :: 表示使用所有 IPv6 接口)。已弃用:应在 --config 所给的 配置文件中进行设置。(进一步了解
--allowed-unsafe-sysctls strings
用逗号分隔的字符串序列设置允许使用的非安全的 sysctls 或 sysctl 模式(以 * 结尾) 。 使用此参数时风险自担。已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解).
--alsologtostderr
设置为 true 表示将日志输出到文件的同时输出到 stderr
--anonymous-auth     默认值:true
设置为 true 表示 kubelet 服务器可以接受匿名请求。未被任何认证组件拒绝的请求将被视为匿名请求。 匿名请求的用户名为 system:anonymous,用户组为 system:unauthenticated。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--authentication-token-webhook
使用 TokenReview API 对持有者令牌进行身份认证。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--authentication-token-webhook-cache-ttl duration     默认值:2m0s
对 Webhook 令牌认证组件所返回的响应的缓存时间。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--authorization-mode string
kubelet 服务器的鉴权模式。可选值包括:AlwaysAllowWebhookWebhook 模式使用 SubjectAccessReview API 鉴权。 当 --config 参数未被设置时,默认值为 AlwaysAllow,当使用了 --config 时,默认值为 Webhook。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--authorization-webhook-cache-authorized-ttl duration     默认值:5m0s
对 Webhook 认证组件所返回的 “Authorized(已授权)” 应答的缓存时间。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--authorization-webhook-cache-unauthorized-ttl duration     默认值:30s
对 Webhook 认证组件所返回的 “Unauthorized(未授权)” 应答的缓存时间。 --config 时,默认值为 Webhook。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--azure-container-registry-config string
包含 Azure 容器镜像库配置信息的文件的路径。
--bootstrap-kubeconfig string
某 kubeconfig 文件的路径,该文件将用于获取 kubelet 的客户端证书。 如果 --kubeconfig 所指定的文件不存在,则使用引导所用 kubeconfig 从 API 服务器请求客户端证书。成功后,将引用生成的客户端证书和密钥的 kubeconfig 写入 --kubeconfig 所指定的路径。客户端证书和密钥文件将存储在 --cert-dir 所指的目录。
--cert-dir string     默认值:/var/lib/kubelet/pki
TLS 证书所在的目录。如果设置了 --tls-cert-file--tls-private-key-file, 则此标志将被忽略。
--cgroup-driver string     默认值:cgroupfs
kubelet 用来操作本机 cgroup 时使用的驱动程序。支持的选项包括 cgroupfssystemd。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解) /td>
--cgroup-root string     默认值:""
可选的选项,为 Pod 设置根 cgroup。容器运行时会尽可能使用此配置。 默认值 "" 意味着将使用容器运行时的默认设置。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cgroups-per-qos     默认值:true
启用创建 QoS cgroup 层次结构。此值为 true 时 kubelet 为 QoS 和 Pod 创建顶级的 cgroup。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--chaos-chance float
如果此值大于 0.0,则引入随机客户端错误和延迟。用于测试。 已启用:将在未来版本中移除。
--client-ca-file string
如果设置了此参数,则使用对应文件中机构之一检查请求中所携带的客户端证书。 若客户端证书通过身份认证,则其对应身份为其证书中所设置的 CommonName。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cloud-config string
云驱动配置文件的路径。空字符串表示没有配置文件。 已弃用:将在 1.23 版本中移除,以便于从 kubelet 中去除云驱动代码。
--cloud-provider string
云服务的提供者。设置为空字符串表示在没有云驱动的情况下运行。 如果设置了此标志,则云驱动负责确定节点的名称(参考云提供商文档以确定是否以及如何使用主机名)。 已弃用:将在 1.23 版本中移除,以便于从 kubelet 中去除云驱动代码。
--cluster-dns strings
DNS 服务器的 IP 地址,以逗号分隔。此标志值用于 Pod 中设置了 “dnsPolicy=ClusterFirst” 时为容器提供 DNS 服务。注意:列表中出现的所有 DNS 服务器必须包含相同的记录组, 否则集群中的名称解析可能无法正常工作。至于名称解析过程中会牵涉到哪些 DNS 服务器, 这一点无法保证。 --config 时,默认值为 Webhook。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cluster-domain string
集群的域名。如果设置了此值,kubelet 除了将主机的搜索域配置到所有容器之外,还会为其 配置所搜这里指定的域名。 --config 时,默认值为 Webhook。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cni-bin-dir string     默认值:/opt/cni/bin
<警告:alpha 特性> 此值为以逗号分隔的完整路径列表。 kubelet 将在所指定路径中搜索 CNI 插件的可执行文件。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--cni-cache-dir string     默认值:/var/lib/cni/cache
<警告:alpha 特性> 此值为一个目录的全路径名。CNI 将在其中缓存文件。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--cni-conf-dir string     默认值:/etc/cni/net.d
<警告:alpha 特性> 此值为某目录的全路径名。kubelet 将在其中搜索 CNI 配置文件。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--config string
kubelet 将从此标志所指的文件中加载其初始配置。此路径可以是绝对路径,也可以是相对路径。 相对路径按 kubelet 的当前工作目录起计。省略此参数时 kubelet 会使用内置的默认配置值。 命令行参数会覆盖此文件中的配置。
--container-log-max-files int32     默认值:5
<警告:beta 特性> 设置容器的日志文件个数上限。此值必须不小于 2。 此标志只能与 --container-runtime=remote 标志一起使用。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--container-log-max-size string     默认值:10Mi
<警告:beta 特性> 设置容器日志文件在轮换生成新文件时之前的最大值 (例如,10Mi)。 此标志只能与 --container-runtime=remote 标志一起使用。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--container-runtime string     默认值:docker
要使用的容器运行时。目前支持 dockerremote
--container-runtime-endpoint string     默认值:unix:///var/run/dockershim.sock
[实验性特性] 远程运行时服务的端点。目前支持 Linux 系统上的 UNIX 套接字和 Windows 系统上的 npipe 和 TCP 端点。例如: unix:///var/run/dockershim.socknpipe:////./pipe/dockershim
--contention-profiling
当启用了性能分析时,启用锁竞争分析。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cpu-cfs-quota     默认值:true
为设置了 CPU 限制的容器启用 CPU CFS 配额保障。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cpu-cfs-quota-period duration     默认值:100ms
设置 CPU CFS 配额周期 cpu.cfs_period_us。默认使用 Linux 内核所设置的默认值 。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cpu-manager-policy string     默认值:none
要使用的 CPU 管理器策略。可选值包括:nonestatic。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--cpu-manager-reconcile-period duration     默认值:10s
<警告:alpha 特性> 设置 CPU 管理器的调和时间。例如:10s 或者 1m。 如果未设置,默认使用节点状态更新频率。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--docker-endpoint string     默认值:unix:///var/run/docker.sock
使用这里的端点与 docker 端点通信。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--dynamic-config-dir string
kubelet 使用此目录来保存所下载的配置,跟踪配置运行状况。 如果目录不存在,则 kubelet 创建该目录。此路径可以是绝对路径,也可以是相对路径。 相对路径从 kubelet 的当前工作目录计算。 设置此参数将启用动态 kubelet 配置。必须启用 DynamicKubeletConfig 特性门控之后才能设置此标志;由于此特性为 beta 阶段,对应的特性门控当前默认为 true
--enable-cadvisor-json-endpoints     Default: `false`
启用 cAdvisor JSON 数据的 /spec/stats/* 端点。 已弃用:未来版本将会移除此标志。
--enable-controller-attach-detach     默认值:true
启用 Attach/Detach 控制器来挂接和摘除调度到该节点的卷,同时禁用 kubelet 执行挂接和摘除操作。
--enable-debugging-handlers     Default: `true`
启用服务器上用于日志收集和在本地运行容器和命令的端点。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--enable-server     
启用 kubelet 服务器。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--enforce-node-allocatable strings     Default: `pods`
用逗号分隔的列表,包含由 kubelet 强制执行的节点可分配资源级别。 可选配置为:nonepodssystem-reservedkube-reserved。 在设置 system-reservedkube-reserved 这两个值时,同时要求设置 --system-reserved-cgroup--kube-reserved-cgroup 这两个参数。 如果设置为 none,则不需要设置其他参数。 参考相关文档。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--event-burst int32     默认值:10
事件记录的个数的突发峰值上限,在遵从 --event-qps 阈值约束的前提下 临时允许事件记录达到此数目。仅在 --event-qps 大于 0 时使用。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--event-qps int32     Default: 5
设置大于 0 的值表示限制每秒可生成的事件数量。设置为 0 表示不限制。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--eviction-hard string     默认值:imagefs.available<15%,memory.available<100Mi,nodefs.available<10%
触发 Pod 驱逐操作的一组硬性门限(例如:memory.available<1Gi (内存可用值小于 1 G))设置。在 Linux 节点上,默认值还包括 nodefs.inodesFree<5%。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--eviction-max-pod-grace-period int32
响应满足软性驱逐阈值(Soft Eviction Threshold)而终止 Pod 时使用的最长宽限期(以秒为单位)。 如果设置为负数,则遵循 Pod 的指定值。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--eviction-minimum-reclaim mapStringString
当某资源压力过大时,kubelet 将执行 Pod 驱逐操作。 此参数设置软性驱逐操作需要回收的资源的最小数量(例如:imagefs.available=2Gi)。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--eviction-pressure-transition-period duration     默认值:5m0s
kubelet 在驱逐压力状况解除之前的最长等待时间。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--eviction-soft mapStringString
设置一组驱逐阈值(例如:memory.available<1.5Gi)。 如果在相应的宽限期内达到该阈值,则会触发 Pod 驱逐操作。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--eviction-soft-grace-period mapStringString
设置一组驱逐宽限期(例如,memory.available=1m30s),对应于触发软性 Pod 驱逐操作之前软性驱逐阈值所需持续的时间长短。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--exit-on-lock-contention
设置为 true 表示当发生锁文件竞争时 kubelet 可以退出。
--experimental-allocatable-ignore-eviction     默认值:false
设置为 true 表示在计算节点可分配资源数量时忽略硬性逐出阈值设置。 参考 相关文档。 已启用:将在 1.23 版本中移除。
--experimental-bootstrap-kubeconfig string
已弃用:应使用 --bootstrap-kubeconfig 标志
--experimental-check-node-capabilities-before-mount
[实验性特性] 设置为 true 表示 kubelet 在进行挂载卷操作之前要 在本节点上检查所需的组件(如可执行文件等)是否存在。 已弃用:将在 1.23 版本中移除,以便使用 CSI。
--experimental-kernel-memcg-notification
设置为 true 表示 kubelet 将会集成内核的 memcg 通知机制而不是使用轮询机制来 判断是否达到了内存驱逐阈值。 此标志将在 1.23 版本移除。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--experimental-log-sanitization
[试验性功能] 启用此标志之后,kubelet 会避免将标记为敏感的字段(密码、密钥、令牌等) 写入日志中。运行时的日志清理可能会带来相当的计算开销,因此不应该在 产品环境中启用。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--experimental-mounter-path string     默认值:mount
[实验性特性] 卷挂载器(mounter)的可执行文件的路径。设置为空表示使用默认挂载器 mount。 已弃用:将在 1.23 版本移除以支持 CSI。
--fail-swap-on     默认值:true
设置为 true 表示如果主机启用了交换分区,kubelet 将直接失败。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--feature-gates mapStringBool
用于 alpha 实验性质的特性开关组,每个开关以 key=value 形式表示。当前可用开关包括: APIListChunking=true|false (BETA - 默认值为 true)
APIPriorityAndFairness=true|false (BETA - 默认值为 true)
APIResponseCompression=true|false (BETA - 默认值为 true)
APIServerIdentity=true|false (ALPHA - 默认值为 false)
AllAlpha=true|false (ALPHA - 默认值为 false)
AllBeta=true|false (BETA - 默认值为 false)
AllowInsecureBackendProxy=true|false (BETA - 默认值为 true)
AnyVolumeDataSource=true|false (ALPHA - 默认值为 false)
AppArmor=true|false (BETA - 默认值为 true)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认值为 false)
BoundServiceAccountTokenVolume=true|false (ALPHA - 默认值为 false)
CPUManager=true|false (BETA - 默认值为 true)
CRIContainerLogRotation=true|false (BETA - 默认值为 true)
CSIInlineVolume=true|false (BETA - 默认值为 true)
CSIMigration=true|false (BETA - 默认值为 true)
CSIMigrationAWS=true|false (BETA - 默认值为 false)
CSIMigrationAWSComplete=true|false (ALPHA - 默认值为 false)
CSIMigrationAzureDisk=true|false (BETA - 默认值为 false)
CSIMigrationAzureDiskComplete=true|false (ALPHA - 默认值为 false)
CSIMigrationAzureFile=true|false (ALPHA - 默认值为 false)
CSIMigrationAzureFileComplete=true|false (ALPHA - 默认值为 false)
CSIMigrationGCE=true|false (BETA - 默认值为 false)
CSIMigrationGCEComplete=true|false (ALPHA - 默认值为 false)
CSIMigrationOpenStack=true|false (BETA - 默认值为 false)
CSIMigrationOpenStackComplete=true|false (ALPHA - 默认值为 false)
CSIMigrationvSphere=true|false (BETA - 默认值为 false)
CSIMigrationvSphereComplete=true|false (BETA - 默认值为 false)
CSIServiceAccountToken=true|false (ALPHA - 默认值为 false)
CSIStorageCapacity=true|false (ALPHA - 默认值为 false)
CSIVolumeFSGroupPolicy=true|false (BETA - 默认值为 true)
ConfigurableFSGroupPolicy=true|false (BETA - 默认值为 true)
CronJobControllerV2=true|false (ALPHA - 默认值为 false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值为 false)
DefaultPodTopologySpread=true|false (BETA - 默认值为 true)
DevicePlugins=true|false (BETA - 默认值为 true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值为 true)
DownwardAPIHugePages=true|false (ALPHA - 默认值为 false)
DynamicKubeletConfig=true|false (BETA - 默认值为 true)
EfficientWatchResumption=true|false (ALPHA - 默认值为 false)
EndpointSlice=true|false (BETA - 默认值为 true)
EndpointSliceNodeName=true|false (ALPHA - 默认值为 false)
EndpointSliceProxying=true|false (BETA - 默认值为 true)
EndpointSliceTerminatingCondition=true|false (ALPHA - 默认值为 false)
EphemeralContainers=true|false (ALPHA - 默认值为 false)
ExpandCSIVolumes=true|false (BETA - 默认值为 true)
ExpandInUsePersistentVolumes=true|false (BETA - 默认值为 true)
ExpandPersistentVolumes=true|false (BETA - 默认值为 true)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值为 false)
GenericEphemeralVolume=true|false (ALPHA - 默认值为 false)
GracefulNodeShutdown=true|false (ALPHA - 默认值为 false)
HPAContainerMetrics=true|false (ALPHA - 默认值为 false)
HPAScaleToZero=true|false (ALPHA - 默认值为 false)
HugePageStorageMediumSize=true|false (BETA - 默认值为 true)
IPv6DualStack=true|false (ALPHA - 默认值为 false)
ImmutableEphemeralVolumes=true|false (BETA - 默认值为 true)
KubeletCredentialProviders=true|false (ALPHA - 默认值为 false)
KubeletPodResources=true|false (BETA - 默认值为 true)
LegacyNodeRoleBehavior=true|false (BETA - 默认值为 true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值为 true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值为 false)
MixedProtocolLBService=true|false (ALPHA - 默认值为 false)
NodeDisruptionExclusion=true|false (BETA - 默认值为 true)
NonPreemptingPriority=true|false (BETA - 默认值为 true)
PodDisruptionBudget=true|false (BETA - 默认值为 true)
PodOverhead=true|false (BETA - 默认值为 true)
ProcMountType=true|false (ALPHA - 默认值为 false)
QOSReserved=true|false (ALPHA - 默认值为 false)
RemainingItemCount=true|false (BETA - 默认值为 true)
RemoveSelfLink=true|false (BETA - 默认值为 true)
RootCAConfigMap=true|false (BETA - 默认值为 true)
RotateKubeletServerCertificate=true|false (BETA - 默认值为 true)
RunAsGroup=true|false (BETA - 默认值为 true)
ServerSideApply=true|false (BETA - 默认值为 true)
ServiceAccountIssuerDiscovery=true|false (BETA - 默认值为 true)
ServiceLBNodePortControl=true|false (ALPHA - 默认值为 false)
ServiceNodeExclusion=true|false (BETA - 默认值为 true)
ServiceTopology=true|false (ALPHA - 默认值为 false)
SetHostnameAsFQDN=true|false (BETA - 默认值为 true)
SizeMemoryBackedVolumes=true|false (ALPHA - 默认值为 false)
StorageVersionAPI=true|false (ALPHA - 默认值为 false)
StorageVersionHash=true|false (BETA - 默认值为 true)
Sysctls=true|false (BETA - 默认值为 true)
TTLAfterFinished=true|false (ALPHA - 默认值为 false)
TopologyManager=true|false (BETA - 默认值为 true)
ValidateProxyRedirects=true|false (BETA - 默认值为 true)
WarningHeaders=true|false (BETA - 默认值为 true)
WinDSR=true|false (ALPHA - 默认值为 false)
WinOverlay=true|false (BETA - 默认值为 true)
WindowsEndpointSliceProxying=true|false (ALPHA - 默认值为 false)
已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--file-check-frequency duration     默认值:20s
检查配置文件中新数据的时间间隔。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--hairpin-mode string     默认值:promiscuous-bridge
设置 kubelet 执行发夹模式(hairpin)网络地址转译的方式。 该模式允许后端端点对其自身服务的访问能够再次经由负载均衡转发回自身。 可选项包括 “promiscuous-bridge”、“hairpin-veth” 和 “none”。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--healthz-bind-address ip     默认值:127.0.0.1
用于运行 healthz 服务器的 IP 地址(设置为 0.0.0.0 表示使用所有 IPv4 接口, 设置为 :: 表示使用所有 IPv6 接口。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--healthz-port int32     默认值:10248
本地 healthz 端点使用的端口(设置为 0 表示禁用)。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
-h, --help
kubelet 操作的帮助命令
--hostname-override string
如果为非空,将使用此字符串而不是实际的主机名作为节点标识。如果设置了 --cloud-provider,则云驱动将确定节点的名称 (请查阅云服务商文档以确定是否以及如何使用主机名)。
--housekeeping-interval duration     默认值:10s
清理容器操作的时间间隔。
--http-check-frequency duration     默认值:20s
HTTP 服务以获取新数据的时间间隔。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--image-credential-provider-bin-dir string
指向凭据提供组件可执行文件所在目录的路径。
--image-credential-provider-config string
指向凭据提供插件配置文件所在目录的路径。
--image-gc-high-threshold int32     默认值:85
镜像垃圾回收上限。磁盘使用空间达到该百分比时,镜像垃圾回收将持续工作。 值必须在 [0,100] 范围内。要禁用镜像垃圾回收,请设置为 100。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--image-gc-low-threshold int32     默认值:80
镜像垃圾回收下限。磁盘使用空间在达到该百分比之前,镜像垃圾回收操作不会运行。 值必须在 [0,100] 范围内,并且不得大于 --image-gc-high-threshold的值。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--image-pull-progress-deadline duration     默认值:1m0s
如果在该参数值所设置的期限之前没有拉取镜像的进展,镜像拉取操作将被取消。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--image-service-endpoint string
[实验性特性] 远程镜像服务的端点。若未设定则默认情况下使用 --container-runtime-endpoint 的值。目前支持的类型包括在 Linux 系统上的 UNIX 套接字端点和 Windows 系统上的 npipe 和 TCP 端点。 例如:unix:///var/run/dockershim.socknpipe:////./pipe/dockershim
--iptables-drop-bit int32     默认值:15
标记数据包将被丢弃的 fwmark 位设置。必须在 [0,31] 范围内。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--iptables-masquerade-bit int32     默认值:14
标记数据包将进行 SNAT 的 fwmark 空间位设置。必须在 [0,31] 范围内。 请将此参数与 kube-proxy 中的相应参数匹配。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--keep-terminated-pod-volumes
设置为 true 表示 Pod 终止后仍然保留之前挂载过的卷,常用于调试与卷有关的问题。 已弃用:将未来版本中移除。
--kernel-memcg-notification
若启用,则 kubelet 将与内核中的 memcg 通知机制集成,不再使用轮询的方式来判定 是否 Pod 达到内存驱逐阈值。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--kube-api-burst int32     默认值:10
每秒发送到 apiserver 的突发请求数量上限。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--kube-api-content-type string     默认值:application/vnd.kubernetes.protobuf
发送到 apiserver 的请求的内容类型。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--kube-api-qps int32     默认值:5
与 apiserver 通信的每秒查询个数(QPS)。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--kube-reserved mapStringString     默认值:<None>
kubernetes 系统预留的资源配置,以一组 资源名称=资源数量 格式表示。 (例如:cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100')。 当前支持 cpumemory 和用于根文件系统的 ephemeral-storage。 请参阅相关文档获取更多信息。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--kube-reserved-cgroup string     默认值:""
给出某个顶层 cgroup 绝对名称,该 cgroup 用于管理通过标志 --kube-reserved 为 kubernetes 组件所预留的计算资源。例如:"/kube-reserved"。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--kubeconfig string
kubeconfig 配置文件的路径,指定如何连接到 API 服务器。 提供 --kubeconfig 将启用 API 服务器模式,而省略 --kubeconfig 将启用独立模式。
--kubelet-cgroups string
用于创建和运行 kubelet 的 cgroup 的绝对名称。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--lock-file string
<警告:alpha 特性> kubelet 使用的锁文件的路径。
--log-backtrace-at traceLocation     默认值::0
形式为 <file>:<N>。 当日志逻辑执行到命中 <file> 的第 <N> 行时,转储调用堆栈。
--log-dir string
如果此值为非空,则在所指定的目录中写入日志文件。
--log-file string
如果此值非空,使用所给字符串作为日志文件名。
--log-file-max-size uint     默认值:1800
设置日志文件的最大值。单位为兆字节(M)。如果值为 0,则表示文件大小无限制。
--log-flush-frequency duration     默认值:5s
两次日志刷新之间的最大秒数(默认值为 5s)。
--logging-format string     默认值:"text"
设置日志文件格式。可以设置的格式有:"text""json"。 非默认的格式不会使用以下标志的配置:--add-dir-header, --alsologtostderr, --log-backtrace-at, --log-dir, --log-file, --log-file-max-size, --logtostderr, --skip-headers, --skip-log-headers, --stderrthreshold, --log-flush-frequency。 非默认选项的其它值都应视为 Alpha 特性,将来出现更改时不会额外警告。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--logtostderr     默认值:true
日志输出到 stderr 而不是文件。
--make-iptables-util-chains     默认值:true
设置为 true 表示 kubelet 将确保 iptables 规则在主机上存在。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--manifest-url string
用于访问要运行的其他 Pod 规范的 URL。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--manifest-url-header string
取值为由 HTTP 头部组成的逗号分隔列表,在访问 --manifest-url 所给出的 URL 时使用。 名称相同的多个头部将按所列的顺序添加。该参数可以多次使用。例如: --manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful'。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--master-service-namespace string     默认值:default
kubelet 向 Pod 注入 Kubernetes 主控服务信息时使用的命名空间。 已弃用:此标志将在未来的版本中删除。
--max-open-files int     默认值:1000000
kubelet 进程可以打开的最大文件数量。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--max-pods int32     默认值:110
此 kubelet 能运行的 Pod 最大数量。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--maximum-dead-containers int32     默认值:-1
设置全局可保留的已停止容器实例个数上限。 每个实例会占用一些磁盘空间。要禁用,请设置为负数。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--maximum-dead-containers-per-container int32     默认值:1
每个已停止容器可以保留的的最大实例数量。每个容器占用一些磁盘空间。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--minimum-container-ttl-duration duration
已结束的容器在被垃圾回收清理之前的最少存活时间。 例如:300ms10s 或者 2h45m。 已弃用:请改用 --eviction-hard 或者 --eviction-soft。 此标志将在未来的版本中删除。
--minimum-image-ttl-duration duration     默认值:2m0s
不再使用的镜像在被垃圾回收清理之前的最少存活时间。 例如:300ms10s 或者 2h45m。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--network-plugin string
<警告:alpha 特性> 设置 kubelet/Pod 生命周期中各种事件调用的网络插件的名称。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--network-plugin-mtu int32
<警告:alpha 特性> 传递给网络插件的 MTU 值,将覆盖默认值。 设置为 0 则使用默认的 MTU 1460。仅当容器运行环境设置为 docker 时, 此特定于 docker 的参数才有效。
--node-ip string
节点的 IP 地址。如果设置,kubelet 将使用该 IP 地址作为节点的 IP 地址。
--node-labels mapStringString
<警告:alpha 特性> kubelet 在集群中注册本节点时设置的标签。标签以 key=value 的格式表示,多个标签以逗号分隔。名字空间 kubernetes.io 中的标签必须以 kubelet.kubernetes.ionode.kubernetes.io 为前缀, 或者在以下明确允许范围内: beta.kubernetes.io/arch, beta.kubernetes.io/instance-type, beta.kubernetes.io/os, failure-domain.beta.kubernetes.io/region, failure-domain.beta.kubernetes.io/zone, kubernetes.io/arch, kubernetes.io/hostname, kubernetes.io/os, node.kubernetes.io/instance-type, topology.kubernetes.io/region, topology.kubernetes.io/zone
--node-status-max-images int32     默认值:50
node.status.images 中可以报告的最大镜像数量。如果指定为 -1,则不设上限。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--node-status-update-frequency duration     默认值:10s
指定 kubelet 向主控节点汇报节点状态的时间间隔。注意:更改此常量时请务必谨慎, 它必须与节点控制器中的 nodeMonitorGracePeriod 一起使用。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--non-masquerade-cidr string     默认值:10.0.0.0/8
kubelet 向该 IP 段之外的 IP 地址发送的流量将使用 IP 伪装技术。 设置为 0.0.0.0/0 则不使用伪装。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--one-output
如果设置此标志为 true,则仅将日志写入其原来的严重性级别中, 而不是同时将其写入更低严重性级别中。
--oom-score-adj int32     默认值:-999
kubelet 进程的 oom-score-adj 参数值。有效范围为 [-1000,1000]。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--pod-cidr string
用于给 Pod 分配 IP 地址的 CIDR 地址池,仅在独立运行模式下使用。 在集群模式下,CIDR 设置是从主服务器获取的。对于 IPv6,分配的 IP 的最大数量为 65536。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--pod-infra-container-image string     默认值:k8s.gcr.io/pause:3.2
指定基础设施镜像,Pod 内所有容器与其共享网络和 IPC 命名空间。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--pod-manifest-path string
设置包含要运行的静态 Pod 的文件的路径,或单个静态 Pod 文件的路径。以点(.) 开头的文件将被忽略。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--pod-max-pids int     默认值:-1
设置每个 Pod 中的最大进程数目。如果为 -1,则 kubelet 使用节点可分配的 PID 容量作为默认值。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--pods-per-core int32
kubelet 在每个处理器核上可运行的 Pod 数量。此 kubelet 上的 Pod 总数不能超过 --max-pods 标志值。因此,如果此计算结果导致在 kubelet 上允许更多数量的 Pod,则使用 --max-pods 值。值为 0 表示不作限制。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--port int32     默认值:10250
kubelet 服务监听的本机端口号。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--protect-kernel-defaults
设置 kubelet 的默认内核调整行为。如果已设置该参数,当任何内核可调参数与 kubelet 默认值不同时,kubelet 都会出错。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--provider-id string
设置主机数据库(即,云驱动)中用来标识节点的唯一标识。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--qos-reserved mapStringString
<警告:alpha 特性> 设置在指定的 QoS 级别预留的 Pod 资源请求,以一组 "资源名称=百分比" 的形式进行设置,例如 memory=50%。 当前仅支持内存(memory)。要求启用 QOSReserved 特性门控。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--read-only-port int32     默认值:10255
kubelet 可以在没有身份验证/鉴权的情况下提供只读服务的端口(设置为 0 表示禁用)。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--really-crash-for-testing
设置为 true 表示发生失效时立即崩溃。仅用于测试。 已弃用:将在未来版本中移除。
--redirect-container-streaming
启用容器流数据重定向。如果设置为 false,则 kubelet 将在 apiserver 和容器运行时 之间转发容器流数据;如果设置为 true,则 kubelet 将返回指向 apiserver 的 HTTP 重定向信息, 而 apiserver 将直接访问容器运行时。代理方法更安全,但会带来一些开销。 重定向方法性能更高,但安全性较低,因为 apiserver 和容器运行时之间的连接可能未通过身份验证。
已弃用:容器流数据重定向会在 v1.20 中从 kubelet 中移除,此标志会在 v1.22 中移除。 相关信息可参见改进说明
--register-node     默认值:true
将本节点注册到 API 服务器。如果未提供 --kubeconfig 标志设置, 则此参数无关紧要,因为 kubelet 将没有要注册的 API 服务器。
--register-schedulable     默认值:true
注册本节点为可调度的节点。当 --register-node标志为 false 时此设置无效。 已弃用:此参数将在未来的版本中删除。
--register-with-taints mapStringString
设置本节点的污点标记,格式为 <key>=<value>:<effect>, 以逗号分隔。当 --register-node 为 false 时此标志无效。 已弃用:将在未来版本中移除。
--registry-burst int32     默认值:10
设置突发性镜像拉取的个数上限,在不超过 --registration-qps 设置值的前提下 暂时允许此参数所给的镜像拉取个数。仅在 --registry-qps 大于 0 时使用。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--registry-qps int32     Default: 5
如此值大于 0,可用来限制镜像仓库的 QPS 上限。设置为 0,表示不受限制。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--reserved-cpus string
用逗号分隔的一组 CPU 或 CPU 范围列表,给出为系统和 Kubernetes 保留使用的 CPU。 此列表所给出的设置优先于通过 --system-reserved--kube-reskube-reserved 所保留的 CPU 个数配置。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--resolv-conf string     默认值:/etc/resolv.conf
名字解析服务的配置文件名,用作容器 DNS 解析配置的基础。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--root-dir string     默认值:/var/lib/kubelet
设置用于管理 kubelet 文件的根目录(例如挂载卷的相关文件等)。
--rotate-certificates
<警告:Beta 特性> 设置当客户端证书即将过期时 kubelet 自动从 kube-apiserver 请求新的证书进行轮换。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--rotate-server-certificates
当 kubelet 的服务证书即将过期时自动从 kube-apiserver 请求新的证书进行轮换。 要求启用 RotateKubeletServerCertificate 特性门控,以及对提交的 CertificateSigningRequest 对象进行批复(Approve)操作。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--runonce
设置为 true 表示从本地清单或远程 URL 创建完 Pod 后立即退出 kubelet 进程。 与 --enable-server 标志互斥。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--runtime-cgroups string
设置用于创建和运行容器运行时的 cgroup 的绝对名称。
--runtime-request-timeout duration     默认值:2m0s
设置除了长时间运行的请求(包括 pulllogsexecattach 等操作)之外的其他运行时请求的超时时间。 到达超时时间时,请求会被取消,抛出一个错误并会等待重试。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--seccomp-profile-root string     默认值:/var/lib/kubelet/seccomp
<警告:alpha 特性> seccomp 配置文件目录。 已弃用:将在 1.23 版本中移除,以使用 <root-dir>/seccomp 目录。
--serialize-image-pulls     默认值:true
逐一拉取镜像。建议 *不要* 在 docker 守护进程版本低于 1.9 或启用了 Aufs 存储后端的节点上 更改默认值。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--skip-headers
设置为 true 时在日志消息中去掉标头前缀。
--skip-log-headers
设置为 true,打开日志文件时去掉标头。
--stderrthreshold int     默认值:2
设置严重程度达到或超过此阈值的日志输出到标准错误输出。
--streaming-connection-idle-timeout duration     默认值:4h0m0s
设置流连接在自动关闭之前可以空闲的最长时间。0 表示没有超时限制。 例如:5m。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--sync-frequency duration     默认值:1m0s
在运行中的容器与其配置之间执行同步操作的最长时间间隔。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--system-cgroups /
此标志值为一个 cgroup 的绝对名称,用于所有尚未放置在根目录下某 cgroup 内的非内核进程。 空值表示不指定 cgroup。回滚该参数需要重启机器。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--system-reserved mapStringString     默认值:无
系统预留的资源配置,以一组 资源名称=资源数量 的格式表示, (例如:cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100')。 目前仅支持 cpumemory 的设置。 更多细节可参考 相关文档。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--system-reserved-cgroup string     默认值:""
此标志给出一个顶层 cgroup 绝对名称,该 cgroup 用于管理非 kubernetes 组件, 这些组件的计算资源通过 --system-reserved 标志进行预留。 例如 "/system-reserved"。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--tls-cert-file string
包含 x509 证书的文件路径,用于 HTTPS 认证。 如果有中间证书,则中间证书要串接在在服务器证书之后。 如果未提供 --tls-cert-file--tls-private-key-file, kubelet 会为公开地址生成自签名证书和密钥,并将其保存到通过 --cert-dir 指定的目录中。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--tls-cipher-suites string
服务器端加密算法列表,以逗号分隔。如果不设置,则使用 Go 语言加密包的默认算法列表。
可选加密算法包括:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_RC4_128_SHA
已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--tls-min-version string
设置支持的最小 TLS 版本号,可选的版本号包括:VersionTLS10VersionTLS11VersionTLS12VersionTLS13。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--tls-private-key-file string
包含与 --tls-cert-file 对应的 x509 私钥文件路径。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--topology-manager-policy string     默认值:none
设置拓扑管理策略(Topology Manager policy)。可选值包括:nonebest-effortrestrictedsingle-numa-node。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--topology-manager-scope string     默认值:container
拓扑提示信息使用范围。拓扑管理器从提示提供者(Hints Providers)处收集提示信息, 并将其应用到所定义的范围以确保 Pod 准入。 可选值包括:container(默认)、pod。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
-v, --v Level
设置 kubelet 日志级别详细程度的数值。
--version version[=true]
打印 kubelet 版本信息并退出。
--vmodule moduleSpec
以逗号分隔的 pattern=N 设置列表,用于文件过滤的日志记录
--volume-plugin-dir string     默认值:/usr/libexec/kubernetes/kubelet-plugins/volume/exec/
用来搜索第三方存储卷插件的目录。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解
--volume-stats-agg-period duration     默认值:1m0s
指定 kubelet 计算和缓存所有 Pod 和卷的磁盘用量总值的时间间隔。要禁用磁盘用量计算, 请设置为 0。 已弃用:应在 --config 所给的配置文件中进行设置。 (进一步了解

3 - kube-apiserver

简介

Kubernetes API 服务器验证并配置 API 对象的数据, 这些对象包括 pods、services、replicationcontrollers 等。 API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端, 所有其他组件都通过该前端进行交互。

kube-apiserver [flags]

选项

--add-dir-header
如果为 true,则将文件目录添加到日志消息的标题中
--admission-control-config-file string
包含准入控制配置的文件。
--advertise-address ip
向集群成员通知 apiserver 消息的 IP 地址。 这个地址必须能够被集群中其他成员访问。 如果 IP 地址为空,将会使用 --bind-address, 如果未指定 --bind-address,将会使用主机的默认接口地址。
--allow-privileged
如果为 true, 将允许特权容器。[默认值=false]
--alsologtostderr
在向文件输出日志的同时,也将日志写到标准输出。
--anonymous-auth     默认值:true
启用到 API server 的安全端口的匿名请求。 未被其他认证方法拒绝的请求被当做匿名请求。 匿名请求的用户名为 system:anonymous, 用户组名为 system:unauthenticated。
--api-audiences stringSlice
API 的标识符。 服务帐户令牌验证者将验证针对 API 使用的令牌是否已绑定到这些受众中的至少一个。 如果配置了 --service-account-issuer 标志,但未配置此标志, 则此字段默认为包含发行者 URL 的单个元素列表。
--apiserver-count int     默认值:1
集群中运行的 apiserver 数量,必须为正数。 (在启用 --endpoint-reconciler-type=master-count 时使用。)
--audit-log-batch-buffer-size int     默认值:10000
批处理和写入之前用于存储事件的缓冲区大小。 仅在批处理模式下使用。
--audit-log-batch-max-size int     默认值:1
批处理的最大大小。 仅在批处理模式下使用。
--audit-log-batch-max-wait duration
强制写入尚未达到最大大小的批处理之前要等待的时间。 仅在批处理模式下使用。
--audit-log-batch-throttle-burst int
如果之前未使用 ThrottleQPS,则同时发送的最大请求数。 仅在批处理模式下使用。
--audit-log-batch-throttle-enable
是否启用了批量限制。 仅在批处理模式下使用。
--audit-log-batch-throttle-qps float32
每秒的最大平均批处理数。 仅在批处理模式下使用。
--audit-log-compress
若设置了此标志,则轮换的日志文件会使用 gzip 压缩。
--audit-log-format string     默认值:"json"
所保存的审计格式。 "legacy" 表示每行一个事件的文本格式。"json" 表示结构化的 JSON 格式。 已知格式为 legacy,json。
--audit-log-maxage int
根据文件名中编码的时间戳保留旧审计日志文件的最大天数。
--audit-log-maxbackup int
保留的旧审计日志文件的最大数量。
--audit-log-maxsize int
轮换之前,审计日志文件的最大大小(以兆字节为单位)。
--audit-log-mode string     默认值:"blocking"
发送审计事件的策略。 阻塞(blocking)表示发送事件应阻止服务器响应。 批处理导致后端异步缓冲和写入事件。 已知的模式是批处理(batch),阻塞(blocking),严格阻塞(blocking-strict)。
--audit-log-path string
如果设置,则所有到达 apiserver 的请求都将记录到该文件中。 "-" 表示标准输出。
--audit-log-truncate-enabled
是否启用事件和批次截断。
--audit-log-truncate-max-batch-size int     默认值:10485760
发送到下层后端的批次的最大数据量。 实际的序列化大小可能会增加数百个字节。 如果一个批次超出此限制,则将其分成几个较小的批次。
--audit-log-truncate-max-event-size int     默认值:102400
发送到下层后端的批次的最大数据量。 如果事件的大小大于此数字,则将删除第一个请求和响应, 并且没有减小足够大的程度,则将丢弃事件。
--audit-log-version string     默认值:"audit.k8s.io/v1"
用于序列化写入日志的审计事件的 API 组和版本。
--audit-policy-file string
定义审计策略配置的文件的路径。
--audit-webhook-batch-buffer-size int     默认值:10000
划分批次和写入之前用于存储事件的缓冲区大小。 仅在批处理模式下使用。
--audit-webhook-batch-max-size int     默认值:400
批次的最大大小。 仅在批处理模式下使用。
--audit-webhook-batch-max-wait duration     默认值:30s
强制写入尚未达到最大大小的批处理之前要等待的时间。 仅在批处理模式下使用。
--audit-webhook-batch-throttle-burst int     默认值:15
如果之前未使用 ThrottleQPS,则同时发送的最大请求数。 仅在批处理模式下使用。
--audit-webhook-batch-throttle-enable     默认值:true
是否启用了批量限制。 仅在批处理模式下使用。
--audit-webhook-batch-throttle-qps float32     默认值:10
每秒的最大平均批次数。 仅在批处理模式下使用。
--audit-webhook-config-file string
定义审计 webhook 配置的 kubeconfig 格式文件的路径。
--audit-webhook-initial-backoff duration     默认值:10s
重试第一个失败的请求之前要等待的时间。
--audit-webhook-mode string     默认值:"batch"
发送审计事件的策略。 阻止(Blocking)表示发送事件应阻止服务器响应。 批处理导致后端异步缓冲和写入事件。 已知的模式是批处理(batch),阻塞(blocking),严格阻塞(blocking-strict)。
--audit-webhook-truncate-enabled
是否启用事件和批处理截断。
--audit-webhook-truncate-max-batch-size int     默认值:10485760
发送到下层后端的批次的最大数据量。 实际的序列化大小可能会增加数百个字节。 如果一个批次超出此限制,则将其分成几个较小的批次。
--audit-webhook-truncate-max-event-size int     默认值:102400
发送到下层后端的批次的最大数据量。 如果事件的大小大于此数字,则将删除第一个请求和响应, 并且如果事件和事件的大小没有足够减小,则将丢弃事件。
--audit-webhook-version string     默认值:"audit.k8s.io/v1"
用于序列化写入 Webhook 的审计事件的 API 组和版本。
--authentication-token-webhook-cache-ttl duration     默认值:2m0s
来自 Webhook 令牌身份验证器的缓存响应的持续时间。
--authentication-token-webhook-config-file string
包含 Webhook 配置的文件,用于以 kubeconfig 格式进行令牌认证。 API 服务器将查询远程服务,以对持有者令牌进行身份验证。
--authentication-token-webhook-version string     默认值:"v1beta1"
与 Webhook 之间交换 authentication.k8s.io TokenReview 时使用的 API 版本。
--authorization-mode stringSlice     默认值:[AlwaysAllow]
在安全端口上进行鉴权的插件的顺序列表。 逗号分隔的列表:AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node。
--authorization-policy-file string
包含安全策略的文件,其内容为分行 JSON 格式, 在安全端口上与 --authorization-mode=ABAC 一起使用。
--authorization-webhook-cache-authorized-ttl duration     默认值:5m0s
缓存来自 Webhook 鉴权组件的 “授权(authorized)” 响应的持续时间。
--authorization-webhook-cache-unauthorized-ttl duration     默认值:30s
缓存来自 Webhook 鉴权模块的 “未授权(unauthorized)” 响应的持续时间。
--authorization-webhook-config-file string
包含 Webhook 配置的文件,其格式为 kubeconfig, 与 --authorization-mode=Webhook 一起使用。 API 服务器将查询远程服务,以对 API 服务器的安全端口的访问执行鉴权。
--authorization-webhook-version string     默认值:"v1beta1"
与 Webhook 之间交换 authorization.k8s.io SubjectAccessReview 时使用的 API 版本。
--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--bind-address ip     默认值:0.0.0.0
监听 --secure-port 端口的 IP 地址。 集群的其余部分以及 CLI/web 客户端必须可以访问关联的接口。 如果为空白或未指定地址(0.0.0.0 或 ::),则将使用所有接口。
--cert-dir string     默认值:"/var/run/kubernetes"
TLS 证书所在的目录。 如果提供了 --tls-cert-file 和 --tls-private-key-file,则将忽略此标志。
--client-ca-file string
如果已设置,则使用与客户端证书的 CommonName 对应的标识对任何出示由 client-ca 文件中的授权机构之一签名的客户端证书的请求进行身份验证。
--cloud-config string
云厂商配置文件的路径。 空字符串表示无配置文件。
--cloud-provider string
云服务提供商。 空字符串表示没有云厂商。
--cloud-provider-gce-l7lb-src-cidrs cidrs     默认值:130.211.0.0/22,35.191.0.0/16
在 GCE 防火墙中打开 CIDR,以进行 L7 LB 流量代理和运行状况检查
--contention-profiling
如果启用了性能分析,则启用锁争用性能分析
--cors-allowed-origins stringSlice
CORS 允许的来源清单,以逗号分隔。 允许的来源可以是支持子域匹配的正则表达式。 如果此列表为空,则不会启用 CORS。
--default-not-ready-toleration-seconds int     默认值:300
标明 notReady:NoExecute 的 tolerationSeconds, 默认情况下将其添加到尚未具有此容忍度的每个 pod 中。
--default-unreachable-toleration-seconds int     默认值:300
标明 unreachable:NoExecute 的 tolerationSeconds, 默认情况下将其添加到尚未具有此容忍度的每个 pod 中。
--default-watch-cache-size int     默认值:100
默认监听(watch)缓存大小。 如果为零,则将为没有设置默认监视大小的资源禁用监视缓存。
--delete-collection-workers int     默认值:1
为 DeleteCollection 调用而产生的工作程序数。 这些用于加速名字空间清理。
--disable-admission-plugins stringSlice
尽管位于默认启用的插件列表中(NamespaceLifecycle、LimitRanger、ServiceAccount、TaintNodesByCondition、Priority、DefaultTolerationSeconds、DefaultStorageClass、StorageObjectInUseProtection、PersistentVolumeClaimResize、RuntimeClass、CertificateApproval、CertificateSigning、CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、ValidatingAdmissionWebhook、ResourceQuota)仍须被禁用的插件。
取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、CertificateSigning、CertificateSubjectRestriction、DefaultIngressClass、DefaultStorageClass、DefaultTolerationSeconds、DenyEscalatingExec、DenyExecOnPrivileged、EventRateLimit、ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、LimitRanger、MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、PersistentVolumeLabel、PodNodeSelector、PodSecurityPolicy、PodTolerationRestriction、Priority、ResourceQuota、RuntimeClass、SecurityContextDeny、ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、ValidatingAdmissionWebhook。
该标志中插件的顺序无关紧要。
--egress-selector-config-file string
带有 apiserver 出站选择器配置的文件。
--enable-admission-plugins stringSlice
除了默认启用的插件(NamespaceLifecycle、LimitRanger、ServiceAccount、TaintNodesByCondition、Priority、DefaultTolerationSeconds、DefaultStorageClass、StorageObjectInUseProtection、PersistentVolumeClaimResize、RuntimeClass、CertificateApproval、CertificateSigning、CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、ValidatingAdmissionWebhook、ResourceQuota)之外要启用的插件
取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、CertificateSigning、CertificateSubjectRestriction、DefaultIngressClass、DefaultStorageClass、DefaultTolerationSeconds、DenyEscalatingExec、DenyExecOnPrivileged、EventRateLimit、ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、LimitRanger、MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、PersistentVolumeLabel、PodNodeSelector、PodSecurityPolicy、PodTolerationRestriction、Priority、ResourceQuota、RuntimeClass、SecurityContextDeny、ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、ValidatingAdmissionWebhook
该标志中插件的顺序无关紧要。
--enable-aggregator-routing
允许聚合器将请求路由到端点 IP 而非集群 IP。
--enable-bootstrap-token-auth
启用以允许将 "kube-system" 名字空间中类型为 "bootstrap.kubernetes.io/token" 的 Secret 用于 TLS 引导身份验证。
--enable-garbage-collector     默认值:true
启用通用垃圾收集器。 必须与 kube-controller-manager 的相应标志同步。
--enable-priority-and-fairness     默认值:true
如果为 true 且启用了 APIPriorityAndFairness 特性门控, 请使用增强的处理程序替换 max-in-flight 处理程序, 以便根据优先级和公平性完成排队和调度。
--encryption-provider-config string
包含加密提供程序配置信息的文件,用在 etcd 中所存储的 Secret 上。
--endpoint-reconciler-type string     默认值:"lease"
使用端点协调器(master-count, lease, none)
--etcd-cafile string
用于保护 etcd 通信的 SSL 证书颁发机构文件。
--etcd-certfile string
用于保护 etcd 通信的 SSL 证书文件。
--etcd-compaction-interval duration     默认值:5m0s
压缩请求的间隔。 如果为0,则禁用来自 apiserver 的压缩请求。
--etcd-count-metric-poll-period duration     默认值:1m0s
针对每种类型的资源数量轮询 etcd 的频率。 0 禁用度量值收集。
--etcd-db-metric-poll-interval duration     默认值:30s
轮询 etcd 和更新度量值的请求间隔。 0 禁用度量值收集
--etcd-healthcheck-timeout duration      检查 etcd 健康状况时使用的超时时长。
--etcd-keyfile string
用于保护 etcd 通信的 SSL 密钥文件。
--etcd-prefix string     默认值:"/registry"
要在 etcd 中所有资源路径之前添加的前缀。
--etcd-servers stringSlice
要连接的 etcd 服务器列表(scheme://ip:port),以逗号分隔。
--etcd-servers-overrides stringSlice
etcd 服务器针对每个资源的重载设置,以逗号分隔。 单个替代格式:组/资源#服务器(group/resource#servers),其中服务器是 URL,以分号分隔。
--event-ttl duration     默认值:1h0m0s
事件的保留时长。
--experimental-logging-sanitization
[试验性功能] 启用此标志时,被标记为敏感的字段(密码、密钥、令牌)都不会被日志输出。
运行时的日志清理可能会引入相当程度的计算开销,因此不应该在产品环境中启用。
--external-hostname string
为此主机生成外部化 UR L时要使用的主机名(例如 Swagger API 文档或 OpenID 发现)。
--feature-gates mapStringBool
一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
APIPriorityAndFairness=true|false (BETA - 默认值=true)
APIResponseCompression=true|false (BETA - 默认值=true)
APIServerIdentity=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AllowInsecureBackendProxy=true|false (BETA - 默认值=true)
AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
AppArmor=true|false (BETA - 默认值=true)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认值=false)
BoundServiceAccountTokenVolume=true|false (ALPHA - 默认值=false)
CPUManager=true|false (BETA - 默认值=true)
CRIContainerLogRotation=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
CSIMigrationAWS=true|false (BETA - 默认值=false)
CSIMigrationAWSComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
CSIMigrationAzureDiskComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFile=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFileComplete=true|false (ALPHA - 默认值=false)
CSIMigrationGCE=true|false (BETA - 默认值=false)
CSIMigrationGCEComplete=true|false (ALPHA - 默认值=false)
CSIMigrationOpenStack=true|false (BETA - 默认值=false)
CSIMigrationOpenStackComplete=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
CSIMigrationvSphereComplete=true|false (BETA - 默认值=false)
CSIServiceAccountToken=true|false (ALPHA - 默认值=false)
CSIStorageCapacity=true|false (ALPHA - 默认值=false)
CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
CronJobControllerV2=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
DefaultPodTopologySpread=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DownwardAPIHugePages=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (BETA - 默认值=true)
EfficientWatchResumption=true|false (ALPHA - 默认值=false)
EndpointSlice=true|false (BETA - 默认值=true)
EndpointSliceNodeName=true|false (ALPHA - 默认值=false)
EndpointSliceProxying=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (ALPHA - 默认值=false)
EphemeralContainers=true|false (ALPHA - 默认值=false)
ExpandCSIVolumes=true|false (BETA - 默认值=true)
ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
ExpandPersistentVolumes=true|false (BETA - 默认值=true)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
GenericEphemeralVolume=true|false (ALPHA - 默认值=false)
GracefulNodeShutdown=true|false (ALPHA - 默认值=false)
HPAContainerMetrics=true|false (ALPHA - default=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HugePageStorageMediumSize=true|false (BETA - 默认值=true)
IPv6DualStack=true|false (ALPHA - 默认值=false)
ImmutableEphemeralVolumes=true|false (BETA - 默认值=true)
KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
LegacyNodeRoleBehavior=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
MixedProtocolLBService=true|false (ALPHA - 默认值=false)
NodeDisruptionExclusion=true|false (BETA - 默认值=true)
NonPreemptingPriority=true|false (BETA - 默认值=true)
PodDisruptionBudget=true|false (BETA - 默认值=true)
PodOverhead=true|false (BETA - 默认值=true)
ProcMountType=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
RemoveSelfLink=true|false (BETA - 默认值=true)
RootCAConfigMap=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
RunAsGroup=true|false (BETA - 默认值=true)
ServerSideApply=true|false (BETA - 默认值=true)
ServiceAccountIssuerDiscovery=true|false (BETA - 默认值=true)
ServiceLBNodePortControl=true|false (ALPHA - 默认值=false)
ServiceNodeExclusion=true|false (BETA - 默认值=true)
ServiceTopology=true|false (ALPHA - 默认值=false)
SetHostnameAsFQDN=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (ALPHA - 默认值=false)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
Sysctls=true|false (BETA - 默认值=true)
TTLAfterFinished=true|false (ALPHA - 默认值=false)
TopologyManager=true|false (BETA - 默认值=true)
ValidateProxyRedirects=true|false (BETA - 默认值=true)
WarningHeaders=true|false (BETA - 默认值=true)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
WindowsEndpointSliceProxying=true|false (ALPHA - 默认值=false)
--goaway-chance float
为防止 HTTP/2 客户端卡在单个 apiserver 上,可启用随机关闭连接(GOAWAY)。 客户端的其他运行中请求将不会受到影响,并且客户端将重新连接, 可能会在再次通过负载平衡器后登陆到其他 apiserver 上。 此参数设置将发送 GOAWAY 的请求的比例。 具有单个 apiserver 或不使用负载平衡器的群集不应启用此功能。 最小值为0(关闭),最大值为 .02(1/50 请求); 建议使用 .001(1/1000)。
-h, --help
kube-apiserver 的帮助命令
--http2-max-streams-per-connection int
服务器为客户端提供的 HTTP/2 连接中最大流数的限制。 零表示使用 golang 的默认值。
--identity-lease-duration-seconds int     默认值:3600
kube-apiserver 租约时长(按秒计),必须是正数。 (当 APIServerIdentity 特性门控被启用时使用此标志值)
--identity-lease-renew-interval-seconds int     默认值:10
kube-apiserver 对其租约进行续期的时间间隔(按秒计),必须是正数。 (当 APIServerIdentity 特性门控被启用时使用此标志值)
--kubelet-certificate-authority string
证书颁发机构的证书文件的路径。
--kubelet-client-certificate string
TLS 的客户端证书文件的路径。
--kubelet-client-key string
TLS 客户端密钥文件的路径。
--kubelet-preferred-address-types stringSlice     默认值:[Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP]
用于 kubelet 连接的首选 NodeAddressTypes 列表。
--kubelet-timeout duration     默认值:5s
kubelet 操作超时时间。
--kubernetes-service-node-port int
如果非零,那么 Kubernetes 主服务(由 apiserver 创建/维护)将是 NodePort 类型,使用它作为端口的值。 如果为零,则 Kubernetes 主服务将为 ClusterIP 类型。
--livez-grace-period duration
此选项代表 apiserver 完成启动序列并生效所需的最长时间。 从 apiserver 的启动时间到这段时间为止, /livez 将假定未完成的启动后钩子将成功完成,因此返回 true。
当日志机制执行到'文件 :N'时,生成堆栈跟踪
--log-dir string
如果为非空,则在此目录中写入日志文件
--log-file string
如果为非空,使用此日志文件
--log-file-max-size uint     默认值:1800
定义日志文件可以增长到的最大大小。单位为兆字节。 如果值为 0,则最大文件大小为无限制。
--log-flush-frequency duration     默认值:5s
两次日志刷新之间的最大秒数
--logging-format string     默认值:"text"
设置日志格式。允许的格式:"json","json"。
非默认格式不支持以下标志:--add_dir_header--alsologtostderr--log_backtrace_at--log_dir--log_file--log_file_max_size--logtostderr--one_output-skip_headers-skip_log_headers--stderrthreshold-vmodule--log-flush-frequency
当前非默认选择为 alpha,会随时更改而不会发出警告。
c --logtostderr     默认值:true
在标准错误而不是文件中输出日志记录
--master-service-namespace string     默认值:"default"
已废弃:应该从其中将 Kubernetes 主服务注入到 Pod 中的名字空间。
--max-connection-bytes-per-sec int
如果不为零,则将每个用户连接限制为该数(字节数/秒)。 当前仅适用于长时间运行的请求。
--max-mutating-requests-inflight int     默认值:200
在给定时间内进行中变更类型请求的最大个数。 当超过该值时,服务将拒绝所有请求。 零表示无限制。
--max-requests-inflight int     默认值:400
在给定时间内进行中非变更类型请求的最大数量。 当超过该值时,服务将拒绝所有请求。 零表示无限制。
--min-request-timeout int     默认值:1800
可选字段,表示处理程序在请求超时前,必须保持其处于打开状态的最小秒数。 当前只对监听(Watch)请求的处理程序有效,它基于这个值选择一个随机数作为连接超时值,以达到分散负载的目的。
--oidc-ca-file string
如果设置该值,将会使用 oidc-ca-file 中的机构之一对 OpenID 服务的证书进行验证, 否则将会使用主机的根 CA 对其进行验证。
--oidc-client-id string
OpenID 连接客户端的要使用的客户 ID,如果设置了 oidc-issuer-url,则必须设置这个值。
--oidc-groups-claim string
如果提供该值,这个自定义 OpenID 连接声明将被用来设定用户组。 该声明值需要是一个字符串或字符串数组。 此标志为实验性的,请查阅身份认证相关文档进一步了解详细信息。
--oidc-groups-prefix string
如果提供,则所有组都将以该值作为前缀,以防止与其他身份认证策略冲突。
--oidc-issuer-url string
OpenID 颁发者 URL,只接受 HTTPS 方案。 如果设置该值,它将被用于验证 OIDC JSON Web Token(JWT)。
--oidc-required-claim mapStringString
描述 ID 令牌中必需声明的键值对。 如果设置此值,则会验证 ID 令牌中存在与该声明匹配的值。 重复此标志以指定多个声明。
--oidc-signing-algs stringSlice     默认值:[RS256]
允许的 JOSE 非对称签名算法的逗号分隔列表。 若 JWT 所带的 "alg" 标头值不在列表中,则该 JWT 将被拒绝。 取值依据 RFC 7518 https://tools.ietf.org/html/rfc7518#section-3.1 定义。
--oidc-username-claim string     默认值:"sub"
要用作用户名的 OpenID 声明。 请注意,除默认声明("sub")以外的其他声明不能保证是唯一且不可变的。 此标志是实验性的,请参阅身份认证文档以获取更多详细信息。
--oidc-username-prefix string
如果提供,则所有用户名都将以该值作为前缀。 如果未提供,则除 "email" 之外的用户名声明都会添加颁发者 URL 作为前缀,以避免冲突。 要略过添加前缀处理,请设置值为 "-"。
--one-output
此标志为真时,日志只会被写入到其原生的严重性级别中(而不是同时写到所有较低 严重性级别中)。
--permit-port-sharing
如果为 true,则在绑定端口时将使用 SO_REUSEPORT, 这样多个实例可以绑定到同一地址和端口上。[默认值 = false]
--profiling     默认值:true
通过 Web 界面启用性能分析 host:port/debug/pprof/
--proxy-client-cert-file string
当必须调用外部程序以处理请求时,用于证明聚合器或者 kube-apiserver 的身份的客户端证书。 包括代理转发到用户 api-server 的请求和调用 Webhook 准入控制插件的请求。 Kubernetes 期望此证书包含来自于 --requestheader-client-ca-file 标志中所给 CA 的签名。 该 CA 在 kube-system 命名空间的 "extension-apiserver-authentication" ConfigMap 中公开。 从 kube-aggregator 收到调用的组件应该使用该 CA 进行各自的双向 TLS 验证。
--proxy-client-key-file string
当必须调用外部程序来处理请求时,用来证明聚合器或者 kube-apiserver 的身份的客户端私钥。 这包括代理转发给用户 api-server 的请求和调用 Webhook 准入控制插件的请求。
--request-timeout duration     默认值:1m0s
可选字段,指示处理程序在超时之前必须保持打开请求的持续时间。 这是请求的默认请求超时,但对于特定类型的请求,可能会被 --min-request-timeout等标志覆盖。
--requestheader-allowed-names stringSlice
此值为客户端证书通用名称(Common Name)的列表;表中所列的表项可以用来提供用户名, 方式是使用 --requestheader-username-headers 所指定的头部。 如果为空,能够通过 --requestheader-client-ca-file 中机构认证的客户端证书都是被允许的。
--requestheader-client-ca-file string
在信任请求头中以 --requestheader-username-headers 指示的用户名之前, 用于验证接入请求中客户端证书的根证书包。 警告:一般不要假定传入请求已被授权。
--requestheader-extra-headers-prefix stringSlice
用于查验请求头部的前缀列表。建议使用 X-Remote-Extra-。
--requestheader-group-headers stringSlice
用于查验用户组的请求头部列表。建议使用 X-Remote-Group。
--requestheader-username-headers stringSlice
用于查验用户名的请求头头列表。建议使用 X-Remote-User。
--runtime-config mapStringString
一组启用或禁用内置 API 的键值对。支持的选项包括:
v1=true|false(针对核心 API 组)
<group>/<version>=true|false(针对特定 API 组和版本,例如:apps/v1=true)
api/all=true|false 控制所有 API 版本
api/ga=true|false 控制所有 v[0-9]+ API 版本
api/beta=true|false 控制所有 v[0-9]+beta[0-9]+ API 版本
api/alpha=true|false 控制所有 v[0-9]+alpha[0-9]+ API 版本
api/legacy 已弃用,并将在以后的版本中删除
--secure-port int     默认值:6443
带身份验证和鉴权机制的 HTTPS 服务端口。 不能用 0 关闭。
--service-account-extend-token-expiration     默认值:true
在生成令牌时,启用投射服务帐户到期时间扩展, 这有助于从旧版令牌安全地过渡到绑定的服务帐户令牌功能。 如果启用此标志,则准入插件注入的令牌的过期时间将延长至 1 年,以防止过渡期间发生意外故障, 并忽略 service-account-max-token-expiration 的值。
--service-account-issuer string
服务帐号令牌颁发者的标识符。 颁发者将在已办法令牌的 "iss" 声明中检查此标识符。 此值为字符串或 URI。 如果根据 OpenID Discovery 1.0 规范检查此选项不是有效的 URI,则即使特性门控设置为 true, ServiceAccountIssuerDiscovery 功能也将保持禁用状态。 强烈建议该值符合 OpenID 规范:https://openid.net/specs/openid-connect-discovery-1_0.html。 实践中,这意味着 service-account-issuer 取值必须是 HTTPS URL。 还强烈建议此 URL 能够在 {service-account-issuer}/.well-known/openid-configuration 处提供 OpenID 发现文档。
--service-account-jwks-uri string
覆盖 /.well-known/openid-configuration 提供的发现文档中 JSON Web 密钥集的 URI。 如果发现文档和密钥集是通过 API 服务器外部 (而非自动检测到或被外部主机名覆盖)之外的 URL 提供给依赖方的,则此标志很有用。 仅在启用 ServiceAccountIssuerDiscovery 特性门控的情况下有效。
--service-account-key-file stringArray
包含 PEM 编码的 x509 RSA 或 ECDSA 私钥或公钥的文件,用于验证 ServiceAccount 令牌。 指定的文件可以包含多个键,并且可以使用不同的文件多次指定标志。 如果未指定,则使用 --tls-private-key-file。 提供 --service-account-signing-key 时必须指定。
--service-account-lookup     默认值:true
如果为 true,则在身份认证时验证 etcd 中是否存在 ServiceAccount 令牌。
--service-account-max-token-expiration duration
服务帐户令牌发布者创建的令牌的最长有效期。 如果请求有效期大于此值的有效令牌请求,将使用此值的有效期颁发令牌。
--service-account-signing-key-file string
包含服务帐户令牌颁发者当前私钥的文件的路径。 颁发者将使用此私钥签署所颁发的 ID 令牌。
--service-cluster-ip-range string
CIDR 表示的 IP 范围用来为服务分配集群 IP。 此地址不得与指定给节点或 Pod 的任何 IP 范围重叠。
--service-node-port-range portRange     默认值:30000-32767
保留给具有 NodePort 可见性的服务的端口范围。 例如:"30000-32767"。范围的两端都包括在内。
--show-hidden-metrics-for-version string
你要显示隐藏指标的先前版本。仅先前的次要版本有意义,不允许其他值。 格式为 <major>.<minor>,例如:"1.16"。 这种格式的目的是确保您有机会注意到下一个版本是否隐藏了其他指标, 而不是在此之后将它们从发行版中永久删除时感到惊讶。
--shutdown-delay-duration duration
延迟终止时间。在此期间,服务器将继续正常处理请求。 端点 /healthz 和 /livez 将返回成功,但是 /readyz 立即返回失败。 在此延迟过去之后,将开始正常终止。 这可用于允许负载平衡器停止向该服务器发送流量。
--skip-headers
如果为 true,日志消息中避免标题前缀
--skip-log-headers
如果为 true,则在打开日志文件时避免标题
--stderrthreshold severity     默认值:2
将达到或超过此阈值的日志写到标准错误输出
--storage-backend string
持久化存储后端。选项:"etcd3"(默认)。
--storage-media-type string     默认值:"application/vnd.kubernetes.protobuf"
用于在存储中存储对象的媒体类型。 某些资源或存储后端可能仅支持特定的媒体类型,并且将忽略此设置。
--tls-cert-file string
包含用于 HTTPS 的默认 x509 证书的文件。(CA 证书(如果有)在服务器证书之后并置)。 如果启用了 HTTPS 服务,并且未提供 --tls-cert-file 和 --tls-private-key-file, 为公共地址生成一个自签名证书和密钥,并将其保存到 --cert-dir 指定的目录中。
--tls-cipher-suites stringSlice
服务器的密码套件的列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
首选值:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WTLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA。
--tls-min-version string
支持的最低 TLS 版本。可能的值:VersionTLS10,VersionTLS11,VersionTLS12,VersionTLS13
--tls-private-key-file string
包含匹配 --tls-cert-file 的 x509 证书私钥的文件。
--tls-sni-cert-key namedCertKey     默认值:[]
一对 x509 证书和私钥文件路径,(可选)后缀为全限定域名的域名模式列表,可以使用带有通配符的前缀。 域模式也允许使用 IP 地址,但仅当 apiserver 对客户端请求的IP地址具有可见性时,才应使用 IP。 如果未提供域模式,则提取证书的名称。 非通配符匹配优先于通配符匹配,显式域模式优先于提取出的名称。 对于多个密钥/证书对,请多次使用 --tls-sni-cert-key。 示例:"example.crt,example.key" 或 "foo.crt,foo.key:*.foo.com,foo.com"。
--token-auth-file string
如果设置该值,这个文件将被用于通过令牌认证来保护 API 服务的安全端口。
-v, --v Level
日志级别详细程度的数字
--version version[=true]
打印版本信息并退出
--vmodule moduleSpec
以逗号分隔的 pattern=N 设置列表,用于文件过滤的日志记录
--watch-cache     默认值:true
在 apiserver 中启用监视缓存
--watch-cache-sizes stringSlice
某些资源(pods、nodes 等)的监视缓存大小设置,以逗号分隔。 每个资源对应的设置格式:resource[.group]#size,其中 resource 为小写复数(无版本), 对于 apiVersion v1(旧版核心 API)的资源要省略 group, 对其它资源要给出 group,size 为一个数字。 启用 watch-cache 时,此功能生效。 某些资源(replicationcontrollers、endpoints、nodes、pods、services、apiservices.apiregistration.k8s.io) 具有通过启发式设置的系统默认值,其他资源默认为 default-watch-cache-size

4 - kube-controller-manager

简介

Kubernetes 控制器管理器是一个守护进程,内嵌随 Kubernetes 一起发布的核心控制回路。 在机器人和自动化的应用中,控制回路是一个永不休止的循环,用于调节系统状态。 在 Kubernetes 中,每个控制器是一个控制回路,通过 API 服务器监视集群的共享状态, 并尝试进行更改以将当前状态转为期望状态。 目前,Kubernetes 自带的控制器例子包括副本控制器、节点控制器、命名空间控制器和服务账号控制器等。

kube-controller-manager [flags]

选项

--add-dir-header
若为 true,将文件目录添加到头部。
--allocate-node-cidrs
基于云驱动来为 Pod 分配和设置子网掩码。
--alsologtostderr
在向文件输出日志的同时,也将日志写到标准输出。
--attach-detach-reconcile-sync-period duration     默认值:1m0s
协调器(reconciler)在相邻两次对存储卷进行挂载和解除挂载操作之间的等待时间。 此时长必须长于 1 秒钟。此值设置为大于默认值时,可能导致存储卷无法与 Pods 匹配。
--authentication-kubeconfig string
此标志值为一个 kubeconfig 文件的路径名。该文件中包含与某 Kubernetes “核心” 服务器相关的信息,并支持足够的权限以创建 tokenreviews.authentication.k8s.io。 此选项是可选的。如果设置为空值,所有令牌请求都会被认作匿名请求, Kubernetes 也不再在集群中查找客户端的 CA 证书信息。
--authentication-skip-lookup
此值为 false 时,通过 authentication-kubeconfig 参数所指定的文件会被用来 检索集群中缺失的身份认证配置信息。
--authentication-token-webhook-cache-ttl duration     默认值:10s
对 Webhook 令牌认证设施返回结果的缓存时长。
--authentication-tolerate-lookup-failure
此值为 true 时,即使无法从集群中检索到缺失的身份认证配置信息也无大碍。 需要注意的是,这样设置可能导致所有请求都被视作匿名请求。
--authorization-always-allow-paths stringSlice     默认值:[/healthz]
鉴权过程中会忽略的一个 HTTP 路径列表。 换言之,控制器管理器会对列表中路径的访问进行授权,并且无须征得 Kubernetes “核心” 服务器同意。
--authorization-kubeconfig string
包含 Kubernetes “核心” 服务器信息的 kubeconfig 文件路径, 所包含信息具有创建 subjectaccessreviews.authorization.k8s.io 的足够权限。 此参数是可选的。如果配置为空字符串,未被鉴权模块所忽略的请求都会被禁止。
--authorization-webhook-cache-authorized-ttl duration     默认值:10s
对 Webhook 形式鉴权组件所返回的“已授权(Authorized)”响应的缓存时长。
--authorization-webhook-cache-unauthorized-ttl duration     默认值:10s
对 Webhook 形式鉴权组件所返回的“未授权(Unauthorized)”响应的缓存时长。
--azure-container-registry-config string
指向包含 Azure 容器仓库配置信息的文件的路径名。
--bind-address ip     默认值:0.0.0.0
针对 --secure-port 端口上请求执行监听操作的 IP 地址。 所对应的网络接口必须从集群中其它位置可访问(含命令行及 Web 客户端)。 如果此值为空或者设定为非特定地址(0.0.0.0 或 ::),意味着所有网络接口都在监听范围。
--cert-dir string
TLS 证书所在的目录。如果提供了 --tls-cert-file 和 --tls-private-key-file,此标志会被忽略。
--cidr-allocator-type string     默认值:"RangeAllocator"
要使用的 CIDR 分配器类型。
--client-ca-file string
如果设置了此标志,对于所有能够提供客户端证书的请求,若该证书由 client-ca-file 中所给机构之一签署,则该请求会被成功认证为客户端证书中 CommonName 所给的实体。
--cloud-config string
云驱动程序配置文件的路径。空字符串表示没有配置文件。
--cloud-provider string
云服务的提供者。空字符串表示没有对应的提供者(驱动)。
--cluster-cidr string
集群中 Pods 的 CIDR 范围。要求 --allocate-node-cidrs 标志为 true。
--cluster-name string     默认值:"kubernetes"
集群实例的前缀。
--cluster-signing-cert-file string     默认值:"/etc/kubernetes/ca/ca.pem"
包含 PEM 编码格式的 X509 CA 证书的文件名。该证书用来发放集群范围的证书。 如果设置了此标志,则不需要锦衣设置 --cluster-signing-* 标志。
--cluster-signing-duration duration     默认值:8760h0m0s
所签名证书的有效期限。
--cluster-signing-key-file string     默认值:"/etc/kubernetes/ca/ca.key"
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名。该私钥用来对集群范围证书签名。
--cluster-signing-kube-apiserver-client-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名, 该证书用于为 kubernetes.io/kube-apiserver-client 签署者颁发证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--cluster-signing-kube-apiserver-client-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名, 该私钥用于为 kubernetes.io/kube-apiserver-client 签署者签名证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--cluster-signing-kubelet-client-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名, 该证书用于为 kubernetes.io/kube-apiserver-client-kubelet 签署者颁发证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--cluster-signing-kubelet-client-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名, 该私钥用于为 kubernetes.io/kube-apiserver-client-kubelet 签署者签名证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--cluster-signing-kubelet-serving-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名, 该证书用于为 kubernetes.io/kubelet-serving 签署者颁发证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file。
--cluster-signing-kubelet-serving-key-file string
包含 PEM 编码的 RSA或ECDSA 私钥的文件名, 该私钥用于对 kubernetes.io/kubelet-serving 签署者的证书进行签名。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--cluster-signing-legacy-unknown-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名, 用于为 kubernetes.io/legacy-unknown 签署者颁发证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--cluster-signing-legacy-unknown-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名, 用于为 kubernetes.io/legacy-unknown 签署者签名证书。 如果指定,则不得设置 --cluster-signing-{cert,key}-file
--concurrent-deployment-syncs int32     默认值:5
可以并发同步的 Deployment 对象个数。数值越大意味着对 Deployment 的响应越及时, 同时也意味着更大的 CPU(和网络带宽)压力。
--concurrent-endpoint-syncs int32     默认值:5
可以并发执行的 Endpoints 同步操作个数。数值越大意味着更快的 Endpoints 更新操作, 同时也意味着更大的 CPU (和网络)压力。
--concurrent-gc-syncs int32     默认值:20
可以并发同步的垃圾收集工作线程个数。
--concurrent-namespace-syncs int32     默认值:10
可以并发同步的 Namespace 对象个数。较大的数值意味着更快的名字空间终结操作, 不过也意味着更多的 CPU (和网络)占用。
--concurrent-replicaset-syncs int32     默认值:5
可以并发同步的 ReplicaSet 个数。数值越大意味着副本管理的响应速度越快, 同时也意味着更多的 CPU (和网络)占用。
--concurrent-resource-quota-syncs int32     默认值:5
可以并发同步的 ResourceQuota 对象个数。数值越大,配额管理的响应速度越快, 不过对 CPU (和网络)的占用也越高。
--concurrent-service-endpoint-syncs int32     默认值:5
可以并发执行的服务端点同步操作个数。数值越大,端点片段(Endpoint Slice) 的更新速度越快,不过对 CPU (和网络)的占用也越高。默认值为 5。
--concurrent-service-syncs int32     默认值:1
可以并发同步的 Service 对象个数。数值越大,服务管理的响应速度越快, 不过对 CPU (和网络)的占用也越高。
--concurrent-serviceaccount-token-syncs int32     默认值:5
可以并发同步的服务账号令牌对象个数。数值越大,令牌生成的速度越快, 不过对 CPU (和网络)的占用也越高。
--concurrent-statefulset-syncs int32     默认值:5
可以并发同步的 StatefulSet 对象个数。数值越大,StatefulSet 管理的响应速度越快, 不过对 CPU (和网络)的占用也越高。
--concurrent-ttl-after-finished-syncs int32     默认值:5
可以并发同步的 TTL-after-finished 控制器线程个数。
--concurrent_rc_syncs int32     默认值:5
可以并发同步的 ReplicationController 对象个数。数值越大,副本管理的响应速度越快, 不过对 CPU (和网络)的占用也越高。
--configure-cloud-routes     默认值:true
决定是否由 --allocate-node-cidrs 所分配的 CIDR 要通过云驱动程序来配置。
--contention-profiling
在启用了性能分析(profiling)时,也启用锁竞争情况分析。
--controller-start-interval duration
在两次启动控制器管理器之间的时间间隔。
--controllers stringSlice     默认值:[*]
要启用的控制器列表。* 表示启用所有默认启用的控制器;foo 启用名为 foo 的控制器; -foo 表示禁用名为 foo 的控制器。
控制器的全集:attachdetach、bootstrapsigner、cloud-node-lifecycle、clusterrole-aggregation、cronjob、csrapproving、csrcleaner、csrsigning、daemonset、deployment、disruption、endpoint、endpointslice、endpointslicemirroring、ephemeral-volume、garbagecollector、horizontalpodautoscaling、job、namespace、nodeipam、nodelifecycle、persistentvolume-binder、persistentvolume-expander、podgc、pv-protection、pvc-protection、replicaset、replicationcontroller、resourcequota、root-ca-cert-publisher、route、service、serviceaccount、serviceaccount-token、statefulset、tokencleaner、ttl、ttl-after-finished
默认禁用的控制器有:bootstrapsigner 和 tokencleaner。
--deployment-controller-sync-period duration     默认值:30s
Deployment 资源的同步周期。
--disable-attach-detach-reconcile-sync
禁用卷挂接/解挂调节器的同步。禁用此同步可能导致卷存储与 Pod 之间出现错位。请小心使用。
--enable-dynamic-provisioning     默认值:true
在环境允许的情况下启用动态卷制备。
--enable-garbage-collector     默认值:true
启用通用垃圾收集器。必须与 kube-apiserver 中对应的标志一致。
--enable-hostpath-provisioner
在没有云驱动程序的情况下,启用 HostPath 持久卷的制备。 此参数便于对卷供应功能进行开发和测试。HostPath 卷的制备并非受支持的功能特性, 在多节点的集群中也无法工作,因此除了开发和测试环境中不应使用。
--enable-taint-manager     默认值:true
警告:此为Beta 阶段特性。设置为 true 时会启用 NoExecute 污点, 并在所有标记了此污点的节点上逐出所有无法忍受该污点的 Pods。
--endpoint-updates-batch-period duration
端点(Endpoint)批量更新周期时长。对 Pods 变更的处理会被延迟, 以便将其与即将到来的更新操作合并,从而减少端点更新操作次数。 较大的数值意味着端点更新的迟滞时间会增长,也意味着所生成的端点版本个数会变少。
--endpointslice-updates-batch-period duration
端点片段(Endpoint Slice)批量更新周期时长。对 Pods 变更的处理会被延迟, 以便将其与即将到来的更新操作合并,从而减少端点更新操作次数。 较大的数值意味着端点更新的迟滞时间会增长,也意味着所生成的端点版本个数会变少。
--experimental-logging-sanitization
[试验性功能] 当启用此标志时,被标记为敏感的字段(密码、密钥、令牌)不会被日志输出。
运行时的日志清理操作可能会引入相当程度的计算开销,因此不应在生产环境中启用。
--external-cloud-volume-plugin string
当云驱动程序设置为 external 时要使用的插件名称。此字符串可以为空。 只能在云驱动程序为 external 时设置。目前用来保证节点控制器和卷控制器能够 在三种云驱动上正常工作。
--feature-gates mapStringBool
一组 key=value 对,用来描述测试性/试验性功能的特性门控(Feature Gate)。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
APIPriorityAndFairness=true|false (BETA - 默认值=true)
APIResponseCompression=true|false (BETA - 默认值=true)
APIServerIdentity=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AllowInsecureBackendProxy=true|false (BETA - 默认值=true)
AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
AppArmor=true|false (BETA - 默认值=true)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认值=false)
BoundServiceAccountTokenVolume=true|false (ALPHA - 默认值=false)
CPUManager=true|false (BETA - 默认值=true)
CRIContainerLogRotation=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
CSIMigrationAWS=true|false (BETA - 默认值=false)
CSIMigrationAWSComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
CSIMigrationAzureDiskComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFile=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFileComplete=true|false (ALPHA - 默认值=false)
CSIMigrationGCE=true|false (BETA - 默认值=false)
CSIMigrationGCEComplete=true|false (ALPHA - 默认值=false)
CSIMigrationOpenStack=true|false (BETA - 默认值=false)
CSIMigrationOpenStackComplete=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
CSIMigrationvSphereComplete=true|false (BETA - 默认值=false)
CSIServiceAccountToken=true|false (ALPHA - 默认值=false)
CSIStorageCapacity=true|false (ALPHA - 默认值=false)
CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
CronJobControllerV2=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
DefaultPodTopologySpread=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DownwardAPIHugePages=true|false (ALPHA - 默认值=false)
DynamicKubeletConfig=true|false (BETA - 默认值=true)
EfficientWatchResumption=true|false (ALPHA - 默认值=false)
EndpointSlice=true|false (BETA - 默认值=true)
EndpointSliceNodeName=true|false (ALPHA - 默认值=false)
EndpointSliceProxying=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (ALPHA - 默认值=false)
EphemeralContainers=true|false (ALPHA - 默认值=false)
ExpandCSIVolumes=true|false (BETA - 默认值=true)
ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
ExpandPersistentVolumes=true|false (BETA - 默认值=true)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
GenericEphemeralVolume=true|false (ALPHA - 默认值=false)
GracefulNodeShutdown=true|false (ALPHA - 默认值=false)
HPAContainerMetrics=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HugePageStorageMediumSize=true|false (BETA - 默认值=true)
IPv6DualStack=true|false (ALPHA - 默认值=false)
ImmutableEphemeralVolumes=true|false (BETA - 默认值=true)
KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
LegacyNodeRoleBehavior=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
MixedProtocolLBService=true|false (ALPHA - 默认值=false)
NodeDisruptionExclusion=true|false (BETA - 默认值=true)
NonPreemptingPriority=true|false (BETA - 默认值=true)
PodDisruptionBudget=true|false (BETA - 默认值=true)
PodOverhead=true|false (BETA - 默认值=true)
ProcMountType=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
RemoveSelfLink=true|false (BETA - 默认值=true)
RootCAConfigMap=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
RunAsGroup=true|false (BETA - 默认值=true)
ServerSideApply=true|false (BETA - 默认值=true)
ServiceAccountIssuerDiscovery=true|false (BETA - 默认值=true)
ServiceLBNodePortControl=true|false (ALPHA - 默认值=false)
ServiceNodeExclusion=true|false (BETA - 默认值=true)
ServiceTopology=true|false (ALPHA - 默认值=false)
SetHostnameAsFQDN=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (ALPHA - 默认值=false)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
Sysctls=true|false (BETA - 默认值=true)
TTLAfterFinished=true|false (ALPHA - 默认值=false)
TopologyManager=true|false (BETA - 默认值=true)
ValidateProxyRedirects=true|false (BETA - 默认值=true)
WarningHeaders=true|false (BETA - 默认值=true)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
WindowsEndpointSliceProxying=true|false (ALPHA - 默认值=false)
--flex-volume-plugin-dir string     默认值:"/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
FlexVolume 插件要搜索第三方卷插件的目录路径。
-h, --help
kube-controller-manager 的帮助信息。
--horizontal-pod-autoscaler-cpu-initialization-period duration     默认值:5m0s
Pod 启动之后可以忽略 CPU 采样值的时长。
--horizontal-pod-autoscaler-downscale-stabilization duration     默认值:5m0s
自动扩缩程序的回溯时长。自动扩缩器不会基于在给定的时长内所建议的规模对负载执行规模缩小的操作。
--horizontal-pod-autoscaler-initial-readiness-delay duration     默认值:30s
Pod 启动之后,在此值所给定的时长内,就绪状态的变化都不会作为初始的就绪状态。
--horizontal-pod-autoscaler-sync-period duration     默认值:15s
水平 Pod 扩缩器对 Pods 数目执行同步操作的周期。
--horizontal-pod-autoscaler-tolerance float     默认值:0.1
此值为目标值与实际值的比值与 1.0 的差值。只有超过此标志所设的阈值时,HPA 才会考虑执行缩放操作。
--http2-max-streams-per-connection int
服务器为客户端所设置的 HTTP/2 连接中流式连接个数上限。 此值为 0 表示采用 Go 语言库所设置的默认值。
--kube-api-burst int32     默认值:30
与 Kubernetes API 服务器通信时突发峰值请求个数上限。
--kube-api-content-type string     默认值:"application/vnd.kubernetes.protobuf"
向 API 服务器发送请求时使用的内容类型(Content-Type)。
--kube-api-qps float32     默认值:20
与 API 服务器通信时每秒请求数(QPS)限制。
--kubeconfig string
指向 kubeconfig 文件的路径。该文件中包含主控节点位置以及鉴权凭据信息。
--large-cluster-size-threshold int32     默认值:50
节点控制器在执行 Pod 逐出操作逻辑时,基于此标志所设置的节点个数阈值来判断 所在集群是否为大规模集群。当集群规模小于等于此规模时, --secondary-node-eviction-rate 会被隐式重设为 0。
--leader-elect     默认值:true
在执行主循环之前,启动领导选举(Leader Election)客户端,并尝试获得领导者身份。 在运行多副本组件时启用此标志有助于提高可用性。
--leader-elect-lease-duration duration     默认值:15s
对于未获得领导者身份的节点,在探测到领导者身份需要更迭时需要等待 此标志所设置的时长,才能尝试去获得曾经是领导者但尚未续约的席位。 本质上,这个时长也是现有领导者节点在被其他候选节点替代之前可以停止 的最长时长。只有集群启用了领导者选举机制时,此标志才起作用。
--leader-elect-renew-deadline duration     默认值:10s
当前执行领导者角色的节点在被停止履行领导职责之前可多次尝试续约领导者身份; 此标志给出相邻两次尝试之间的间歇时长。 此值必须小于或等于租期时长(Lease Duration)。仅在集群启用了领导者选举时有效。
--leader-elect-resource-lock string     默认值:"endpointsleases"
在领导者选举期间用于锁定的资源对象的类型。 支持的选项为 "endpoints"、 "configmaps"、"leases"、"endpointsleases" 和 "configmapsleases"。
--leader-elect-resource-name string     默认值:"kube-controller-manager"
在领导者选举期间,用来执行锁操作的资源对象名称。
--leader-elect-resource-namespace string     默认值:"kube-system"
在领导者选举期间,用来执行锁操作的资源对象的名字空间。
--leader-elect-retry-period duration     默认值:2s
尝试获得领导者身份时,客户端在相邻两次尝试之间要等待的时长。此标志仅在启用了领导者选举的集群中起作用。
--log-backtrace-at traceLocation     默认值::0
当执行到 file:N 所给的文件和代码行时,日志机制会生成一个调用栈快照。
--log-dir string
此标志为非空字符串时,日志文件会写入到所给的目录中。
--log-file string
此标志为非空字符串时,意味着日志会写入到所给的文件中。
--log-file-max-size uint     默认值:1800
定义日志文件大小的上限。单位是兆字节(MB)。 若此值为 0,则不对日志文件尺寸进行约束。
--log-flush-frequency duration     默认值:5s
将内存中日志数据清除到日志文件中时,相邻两次清除操作之间最大间隔秒数。
--logging-format string     默认值:"text"
设置日志格式。允许的格式:"text","json"。
非默认格式不支持以下标志:--add_dir_header、--alsologtostderr、--log_backtrace_at、--log_dir、--log_file、--log_file_max_size、--logtostderr、--one_output、--skip_headers、--skip_log_headers、--stderrthreshold、--vmodule、--log-flush-frequency。
当前非默认选项为 Alpha,如有更改,恕不另行通知。
--logtostderr     默认值:true
将日志写出到标准错误输出(stderr)而不是写入到日志文件。
--master string
Kubernetes API 服务器的地址。此值会覆盖 kubeconfig 文件中所给的地址。
--max-endpoints-per-slice int32     默认值:100
每个 EndpointSlice 中可以添加的端点个数上限。每个片段中端点个数越多, 得到的片段个数越少,但是片段的规模会变得更大。默认值为 100。
--min-resync-period duration     默认值:12h0m0s
自省程序的重新同步时隔下限。实际时隔长度会在 min-resync-period2 * min-resync-period 之间。
--mirroring-concurrent-service-endpoint-syncs int32     默认值:5
EndpointSliceMirroring 控制器将同时执行的服务端点同步操作数。 较大的数量 = 更快的端点切片更新,但 CPU(和网络)负载更多。 默认为 5。
--mirroring-endpointslice-updates-batch-period duration
EndpointSlice 的长度更新了 EndpointSliceMirroring 控制器的批处理周期。 EndpointSlice 更改的处理将延迟此持续时间, 以使它们与潜在的即将进行的更新结合在一起,并减少 EndpointSlice 更新的总数。 较大的数量 = 较高的端点编程延迟,但是生成的端点修订版本数量较少
--mirroring-max-endpoints-per-subset int32     默认值:1000
EndpointSliceMirroring 控制器将添加到 EndpointSlice 的最大端点数。 每个分片的端点越多,端点分片越少,但资源越大。 默认为 100。
--namespace-sync-period duration     默认值:5m0s
对名字空间对象进行同步的周期。
--node-cidr-mask-size int32
集群中节点 CIDR 的掩码长度。对 IPv4 而言默认为 24;对 IPv6 而言默认为 64。
--node-cidr-mask-size-ipv4 int32
在双堆栈(同时支持 IPv4 和 IPv6)的集群中,节点 IPV4 CIDR 掩码长度。默认为 24。
--node-cidr-mask-size-ipv6 int32
在双堆栈(同时支持 IPv4 和 IPv6)的集群中,节点 IPv6 CIDR 掩码长度。默认为 64。
--node-eviction-rate float32     默认值:0.1
当某区域变得不健康,节点失效时,每秒钟可以从此标志所设定的节点 个数上删除 Pods。请参阅 --unhealthy-zone-threshold 以了解“健康”的判定标准。这里的区域(zone)在集群并不跨多个区域时 指的是整个集群。
--node-monitor-grace-period duration     默认值:40s
在将一个 Node 标记为不健康之前允许其无响应的时长上限。 必须比 kubelet 的 nodeStatusUpdateFrequency 大 N 倍; 这里 N 指的是 kubelet 发送节点状态的重试次数。
--node-monitor-period duration     默认值:5s
节点控制器对节点状态进行同步的重复周期。
--node-startup-grace-period duration     默认值:1m0s
在节点启动期间,节点可以处于无响应状态; 但超出此标志所设置的时长仍然无响应则该节点被标记为不健康。
--one-output
如果此标志为 true,则仅将日志写入其自身的严重性级别(而不是同时写入更低的严重性级别中)。
--permit-port-sharing
如果为 true,则在绑定端口时将使用 SO_REUSEPORT, 这允许多个实例在同一地址和端口上进行绑定。 [默认值 = false]
--pod-eviction-timeout duration     默认值:5m0s
在失效的节点上删除 Pods 时为其预留的宽限期。
--profiling     默认值:true
通过位于 host:port/debug/pprof/ 的 Web 接口启用性能分析。
--pv-recycler-increment-timeout-nfs int32     默认值:30
NFS 清洗 Pod 在清洗用过的卷时,根据此标志所设置的秒数,为每清洗 1 GiB 数据 增加对应超时时长,作为 activeDeadlineSeconds。
--pv-recycler-minimum-timeout-hostpath int32     默认值:60
对于 HostPath 回收器 Pod,设置其 activeDeadlineSeconds 参数下限。 此参数仅用于开发和测试目的,不适合在多节点集群中使用。
--pv-recycler-minimum-timeout-nfs int32     默认值:300
NFS 回收器 Pod 要使用的 activeDeadlineSeconds 参数下限。
--pv-recycler-pod-template-filepath-hostpath string
对 HostPath 持久卷进行回收利用时,用作模版的 Pod 定义文件所在路径。 此标志仅用于开发和测试目的,不适合多节点集群中使用。
--pv-recycler-pod-template-filepath-nfs string
对 NFS 卷执行回收利用时,用作模版的 Pod 定义文件所在路径。
--pv-recycler-timeout-increment-hostpath int32     默认值:30
HostPath 清洗器 Pod 在清洗对应类型持久卷时,为每 GiB 数据增加此标志所设置的秒数, 作为其 activeDeadlineSeconds 参数。此标志仅用于开发和测试环境,不适合多节点集群环境。
--pvclaimbinder-sync-period duration     默认值:15s
持久卷(PV)和持久卷申领(PVC)对象的同步周期。
--requestheader-allowed-names stringSlice
标志值是客户端证书中的 Common Names 列表。其中所列的名称可以通过 --requestheader-username-headers 所设置的 HTTP 头部来提供用户名。 如果此标志值为空表,则被 --requestheader-client-ca-file 中机构所验证过的所有客户端证书都是允许的。
--requestheader-client-ca-file string
根证书包文件名。在信任通过 --requestheader-username-headers 所指定的任何用户名之前,要使用这里的证书来检查请求中的客户证书。 警告:一般不要依赖对请求所作的鉴权结果。
--requestheader-extra-headers-prefix stringSlice     默认值:[x-remote-extra-]
要插入的请求头部前缀。建议使用 X-Remote-Exra-。
--requestheader-group-headers stringSlice     默认值:[x-remote-group]
用来检查用户组名的请求头部名称列表。建议使用 X-Remote-Group。
--requestheader-username-headers stringSlice     默认值:[x-remote-user]
用来检查用户名的请求头部名称列表。建议使用 X-Remote-User。
--resource-quota-sync-period duration     默认值:5m0s
对系统中配额用量信息进行同步的周期。
--root-ca-file string
如果此标志非空,则在服务账号的令牌 Secret 中会包含此根证书机构。 所指定标志值必须是一个合法的 PEM 编码的 CA 证书包。
--route-reconciliation-period duration     默认值:10s
对云驱动为节点所创建的路由信息进行调解的周期。
--secondary-node-eviction-rate float32     默认值:0.01
当区域不健康,节点失效时,每秒钟从此标志所给的节点个数上删除 Pods。 参见 --unhealthy-zone-threshold 以了解“健康与否”的判定标准。 在只有一个区域的集群中,区域指的是整个集群。如果集群规模小于 --large-cluster-size-threshold 所设置的节点个数时,此值被隐式地重设为 0。
--secure-port int     默认值:10257
在此端口上提供 HTTPS 身份认证和鉴权操作。若此标志值为 0,则不提供 HTTPS 服务。
--service-account-private-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥数据的文件名,这些私钥用来对服务账号令牌签名。
--service-cluster-ip-range string
集群中 Service 对象的 CIDR 范围。要求 --allocate-node-cidrs 标志为 true。
--show-hidden-metrics-for-version string
你希望展示隐藏度量值的上一个版本。只有上一个次版本号有意义,其他值都是不允许的。 字符串格式为 "<major>.<minor>"。例如:"1.16"。 此格式的目的是确保你能够有机会注意到下一个版本隐藏了一些额外的度量值, 而不是在更新版本中某些度量值被彻底删除时措手不及。
--skip-headers
若此标志为 true,则在日志消息中避免写入头部前缀信息。
--skip-log-headers
若此标志为 true,则在写入日志文件时避免写入头部信息。
--stderrthreshold severity     默认值:2
等于或大于此阈值的日志信息会被写入到标准错误输出(stderr)。
--terminated-pod-gc-threshold int32     默认值:12500
在已终止 Pods 垃圾收集器删除已终止 Pods 之前,可以保留的已删除 Pods 的个数上限。若此值小于等于 0,则相当于禁止垃圾回收已终止的 Pods。
--tls-cert-file string
包含 HTTPS 所用的默认 X509 证书的文件。如果有 CA 证书,会被串接在服务器证书之后。 若启用了 HTTPS 服务且 --tls-cert-file 和 --tls-private-key-file 标志未设置, 则为节点的公开地址生成自签名的证书和密钥,并保存到 --cert-dir 所给的目录中。
--tls-cipher-suites stringSlice
供服务器使用的加密包的逗号分隔列表。若忽略此标志,则使用 Go 语言默认的加密包。
可选值包括:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384.
不安全的值: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA
--tls-min-version string
可支持的最低 TLS 版本。可选值包括: “VersionTLS10”、“VersionTLS11”、“VersionTLS12”、“VersionTLS13”。
--tls-private-key-file string
包含与 --tls-cert-file 对应的默认 X509 私钥的文件。
--tls-sni-cert-key namedCertKey     默认值:[]
X509 证书和私钥文件路径的耦对。作为可选项,可以添加域名模式的列表, 其中每个域名模式都是可以带通配片段前缀的全限定域名(FQDN)。 域名模式也可以使用 IP 地址字符串,不过只有 API 服务器在所给 IP 地址上 对客户端可见时才可以使用 IP 地址。在未提供域名模式时,从证书中提取域名。 如果有非通配方式的匹配,则优先于通配方式的匹配;显式的域名模式优先于提取的域名。 当存在多个密钥/证书耦对时,可以多次使用 --tls-sni-cert-key 标志。 例如:example.crt,example.keyfoo.crt,foo.key:*.foo.com,foo.com
--unhealthy-zone-threshold float32     默认值:0.55
仅当给定区域中处于非就绪状态的节点(最少 3 个)的占比高于此值时,才将该区域视为不健康。
--use-service-account-credentials
当此标志为 true 时,为每个控制器单独使用服务账号凭据。
-v, --v Level
日志级别详细程度取值
--version version[=true]
打印版本信息之后退出
--vmodule moduleSpec
由逗号分隔的列表,每一项都是 pattern=N 格式,用来执行根据文件过滤的日志行为。
--volume-host-allow-local-loopback     默认值:true
此标志为 false 时,禁止本地回路 IP 地址和 --volume-host-cidr-denylist 中所指定的 CIDR 范围。
--volume-host-cidr-denylist stringSlice
用逗号分隔的一个 CIDR 范围列表,禁止使用这些地址上的卷插件。

5 - kube-proxy

简介

Kubernetes 网络代理在每个节点上运行。网络代理反映了每个节点上 Kubernetes API 中定义的服务,并且可以执行简单的 TCP、UDP 和 SCTP 流转发,或者在一组后端进行循环 TCP、UDP 和 SCTP 转发。当前可通过 Docker-links-compatible 环境变量找到服务集群 IP 和端口,这些环境变量指定了服务代理打开的端口。有一个可选的插件,可以为这些集群 IP 提供集群 DNS。用户必须使用 apiserver API 创建服务才能配置代理。

kube-proxy [flags]

选项

--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--bind-address 0.0.0.0     默认值: 0.0.0.0
代理服务器要使用的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)
--cleanup
如果为 true,清理 iptables 和 ipvs 规则并退出。
--cleanup-ipvs     默认值: true
如果设置为 true 并指定了 --cleanup,则 kube-proxy 除了常规清理外,还将刷新 IPVS 规则。
--cluster-cidr string
集群中 Pod 的 CIDR 范围。配置后,将从该范围之外发送到服务集群 IP 的流量被伪装,从 Pod 发送到外部 LoadBalancer IP 的流量将被重定向到相应的集群 IP。
--config string
配置文件的路径。
--config-sync-period duration     默认值: 15m0s
来自 apiserver 的配置的刷新频率。必须大于 0。
--conntrack-max-per-core int32     默认值: 32768
每个 CPU 核跟踪的最大 NAT 连接数(0 表示保留原样限制并忽略 conntrack-min)。
--conntrack-min int32     默认值: 131072
无论 conntrack-max-per-core 多少,要分配的 conntrack 条目的最小数量(将 conntrack-max-per-core 设置为 0 即可保持原样的限制)。
--conntrack-tcp-timeout-close-wait duration     默认值: 1h0m0s
处于 CLOSE_WAIT 状态的 TCP 连接的 NAT 超时
--conntrack-tcp-timeout-established duration     默认值: 24h0m0s
已建立的 TCP 连接的空闲超时(0 保持原样)
--detect-local-mode LocalMode
用于检测本地流量的模式
--feature-gates mapStringBool
一组键=值(key=value)对,描述了 alpha/experimental 的特征。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
APIPriorityAndFairness=true|false (ALPHA - 默认值=false)
APIResponseCompression=true|false (BETA - 默认值=true)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AllowInsecureBackendProxy=true|false (BETA - 默认值=true)
AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
AppArmor=true|false (BETA - 默认值=true)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认值=false)
BoundServiceAccountTokenVolume=true|false (ALPHA - 默认值=false)
CPUManager=true|false (BETA - 默认值=true)
CRIContainerLogRotation=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
CSIMigrationAWS=true|false (BETA - 默认值=false)
CSIMigrationAWSComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
CSIMigrationAzureDiskComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFile=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFileComplete=true|false (ALPHA - 默认值=false)
CSIMigrationGCE=true|false (BETA - 默认值=false)
CSIMigrationGCEComplete=true|false (ALPHA - 默认值=false)
CSIMigrationOpenStack=true|false (BETA - 默认值=false)
CSIMigrationOpenStackComplete=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
CSIMigrationvSphereComplete=true|false (BETA - 默认值=false)
CSIStorageCapacity=true|false (ALPHA - 默认值=false)
CSIVolumeFSGroupPolicy=true|false (ALPHA - 默认值=false)
ConfigurableFSGroupPolicy=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
DefaultPodTopologySpread=true|false (ALPHA - 默认值=false)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (ALPHA - 默认值=false)
DynamicKubeletConfig=true|false (BETA - 默认值=true)
EndpointSlice=true|false (BETA - 默认值=true)
EndpointSliceProxying=true|false (BETA - 默认值=true)
EphemeralContainers=true|false (ALPHA - 默认值=false)
ExpandCSIVolumes=true|false (BETA - 默认值=true)
ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
ExpandPersistentVolumes=true|false (BETA - 默认值=true)
ExperimentalHostUserNamespace默认值ing=true|false (BETA - 默认值=false)
GenericEphemeralVolume=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HugePageStorageMediumSize=true|false (BETA - 默认值=true)
HyperVContainer=true|false (ALPHA - 默认值=false)
IPv6DualStack=true|false (ALPHA - 默认值=false)
ImmutableEphemeralVolumes=true|false (BETA - 默认值=true)
KubeletPodResources=true|false (BETA - 默认值=true)
LegacyNodeRoleBehavior=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
NodeDisruptionExclusion=true|false (BETA - 默认值=true)
NonPreemptingPriority=true|false (BETA - 默认值=true)
PodDisruptionBudget=true|false (BETA - 默认值=true)
PodOverhead=true|false (BETA - 默认值=true)
ProcMountType=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
RemoveSelfLink=true|false (ALPHA - 默认值=false)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
RunAsGroup=true|false (BETA - 默认值=true)
RuntimeClass=true|false (BETA - 默认值=true)
SCTPSupport=true|false (BETA - 默认值=true)
SelectorIndex=true|false (BETA - 默认值=true)
ServerSideApply=true|false (BETA - 默认值=true)
ServiceAccountIssuerDiscovery=true|false (ALPHA - 默认值=false)
ServiceAppProtocol=true|false (BETA - 默认值=true)
ServiceNodeExclusion=true|false (BETA - 默认值=true)
ServiceTopology=true|false (ALPHA - 默认值=false)
SetHostnameAsFQDN=true|false (ALPHA - 默认值=false)
StartupProbe=true|false (BETA - 默认值=true)
StorageVersionHash=true|false (BETA - 默认值=true)
SupportNodePidsLimit=true|false (BETA - 默认值=true)
SupportPodPidsLimit=true|false (BETA - 默认值=true)
Sysctls=true|false (BETA - 默认值=true)
TTLAfterFinished=true|false (ALPHA - 默认值=false)
TokenRequest=true|false (BETA - 默认值=true)
TokenRequestProjection=true|false (BETA - 默认值=true)
TopologyManager=true|false (BETA - 默认值=true)
ValidateProxyRedirects=true|false (BETA - 默认值=true)
VolumeSnapshotDataSource=true|false (BETA - 默认值=true)
WarningHeaders=true|false (BETA - 默认值=true)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (ALPHA - 默认值=false)
WindowsEndpointSliceProxying=true|false (ALPHA - 默认值=false)
--healthz-bind-address 0.0.0.0     默认值: 0.0.0.0:10256
服务健康检查的 IP 地址和端口(对于所有 IPv4 接口设置为 '0.0.0.0:10256',对于所有 IPv6 接口设置为 '[::]:10256') 设置为空则禁用。
--healthz-bind-address 0.0.0.0     默认值: 0.0.0.0:10256
服务健康检查的 IP 地址和端口(设置为 0.0.0.0 表示使用所有 IPv4 接口,设置为 :: 表示使用所有 IPv6 接口)
-h, --help
kube-proxy 操作的帮助命令
--hostname-override string
如果非空,将使用此字符串作为标识而不是实际的主机名。
--iptables-masquerade-bit int32     默认值: 14
如果使用纯 iptables 代理,则 fwmark 空间的 bit 用于标记需要 SNAT 的数据包。必须在 [0,31] 范围内。
--iptables-min-sync-period duration     默认值:1s
iptables 规则可以随着端点和服务的更改而刷新的最小间隔(例如 '5s'、'1m'、'2h22m')。
--iptables-sync-period duration     默认值: 30s
刷新 iptables 规则的最大间隔(例如 '5s'、'1m'、'2h22m')。必须大于 0。
--ipvs-exclude-cidrs stringSlice
逗号分隔的 CIDR 列表,ipvs 代理在清理 IPVS 规则时不应使用此列表。
--ipvs-min-sync-period duration
ipvs 规则可以随着端点和服务的更改而刷新的最小间隔(例如 '5s'、'1m'、'2h22m')。
--ipvs-scheduler string
代理模式为 ipvs 时的 ipvs 调度器类型
--ipvs-strict-arp
通过将 arp_ignore 设置为 1 并将 arp_announce 设置为 2 启用严格的 ARP
--ipvs-sync-period duration     默认值: 30s
刷新 ipvs 规则的最大间隔(例如 '5s'、'1m'、'2h22m')。必须大于 0。
--ipvs-tcp-timeout duration
空闲 IPVS TCP 连接的超时时间,0 保持连接(例如 '5s'、'1m'、'2h22m')。
--ipvs-tcpfin-timeout duration
收到 FIN 数据包后,IPVS TCP 连接的超时,0 保持连接不变(例如 '5s'、'1m'、'2h22m')。
--ipvs-udp-timeout duration
IPVS UDP 数据包的超时,0 保持连接不动(例如 '5s'、'1m'、'2h22m')。
--kube-api-burst int32     默认值: 10
与 kubernetes apiserver 通信的数量
--kube-api-content-type string     默认值: "application/vnd.kubernetes.protobuf"
发送到 apiserver 的请求的内容类型。
--kube-api-qps float32     默认值: 5
与 kubernetes apiserver 交互时使用的 QPS
--kubeconfig string
包含授权信息的 kubeconfig 文件的路径(master 位置由 master 标志设置)。
--log-flush-frequency duration     默认值: 5s
两次日志刷新之间的最大秒数
--masquerade-all
如果使用纯 iptables 代理,则对通过服务集群 IP 发送的所有流量进行 SNAT(通常不需要)
--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)
--metrics-bind-address ipport 0.0.0.0     默认值: 127.0.0.1:10249
metrics 服务器要使用的 IP 地址和端口 (设置为 '0.0.0.0:10249' 则使用 IPv4 接口,设置为 '[::]:10249' 则使用所有 IPv6 接口) 设置为空则禁用。
--metrics-port int32     默认值: 10249
绑定 metrics 服务器的端口。使用 0 表示禁用。
--nodeport-addresses stringSlice
一个字符串值,指定用于 NodePorts 的地址。值可以是有效的 IP 块(例如 1.2.3.0/24, 1.2.3.4/32)。默认的空字符串切片([])表示使用所有本地地址。
--oom-score-adj int32     默认值: -999
kube-proxy 进程中的 oom-score-adj 值必须在 [-1000,1000] 范围内
--profiling
如果为 true,则通过 Web 接口 /debug/pprof 启用性能分析。
--proxy-mode ProxyMode
使用哪种代理模式:'userspace'(较旧)或 'iptables'(较快)或 'ipvs'(实验)。如果为空,使用最佳可用代理(当前为 iptables)。如果选择了 iptables 代理,无论如何,但系统的内核或 iptables 版本较低,这总是会回退到用户空间代理。
--proxy-port-range port-range
可以使用代理服务流量的主机端口(包括 beginPort-endPort、single port、beginPort+offset)的范围。如果(未指定,0 或 0-0)则随机选择端口。
--show-hidden-metrics-for-version string
你要显示隐藏指标的先前版本。 仅先前的次要版本有意义,不允许其他值。 格式为 <major>.<minor> ,例如:'1.16'。 这种格式的目的是确保你有机会注意到下一个发行版是否隐藏了其他指标, 而不是在之后将其永久删除时感到惊讶。
--udp-timeout duration     默认值: 250ms
空闲 UDP 连接将保持打开的时长(例如 '250ms','2s')。必须大于 0。仅适用于 proxy-mode=userspace
--version version[=true]
打印版本信息并退出
--write-config-to string
如果设置,将配置值写入此文件并退出。

6 - kube-scheduler

简介

Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。 调度器基于约束和可用资源为调度队列中每个 Pod 确定其可合法放置的节点。 调度器之后对所有合法的节点进行排序,将 Pod 绑定到一个合适的节点。 在同一个集群中可以使用多个不同的调度器;kube-scheduler 是其参考实现。 参阅调度 以获得关于调度和 kube-scheduler 组件的更多信息。

kube-scheduler [flags]

选项

--add-dir-header
如果为 true,则将文件目录添加到日志消息的头部
--address string     默认值:"0.0.0.0"
已弃用: 要监听 --port 端口的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)。 请参阅 --bind-address。
--algorithm-provider string
已弃用: 要使用的调度算法驱动,此标志设置组件配置框架的默认插件。 可选值:ClusterAutoscalerProvider | DefaultProvider
--alsologtostderr
--authentication-kubeconfig string
指向具有足够权限以创建 tokenaccessreviews.authentication.k8s.io 的 Kubernetes 核心服务器的 kubeconfig 文件。 这是可选的。如果为空,则所有令牌请求均被视为匿名请求,并且不会在集群中查找任何客户端 CA。
--authentication-skip-lookup
如果为 false,则 authentication-kubeconfig 将用于从集群中查找缺少的身份验证配置。
--authentication-token-webhook-cache-ttl duration     默认值:10s
缓存来自 Webhook 令牌身份验证器的响应的持续时间。
--authentication-tolerate-lookup-failure     默认值:true
如果为 true,则无法从集群中查找缺少的身份验证配置是致命的。 请注意,这可能导致身份验证将所有请求视为匿名。
--authorization-always-allow-paths stringSlice     默认值:[/healthz]
在授权过程中跳过的 HTTP 路径列表,即在不联系 'core' kubernetes 服务器的情况下被授权的 HTTP 路径。
--authorization-kubeconfig string
指向具有足够权限以创建 subjectaccessreviews.authorization.k8s.io 的 Kubernetes 核心服务器的 kubeconfig 文件。这是可选的。 如果为空,则所有未被鉴权机制略过的请求都会被禁止。
--authorization-webhook-cache-authorized-ttl duration     默认值:10s
缓存来自 Webhook 授权者的 'authorized' 响应的持续时间。
--authorization-webhook-cache-unauthorized-ttl duration     默认值:10s
缓存来自 Webhook 授权者的 'unauthorized' 响应的持续时间。
--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--bind-address ip     默认值:0.0.0.0
监听 --secure-port 端口的 IP 地址。 集群的其余部分以及 CLI/ Web 客户端必须可以访问关联的接口。 如果为空,将使用所有接口(0.0.0.0 表示使用所有 IPv4 接口,"::" 表示使用所有 IPv6 接口)。
--cert-dir string
TLS 证书所在的目录。如果提供了--tls-cert-file 和 --tls private-key-file, 则将忽略此参数。
--client-ca-file string
如果已设置,由 client-ca-file 中的证书机构签名的客户端证书的任何请求都将使用 与客户端证书的 CommonName 对应的身份进行身份验证。
--config string
配置文件的路径。以下标志会覆盖此文件中的值:
--address
--port
--use-legacy-policy-config
--policy-configmap
--policy-config-file
--algorithm-provider
--contention-profiling
已弃用: 如果启用了性能分析,则启用锁竞争分析
--experimental-logging-sanitization
[试验性功能] 当启用此标志时,标记为敏感的字段(密码、密钥、令牌)等不会被日志 输出。
运行时的日志清理操作可能引入相当程度的计算开销,因此不应在生产环境中启用。
--feature-gates mapStringBool
一组 key=value 对,描述了 alpha/experimental 特征开关。选项包括:
APIListChunking=true|false (BETA - 默认值=true)
APIPriorityAndFairness=true|false (BETA - 默认值=true)
APIResponseCompression=true|false (BETA - 默认值=true)
APIServerIdentity=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AllowInsecureBackendProxy=true|false (BETA - 默认值=true)
AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
AppArmor=true|false (BETA - 默认值=true)
BalanceAttachedNodeVolumes=true|false (ALPHA - 默认值=false)
BoundServiceAccountTokenVolume=true|false (ALPHA - 默认值=false)
CPUManager=true|false (BETA - 默认值=true)
CRIContainerLogRotation=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
CSIMigrationAWS=true|false (BETA - 默认值=true)
CSIMigrationAWSComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureDisk=true|false (BETA - 默认值=true)
CSIMigrationAzureDiskComplete=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFile=true|false (ALPHA - 默认值=false)
CSIMigrationAzureFileComplete=true|false (ALPHA - 默认值=false)
CSIMigrationGCE=true|false (BETA - 默认值=true)
CSIMigrationGCEComplete=true|false (ALPHA - 默认值=false)
CSIMigrationOpenStack=true|false (BETA - 默认值=true)
CSIMigrationOpenStackComplete=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
CSIMigrationvSphereComplete=true|false (BETA - default=false)
CSIServiceAccountToken=true|false (ALPHA - 默认值=false)
CSIStorageCapacity=true|false (ALPHA - 默认值=false)
CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
CronJobControllerV2=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
DefaultPodTopologySpread=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DownwardAPIHugePages=true|false (ALPHA - 默认值=false)
DynamicKubeletConfig=true|false (BETA - 默认值=true)
EfficientWatchResumption=true|false (ALPHA - 默认值=false)
EndpointSlice=true|false (ALPHA - 默认值=false)
EndpointSliceNodeName=true|false (ALPHA - 默认值=false)
EndpointSliceProxying=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (ALPHA - 默认值=false)
EphemeralContainers=true|false (ALPHA - 默认值=false)
ExpandCSIVolumes=true|false (BETA - 默认值=true)
ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
ExpandPersistentVolumes=true|false (BETA - 默认值=true)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
GenericEphemeralVolume=true|false (ALPHA - 默认值=false)
GracefulNodeShutdown=true|false (ALPHA - 默认值=false)
HPAContainerMetrics=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HugePageStorageMediumSize=true|false (BETA - 默认值=true)
IPv6DualStack=true|false (ALPHA - 默认值=false)
ImmutableEphemeralVolumes=true|false (BETA - 默认值=true)
KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
LegacyNodeRoleBehavior=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
MixedProtocolLBService=true|false (ALPHA - 默认值=false)
NodeDisruptionExclusion=true|false (BETA - 默认值=false)
NonPreemptingPriority=true|false (BETA - 默认值=true)
PodDisruptionBudget=true|false (BETA - 默认值=true)
PodOverhead=true|false (BETA - 默认值=true)
ProcMountType=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
RemoveSelfLink=true|false (BETA - 默认值=true)
RootCAConfigMap=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
RunAsGroup=true|false (BETA - 默认值=true)
ServerSideApply=true|false (BETA - 默认值=true)
ServiceAccountIssuerDiscovery=true|false (BETA - 默认值=true)
ServiceLBNodePortControl=true|false (ALPHA - 默认值=false)
ServiceNodeExclusion=true|false (BETA - 默认值=true)
ServiceTopology=true|false (ALPHA - 默认值=false)
SetHostnameAsFQDN=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (ALPHA - 默认值=false)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
Sysctls=true|false (BETA - 默认值=true)
TTLAfterFinished=true|false (ALPHA - 默认值=false)
TopologyManager=true|false (BETA - 默认值=true)
ValidateProxyRedirects=true|false (BETA - 默认值=true)
WarningHeaders=true|false (BETA - 默认值=true)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
WindowsEndpointSliceProxying=true|false (ALPHA - 默认值=false)
--hard-pod-affinity-symmetric-weight int32     默认值:1
已弃用: RequiredDuringScheduling 亲和性是不对称的,但是存在与每个 RequiredDuringScheduling 关联性规则相对应的隐式 PreferredDuringScheduling 关联性规则。 --hard-pod-affinity-symmetric-weight 代表隐式 PreferredDuringScheduling 关联性规则的权重。权重必须在 0-100 范围内。此选项已移至策略配置文件。
-h, --help
kube-scheduler 帮助命令
--http2-max-streams-per-connection int
服务器为客户端提供的 HTTP/2 连接最大限制。零表示使用 Golang 的默认值。
--kube-api-burst int32     默认值:100
已弃用: 与 kubernetes API 通信时使用的突发请求个数限值。
--kube-api-content-type string     默认值:"application/vnd.kubernetes.protobuf"
已弃用: 发送到 API 服务器的请求的内容类型。
--kube-api-qps float32     默认值:50
已弃用: 与 kubernetes apiserver 通信时要使用的 QPS
--kubeconfig string
已弃用: 包含鉴权和主节点位置信息的 kubeconfig 文件的路径。
--leader-elect     默认值:true
在执行主循环之前,开始领导者选举并选出领导者。 使用多副本来实现高可用性时,可启用此标志。
--leader-elect-lease-duration duration     默认值:15s
非领导者候选人在观察到领导者更新后将等待直到试图获得领导但未更新的领导者职位的等待时间。 这实际上是领导者在被另一位候选人替代之前可以停止的最大持续时间。 该情况仅在启用了领导者选举的情况下才适用。
--leader-elect-renew-deadline duration     默认值:10s
领导者尝试在停止领导之前更新领导职位的间隔时间。该时间必须小于或等于租赁期限。 仅在启用了领导者选举的情况下才适用。
--leader-elect-resource-lock endpoints     默认值:"leases"
在领导者选举期间用于锁定的资源对象的类型。支持的选项是 `endpoints`、 `configmaps`、`leases`、`endpointleases` 和 `configmapsleases`。
--leader-elect-resource-name string     默认值:"kube-scheduler"
在领导者选举期间用于锁定的资源对象的名称。
--leader-elect-resource-namespace string     默认值:"kube-system"
在领导者选举期间用于锁定的资源对象的命名空间。
--leader-elect-retry-period duration     默认值:2s
客户应在尝试获取和更新领导之间等待的时间。仅在启用了领导者选举的情况下才适用。
--lock-object-name string     默认值:"kube-scheduler"
已弃用: 定义锁对象的名称。将被删除以便使用 --leader-elect-resource-name
--lock-object-namespace string     默认值:"kube-system"
已弃用: 定义锁对象的命名空间。将被删除以便使用 leader-elect-resource-namespace
--log-backtrace-at traceLocation     默认值::0
当记录命中行文件 file 的第 N 行时输出堆栈跟踪。
--log-dir string
如果为非空,则在此目录中写入日志文件。
--log-file string
如果为非空,则使用此文件作为日志文件。
--log-file-max-size uint     默认值:1800
定义日志文件可以增长到的最大值。单位为兆字节。 如果值为 0,则最大文件大小为无限制。
--log-flush-frequency duration     默认值:5s
两次日志刷新之间的最大秒数。
--logging-format string     默认值:"text"
设置日志格式。可选格式:"json"、"text"。
非默认格式不会在意以下标志设置: --add_dir_header、--alsologtostderr、--log_backtrace_at、--log_dir、 --log_file、--log_file_max_size、--logtostderr、--one_output、 --skip_headers、--skip_log_headers、--stderrthreshold、--vmodule、 --log-flush-frequency.
非默认选项目前处于 Alpha 阶段,有可能会出现变更且无事先警告。
--logtostderr     默认值:true
日志记录到标准错误输出而不是文件。
--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)。
--one-output
若此标志为 true,则日志仅写入其自身的严重性级别,而不会写入所有较低严重性级别。
--permit-port-sharing
如果此标志为 true,在绑定端口时会使用 SO_REUSEPORT,从而允许不止一个 实例绑定到同一地址和端口。
--policy-config-file string
已弃用:包含调度器策略配置的文件。 当策略 ConfigMap 为提供时,或者 --use-legacy-policy-config=true 时使用此文件。 注意:当此标志与插件配置一起使用时,调度器会失败。
--policy-configmap string
已弃用: 包含调度器策略配置的 ConfigMap 对象的名称。 如果 --use-legacy-policy-config=false,则它必须在调度器初始化之前存在于 系统命名空间中。配置数据必须对应 'data' 映射中键名为 'policy.cfg' 的元素的值。 注意:如果与插件配置一起使用,调度器会失败。
--policy-configmap-namespace string     默认值:"kube-system"
已弃用: 策略 ConfigMap 所在的名字空间。如果未提供或为空,则将使用 kube-system 名字空间。 注意:如果与插件配置一起使用,调度器会失败。
--port int     默认值:10251
已弃用: 在没有身份验证和授权的情况下不安全地为 HTTP 服务的端口。 如果为0,则根本不提供 HTTP。请参见--secure-port。
--profiling
已弃用: 通过 Web 界面主机启用配置文件:host:port/debug/pprof/
--requestheader-allowed-names stringSlice
客户端证书通用名称列表,允许在 --requestheader-username-headers 指定的头部中提供用户名。如果为空,则允许任何由 --requestheader-client-ca-file 中证书机构验证的客户端证书。
--requestheader-client-ca-file string
在信任 --requestheader-username-headers 指定的头部中的用户名之前 用于验证传入请求上的客户端证书的根证书包。 警告:通常不应假定传入请求已经完成鉴权。
--requestheader-extra-headers-prefix stringSlice     默认值:[x-remote-extra-]
要检查请求头部前缀列表。建议使用 X-Remote-Extra-
--requestheader-group-headers stringSlice     默认值:[x-remote-group]
用于检查组的请求头部列表。建议使用 X-Remote-Group
--requestheader-username-headers stringSlice     默认值:[x-remote-user]
用于检查用户名的请求头部列表。X-Remote-User 很常用。
--scheduler-name string     默认值:"default-scheduler"
已弃用: 调度器名称,用于根据 Pod 的 "spec.schedulerName" 选择此 调度器将处理的 Pod。
--secure-port int     默认值:10259
通过身份验证和授权为 HTTPS 服务的端口。如果为 0,则根本不提供 HTTPS。
--show-hidden-metrics-for-version string
你希望显式隐藏指标的老版本号。只有较早的此版本号有意义,其它值都是不允许的。 格式为 <主版本>.<此版本>,例如:'1.16'。 此格式的目的是确保你有机会注意到是否下一个发行版本中隐藏了一些额外的指标, 而不是当某些指标在该版本之后被彻底移除时感到震惊。
--skip-headers
如果为 true,日志消息中不再写入头部前缀。
--skip-log-headers
如果为 true,则在打开日志文件时忽略其头部。
--stderrthreshold severity     默认值:2
达到或超过此阈值的日志会被写入到标准错误输出。
--tls-cert-file string
包含默认的 HTTPS x509 证书的文件。(CA证书(如果有)在服务器证书之后并置)。 如果启用了 HTTPS 服务,并且未提供 --tls-cert-file--tls-private-key-file,则会为公共地址生成一个自签名证书和密钥, 并将其保存到 --cert-dir 指定的目录中。
--tls-cipher-suites stringSlice
服务器的密码套件列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。 优先考虑的值: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
不安全的值: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA.
--tls-min-version string
支持的最低 TLS 版本。可能的值:VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13
--tls-private-key-file string
包含与 --tls-cert-file 匹配的默认 x509 私钥的文件。
--tls-sni-cert-key namedCertKey     默认值:[]
一对 x509 证书和私钥文件路径,可选地后缀为完全限定域名的域模式列表, 并可能带有前缀的通配符段。如果未提供域名模式,则提取证书名称。 非通配符匹配优先于通配符匹配,显式域名模式优先于提取而来的名称。 若有多个密钥/证书对,可多次使用 --tls-sni-cert-key。 例如: "example.crt,example.key" 或者 "foo.crt,foo.key:*.foo.com,foo.com"。
--use-legacy-policy-config
已弃用:设置为 true 时,调度程序将忽略策略 ConfigMap 并使用策略配置文件。 注意:当此标志与插件配置一起使用时,调度器会失败。
-v, --v Level
设置日志级别详细程度的数字
--version version[=true]
打印版本信息并退出。
--vmodule moduleSpec
以逗号分隔的 pattern=N 设置列表,用于文件过滤的日志记录。
--write-config-to string
如果已设置,将配置值写入此文件并退出。

7 - Kubelet 认证/鉴权

概述

kubelet 的 HTTPS 端点公开了 API, 这些 API 可以访问敏感度不同的数据, 并允许你在节点上和容器内以不同级别的权限执行操作。

本文档介绍了如何对 kubelet 的 HTTPS 端点的访问进行认证和鉴权。

Kubelet 身份认证

默认情况下,未被已配置的其他身份认证方法拒绝的对 kubelet 的 HTTPS 端点的请求会被视为匿名请求, 并被赋予 system:anonymous 用户名和 system:unauthenticated 组。

要禁用匿名访问并向未经身份认证的请求发送 401 Unauthorized 响应,请执行以下操作:

  • --anonymous-auth=false 标志启动 kubelet

要对 kubelet 的 HTTPS 端点启用 X509 客户端证书认证:

  • --client-ca-file 标志启动 kubelet,提供一个 CA 证书包以供验证客户端证书
  • --kubelet-client-certificate--kubelet-client-key 标志启动 apiserver
  • 有关更多详细信息,请参见 apiserver 身份验证文档

要启用 API 持有者令牌(包括服务帐户令牌)以对 kubelet 的 HTTPS 端点进行身份验证,请执行以下操作:

  • 确保在 API 服务器中启用了 authentication.k8s.io/v1beta1 API 组
  • --authentication-token-webhook--kubeconfig 标志启动 kubelet
  • kubelet 调用已配置的 API 服务器上的 TokenReview API,以根据持有者令牌确定用户信息

Kubelet 鉴权

任何成功通过身份验证的请求(包括匿名请求)之后都会被鉴权。 默认的鉴权模式为 AlwaysAllow,它允许所有请求。

细分对 kubelet API 的访问权限可能有多种原因:

  • 启用了匿名身份验证,但是应限制匿名用户调用 kubelet API 的能力
  • 启用了持有者令牌认证,但应限制任意 API 用户(如服务帐户)调用 kubelet API 的能力
  • 启用了客户端证书身份验证,但仅应允许已配置的 CA 签名的某些客户端证书使用 kubelet API

要细分对 kubelet API 的访问权限,请将鉴权委派给 API 服务器:

  • 确保在 API 服务器中启用了 authorization.k8s.io/v1beta1 API 组
  • --authorization-mode=Webhook--kubeconfig 标志启动 kubelet
  • kubelet 调用已配置的 API 服务器上的 SubjectAccessReview API, 以确定每个请求是否得到鉴权

kubelet 使用与 apiserver 相同的 请求属性 方法对 API 请求执行鉴权。

请求的动词根据传入请求的 HTTP 动词确定:

HTTP 动词请求动词
POSTcreate
GET, HEADget
PUTupdate
PATCHpatch
DELETEdelete

资源和子资源是根据传入请求的路径确定的:

Kubelet API资源子资源
/stats/*nodesstats
/metrics/*nodesmetrics
/logs/*nodeslog
/spec/*nodesspec
其它所有nodesproxy

名字空间和 API 组属性始终是空字符串, 资源名称始终是 kubelet 的 Node API 对象的名称。

在此模式下运行时,请确保传递给 apiserver 的由 --kubelet-client-certificate--kubelet-client-key 标志标识的用户具有以下属性的鉴权:

  • verb=*, resource=nodes, subresource=proxy
  • verb=*, resource=nodes, subresource=stats
  • verb=*, resource=nodes, subresource=log
  • verb=*, resource=nodes, subresource=spec
  • verb=*, resource=nodes, subresource=metrics

8 - TLS 启动引导

在一个 Kubernetes 集群中,工作节点上的组件(kubelet 和 kube-proxy)需要与 Kubernetes 主控组件通信,尤其是 kube-apiserver。 为了确保通信本身是私密的、不被干扰,并且确保集群的每个组件都在与另一个 可信的组件通信,我们强烈建议使用节点上的客户端 TLS 证书。

启动引导这些组件的正常过程,尤其是需要证书来与 kube-apiserver 安全通信的 工作节点,可能会是一个具有挑战性的过程,因为这一过程通常不受 Kubernetes 控制, 需要不少额外工作。 这也使得初始化或者扩缩一个集群的操作变得具有挑战性。

为了简化这一过程,从 1.4 版本开始,Kubernetes 引入了一个证书请求和签名 API 以便简化此过程。该提案可在 这里看到。

本文档描述节点初始化的过程,如何为 kubelet 配置 TLS 客户端证书启动引导, 以及其背后的工作原理。

初始化过程

当工作节点启动时,kubelet 执行以下操作:

  1. 寻找自己的 kubeconfig 文件
  2. 检索 API 服务器的 URL 和凭据,通常是来自 kubeconfig 文件中的 TLS 密钥和已签名证书
  3. 尝试使用这些凭据来与 API 服务器通信

假定 kube-apiserver 成功地认证了 kubelet 的凭据数据,它会将 kubelet 视为 一个合法的节点并开始将 Pods 分派给该节点。

注意,签名的过程依赖于:

  • kubeconfig 中包含密钥和本地主机的证书
  • 证书被 kube-apiserver 所信任的一个证书机构(CA)所签名

负责部署和管理集群的人有以下责任:

  1. 创建 CA 密钥和证书
  2. 将 CA 证书发布到 kube-apiserver 运行所在的主控节点上
  3. 为每个 kubelet 创建密钥和证书;强烈建议为每个 kubelet 使用独一无二的、 CN 取值与众不同的密钥和证书
  4. 使用 CA 密钥对 kubelet 证书签名
  5. 将 kubelet 密钥和签名的证书发布到 kubelet 运行所在的特定节点上

本文中描述的 TLS 启动引导过程有意简化甚至完全自动化上述过程,尤其是 第三步之后的操作,因为这些步骤是初始化或者扩缩集群时最常见的操作。

启动引导初始化

在启动引导初始化过程中,会发生以下事情:

  1. kubelet 启动
  2. kubelet 看到自己 没有 对应的 kubeconfig 文件
  3. kubelet 搜索并发现 bootstrap-kubeconfig 文件
  4. kubelet 读取该启动引导文件,从中获得 API 服务器的 URL 和用途有限的 一个“令牌(Token)”
  5. kubelet 建立与 API 服务器的连接,使用上述令牌执行身份认证
  6. kubelet 现在拥有受限制的凭据来创建和取回证书签名请求(CSR)
  7. kubelet 为自己创建一个 CSR,并将其 signerName 设置为 kubernetes.io/kube-apiserver-client-kubelet
  8. CSR 被以如下两种方式之一批复:
  • 如果配置了,kube-controller-manager 会自动批复该 CSR
  • 如果配置了,一个外部进程,或者是人,使用 Kubernetes API 或者使用 kubectl 来批复该 CSR
  1. kubelet 所需要的证书被创建
  1. 证书被发放给 kubelet
  2. kubelet 取回该证书
  3. kubelet 创建一个合适的 kubeconfig,其中包含密钥和已签名的证书
  4. kubelet 开始正常操作
  5. 可选地,如果配置了,kubelet 在证书接近于过期时自动请求更新证书
  6. 更新的证书被批复并发放;取决于配置,这一过程可能是自动的或者手动完成

本文的其余部分描述配置 TLS 启动引导的必要步骤及其局限性。

配置

要配置 TLS 启动引导及可选的自动批复,你必须配置以下组件的选项:

  • kube-apiserver
  • kube-controller-manager
  • kubelet
  • 集群内的资源:ClusterRoleBinding 以及可能需要的 ClusterRole

此外,你需要有 Kubernetes 证书机构(Certificate Authority,CA)。

证书机构

就像在没有启动引导的情况下,你会需要证书机构(CA)密钥和证书。 这些数据会被用来对 kubelet 证书进行签名。 如前所述,将证书机构密钥和证书发布到主控节点是你的责任。

就本文而言,我们假定这些数据被发布到主控节点上的 /var/lib/kubernetes/ca.pem(证书)和 /var/lib/kubernetes/ca-key.pem(密钥)文件中。 我们将这两个文件称作“Kubernetes CA 证书和密钥”。 所有 Kubernetes 组件(kubelet、kube-apiserver、kube-controller-manager)都使用 这些凭据,并假定这里的密钥和证书都是 PEM 编码的。

kube-apiserver 配置

启用 TLS 启动引导对 kube-apiserver 有若干需求:

  • 能够识别对客户端证书进行签名的 CA
  • 能够对启动引导的 kubelet 执行身份认证,并将其置入 system:bootstrappers
  • 能够对启动引导的 kubelet 执行鉴权操作,允许其创建证书签名请求(CSR)

识别客户证书

对于所有客户端证书的认证操作而言,这是很常见的。 如果还没有设置,要为 kube-apiserver 命令添加 --client-ca-file=FILENAME 标志来启用客户端证书认证,在标志中引用一个包含用来签名的证书的证书机构包, 例如:--client-ca-file=/var/lib/kubernetes/ca.pem

初始启动引导认证

为了让启动引导的 kubelet 能够连接到 kube-apiserver 并请求证书, 它必须首先在服务器上认证自身身份。你可以使用任何一种能够对 kubelet 执行身份认证的 身份认证组件

尽管所有身份认证策略都可以用来对 kubelet 的初始启动凭据来执行认证, 出于容易准备的因素,建议使用如下两个身份认证组件:

  1. 启动引导令牌(Bootstrap Token)
  2. 令牌认证文件

启动引导令牌是一种对 kubelet 进行身份认证的方法,相对简单且容易管理, 且不需要在启动 kube-apiserver 时设置额外的标志。 启动引导令牌从 Kubernetes 1.12 开始是一种 Beta 功能特性。

无论选择哪种方法,这里的需求是 kubelet 能够被身份认证为某个具有如下权限的用户:

  1. 创建和读取 CSR
  2. 在启用了自动批复时,能够在请求节点客户端证书时得到自动批复

使用启动引导令牌执行身份认证的 kubelet 会被认证为 system:bootstrappers 组中的用户。这是使用启动引导令牌的一种标准方法。

随着这个功能特性的逐渐成熟,你需要确保令牌绑定到某基于角色的的访问控制(RBAC) 策略上,从而严格限制请求(使用启动引导令牌) 仅限于客户端申请提供证书。当 RBAC 被配置启用时,可以将令牌限制到某个组,从而 提高灵活性。例如,你可以在准备节点期间禁止某特定启动引导组的访问。

启动引导令牌

启动引导令牌的细节在这里 详述。启动引导令牌在 Kubernetes 集群中存储为 Secret 对象,被发放给各个 kubelet。 你可以在整个集群中使用同一个令牌,也可以为每个节点发放单独的令牌。

这一过程有两个方面:

  1. 基于令牌 ID、机密数据和范畴信息创建 Kubernetes Secret
  2. 将令牌发放给 kubelet

从 kubelet 的角度,所有令牌看起来都很像,没有特别的含义。 从 kube-apiserver 服务器的角度,启动引导令牌是很特殊的。 根据其 typenamespacename,kube-apiserver 能够将认作特殊的令牌, 并授予携带该令牌的任何人特殊的启动引导权限,换言之,将其视为 system:bootstrappers 组的成员。这就满足了 TLS 启动引导的基本需求。

关于创建 Secret 的进一步细节可访问这里

如果你希望使用启动引导令牌,你必须在 kube-apiserver 上使用下面的标志启用之:

--enable-bootstrap-token-auth=true

令牌认证文件

kube-apiserver 能够将令牌视作身份认证依据。 这些令牌可以是任意数据,但必须表示为基于某安全的随机数生成器而得到的 至少 128 位混沌数据。这里的随机数生成器可以是现代 Linux 系统上的 /dev/urandom。生成令牌的方式有很多种。例如:

head -c 16 /dev/urandom | od -An -t x | tr -d ' '

上面的命令会生成类似于 02b50b05283e98dd0fd71db496ef01e8 这样的令牌。

令牌文件看起来是下面的例子这样,其中前面三个值可以是任何值,用引号括起来 的组名称则只能用例子中给的值。

02b50b05283e98dd0fd71db496ef01e8,kubelet-bootstrap,10001,"system:bootstrappers"

向 kube-apiserver 添加 --token-auth-file=FILENAME 标志(或许这要对 systemd 的单元文件作修改)以启用令牌文件。参见 这里 的文档以了解进一步的细节。

授权 kubelet 创建 CSR

现在启动引导节点被身份认证为 system:bootstrapping 组的成员,它需要被 授权 创建证书签名请求(CSR)并在证书被签名之后将其取回。 幸运的是,Kubernetes 提供了一个 ClusterRole,其中精确地封装了这些许可, system:node-bootstrapper

为了实现这一点,你只需要创建 ClusterRoleBinding,将 system:bootstrappers 组绑定到集群角色 system:node-bootstrapper

# 允许启动引导节点创建 CSR
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: create-csrs-for-bootstrapping
subjects:
- kind: Group
  name: system:bootstrappers
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: system:node-bootstrapper
  apiGroup: rbac.authorization.k8s.io

kube-controller-manager 配置

API 服务器从 kubelet 收到证书请求并对这些请求执行身份认证,但真正负责发放 签名证书的是控制器管理器。

控制器管理器通过一个证书发放的控制回路来执行此操作。该操作的执行方式是使用磁盘上 的文件用 cfssl 本地签名组件 来完成。目前,所发放的所有证书都有一年的有效期,并设定了默认的一组密钥用法。

为了让控制器管理器对证书签名,它需要:

  • 能够访问你之前所创建并分发的“Kubernetes CA 密钥和证书”
  • 启用 CSR 签名

访问密钥和证书

如前所述,你需要创建一个 Kubernetes CA 密钥和证书,并将其发布到主控节点。 这些数据会被控制器管理器来对 kubelet 证书进行签名。

由于这些被签名的证书反过来会被 kubelet 用来在 kube-apiserver 执行普通的 kubelet 身份认证,很重要的一点是为控制器管理器所提供的 CA 也被 kube-apiserver 信任用来执行身份认证。CA 密钥和证书是通过 kube-apiserver 的标志 --client-ca-file=FILENAME(例如,--client-ca-file=/var/lib/kubernetes/ca.pem), 来设定的,正如 kube-apiserver 配置节所述。

要将 Kubernetes CA 密钥和证书提供给 kube-controller-manager,可使用以下标志:

--cluster-signing-cert-file="/etc/path/to/kubernetes/ca/ca.crt" --cluster-signing-key-file="/etc/path/to/kubernetes/ca/ca.key"

例如:

--cluster-signing-cert-file="/var/lib/kubernetes/ca.pem" --cluster-signing-key-file="/var/lib/kubernetes/ca-key.pem"

所签名的证书的合法期限可以通过下面的标志来配置:

--cluster-signing-duration

批复

为了对 CSR 进行批复,你需要告诉控制器管理器批复这些 CSR 是可接受的。 这是通过将 RBAC 访问权限授予正确的组来实现的。

许可权限有两组:

  • nodeclient:如果节点在为节点创建新的证书,则该节点还没有证书。该节点 使用前文所列的令牌之一来执行身份认证,因此是组 system:bootstrappers 组 的成员。
  • selfnodeclient:如果节点在对证书执行续期操作,则该节点已经拥有一个证书。 节点持续使用现有的证书将自己认证为 system:nodes 组的成员。

要允许 kubelet 请求并接收新的证书,可以创建一个 ClusterRoleBinding 将启动 引导节点所处的组 system:bootstrappers 绑定到为其赋予访问权限的 ClusterRole system:certificates.k8s.io:certificatesigningrequests:nodeclient

# 批复 "system:bootstrappers" 组的所有 CSR
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: auto-approve-csrs-for-group
subjects:
- kind: Group
  name: system:bootstrappers
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: system:certificates.k8s.io:certificatesigningrequests:nodeclient
  apiGroup: rbac.authorization.k8s.io

要允许 kubelet 对其客户端证书执行续期操作,可以创建一个 ClusterRoleBinding 将正常工作的节点所处的组 system:nodes 绑定到为其授予访问许可的 ClusterRole system:certificates.k8s.io:certificatesigningrequests:selfnodeclient

# 批复 "system:nodes" 组的 CSR 续约请求
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: auto-approve-renewals-for-nodes
subjects:
- kind: Group
  name: system:nodes
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
  apiGroup: rbac.authorization.k8s.io

作为 kube-controller-manager 的一部分的 csrapproving 控制器是自动被启用的。 该控制器使用 SubjectAccessReview API 来确定是否某给定用户被授权请求 CSR,之后基于鉴权结果执行批复操作。 为了避免与其它批复组件发生冲突,内置的批复组件不会显式地拒绝任何 CSRs。 该组件仅是忽略未被授权的请求。 控制器也会作为垃圾收集的一部分清除已过期的证书。

kubelet 配置

最后,当主控节点被正确配置并且所有必要的身份认证和鉴权机制都就绪时, 我们可以配置 kubelet。

kubelet 需要以下配置来执行启动引导:

  • 一个用来存储所生成的密钥和证书的路径(可选,可以使用默认配置)
  • 一个用来指向尚不存在的 kubeconfig 文件的路径;kubelet 会将启动引导 配置文件放到这个位置
  • 一个指向启动引导 kubeconfig 文件的路径,用来提供 API 服务器的 URL 和启动引导凭据,例如,启动引导令牌
  • 可选的:轮换证书的指令

启动引导 kubeconfig 文件应该放在一个 kubelet 可访问的路径下,例如 /var/lib/kubelet/bootstrap-kubeconfig

其格式与普通的 kubeconfig 文件完全相同。实例文件可能看起来像这样:

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority: /var/lib/kubernetes/ca.pem
    server: https://my.server.example.com:6443
  name: bootstrap
contexts:
- context:
    cluster: bootstrap
    user: kubelet-bootstrap
  name: bootstrap
current-context: bootstrap
preferences: {}
users:
- name: kubelet-bootstrap
  user:
    token: 07401b.f395accd246ae52d

需要额外注意的一些因素有:

  • certificate-authority:指向 CA 文件的路径,用来对 kube-apiserver 所出示 的服务器证书进行验证
  • server: 用来访问 kube-apiserver 的 URL
  • token:要使用的令牌

令牌的格式并不重要,只要它与 kube-apiserver 的期望匹配即可。 在上面的例子中,我们使用的是启动引导令牌。 如前所述,任何合法的身份认证方法都可以使用,不限于令牌。

因为启动引导 kubeconfig 文件是一个标准的 kubeconfig 文件,你可以使用 kubectl 来生成该文件。要生成上面的示例文件:

kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig set-cluster bootstrap --server='https://my.server.example.com:6443' --certificate-authority=/var/lib/kubernetes/ca.pem
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig set-credentials kubelet-bootstrap --token=07401b.f395accd246ae52d
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig set-context bootstrap --user=kubelet-bootstrap --cluster=bootstrap
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig use-context bootstrap

要指示 kubelet 使用启动引导 kubeconfig 文件,可以使用下面的 kubelet 标志:

--bootstrap-kubeconfig="/var/lib/kubelet/bootstrap-kubeconfig" --kubeconfig="/var/lib/kubelet/kubeconfig"

在启动 kubelet 时,如果 --kubeconfig 标志所指定的文件并不存在,会使用通过标志 --bootstrap-kubeconfig 所指定的启动引导 kubeconfig 配置来向 API 服务器请求 客户端证书。在证书请求被批复并被 kubelet 收回时,一个引用所生成的密钥和所获得 证书的 kubeconfig 文件会被写入到通过 --kubeconfig 所指定的文件路径下。 证书和密钥文件会被放到 --cert-dir 所指定的目录中。

客户和服务证书

前文所述的内容都与 kubelet 客户端 证书相关,尤其是 kubelet 用来向 kube-apiserver 认证自身身份的证书。

kubelet 也可以使用 服务(Serving) 证书。kubelet 自身向外提供一个 HTTPS 末端,包含若干功能特性。要保证这些末端的安全性,kubelet 可以执行以下操作 之一:

  • 使用通过 --tls-private-key-file--tls-cert-file 所设置的密钥和证书
  • 如果没有提供密钥和证书,则创建自签名的密钥和证书
  • 通过 CSR API 从集群服务器请求服务证书

TLS 启动引导所提供的客户端证书默认被签名为仅用于 client auth(客户端认证), 因此不能作为提供服务的证书,或者 server auth

不过,你可以启用服务器证书,至少可以部分地通过证书轮换来实现这点。

证书轮换

Kubernetes v1.8 和更高版本的 kubelet 实现了对客户端证书与/或服务证书进行轮换 这一 Beta 特性。这一特性通过 kubelet 对应的 RotateKubeletClientCertificateRotateKubeletServerCertificate 特性门控标志来控制,并且是默认启用的。

RotateKubeletClientCertificate 会导致 kubelet 在其现有凭据即将过期时通过 创建新的 CSR 来轮换其客户端证书。要启用此功能特性,可将下面的标志传递给 kubelet:

--rotate-certificates

RotateKubeletServerCertificate 会让 kubelet 在启动引导其客户端凭据之后请求 一个服务证书 对该服务证书执行轮换操作。要启用此功能特性,将下面的标志 传递给 kubelet:

--rotate-server-certificates
说明:

Kubernetes 核心中所实现的 CSR 批复控制器出于 安全原因 并不会自动批复节点的 服务 证书。 要使用 RotateKubeletServerCertificate 功能特性,集群运维人员需要运行一个 定制的控制器或者手动批复服务证书的请求。

对 kubelet 服务证书的批复过程因集群部署而异,通常应该仅批复如下 CSR:

  1. 由节点发出的请求(确保 spec.username 字段形式为 system:node:<nodeName>spec.groups 包含 system:nodes
  2. 请求中包含服务证书用法(确保 spec.usages 中包含 server auth,可选地也可 包含 digital signaturekey encipherment,且不包含其它用法)
  3. 仅包含隶属于请求节点的 IP 和 DNS 的 subjectAltNames,没有 URI 和 Email 形式的 subjectAltNames(解析 spec.request 中的 x509 证书签名请求可以 检查 subjectAltNames

其它身份认证组件

本文所描述的所有 TLS 启动引导内容都与 kubelet 相关。不过,其它组件也可能需要 直接与 kube-apiserver 直接通信。容易想到的是 kube-proxy,同样隶属于 Kubernetes 的控制面并且运行在所有节点之上,不过也可能包含一些其它负责 监控或者联网的组件。

与 kubelet 类似,这些其它组件也需要一种向 kube-apiserver 认证身份的方法。 你可以用几种方法来生成这类凭据:

  • 较老的方式:和 kubelet 在 TLS 启动引导之前所做的一样,用类似的方式 创建和分发证书
  • DaemonSet:由于 kubelet 自身被加载到所有节点之上,并且有足够能力来启动基本服务, 你可以运行将 kube-proxy 和其它特定节点的服务作为 kube-system 名字空间中的 DaemonSet 来执行,而不是独立的进程。由于 DaemonSet 位于集群内部,你可以为其 指派一个合适的服务账户,使之具有适当的访问权限来完成其使命。这也许是配置此类 服务的最简单的方法。

kubectl 批复

CSRs 可以在控制器管理其内置的批复工作流之外被批复。

签名控制器并不会立即对所有证书请求执行签名操作。相反,它会等待这些请求被某 具有适当特权的用户标记为 “Approved(已批准)”状态。 这一流程有意允许由外部批复控制器来自动执行的批复,或者由控制器管理器内置的 批复控制器来自动批复。 不过,集群管理员也可以使用 kubectl 来手动批准证书请求。 管理员可以通过 kubectl get csr 来列举所有的 CSR,使用 kubectl descsribe csr <name> 来描述某个 CSR 的细节。 管理员可以使用 kubectl certificate approve <name 来批准某 CSR,或者 kubectl certificate deny <name> 来拒绝某 CSR。