-
Notifications
You must be signed in to change notification settings - Fork 14.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Federation] Document simplified federation control plane deployment via kubefed. #1822
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
--- | ||
assignees: | ||
- madhusudancs | ||
|
||
--- | ||
Kubernetes version 1.5 includes a new command line tool called | ||
`kubefed` to help you administrate your federated clusters. | ||
`kubefed` helps you to deploy a new Kubernetes cluster federation | ||
control plane, and to add clusters to or remove clusters from an | ||
existing federation control plane. | ||
|
||
This guide explains how to administer a Kubernetes Cluster Federation | ||
using `kubefed`. | ||
|
||
> Note: `kubefed` is an alpha feature in Kubernetes 1.5. | ||
|
||
|
||
* TOC | ||
{:toc} | ||
|
||
|
||
## Prerequisites | ||
|
||
This guide assumes that you have a running Kubernetes cluster. Please | ||
see one of the [getting started](/docs/getting-started-guides/) guides | ||
for installation instructions for your platform. | ||
|
||
|
||
## Getting `kubefed` | ||
|
||
Download the client tarball corresponding to Kubernetes version 1.5 | ||
or later | ||
[from the release page](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md), | ||
extract the binaries in the tarball to one of the directories | ||
in your `$PATH` and set the executable permission on those binaries. | ||
|
||
```shell | ||
curl -O https://storage.googleapis.com/kubernetes-release/release/v1.5.0/kubernetes-client-linux-amd64.tar.gz | ||
tar -xzvf kubernetes-client-linux-amd64.tar.gz | ||
sudo cp kubernetes/client/bin/kubefed /usr/local/bin | ||
sudo chmod +x /usr/local/bin/kubefed | ||
sudo cp kubernetes/client/bin/kubectl /usr/local/bin | ||
sudo chmod +x /usr/local/bin/kubectl | ||
``` | ||
|
||
|
||
## Choosing a host cluster. | ||
|
||
You'll need to choose one of your Kubernetes clusters to be the | ||
*host cluster*. The host cluster hosts the components that make up | ||
your federation control plane. Ensure that you have a `kubeconfig` | ||
entry in your local `kubeconfig` that corresponds to the host cluster. | ||
You can verify that you have the required `kubeconfig` entry by | ||
running: | ||
|
||
```shell | ||
kubectl config get-contexts | ||
``` | ||
|
||
The output should contain an entry corresponding to your host cluster, | ||
similar to the following: | ||
|
||
``` | ||
CURRENT NAME CLUSTER AUTHINFO NAMESPACE | ||
gke_myproject_asia-east1-b_gce-asia-east1 gke_myproject_asia-east1-b_gce-asia-east1 gke_myproject_asia-east1-b_gce-asia-east1 | ||
``` | ||
|
||
|
||
You'll need to provide the `kubeconfig` context (called name in the | ||
entry above) for your host cluster when you deploy your federation | ||
control plane. | ||
|
||
|
||
## Deploying a federation control plane. | ||
|
||
"To deploy a federation control plane on your host cluster, run | ||
`kubefed init` command. When you use `kubefed init`, you must provide | ||
the following: | ||
|
||
* Federation name | ||
* `--host-cluster-context`, the `kubeconfig` context for the host cluster | ||
* `--dns-zone-name`, a domain name suffix for your federated services | ||
|
||
The following example command deploys a federation control plane with | ||
the name `fellowship`, a host cluster context `rivendell`, and the | ||
domain suffix `example.com`: | ||
|
||
```shell | ||
kubefed init fellowship --host-cluster-context=rivendell --dns-zone-name="example.com" | ||
``` | ||
|
||
The domain suffix you specify in `--dns-zone-name` must be an existing | ||
domain that you control, and that is programmable by your DNS provider. | ||
|
||
`kubefed init` sets up the federation control plane in the host | ||
cluster and also adds an entry for the federation API server in your | ||
local kubeconfig. Note that in the alpha release in Kubernetes 1.5, | ||
`kubefed init` does not automatically set the current context to the | ||
newly deployed federation. You can set the current context manually by | ||
running: | ||
|
||
```shell | ||
kubectl config use-context fellowship | ||
``` | ||
|
||
where `fellowship` is the name of your federation. | ||
|
||
|
||
## Adding a cluster to a federation | ||
|
||
Once you've deployed a federation control plane, you'll need to make | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @devin-donnelly after I made the change suggested here - #1822 (comment), I got a comment from a user who is trying this out saying he would have liked some details explaining why he had to do this (add/join a cluster). Can we still incorporate that somehow? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure. I'd add it as a "note" afterward, like this format: "> Note: Kubernetes requires that you manually join clusters to a federation control plane because..." There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @devin-donnelly Thanks. Added a note. PTAL. |
||
that control plane aware of the clusters it should manage. You can add | ||
a cluster to your federation by using the `kubefed join` command. | ||
|
||
To use `kubefed join`, you'll need to provide the name of the cluster | ||
you want to add to the federation, and the `--host-cluster-context` | ||
for the federation control plane's host cluster. | ||
|
||
The following example command adds the cluster `gondor` to the | ||
federation with host cluster `rivendell`: | ||
|
||
``` | ||
kubefed join gondor --host-cluster-context=rivendell | ||
``` | ||
|
||
> Note: Kubernetes requires that you manually join clusters to a | ||
federation because the federation control plane manages only those | ||
clusters that it is responsible for managing. Adding a cluster tells | ||
the federation control plane that it is responsible for managing that | ||
cluster. | ||
|
||
### Naming rules and customization | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Try not to nest a subheading directly underneath a section heading. The "#### Cluster name" heading really only pertains to the first sentence anyway; please remove. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Makes sense. Removed. |
||
The cluster name you supply to `kubefed join` must be a valid RFC 1035 | ||
label. | ||
|
||
Furthermore, federation control plane requires credentials of the | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "The federation control plane uses the cluster name to obtain credentials for the cluster you add to the federation by looking up the credentials in the local There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The problem with this wording is, it doesn't explicitly state that the cluster name in the command is matched to the context name in the kubeconfig. There is also a concept of cluster name in kubeconfig and we need to ensure that people don't get confused about these two. How do we reword for that? |
||
joined clusters to operate on them. These credentials are obtained | ||
from the local kubeconfig. `kubefed join` uses the cluster name | ||
specified as the argument to look for the cluster's context in the | ||
local kubeconfig. If it fails to find a matching context, it exits | ||
with an error. | ||
|
||
This might cause issues in cases where context names for each cluster | ||
in the federation don't follow RFC 1035 label naming rules. In such | ||
cases, you can specify a cluster name that conforms to the RFC 1035 | ||
label naming rules and specify the cluster context using the | ||
`--cluster-context` flag. For example, if context of the cluster your | ||
are joining is `gondor_needs-no_king`, then you can | ||
join the cluster by running: | ||
|
||
```shell | ||
kubefed join gondor --host-cluster-context=rivendell --cluster-context=gondor_needs-no_king | ||
``` | ||
|
||
#### Secret name | ||
|
||
Cluster credentials required by the federation control plane as | ||
described above are stored as a secret in the host cluster. The name | ||
of the secret is also derived from the cluster name. | ||
|
||
However, the name of a secret object in Kubernetes should conform | ||
to the subdomain name specification described in RFC 1123. If this | ||
isn't case, you can pass the secret name to `kubefed join` using the | ||
`--secret-name` flag. For example, if the cluster name is `noldor` and | ||
the secret name is `11kingdom`, you can join the cluster by | ||
running: | ||
|
||
```shell | ||
kubefed join noldor --host-cluster-context=rivendell --secret-name=11kingdom | ||
``` | ||
|
||
## Removing a cluster from a federation | ||
|
||
To remove a cluster from a federation, run the `kubefed unjoin` | ||
command with the cluster name and the federation's | ||
`--host-cluster-context`: | ||
|
||
``` | ||
kubefed unjoin gondor --host-cluster-context=rivendell | ||
``` | ||
|
||
|
||
## Turning down the federation control plane: | ||
|
||
Proper cleanup of federation control plane is not fully implemented in | ||
this alpha release of `kubefed`. However, for the time being, deleting | ||
the federation system namespace should remove all the resources except | ||
the persistent storage volume dynamically provisioned for the | ||
federation control plane's etcd. You can delete the federation | ||
namespace by running the following command: | ||
|
||
``` | ||
$ kubectl delete ns federation-system | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This path doesn't exist yet. Are you sure that 1.5 will be released in this path?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mwielgus yeah, I am pretty sure. A good test is replacing
v1.5.0
withv1.4.0
.