mirror of https://github.com/kubernetes/kops.git
Condense updates and upgrades
This commit is contained in:
parent
f3d7e15c51
commit
f21e0d98ff
|
@ -19,3 +19,8 @@ It does not update the cloud resources, to apply the changes use "kops update cl
|
||||||
|
|
||||||
* `Example`: Example(s) of how to use the command. This field is formatted as a code snippet in the docs, so make sure if you have comments that these are written as a bash comment (e.g. `# this is a comment`).
|
* `Example`: Example(s) of how to use the command. This field is formatted as a code snippet in the docs, so make sure if you have comments that these are written as a bash comment (e.g. `# this is a comment`).
|
||||||
|
|
||||||
|
## Mkdocs
|
||||||
|
|
||||||
|
`make live-docs` runs a docker container to live build and view docs when working on them locally
|
||||||
|
|
||||||
|
`make build-docs` will build a final version of docs which will be checked in via automation.
|
|
@ -1,95 +0,0 @@
|
||||||
# Backing up etcd
|
|
||||||
|
|
||||||
Kubernetes is relying on etcd for state storage. More details about the usage
|
|
||||||
can be found [here](https://kubernetes.io/docs/admin/etcd/) and
|
|
||||||
[here](https://coreos.com/etcd/docs/latest/).
|
|
||||||
|
|
||||||
## Backup requirement
|
|
||||||
|
|
||||||
A Kubernetes cluster deployed with kops stores the etcd state in two different
|
|
||||||
AWS EBS volumes per master node. One volume is used to store the Kubernetes
|
|
||||||
main data, the other one for events. For a HA master with three nodes this will
|
|
||||||
result in six volumes for etcd data (one in each AZ). An EBS volume is designed
|
|
||||||
to have a [failure rate](https://aws.amazon.com/ebs/details/#AvailabilityandDurability)
|
|
||||||
of 0.1%-0.2% per year.
|
|
||||||
|
|
||||||
## Backups using etcd-manager
|
|
||||||
|
|
||||||
Backups are done periodically and before cluster modifications using [etcd-manager](./manager.md)
|
|
||||||
(introduced in kops 1.12). Backups for both the `main` and `events` etcd clusters
|
|
||||||
are stored in object storage (like S3) together with the cluster configuration.
|
|
||||||
|
|
||||||
## Volume backups (legacy etcd)
|
|
||||||
|
|
||||||
If you are running your cluster in legacy etcd mode (without etcd-manager),
|
|
||||||
backups can be done through snapshots of the etcd volumes.
|
|
||||||
|
|
||||||
You can for example use CloudWatch to trigger an AWS Lambda with a defined schedule (e.g. once per
|
|
||||||
hour). The Lambda will then create a new snapshot of all etcd volumes. A complete
|
|
||||||
guide on how to setup automated snapshots can be found [here](https://serverlesscode.com/post/lambda-schedule-ebs-snapshot-backups/).
|
|
||||||
|
|
||||||
Note: this is one of many examples on how to do scheduled snapshots.
|
|
||||||
|
|
||||||
## Restore using etcd-manager
|
|
||||||
|
|
||||||
In case of a disaster situation with etcd (lost data, cluster issues etc.) it's
|
|
||||||
possible to do a restore of the etcd cluster using `etcd-manager-ctl`.
|
|
||||||
Currently the `etcd-manager-ctl` binary is not shipped, so you will have to build it yourself.
|
|
||||||
Please check the documentation at the [etcd-manager repository](https://github.com/kopeio/etcd-manager).
|
|
||||||
It is not necessary to run `etcd-manager-ctl` in your cluster, as long as you have access to cluster storage (like S3).
|
|
||||||
|
|
||||||
Please note that this process involves downtime for your masters (and so the api server).
|
|
||||||
A restore cannot be undone (unless by restoring again), and you might lose pods, events
|
|
||||||
and other resources that were created after the backup.
|
|
||||||
|
|
||||||
For this example, we assume we have a cluster named `test.my.clusters` in a S3 bucket called `my.clusters`.
|
|
||||||
|
|
||||||
List the backups that are stored in your state store (note that backup files are different for the `main` and `events` clusters):
|
|
||||||
|
|
||||||
```
|
|
||||||
etcd-manager-ctl --backup-store=s3://my.clusters/test.my.clusters/backups/etcd/main list-backups
|
|
||||||
etcd-manager-ctl --backup-store=s3://my.clusters/test.my.clusters/backups/etcd/events list-backups
|
|
||||||
```
|
|
||||||
|
|
||||||
Add a restore command for both clusters:
|
|
||||||
|
|
||||||
```
|
|
||||||
etcd-manager-ctl --backup-store=s3://my.clusters/test.my.clusters/backups/etcd/main restore-backup [main backup file]
|
|
||||||
etcd-manager-ctl --backup-store=s3://my.clusters/test.my.clusters/backups/etcd/events restore-backup [events backup file]
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that this does not start the restore immediately; you need to restart etcd on all masters
|
|
||||||
(or roll your masters quickly). A new etcd cluster will be created and the backup will be
|
|
||||||
restored onto this new cluster. Please note that this process might take a short while,
|
|
||||||
depending on the size of your cluster.
|
|
||||||
|
|
||||||
You can follow the progress by reading the etcd logs (`/var/log/etcd(-events).log`)
|
|
||||||
on the master that is the leader of the cluster (you can find this out by checking the etcd logs on all masters).
|
|
||||||
Note that the leader might be different for the `main` and `events` clusters.
|
|
||||||
|
|
||||||
After the restore is complete, api server should come back up, and you should have a working cluster.
|
|
||||||
Note that the api server might be very busy for a while as it changes the cluster back to the state of the backup.
|
|
||||||
It's a good idea to temporarily increase the instance size of your masters and roll your worker nodes.
|
|
||||||
|
|
||||||
For more information and troubleshooting, please check the [etcd-manager documentation](https://github.com/kopeio/etcd-manager).
|
|
||||||
|
|
||||||
## Restore volume backups (legacy etcd)
|
|
||||||
|
|
||||||
If you're using legacy etcd (without etcd-manager), it is possible to restore the volume from a snapshot we created
|
|
||||||
earlier. Details about creating a volume from a snapshot can be found in the
|
|
||||||
[AWS documentation](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-restoring-volume.html).
|
|
||||||
|
|
||||||
Kubernetes uses protokube to identify the right volumes for etcd. Therefore it
|
|
||||||
is important to tag the EBS volumes with the correct tags after restoring them
|
|
||||||
from a EBS snapshot.
|
|
||||||
|
|
||||||
protokube will look for the following tags:
|
|
||||||
|
|
||||||
* `KubernetesCluster` containing the cluster name (e.g. `k8s.mycompany.tld`)
|
|
||||||
* `Name` containing the volume name (e.g. `eu-central-1a.etcd-main.k8s.mycompany.tld`)
|
|
||||||
* `k8s.io/etcd/main` containing the availability zone of the volume (e.g. `eu-central-1a/eu-central-1a`)
|
|
||||||
* `k8s.io/role/master` with the value `1`
|
|
||||||
|
|
||||||
After fully restoring the volume ensure that the old volume is no longer there,
|
|
||||||
or you've removed the tags from the old volume. After restarting the master node
|
|
||||||
Kubernetes should pick up the new volume and start running again.
|
|
|
@ -411,7 +411,7 @@ kops delete cluster --name ${NAME} --yes
|
||||||
|
|
||||||
We've barely scratched the surface of the capabilities of `kops` in this guide,
|
We've barely scratched the surface of the capabilities of `kops` in this guide,
|
||||||
and we recommend researching [other interesting
|
and we recommend researching [other interesting
|
||||||
modes](../usage/commands.md#other-interesting-modes) to learn more about generating
|
modes](commands.md#other-interesting-modes) to learn more about generating
|
||||||
Terraform configurations, or running your cluster in an HA (Highly Available)
|
Terraform configurations, or running your cluster in an HA (Highly Available)
|
||||||
mode.
|
mode.
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ At some point you will almost definitely want to upgrade the Kubernetes version
|
||||||
- Upgrade an existing `kube-up` managed cluster to one managed by `kops`
|
- Upgrade an existing `kube-up` managed cluster to one managed by `kops`
|
||||||
+ [The simple method with downtime](#kube-up---kops-downtime)
|
+ [The simple method with downtime](#kube-up---kops-downtime)
|
||||||
+ [The more complex method with zero-downtime](#kube-up---kops-sans-downtime)
|
+ [The more complex method with zero-downtime](#kube-up---kops-sans-downtime)
|
||||||
- [Upgrade a `kops` cluster from one Kubernetes version to another](../upgrade.md)
|
- [Upgrade a `kops` cluster from one Kubernetes version to another](cluster_upgrades_and_migrations.md)
|
||||||
|
|
||||||
## `kube-up` -> `kops`, with downtime
|
## `kube-up` -> `kops`, with downtime
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,39 @@
|
||||||
|
# Updates and Upgrades
|
||||||
|
|
||||||
|
## Updating kops
|
||||||
|
|
||||||
|
### MacOS
|
||||||
|
|
||||||
|
From Homebrew:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew update && brew upgrade kops
|
||||||
|
```
|
||||||
|
|
||||||
|
From Github:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rm -rf /usr/local/bin/kops
|
||||||
|
wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-darwin-amd64
|
||||||
|
chmod +x ./kops
|
||||||
|
sudo mv ./kops /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also rerun [these steps](../development/building.md) if previously built from source.
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
|
||||||
|
From Github:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rm -rf /usr/local/bin/kops
|
||||||
|
wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
|
||||||
|
chmod +x ./kops
|
||||||
|
sudo mv ./kops /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also rerun [these steps](../development/building.md) if previously built from source.
|
||||||
|
|
||||||
## Upgrading Kubernetes
|
## Upgrading Kubernetes
|
||||||
|
|
||||||
Upgrading Kubernetes is easy with kops. The cluster spec contains a `kubernetesVersion`, so you can simply edit it with `kops edit`, and apply the updated configuration to your cluster.
|
Upgrading Kubernetes is easy with kops. The cluster spec contains a `kubernetesVersion`, so you can simply edit it with `kops edit`, and apply the updated configuration to your cluster.
|
||||||
|
@ -6,7 +42,7 @@ The `kops upgrade` command also automates checking for and applying updates.
|
||||||
|
|
||||||
It is recommended to run the latest version of Kops to ensure compatibility with the target kubernetesVersion. When applying a Kubernetes minor version upgrade (e.g. `v1.5.3` to `v1.6.0`), you should confirm that the target kubernetesVersion is compatible with the [current Kops release](https://github.com/kubernetes/kops/releases).
|
It is recommended to run the latest version of Kops to ensure compatibility with the target kubernetesVersion. When applying a Kubernetes minor version upgrade (e.g. `v1.5.3` to `v1.6.0`), you should confirm that the target kubernetesVersion is compatible with the [current Kops release](https://github.com/kubernetes/kops/releases).
|
||||||
|
|
||||||
Note: if you want to upgrade from a `kube-up` installation, please see the instructions for [how to upgrade kubernetes installed with kube-up](operations/cluster_upgrades_and_migrations.md).
|
Note: if you want to upgrade from a `kube-up` installation, please see the instructions for [how to upgrade kubernetes installed with kube-up](cluster_upgrades_and_migrations.md).
|
||||||
|
|
||||||
### Manual update
|
### Manual update
|
||||||
|
|
||||||
|
@ -40,4 +76,3 @@ Upgrade uses the latest Kubernetes version considered stable by kops, defined in
|
||||||
|
|
||||||
### Other Notes:
|
### Other Notes:
|
||||||
* In general, we recommend that you upgrade your cluster one minor release at a time (1.7 --> 1.8 --> 1.9). Although jumping minor versions may work if you have not enabled alpha features, you run a greater risk of running into problems due to version deprecation.
|
* In general, we recommend that you upgrade your cluster one minor release at a time (1.7 --> 1.8 --> 1.9). Although jumping minor versions may work if you have not enabled alpha features, you run a greater risk of running into problems due to version deprecation.
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
# Updating kops (Binaries)
|
|
||||||
|
|
||||||
## MacOS
|
|
||||||
|
|
||||||
From Homebrew:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
brew update && brew upgrade kops
|
|
||||||
```
|
|
||||||
|
|
||||||
From Github:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf /usr/local/bin/kops
|
|
||||||
wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-darwin-amd64
|
|
||||||
chmod +x ./kops
|
|
||||||
sudo mv ./kops /usr/local/bin/
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also rerun [these steps](development/building.md) if previously built from source.
|
|
||||||
|
|
||||||
## Linux
|
|
||||||
|
|
||||||
From Github:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf /usr/local/bin/kops
|
|
||||||
wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
|
|
||||||
chmod +x ./kops
|
|
||||||
sudo mv ./kops /usr/local/bin/
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also rerun [these steps](development/building.md) if previously built from source.
|
|
50
mkdocs.yml
50
mkdocs.yml
|
@ -38,7 +38,9 @@ nav:
|
||||||
- Deploying to GCE: "getting_started/gce.md"
|
- Deploying to GCE: "getting_started/gce.md"
|
||||||
- Deploying to OpenStack - Beta: "getting_started/openstack.md"
|
- Deploying to OpenStack - Beta: "getting_started/openstack.md"
|
||||||
- Deploying to Digital Ocean - Alpha: "getting_started/digitalocean.md"
|
- Deploying to Digital Ocean - Alpha: "getting_started/digitalocean.md"
|
||||||
- kubectl usage: "kubectl.md"
|
- Kops Commands: "getting_started/commands.md"
|
||||||
|
- Kops Arguments: "getting_started/arguments.md"
|
||||||
|
- kubectl usage: "getting_started/kubectl.md"
|
||||||
- CLI:
|
- CLI:
|
||||||
- kops: "cli/kops.md"
|
- kops: "cli/kops.md"
|
||||||
- kops completion: "cli/kops_completion.md"
|
- kops completion: "cli/kops_completion.md"
|
||||||
|
@ -64,10 +66,8 @@ nav:
|
||||||
- Godocs for Cluster - ClusterSpec: "https://godoc.org/k8s.io/kops/pkg/apis/kops#ClusterSpec"
|
- Godocs for Cluster - ClusterSpec: "https://godoc.org/k8s.io/kops/pkg/apis/kops#ClusterSpec"
|
||||||
- Godocs for Instance Group - InstanceGroupSpec: "https://godoc.org/k8s.io/kops/pkg/apis/kops#InstanceGroupSpec"
|
- Godocs for Instance Group - InstanceGroupSpec: "https://godoc.org/k8s.io/kops/pkg/apis/kops#InstanceGroupSpec"
|
||||||
|
|
||||||
- Usage:
|
|
||||||
- Commands: "usage/commands.md"
|
|
||||||
- Arguments: "usage/arguments.md"
|
|
||||||
- Operations:
|
- Operations:
|
||||||
|
- Updates & Upgrades: "operations/updates_and_upgrades.md"
|
||||||
- High Availability: "operations/high_availability.md"
|
- High Availability: "operations/high_availability.md"
|
||||||
- etcd backup, restore and encryption: "operations/etcd_backup_restore_encryption.md"
|
- etcd backup, restore and encryption: "operations/etcd_backup_restore_encryption.md"
|
||||||
- Instancegroup images: "operations/images.md"
|
- Instancegroup images: "operations/images.md"
|
||||||
|
@ -76,16 +76,11 @@ nav:
|
||||||
- Cluster Templating: "operations/cluster_template.md"
|
- Cluster Templating: "operations/cluster_template.md"
|
||||||
- Cluster upgrades and migrations: "operations/cluster_upgrades_and_migrations.md"
|
- Cluster upgrades and migrations: "operations/cluster_upgrades_and_migrations.md"
|
||||||
- GPU setup: "gpu.md"
|
- GPU setup: "gpu.md"
|
||||||
- k8s upgrading: "upgrade.md"
|
|
||||||
- kops updating: "update_kops.md"
|
|
||||||
- kube-up to kops upgrade: "upgrade_from_kubeup.md"
|
- kube-up to kops upgrade: "upgrade_from_kubeup.md"
|
||||||
- Label management: "labels.md"
|
- Label management: "labels.md"
|
||||||
- Secret management: "secrets.md"
|
- Secret management: "secrets.md"
|
||||||
- Moving from a Single Master to Multiple HA Masters: "single-to-multi-master.md"
|
- Moving from a Single Master to Multiple HA Masters: "single-to-multi-master.md"
|
||||||
- Upgrading Kubernetes: "tutorial/upgrading-kubernetes.md"
|
|
||||||
- Working with Instance Groups: "tutorial/working-with-instancegroups.md"
|
- Working with Instance Groups: "tutorial/working-with-instancegroups.md"
|
||||||
- Developers guide for vSphere support: "vsphere-dev.md"
|
|
||||||
- vSphere support status: "vsphere-development-status.md"
|
|
||||||
- Running kops in a CI environment: "continuous_integration.md"
|
- Running kops in a CI environment: "continuous_integration.md"
|
||||||
- Networking:
|
- Networking:
|
||||||
- Networking Overview including CNI: "networking.md"
|
- Networking Overview including CNI: "networking.md"
|
||||||
|
@ -94,9 +89,11 @@ nav:
|
||||||
- Subdomain setup: "creating_subdomain.md"
|
- Subdomain setup: "creating_subdomain.md"
|
||||||
- Security:
|
- Security:
|
||||||
- Security: "security.md"
|
- Security: "security.md"
|
||||||
|
- Advisories: "advisories/README.md"
|
||||||
- Bastion setup: "bastion.md"
|
- Bastion setup: "bastion.md"
|
||||||
- IAM roles: "iam_roles.md"
|
- IAM roles: "iam_roles.md"
|
||||||
- MFA setup: "mfa.md"
|
- MFA setup: "mfa.md"
|
||||||
|
- Security Groups: "security_groups.md"
|
||||||
- Advanced:
|
- Advanced:
|
||||||
- Download Config: "advanced/download_config.md"
|
- Download Config: "advanced/download_config.md"
|
||||||
- Subdomain NS Records: "advanced/ns.md"
|
- Subdomain NS Records: "advanced/ns.md"
|
||||||
|
@ -104,9 +101,24 @@ nav:
|
||||||
- Cluster boot sequence: "boot-sequence.md"
|
- Cluster boot sequence: "boot-sequence.md"
|
||||||
- Philosophy: "philosophy.md"
|
- Philosophy: "philosophy.md"
|
||||||
- State store: "state.md"
|
- State store: "state.md"
|
||||||
|
- AWS China: "aws-china.md"
|
||||||
|
- Calico v3: "calico-v3.md"
|
||||||
|
- Custom CA: "custom_ca.md"
|
||||||
|
- etcd3 Migration: "etcd3-migration.md"
|
||||||
|
- Horizontal Pod Autoscaling: "horizontal_pod_autoscaling.md"
|
||||||
|
- Egress Proxy: "http_proxy.md"
|
||||||
|
- Node Authorization: "node_authorization.md"
|
||||||
|
- Node Resource Allocation: "node_resource_handling.md"
|
||||||
|
- Rotate Secrets: "rotate-secrets.md"
|
||||||
|
- Terraform: "terraform.md"
|
||||||
|
- Authentication: "authentication.md"
|
||||||
- Development:
|
- Development:
|
||||||
|
- Building: "development/building.md"
|
||||||
|
- Releases: "releases.md"
|
||||||
|
- New Kubernetes Version: "development/new_kubernetes_version.md"
|
||||||
- Developing using Docker: "development/Docker.md"
|
- Developing using Docker: "development/Docker.md"
|
||||||
- Development with vSphere: "vsphere-dev.md"
|
- Development with vSphere: "vsphere-dev.md"
|
||||||
|
- vSphere support status: "vsphere-development-status.md"
|
||||||
- Documentation Guidelines: "development/documentation.md"
|
- Documentation Guidelines: "development/documentation.md"
|
||||||
- E2E testing with `kops` clusters: "development/testing.md"
|
- E2E testing with `kops` clusters: "development/testing.md"
|
||||||
- Example on how to add a feature: "development/adding_a_feature.md"
|
- Example on how to add a feature: "development/adding_a_feature.md"
|
||||||
|
@ -118,3 +130,23 @@ nav:
|
||||||
- Our release process: "development/release.md"
|
- Our release process: "development/release.md"
|
||||||
- Releasing with Homebrew: "development/homebrew.md"
|
- Releasing with Homebrew: "development/homebrew.md"
|
||||||
- Rolling Update Diagrams: "development/rolling_update.md"
|
- Rolling Update Diagrams: "development/rolling_update.md"
|
||||||
|
- Bazel: "development/bazel.md"
|
||||||
|
- Vendoring: "development/vendoring.md"
|
||||||
|
- Ports: "development/ports.md"
|
||||||
|
- Releases:
|
||||||
|
- 1.15: releases/1.15-NOTES.md
|
||||||
|
- 1.14: releases/1.14-NOTES.md
|
||||||
|
- 1.13: releases/1.13-NOTES.md
|
||||||
|
- 1.12: releases/1.12-NOTES.md
|
||||||
|
- 1.11: releases/1.11-NOTES.md
|
||||||
|
- 1.10: releases/1.10-NOTES.md
|
||||||
|
- 1.9: releases/1.9-NOTES.md
|
||||||
|
- 1.8.1: releases/1.8.1.md
|
||||||
|
- 1.8: releases/1.8-NOTES.md
|
||||||
|
- 1.7.1: releases/1.7.1.md
|
||||||
|
- 1.7: releases/1.7-NOTES.md
|
||||||
|
- 1.6.2: releases/1.6.2.md
|
||||||
|
- 1.6.1: releases/1.6.1.md
|
||||||
|
- 1.6.0: releases/1.6-NOTES.md
|
||||||
|
- 1.6.0-alpha: releases/1.6.0-alpha.1.md
|
||||||
|
- legacy-changes.md: releases/legacy-changes.md
|
||||||
|
|
Loading…
Reference in New Issue