-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Promote addon docs to first level menu item #10355
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,241 @@ | ||
# kOps addons | ||
|
||
kOps supports two types of addons: | ||
|
||
* Managed addons, which are configurable through the [cluster spec](cluster_spec.md) | ||
* Static addons, which are manifest files that are applied as-is | ||
|
||
## Managed addons | ||
|
||
The following addons are managed by kOps and will be upgraded following the kOps and kubernetes lifecycle, and configured based on your cluster spec. kOps will consider both the configuration of the addon itself as well as what other settings you may have configured where applicable. | ||
|
||
### Available addons | ||
|
||
#### Cluster autoscaler | ||
{{ kops_feature_table(kops_added_default='1.19', k8s_min='1.15') }} | ||
|
||
Cluster autoscaler can be enabled to automatically adjust the size of the kubernetes cluster. | ||
|
||
```yaml | ||
spec: | ||
clusterAutoscaler: | ||
enabled: true | ||
skipNodesWithLocalStorage: true | ||
skipNodesWithSystemPods: true | ||
``` | ||
|
||
Read more about cluster autoscaler in the [official documentation](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler). | ||
|
||
|
||
|
||
#### Metrics server | ||
{{ kops_feature_table(kops_added_default='1.19') }} | ||
|
||
Metrics Server is a scalable, efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines. | ||
|
||
```yaml | ||
spec: | ||
metricsServer: | ||
enabled: true | ||
``` | ||
|
||
Read more about Metrics Server in the [official documentation](https://github.com/kubernetes-sigs/metrics-server). | ||
|
||
|
||
#### Node local DNS cache | ||
{{ kops_feature_table(kops_added_default='1.18', k8s_min='1.15') }} | ||
|
||
NodeLocal DNSCache can be enabled if you are using CoreDNS. It is used to improve the Cluster DNS performance by running a dns caching agent on cluster nodes as a DaemonSet. | ||
|
||
`memoryRequest` and `cpuRequest` for the `node-local-dns` pods can also be configured. If not set, they will be configured by default to `5Mi` and `25m` respectively. | ||
|
||
If `forwardToKubeDNS` is enabled, kubedns will be used as a default upstream | ||
|
||
```yaml | ||
spec: | ||
kubeDNS: | ||
provider: CoreDNS | ||
nodeLocalDNS: | ||
enabled: true | ||
memoryRequest: 5Mi | ||
cpuRequest: 25m | ||
``` | ||
|
||
#### Node termination handler | ||
|
||
{{ kops_feature_table(kops_added_default='1.19') }} | ||
|
||
Node Termination Handler ensures that the Kubernetes control plane responds appropriately to events that can cause your EC2 instance to become unavailable, such as EC2 maintenance events, EC2 Spot interruptions, ASG Scale-In, ASG AZ Rebalance, and EC2 Instance Termination via the API or Console. If not handled, your application code may not stop gracefully, take longer to recover full availability, or accidentally schedule work to nodes that are going down. | ||
|
||
```yaml | ||
spec: | ||
nodeTerminationHandler: | ||
enabled: true | ||
``` | ||
|
||
## Static addons | ||
|
||
The command `kops create cluster` does not support specifying addons to be added to the cluster when it is created. Instead they can be added after cluster creation using kubectl. Alternatively when creating a cluster from a yaml manifest, addons can be specified using `spec.addons`. | ||
```yaml | ||
spec: | ||
addons: | ||
- manifest: kubernetes-dashboard | ||
- manifest: s3://kops-addons/addon.yaml | ||
``` | ||
|
||
This document describes how to install some common addons and how to create your own custom ones. | ||
|
||
### Available addons | ||
|
||
#### Ambassador | ||
|
||
The [Ambassador API Gateway](https://getambassador.io/) provides all the functionality of a traditional ingress | ||
controller (i.e., path-based routing) while exposing many additional capabilities such as authentication, URL rewriting, | ||
CORS, rate limiting, and automatic metrics collection. | ||
|
||
Install using: | ||
``` | ||
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/ambassador/ambassador-operator.yaml | ||
``` | ||
|
||
Detailed installation instructions in the [addon documentation](https://github.com/kubernetes/kops/blob/master/addons/ambassador/README.md). | ||
See [Ambassador documentation](https://www.getambassador.io/docs/) on configuration and usage. | ||
|
||
#### Dashboard | ||
|
||
The [dashboard project](https://github.com/kubernetes/dashboard) provides a nice administrative UI: | ||
|
||
Install using: | ||
``` | ||
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes-dashboard/v1.10.1.yaml | ||
``` | ||
|
||
And then follow the instructions in the [dashboard documentation](https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above) to access the dashboard. | ||
|
||
The login credentials are: | ||
|
||
* Username: `admin` | ||
* Password: get by running `kops get secrets kube --type secret -oplaintext` or `kubectl config view --minify` | ||
|
||
##### RBAC | ||
|
||
It's necessary to add your own RBAC permission to the dashboard. Please read the [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/) docs before applying permissions. | ||
|
||
Below you see an example giving **cluster-admin access** to the dashboard. | ||
|
||
```yaml | ||
apiVersion: rbac.authorization.k8s.io/v1beta1 | ||
kind: ClusterRoleBinding | ||
metadata: | ||
name: kubernetes-dashboard | ||
labels: | ||
k8s-app: kubernetes-dashboard | ||
roleRef: | ||
apiGroup: rbac.authorization.k8s.io | ||
kind: ClusterRole | ||
name: cluster-admin | ||
subjects: | ||
- kind: ServiceAccount | ||
name: kubernetes-dashboard | ||
namespace: kube-system | ||
``` | ||
|
||
### Monitoring with Heapster - Standalone | ||
|
||
**This addons is deprecated. Please use metrics-server instead** | ||
|
||
Monitoring supports the horizontal pod autoscaler. | ||
|
||
Install using: | ||
``` | ||
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/monitoring-standalone/v1.11.0.yaml | ||
``` | ||
Please note that [heapster is retired](https://github.com/kubernetes/heapster/blob/master/docs/deprecation.md). Consider using [metrics-server](https://github.com/kubernetes-incubator/metrics-server) and a third party metrics pipeline to gather Prometheus-format metrics instead. | ||
|
||
### Monitoring with Prometheus Operator + kube-prometheus | ||
|
||
The [Prometheus Operator](https://github.com/coreos/prometheus-operator/) makes the Prometheus configuration Kubernetes native and manages and operates Prometheus and Alertmanager clusters. It is a piece of the puzzle regarding full end-to-end monitoring. | ||
|
||
[kube-prometheus](https://github.com/coreos/prometheus-operator/blob/master/contrib/kube-prometheus) combines the Prometheus Operator with a collection of manifests to help getting started with monitoring Kubernetes itself and applications running on top of it. | ||
|
||
```console | ||
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/prometheus-operator/v0.26.0.yaml | ||
``` | ||
|
||
### Route53 Mapper | ||
|
||
**This addon is deprecated. Please use [external-dns](https://github.com/kubernetes-sigs/external-dns) instead.** | ||
|
||
Please note that kOps installs a Route53 DNS controller automatically (it is required for cluster discovery). | ||
The functionality of the route53-mapper overlaps with the dns-controller, but some users will prefer to | ||
use one or the other. | ||
[README for the included dns-controller](https://github.com/kubernetes/kops/blob/master/dns-controller/README.md) | ||
|
||
route53-mapper automates creation and updating of entries on Route53 with `A` records pointing | ||
to ELB-backed `LoadBalancer` services created by Kubernetes. Install using: | ||
|
||
The project is created by wearemolecule, and maintained at | ||
[wearemolecule/route53-kubernetes](https://github.com/wearemolecule/route53-kubernetes). | ||
[Usage instructions](https://github.com/kubernetes/kops/blob/master/addons/route53-mapper/README.md) | ||
|
||
``` | ||
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/route53-mapper/v1.3.0.yml | ||
``` | ||
|
||
### Custom addons | ||
|
||
The docs about the [addon management](development/addons.md#addon-management) describe in more detail how to define a addon resource with regards to versioning. | ||
Here is a minimal example of an addon manifest that would install two different addons. | ||
|
||
```yaml | ||
kind: Addons | ||
metadata: | ||
name: example | ||
spec: | ||
addons: | ||
- name: foo.addons.org.io | ||
version: 0.0.1 | ||
selector: | ||
k8s-addon: foo.addons.org.io | ||
manifest: foo.addons.org.io/v0.0.1.yaml | ||
- name: bar.addons.org.io | ||
version: 0.0.1 | ||
selector: | ||
k8s-addon: bar.addons.org.io | ||
manifest: bar.addons.org.io/v0.0.1.yaml | ||
``` | ||
|
||
In this example the folder structure should look like this; | ||
|
||
``` | ||
addon.yaml | ||
foo.addons.org.io | ||
v0.0.1.yaml | ||
bar.addons.org.io | ||
v0.0.1.yaml | ||
``` | ||
|
||
The yaml files in the foo/bar folders can be any kubernetes resource. Typically this file structure would be pushed to S3 or another of the supported backends and then referenced as above in `spec.addons`. In order for master nodes to be able to access the S3 bucket containing the addon manifests, one might have to add additional iam policies to the master nodes using `spec.additionalPolicies`, like so; | ||
```yaml | ||
spec: | ||
additionalPolicies: | ||
master: | | ||
[ | ||
{ | ||
"Effect": "Allow", | ||
"Action": [ | ||
"s3:GetObject" | ||
], | ||
"Resource": ["arn:aws:s3:::kops-addons/*"] | ||
}, | ||
{ | ||
"Effect": "Allow", | ||
"Action": [ | ||
"s3:GetBucketLocation", | ||
"s3:ListBucket" | ||
], | ||
"Resource": ["arn:aws:s3:::kops-addons"] | ||
} | ||
] | ||
``` | ||
The masters will poll for changes in the bucket and keep the addons up to date. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
I know that this is just copy/pasted but this code block doesn't make any sense to me. Maybe someone can clarify this with a
tree
output or something in a separate PR.