Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ krews:
token: "{{ .Env.KREW_GITHUB_TOKEN }}"
homepage: "https://kcp.io/"
description: |
KCP cli plugin for kubectl. Enables you to work with KCP.
short_description: "KCP cli plugin for kubectl."
kcp cli plugin for kubectl. Enables you to work with kcp.
short_description: "kcp cli plugin for kubectl."
skip_upload: auto
- name: ws
ids:
Expand All @@ -132,8 +132,8 @@ krews:
token: "{{ .Env.KREW_GITHUB_TOKEN }}"
homepage: "https://kcp.io/"
description: |
KCP workspace cli plugin for kubectl. Enables you to manage your KCP workspaces.
short_description: "KCP workspace cli plugin for kubectl."
kcp workspace cli plugin for kubectl. Enables you to manage your kcp workspaces.
short_description: "kcp workspace cli plugin for kubectl."
skip_upload: auto
- name: create-workspace
ids:
Expand All @@ -144,6 +144,6 @@ krews:
token: "{{ .Env.KREW_GITHUB_TOKEN }}"
homepage: "https://kcp.io/"
description: |
KCP create workspace cli plugin for kubectl. Enables you to create KCP workspaces.
short_description: "KCP create workspace cli plugin for kubectl."
kcp create workspace cli plugin for kubectl. Enables you to create kcp workspaces.
short_description: "kcp create workspace cli plugin for kubectl."
skip_upload: auto
2 changes: 1 addition & 1 deletion ADOPTERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ Listed below are organizations that have adopted kcp in one way or another. We a
| Kubermatic | Kubermatic is building Kubermatic Developer Platform (KDP), an internal developer platform (IdP) product that uses kcp as its global API control plane. | Development | [Product Website](https://www.kubermatic.com/products/kubermatic-developer-platform/) |
| Faros.sh | Faros is building a control-plane-as-a-service to access & manage multiple Kubernetes clusters across public and private deployments. | Development | - |
| SAP | SAP is developing an open reference architecture (ApeiroRA) with a Platform Mesh that leverages kcp as its foundation, enabling service providers to seamlessly connect and interact through unified KRM-based APIs in a cloud-edge continuum. | Development | [Website](https://apeirora.eu/) |
| Upbound | We use KCP within our Cloud Managed Control Planes product to provide multi-tenant access to the underlying hostcluster. | Production | - |
| Upbound | We use kcp within our Cloud Managed Control Planes product to provide multi-tenant access to the underlying hostcluster. | Production | - |
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ We're thrilled that you're interested in contributing to kcp! Please visit our
[full contributing guide](https://docs.kcp.io/kcp/main/contributing) on our documentation site.

Beside that, what coverns the project and all contributions to it must follow
the [KCP Project Governance](./GOVERNANCE.md).
the [kcp Project Governance](./GOVERNANCE.md).

From the KCP Project Governance, the following manifesto should guide the technical
From the kcp Project Governance, the following manifesto should guide the technical
decisions through-out all contributions:

> kcp maintainers strive to be good citizens in the Kubernetes project.
Expand Down
6 changes: 4 additions & 2 deletions FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ kcp is a highly-multi-tenant Kubernetes control-plane, built for SaaS service-pr

Check out our [concepts](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md) document and feel free to open an issue if something is not covered.


## If kcp is a Kubernetes API server without pod-like APIs, how do resources like Deployments get scheduled?

kcp has a concept called [syncer](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md#syncer) which is installed on each [SyncTarget](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md#workload-cluster). The [syncer](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md#syncer) negotiates, with kcp, a set of APIs to make accessible in the workspace. This may include things like [Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) or other resources you may explicitly configure the syncer to synchronize to kcp. Once these APIs are made available in your [Workspace](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md#workspace) you may then create resources of that type. From there, the [Location and Placement](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md#location) APIs help determine which [Location](https://github.com/kcp-dev/kcp/blob/main/docs/concepts.md#location) your deployable resource lands on.

## Will KCP be able to pass the K8S conformance tests in [CNCF Conformance Suites](https://www.cncf.io/certification/software-conformance/)?
## Will kcp be able to pass the K8S conformance tests in [CNCF Conformance Suites](https://www.cncf.io/certification/software-conformance/)?

No, the Kubernetes conformance suites require that all Kubernetes APIs are supported and kcp does not support all APIs out of the box (for instance, Pods).

Expand Down Expand Up @@ -69,3 +68,6 @@ Shards in kcp represent a single apiserver and etcd/db instance. This is how kc

You're in the right place. Clone this repo and run `make install WHAT=./cli/cmd/kubectl-kcp`.

## What does kcp stand for / how to spell it?

`kcp` stands for "Kube for Control Plane" and should always be written in lowercase letters.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Afaik our official position is that it doesn't stand for anything.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also remember someone telling me that kcp effectively stands for nothing and CERTAINLY NOT "Kubernetes control plane", but since then I heard many folks use the "kube for control plane" mantra.

No real opinion on my side.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would vote for kcp - Kubernetes-like Control Planes. This was clicked in my head for a long time.
I leave the final vote for @sttts :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 for @mjudeikis's proposal.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"kcp - Kcp Control Plane" 😬

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"K-ControlPlane"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can agree with MJ's earlier proposal ("kcp - Kubernetes-like Control Planes") if CNCF allows it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we check with cncf?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked with CNCF folks and the inofficial statement through the grapevines was:

  • [this decision] should not need CNCF approval
  • [kcp devs] must just make sure to follow kcp governance

4 changes: 2 additions & 2 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# KCP Project Governance
# kcp Project Governance

The kcp project is dedicated to democratizing Control Planes beyond container
orchestration. This governance explains how the project is run.
Expand Down Expand Up @@ -177,7 +177,7 @@ mailing list and put on hold until the necessary majority has been reached.

Any Maintainer may submit a [vote](#voting) to create a new subproject under the
kcp-dev GitHub organization. Subprojects are governed by all Maintainers, but may
take on additional Subproject Maintainers that are only responsible for the
take on additional Subproject Maintainers that are only responsible for the
specific subproject.

It is the combined responsibility of Maintainers and Subproject Maintainers
Expand Down
6 changes: 3 additions & 3 deletions cli/cmd/kubectl-kcp/cmd/kubectlKcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,17 @@ import (
func KubectlKcpCommand() *cobra.Command {
root := &cobra.Command{
Use: "kcp",
Short: "kubectl plugin for KCP",
Short: "kubectl plugin for kcp",
Long: help.Doc(`
KCP is the easiest way to manage Kubernetes applications against one or
kcp is the easiest way to manage Kubernetes applications against one or
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we remove this Kubernetes applications against. Applications are confusing.

ALl thi section is somehow wrong.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced it with the current short intro we have in our Readme/docs.

more clusters, by giving you a personal control plane that schedules your
workloads onto one or many clusters, and making it simple to pick up and
move. Advanced use cases including spreading your apps across clusters for
resiliency, scheduling batch workloads onto clusters with free capacity,
and enabling collaboration for individual teams without having access to
the underlying clusters.

This command provides KCP specific sub-command for kubectl.
This command provides kcp-specific sub-command for kubectl.
`),
SilenceUsage: true,
SilenceErrors: true,
Expand Down
4 changes: 2 additions & 2 deletions cli/pkg/workspace/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,14 @@ func New(streams genericclioptions.IOStreams) (*cobra.Command, error) {
cmd := &cobra.Command{
Aliases: []string{"ws", "workspaces"},
Use: "workspace [create|create-context|use|current|<workspace>|..|.|-|~|<root:absolute:workspace>] [-i|--interactive]",
Short: "Manages KCP workspaces",
Short: "Manages kcp workspaces",
Example: fmt.Sprintf(workspaceExample, cliName),
SilenceUsage: true,
TraverseChildren: true,
RunE: func(cmd *cobra.Command, args []string) error {
if interactive {
if len(args) != 0 {
return fmt.Errorf("interactive mode does not accept arguments")
return errors.New("interactive mode does not accept arguments")
}
treeOpts.Interactive = true
if err := treeOpts.Validate(); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion cli/pkg/workspace/plugin/scheme.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (

func init() {
// The metav1.TableXXX types (that are in the metav1 scheme) are not added by default
// to the generated KCP clientset scheme.
// to the generated kcp clientset scheme.
// So when we want to get the result of a request done with this clientset as a table,
// it doesn't know the Table types and returns an error.
//
Expand Down
2 changes: 1 addition & 1 deletion cmd/cache-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func main() {
serverOptions := options.NewOptions(*rootDir)
cmd := &cobra.Command{
Use: "cache-server",
Short: "Runs the cache server for KCP",
Short: "Runs the cache server for kcp",
Long: help.Doc(`
Starts a server that hosts data/resources that are required by shards.
It serves as a cache helping to reduce the storage that would have to
Expand Down
2 changes: 1 addition & 1 deletion cmd/kcp-front-proxy/options/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (o *Options) AddFlags(fss *cliflag.NamedFlagSets) {
logsapiv1.AddFlags(o.Logs, fss.FlagSet("logging"))

// add flags that are filtered out from upstream, but overridden here with our own version
fss.FlagSet("KCP").Var(kcpfeatures.NewFlagValue(), "feature-gates", ""+
fss.FlagSet("kcp").Var(kcpfeatures.NewFlagValue(), "feature-gates", ""+
"A set of key=value pairs that describe feature gates for alpha/experimental features. "+
"Options are:\n"+strings.Join(kcpfeatures.KnownFeatures(), "\n")) // hide kube-only gates
}
Expand Down
26 changes: 15 additions & 11 deletions cmd/kcp/kcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,22 @@ import (
func main() {
cmd := &cobra.Command{
Use: "kcp",
Short: "Kube for Control Plane (KCP)",
Short: "Kube for Control Plane (kcp)",
Long: help.Doc(`
KCP is the easiest way to manage Kubernetes applications against one or
more clusters, by giving you a personal control plane that schedules your
workloads onto one or many clusters, and making it simple to pick up and
move. It supports advanced use cases such as spreading your apps across
clusters for resiliency, scheduling batch workloads onto clusters with
free capacity, and enabling collaboration for individual teams without
having access to the underlying clusters.

To get started, launch a new cluster with 'kcp start', which will
initialize your personal control plane and write an admin kubeconfig file
kcp is a Kubernetes-like control plane focusing on

* being a control plane for many independent, isolated "clusters"
known as workspaces,
* enabling API service providers to offer APIs centrally
using multi-tenant operators and
* easy API consumption for users in their workspaces.

kcp can be a building block for SaaS service providers who need a
massively multi-tenant platform to offer services to a large number of
fully isolated tenants using Kubernetes-native APIs.

To get started, launch a new instance with 'kcp start', which will
initialize your personal shard and write an admin kubeconfig file
to disk.
`),
SilenceUsage: true,
Expand Down
14 changes: 7 additions & 7 deletions cmd/kcp/options/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ var (
"misc",
"secure serving",
"traces",
"KCP Authentication",
"KCP Authorization",
"KCP Virtual Workspaces",
"KCP Controllers",
"KCP Home Workspaces",
"KCP Cache Server",
"KCP",
"kcp Authentication",
"kcp Authorization",
"kcp Virtual Workspaces",
"kcp Controllers",
"kcp Home Workspaces",
"kcp Cache Server",
"kcp",
}
)
4 changes: 2 additions & 2 deletions cmd/kcp/options/generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func NewGeneric(rootDir string) *GenericOptions {
}

func (o *GenericOptions) AddFlags(fss *cliflag.NamedFlagSets) {
fs := fss.FlagSet("KCP")
fs := fss.FlagSet("kcp")
fs.StringVar(&o.RootDirectory, "root-directory", o.RootDirectory, "Root directory. Set to \"\" to disable file (e.g. certificates) generation in a root directory.")
fs.StringVar(&o.MappingFile, "miniproxy-mapping-file", o.MappingFile, "DEVELOPMENT ONLY. Path to additional mapping file to be used by mini-front-proxy. This should not be used in production. For production usecase use front-proxy component instead.")
}
Expand Down Expand Up @@ -75,7 +75,7 @@ func (o *GenericOptions) Validate() []error {
return nil
}

// mkdirRoot creates the root configuration directory for the KCP
// mkdirRoot creates the root configuration directory for the kcp
// server. This has to be done early before we start bringing up server
// components to ensure that we set the initial permissions correctly,
// since otherwise components will create it as a side-effect.
Expand Down
2 changes: 1 addition & 1 deletion cmd/virtual-workspaces/options/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func (o *Options) AddFlags(flags *pflag.FlagSet) {
flags.StringVar(&o.ShardExternalURL, "shard-external-url", o.ShardExternalURL, "URL used by outside clients to talk to the kcp shard this virtual workspace is related to")

flags.StringVar(&o.KubeconfigFile, "kubeconfig", o.KubeconfigFile,
"The kubeconfig file of the KCP instance that hosts workspaces.")
"The kubeconfig file of the kcp instance that hosts workspaces.")
_ = cobra.MarkFlagRequired(flags, "kubeconfig")

flags.StringVar(&o.Context, "context", o.Context, "Name of the context in the kubeconfig file to use")
Expand Down
12 changes: 6 additions & 6 deletions config/crds/apis.kcp.io_apibindings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down Expand Up @@ -193,7 +193,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down Expand Up @@ -373,7 +373,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down Expand Up @@ -493,7 +493,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down Expand Up @@ -643,7 +643,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down Expand Up @@ -863,7 +863,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down
4 changes: 2 additions & 2 deletions config/crds/apis.kcp.io_apiexports.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down Expand Up @@ -409,7 +409,7 @@ spec:
This is the identity for a given APIExport that the APIResourceSchema belongs to.
The hash can be found on APIExport and APIResourceSchema's status.
It will be empty for core types.
Note that one must look this up for a particular KCP instance.
Note that one must look this up for a particular kcp instance.
type: string
resource:
description: |-
Expand Down
2 changes: 1 addition & 1 deletion config/crds/core.kcp.io_shards.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ spec:
properties:
baseURL:
description: |-
baseURL is the address of the KCP shard for direct connections, e.g. by some
baseURL is the address of the kcp shard for direct connections, e.g. by some
front-proxy doing the fan-out to the shards.
format: uri
minLength: 1
Expand Down
2 changes: 1 addition & 1 deletion config/root-phase0/apiexport-shards.core.kcp.io.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ spec:
resources:
- group: core.kcp.io
name: shards
schema: v240903-d6797056a.shards.core.kcp.io
schema: v251020-aa1b96e5d.shards.core.kcp.io
storage:
crd: {}
status: {}
4 changes: 2 additions & 2 deletions config/root-phase0/apiresourceschema-shards.core.kcp.io.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: apis.kcp.io/v1alpha1
kind: APIResourceSchema
metadata:
creationTimestamp: null
name: v240903-d6797056a.shards.core.kcp.io
name: v251020-aa1b96e5d.shards.core.kcp.io
spec:
group: core.kcp.io
names:
Expand Down Expand Up @@ -57,7 +57,7 @@ spec:
properties:
baseURL:
description: |-
baseURL is the address of the KCP shard for direct connections, e.g. by some
baseURL is the address of the kcp shard for direct connections, e.g. by some
front-proxy doing the fan-out to the shards.
format: uri
minLength: 1
Expand Down
4 changes: 2 additions & 2 deletions contrib/kcp-dex/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# KCP Dex
# kcp Dex

How to run local kcp with dex.

Expand All @@ -23,7 +23,7 @@ GOBIN=$(pwd)/bin go install github.com/mjudeikis/genkey
* Run dex: `./bin/dex serve ../contrib/kcp-dex/kcp-config.yaml `


### KCP
### kcp

Start kcp with oidc enabled, you can either use the OIDC flags or structured authentication configuration from a file. Example configuration is shown in `auth-config.yaml`.

Expand Down
2 changes: 1 addition & 1 deletion contrib/kcp-dex/kcp-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ staticClients:
public: true
redirectURIs:
- http://localhost:8000
name: 'KCP App'
name: 'kcp App'
secret: Z2Fyc2lha2FsYmlzdmFuZGVuekWplCg==

# Let dex keep a list of passwords which can be used to login to dex.
Expand Down
Loading
Loading