From a0fb30a6fbff36d8eb86e2edf5d8272fec00a74c Mon Sep 17 00:00:00 2001 From: John Mulhausen Date: Wed, 10 Feb 2016 16:55:31 -0800 Subject: [PATCH] Initial checkin of v1.1 -- does not build --- _config.yml | 20 - v1.1/.DS_Store | Bin 6148 -> 6148 bytes v1.1/api-ref.md | 19 + v1.1/app-admin-detailed.md | 17 + v1.1/basicstutorials.md | 17 + v1.1/deploy-clusters.md | 17 + v1.1/docs/README.md | 49 + v1.1/docs/admin/README.md | 58 + v1.1/docs/admin/accessing-the-api.md | 91 + v1.1/docs/admin/admission-controllers.md | 177 ++ v1.1/docs/admin/authentication.md | 146 ++ v1.1/docs/admin/authorization.md | 159 ++ v1.1/docs/admin/cluster-components.md | 136 ++ v1.1/docs/admin/cluster-large.md | 86 + v1.1/docs/admin/cluster-management.md | 221 ++ v1.1/docs/admin/cluster-troubleshooting.md | 132 ++ v1.1/docs/admin/daemon.yaml | 18 + v1.1/docs/admin/daemons.md | 210 ++ v1.1/docs/admin/dns.md | 60 + v1.1/docs/admin/etcd.md | 69 + v1.1/docs/admin/garbage-collection.md | 93 + v1.1/docs/admin/high-availability.md | 280 +++ .../admin/high-availability/default-kubelet | 8 + v1.1/docs/admin/high-availability/etcd.yaml | 87 + v1.1/docs/admin/high-availability/ha.png | Bin 0 -> 38814 bytes v1.1/docs/admin/high-availability/ha.svg | 4 + .../high-availability/kube-apiserver.yaml | 90 + .../kube-controller-manager.yaml | 82 + .../high-availability/kube-scheduler.yaml | 30 + .../docs/admin/high-availability/monit-docker | 9 + .../admin/high-availability/monit-kubelet | 11 + .../admin/high-availability/podmaster.yaml | 43 + v1.1/docs/admin/index.md | 58 + v1.1/docs/admin/introduction.md | 96 + v1.1/docs/admin/kube-apiserver.md | 102 + v1.1/docs/admin/kube-controller-manager.md | 89 + v1.1/docs/admin/kube-proxy.md | 67 + v1.1/docs/admin/kube-scheduler.md | 62 + v1.1/docs/admin/kubelet.md | 129 ++ v1.1/docs/admin/limitrange/README.md | 236 ++ v1.1/docs/admin/limitrange/index.md | 236 ++ v1.1/docs/admin/limitrange/invalid-pod.yaml | 12 + v1.1/docs/admin/limitrange/limits.yaml | 26 + v1.1/docs/admin/limitrange/namespace.yaml | 4 + v1.1/docs/admin/limitrange/valid-pod.yaml | 14 + v1.1/docs/admin/multi-cluster.md | 83 + v1.1/docs/admin/namespaces.md | 180 ++ v1.1/docs/admin/namespaces/README.md | 302 +++ v1.1/docs/admin/namespaces/index.md | 302 +++ v1.1/docs/admin/namespaces/namespace-dev.json | 10 + .../docs/admin/namespaces/namespace-prod.json | 10 + v1.1/docs/admin/networking.md | 223 ++ v1.1/docs/admin/node.md | 257 +++ v1.1/docs/admin/ovs-networking.md | 36 + v1.1/docs/admin/ovs-networking.png | Bin 0 -> 105445 bytes v1.1/docs/admin/resource-quota.md | 174 ++ v1.1/docs/admin/resourcequota/README.md | 197 ++ v1.1/docs/admin/resourcequota/index.md | 197 ++ v1.1/docs/admin/resourcequota/limits.yaml | 13 + v1.1/docs/admin/resourcequota/namespace.yaml | 4 + v1.1/docs/admin/resourcequota/quota.yaml | 14 + v1.1/docs/admin/salt.md | 129 ++ v1.1/docs/admin/service-accounts-admin.md | 120 + v1.1/docs/admin/static-pods.md | 165 ++ v1.1/docs/api.md | 147 ++ v1.1/docs/design/README.md | 39 + v1.1/docs/design/access.md | 278 +++ v1.1/docs/design/admission_control.md | 106 + .../design/admission_control_limit_range.md | 219 ++ .../admission_control_resource_quota.md | 219 ++ v1.1/docs/design/architecture.dia | Bin 0 -> 6523 bytes v1.1/docs/design/architecture.md | 67 + v1.1/docs/design/architecture.png | Bin 0 -> 268126 bytes v1.1/docs/design/architecture.svg | 1943 +++++++++++++++++ v1.1/docs/design/clustering.md | 83 + v1.1/docs/design/clustering/.gitignore | 1 + v1.1/docs/design/clustering/Dockerfile | 12 + v1.1/docs/design/clustering/Makefile | 29 + v1.1/docs/design/clustering/README.md | 52 + v1.1/docs/design/clustering/dynamic.png | Bin 0 -> 72373 bytes v1.1/docs/design/clustering/dynamic.seqdiag | 24 + v1.1/docs/design/clustering/index.md | 52 + v1.1/docs/design/clustering/static.png | Bin 0 -> 36583 bytes v1.1/docs/design/clustering/static.seqdiag | 16 + .../command_execution_port_forwarding.md | 168 ++ v1.1/docs/design/daemon.md | 145 ++ v1.1/docs/design/event_compression.md | 107 + v1.1/docs/design/expansion.md | 420 ++++ v1.1/docs/design/extending-api.md | 222 ++ v1.1/docs/design/horizontal-pod-autoscaler.md | 264 +++ v1.1/docs/design/identifiers.md | 114 + v1.1/docs/design/index.md | 39 + v1.1/docs/design/namespaces.md | 371 ++++ v1.1/docs/design/networking.md | 200 ++ v1.1/docs/design/persistent-storage.md | 240 ++ v1.1/docs/design/principles.md | 77 + v1.1/docs/design/resources.md | 261 +++ v1.1/docs/design/secrets.md | 611 ++++++ v1.1/docs/design/security.md | 139 ++ v1.1/docs/design/security_context.md | 188 ++ v1.1/docs/design/service_accounts.md | 191 ++ v1.1/docs/design/simple-rolling-update.md | 123 ++ v1.1/docs/design/versioning.md | 74 + v1.1/docs/devel/README.md | 96 + v1.1/docs/devel/api-conventions.md | 733 +++++++ v1.1/docs/devel/api_changes.md | 628 ++++++ v1.1/docs/devel/automation.md | 124 ++ v1.1/docs/devel/cherry-picks.md | 56 + v1.1/docs/devel/cli-roadmap.md | 28 + v1.1/docs/devel/client-libraries.md | 40 + v1.1/docs/devel/coding-conventions.md | 73 + v1.1/docs/devel/collab.md | 62 + v1.1/docs/devel/developer-guides/vagrant.md | 430 ++++ v1.1/docs/devel/development.md | 395 ++++ v1.1/docs/devel/e2e-tests.md | 135 ++ v1.1/docs/devel/faster_reviews.md | 223 ++ v1.1/docs/devel/flaky-tests.md | 95 + v1.1/docs/devel/getting-builds.md | 62 + v1.1/docs/devel/git_workflow.png | Bin 0 -> 114745 bytes v1.1/docs/devel/index.md | 96 + v1.1/docs/devel/instrumentation.md | 54 + v1.1/docs/devel/issues.md | 40 + v1.1/docs/devel/kubectl-conventions.md | 124 ++ v1.1/docs/devel/logging.md | 47 + v1.1/docs/devel/making-release-notes.md | 63 + v1.1/docs/devel/profiling.md | 69 + v1.1/docs/devel/pull-requests.md | 57 + v1.1/docs/devel/releasing.dot | 113 + v1.1/docs/devel/releasing.md | 335 +++ v1.1/docs/devel/releasing.png | Bin 0 -> 30693 bytes v1.1/docs/devel/releasing.svg | 113 + v1.1/docs/devel/scheduler.md | 68 + v1.1/docs/devel/scheduler_algorithm.md | 56 + .../devel/writing-a-getting-started-guide.md | 118 + v1.1/docs/getting-started-guides/README.md | 215 ++ .../docs/getting-started-guides/all-lines.png | Bin 0 -> 226552 bytes v1.1/docs/getting-started-guides/aws.md | 145 ++ v1.1/docs/getting-started-guides/azure.md | 26 + .../bigquery-logging.png | Bin 0 -> 57417 bytes .../getting-started-guides/binary_release.md | 47 + .../centos/centos_manual_config.md | 220 ++ .../cloud-logging-console.png | Bin 0 -> 87825 bytes .../docs/getting-started-guides/cloudstack.md | 105 + v1.1/docs/getting-started-guides/coreos.md | 88 + .../coreos/azure/.gitignore | 1 + .../coreos/azure/README.md | 289 +++ .../coreos/azure/addons/skydns-rc.yaml | 92 + .../coreos/azure/addons/skydns-svc.yaml | 20 + .../coreos/azure/azure-login.js | 3 + .../kubernetes-cluster-etcd-node-template.yml | 19 + ...kubernetes-cluster-main-nodes-template.yml | 339 +++ .../coreos/azure/create-kubernetes-cluster.js | 15 + .../coreos/azure/destroy-cluster.js | 7 + .../coreos/azure/expose_guestbook_app_port.sh | 29 + .../coreos/azure/external_access.png | Bin 0 -> 292367 bytes .../coreos/azure/index.md | 289 +++ .../coreos/azure/initial_cluster.png | Bin 0 -> 173212 bytes .../coreos/azure/lib/azure_wrapper.js | 271 +++ .../coreos/azure/lib/cloud_config.js | 58 + .../azure/lib/deployment_logic/kubernetes.js | 77 + .../coreos/azure/lib/util.js | 33 + .../coreos/azure/package.json | 19 + .../coreos/azure/scale-kubernetes-cluster.js | 10 + .../coreos/bare_metal_calico.md | 152 ++ .../coreos/bare_metal_offline.md | 691 ++++++ .../coreos/cloud-configs/master.yaml | 140 ++ .../coreos/cloud-configs/node.yaml | 98 + .../coreos/coreos_multinode_cluster.md | 248 +++ v1.1/docs/getting-started-guides/dcos.md | 189 ++ .../docker-multinode.md | 119 + .../docker-multinode/deployDNS.md | 75 + .../docker-multinode/master.md | 231 ++ .../docker-multinode/master.sh | 176 ++ .../docker-multinode/skydns-rc.yaml.in | 92 + .../docker-multinode/skydns-svc.yaml.in | 20 + .../docker-multinode/testing.md | 107 + .../docker-multinode/worker.md | 184 ++ .../docker-multinode/worker.sh | 174 ++ v1.1/docs/getting-started-guides/docker.md | 202 ++ .../getting-started-guides/es-browser.png | Bin 0 -> 40769 bytes .../fedora/fedora-calico.md | 386 ++++ .../fedora/fedora_ansible_config.md | 293 +++ .../fedora/fedora_manual_config.md | 258 +++ .../fedora/flannel_multi_node_cluster.md | 235 ++ v1.1/docs/getting-started-guides/gce.md | 273 +++ v1.1/docs/getting-started-guides/index.md | 215 ++ v1.1/docs/getting-started-guides/juju.md | 259 +++ .../getting-started-guides/k8s-docker.png | Bin 0 -> 52545 bytes .../k8s-singlenode-docker.png | Bin 0 -> 31801 bytes .../getting-started-guides/kibana-logs.png | Bin 0 -> 183775 bytes .../getting-started-guides/libvirt-coreos.md | 366 ++++ v1.1/docs/getting-started-guides/locally.md | 161 ++ .../logging-elasticsearch.md | 274 +++ v1.1/docs/getting-started-guides/logging.md | 265 +++ .../getting-started-guides/mesos-docker.md | 370 ++++ v1.1/docs/getting-started-guides/mesos.md | 420 ++++ .../mesos/k8s-firewall.png | Bin 0 -> 88722 bytes .../mesos/k8s-guestbook.png | Bin 0 -> 44000 bytes v1.1/docs/getting-started-guides/ovirt.md | 75 + v1.1/docs/getting-started-guides/rackspace.md | 92 + .../docs/getting-started-guides/rkt/README.md | 180 ++ v1.1/docs/getting-started-guides/rkt/index.md | 180 ++ v1.1/docs/getting-started-guides/scratch.md | 883 ++++++++ .../getting-started-guides/ubuntu-calico.md | 327 +++ v1.1/docs/getting-started-guides/ubuntu.md | 310 +++ v1.1/docs/getting-started-guides/vagrant.md | 432 ++++ v1.1/docs/getting-started-guides/vsphere.md | 121 + v1.1/docs/index.md | 49 + v1.1/docs/reporting-security-issues.md | 41 + v1.1/docs/roadmap.md | 66 + v1.1/docs/troubleshooting.md | 70 + v1.1/docs/user-guide/README.md | 119 + v1.1/docs/user-guide/accessing-the-cluster.md | 319 +++ v1.1/docs/user-guide/annotations.md | 50 + .../user-guide/application-troubleshooting.md | 244 +++ v1.1/docs/user-guide/cadvisor.png | Bin 0 -> 60222 bytes v1.1/docs/user-guide/compute-resources.md | 291 +++ v1.1/docs/user-guide/config-best-practices.md | 43 + .../docs/user-guide/configuring-containers.md | 223 ++ .../user-guide/connecting-applications.md | 454 ++++ ...connecting-to-applications-port-forward.md | 79 + .../connecting-to-applications-proxy.md | 53 + v1.1/docs/user-guide/container-environment.md | 120 + v1.1/docs/user-guide/containers.md | 111 + v1.1/docs/user-guide/debugging-services.md | 605 +++++ .../docs/user-guide/deploying-applications.md | 160 ++ v1.1/docs/user-guide/deployments.md | 418 ++++ .../user-guide}/docker-cli-to-kubectl.md | 28 +- v1.1/docs/user-guide/downward-api.md | 181 ++ v1.1/docs/user-guide/downward-api/README.md | 60 + .../user-guide/downward-api/dapi-pod.yaml | 23 + v1.1/docs/user-guide/downward-api/index.md | 60 + .../user-guide/downward-api/volume/README.md | 95 + .../downward-api/volume/dapi-volume.yaml | 30 + .../user-guide/downward-api/volume/index.md | 95 + .../user-guide/environment-guide/README.md | 112 + .../environment-guide/backend-rc.yaml | 30 + .../environment-guide/backend-srv.yaml | 13 + .../environment-guide/containers/README.md | 41 + .../containers/backend/Dockerfile | 2 + .../containers/backend/backend.go | 37 + .../environment-guide/containers/index.md | 41 + .../containers/show/Dockerfile | 2 + .../environment-guide/containers/show/show.go | 95 + .../user-guide/environment-guide/diagram.png | Bin 0 -> 18765 bytes .../user-guide/environment-guide/index.md | 112 + .../user-guide/environment-guide/show-rc.yaml | 32 + .../environment-guide/show-srv.yaml | 15 + v1.1/docs/user-guide/gcm.png | Bin 0 -> 209311 bytes .../user-guide/getting-into-containers.md | 107 + .../user-guide/horizontal-pod-autoscaler.md | 114 + .../user-guide/horizontal-pod-autoscaler.png | Bin 0 -> 21898 bytes .../user-guide/horizontal-pod-autoscaler.svg | 4 + .../horizontal-pod-autoscaling/README.md | 233 ++ .../hpa-php-apache.yaml | 14 + .../image/Dockerfile | 5 + .../image/index.php | 7 + .../horizontal-pod-autoscaling/index.md | 233 ++ v1.1/docs/user-guide/identifiers.md | 35 + v1.1/docs/user-guide/images.md | 277 +++ v1.1/docs/user-guide/index.md | 119 + v1.1/docs/user-guide/influx.png | Bin 0 -> 534294 bytes v1.1/docs/user-guide/ingress.md | 329 +++ v1.1/docs/user-guide/ingress.yaml | 9 + .../user-guide/introspection-and-debugging.md | 363 +++ v1.1/docs/user-guide/job.yaml | 20 + v1.1/docs/user-guide/jobs.md | 257 +++ v1.1/docs/user-guide/jsonpath.md | 89 + .../docs/user-guide/k8s-ui-explore-filter.png | Bin 0 -> 71468 bytes .../user-guide/k8s-ui-explore-groupby.png | Bin 0 -> 72408 bytes .../user-guide/k8s-ui-explore-poddetail.png | Bin 0 -> 52998 bytes v1.1/docs/user-guide/k8s-ui-explore.png | Bin 0 -> 68948 bytes v1.1/docs/user-guide/k8s-ui-nodes.png | Bin 0 -> 35568 bytes v1.1/docs/user-guide/k8s-ui-overview.png | Bin 0 -> 78341 bytes v1.1/docs/user-guide/kibana.png | Bin 0 -> 82617 bytes v1.1/docs/user-guide/known-issues.md | 43 + v1.1/docs/user-guide/kubeconfig-file.md | 243 +++ v1.1/docs/user-guide/kubectl-overview.md | 315 +++ v1.1/docs/user-guide/kubectl/.files_generated | 33 + v1.1/docs/user-guide/kubectl/kubectl.md | 97 + .../user-guide/kubectl/kubectl_annotate.md | 118 + .../kubectl/kubectl_api-versions.md | 71 + v1.1/docs/user-guide/kubectl/kubectl_apply.md | 96 + .../docs/user-guide/kubectl/kubectl_attach.md | 97 + .../user-guide/kubectl/kubectl_autoscale.md | 106 + .../kubectl/kubectl_cluster-info.md | 71 + .../docs/user-guide/kubectl/kubectl_config.md | 91 + .../kubectl/kubectl_config_set-cluster.md | 95 + .../kubectl/kubectl_config_set-context.md | 88 + .../kubectl/kubectl_config_set-credentials.md | 108 + .../user-guide/kubectl/kubectl_config_set.md | 73 + .../kubectl/kubectl_config_unset.md | 72 + .../kubectl/kubectl_config_use-context.md | 71 + .../user-guide/kubectl/kubectl_config_view.md | 102 + .../docs/user-guide/kubectl/kubectl_create.md | 96 + .../docs/user-guide/kubectl/kubectl_delete.md | 118 + .../user-guide/kubectl/kubectl_describe.md | 118 + v1.1/docs/user-guide/kubectl/kubectl_edit.md | 113 + v1.1/docs/user-guide/kubectl/kubectl_exec.md | 98 + .../docs/user-guide/kubectl/kubectl_expose.md | 124 ++ v1.1/docs/user-guide/kubectl/kubectl_get.md | 132 ++ v1.1/docs/user-guide/kubectl/kubectl_label.md | 119 + v1.1/docs/user-guide/kubectl/kubectl_logs.md | 108 + .../user-guide/kubectl/kubectl_namespace.md | 74 + v1.1/docs/user-guide/kubectl/kubectl_patch.md | 101 + .../kubectl/kubectl_port-forward.md | 98 + v1.1/docs/user-guide/kubectl/kubectl_proxy.md | 120 + .../user-guide/kubectl/kubectl_replace.md | 110 + .../kubectl/kubectl_rolling-update.md | 118 + v1.1/docs/user-guide/kubectl/kubectl_run.md | 135 ++ v1.1/docs/user-guide/kubectl/kubectl_scale.md | 107 + v1.1/docs/user-guide/kubectl/kubectl_stop.md | 109 + .../user-guide/kubectl/kubectl_version.md | 79 + v1.1/docs/user-guide/labels.md | 219 ++ v1.1/docs/user-guide/liveness/README.md | 117 + .../user-guide/liveness/exec-liveness.yaml | 21 + .../user-guide/liveness/http-liveness.yaml | 18 + .../docs/user-guide/liveness/image/Dockerfile | 4 + v1.1/docs/user-guide/liveness/image/Makefile | 13 + v1.1/docs/user-guide/liveness/image/server.go | 46 + v1.1/docs/user-guide/liveness/index.md | 117 + v1.1/docs/user-guide/logging-demo/Makefile | 26 + v1.1/docs/user-guide/logging-demo/README.md | 36 + v1.1/docs/user-guide/logging-demo/index.md | 36 + .../user-guide/logging-demo/synth-logger.png | Bin 0 -> 89284 bytes .../logging-demo/synthetic_0_25lps.yaml | 30 + .../logging-demo/synthetic_10lps.yaml | 30 + v1.1/docs/user-guide/logging.md | 120 + v1.1/docs/user-guide/managing-deployments.md | 500 +++++ .../user-guide/monitoring-architecture.png | Bin 0 -> 22972 bytes v1.1/docs/user-guide/monitoring.md | 81 + v1.1/docs/user-guide/multi-pod.yaml | 49 + v1.1/docs/user-guide/namespaces.md | 117 + .../docs/user-guide/new-nginx-deployment.yaml | 16 + v1.1/docs/user-guide/nginx-deployment.yaml | 16 + v1.1/docs/user-guide/node-selection/README.md | 82 + v1.1/docs/user-guide/node-selection/index.md | 82 + v1.1/docs/user-guide/node-selection/pod.yaml | 13 + v1.1/docs/user-guide/overview.md | 43 + v1.1/docs/user-guide/persistent-volumes.md | 220 ++ .../user-guide/persistent-volumes/README.md | 126 ++ .../persistent-volumes/claims/claim-01.yaml | 10 + .../persistent-volumes/claims/claim-02.yaml | 10 + .../persistent-volumes/claims/claim-03.json | 17 + .../user-guide/persistent-volumes/index.md | 126 ++ .../simpletest/namespace.json | 10 + .../persistent-volumes/simpletest/pod.yaml | 20 + .../simpletest/service.json | 19 + .../persistent-volumes/volumes/gce.yaml | 13 + .../persistent-volumes/volumes/local-01.yaml | 13 + .../persistent-volumes/volumes/local-02.yaml | 14 + .../persistent-volumes/volumes/nfs.yaml | 12 + v1.1/docs/user-guide/pod-states.md | 142 ++ v1.1/docs/user-guide/pod.yaml | 12 + v1.1/docs/user-guide/pods.md | 156 ++ v1.1/docs/user-guide/prereqs.md | 85 + v1.1/docs/user-guide/production-pods.md | 401 ++++ v1.1/docs/user-guide/quick-start.md | 106 + .../docs/user-guide/replication-controller.md | 114 + v1.1/docs/user-guide/replication.yaml | 19 + v1.1/docs/user-guide/resourcequota/README.md | 24 + v1.1/docs/user-guide/resourcequota/index.md | 24 + v1.1/docs/user-guide/secrets.md | 550 +++++ v1.1/docs/user-guide/secrets/README.md | 88 + v1.1/docs/user-guide/secrets/index.md | 88 + v1.1/docs/user-guide/secrets/secret-pod.yaml | 18 + v1.1/docs/user-guide/secrets/secret.yaml | 7 + v1.1/docs/user-guide/security-context.md | 25 + v1.1/docs/user-guide/service-accounts.md | 230 ++ v1.1/docs/user-guide/services-detail.png | Bin 0 -> 68514 bytes v1.1/docs/user-guide/services-detail.svg | 570 +++++ v1.1/docs/user-guide/services-firewalls.md | 74 + v1.1/docs/user-guide/services-overview.png | Bin 0 -> 43306 bytes v1.1/docs/user-guide/services-overview.svg | 417 ++++ v1.1/docs/user-guide/services.md | 593 +++++ v1.1/docs/user-guide/sharing-clusters.md | 155 ++ v1.1/docs/user-guide/simple-nginx.md | 89 + v1.1/docs/user-guide/simple-yaml.md | 129 ++ v1.1/docs/user-guide/ui.md | 73 + v1.1/docs/user-guide/update-demo/README.md | 163 ++ .../user-guide/update-demo/build-images.sh | 30 + .../update-demo/images/kitten/Dockerfile | 17 + .../update-demo/images/kitten/html/data.json | 3 + .../update-demo/images/kitten/html/kitten.jpg | Bin 0 -> 14769 bytes .../update-demo/images/nautilus/Dockerfile | 17 + .../images/nautilus/html/data.json | 3 + .../images/nautilus/html/nautilus.jpg | Bin 0 -> 21231 bytes v1.1/docs/user-guide/update-demo/index.md | 163 ++ .../user-guide/update-demo/kitten-rc.yaml | 20 + .../update-demo/local/LICENSE.angular | 21 + .../update-demo/local/angular.min.js | 210 ++ .../update-demo/local/angular.min.js.map | 8 + .../user-guide/update-demo/local/index.html | 36 + .../user-guide/update-demo/local/script.js | 100 + .../user-guide/update-demo/local/style.css | 40 + .../user-guide/update-demo/nautilus-rc.yaml | 21 + v1.1/docs/user-guide/volumes.md | 431 ++++ v1.1/docs/user-guide/walkthrough/README.md | 232 ++ v1.1/docs/user-guide/walkthrough/index.md | 232 ++ v1.1/docs/user-guide/walkthrough/k8s201.md | 341 +++ .../walkthrough/pod-nginx-with-label.yaml | 12 + .../user-guide/walkthrough/pod-nginx.yaml | 10 + .../user-guide/walkthrough/pod-redis.yaml | 14 + .../pod-with-http-healthcheck.yaml | 20 + .../user-guide/walkthrough/podtemplate.json | 22 + .../walkthrough/replication-controller.yaml | 24 + v1.1/docs/user-guide/walkthrough/service.yaml | 16 + .../docs/user-guide/working-with-resources.md | 75 + v1.1/docs/warning.png | Bin 0 -> 2363 bytes v1.1/docs/whatisk8s.md | 114 + v1.1/gs-custom.md | 19 + v1.1/gs-localmachine.md | 19 + v1.1/gs-turnkey.md | 19 + v1.1/guides/index.md | 28 - v1.1/index.md | 27 +- v1.1/multi-tier.md | 17 + v1.1/reference/index.md | 28 - v1.1/samples/index.md | 28 - v1.1/setup-config.md | 17 + v1.1/support/index.md | 28 - 420 files changed, 49449 insertions(+), 158 deletions(-) create mode 100644 v1.1/api-ref.md create mode 100644 v1.1/app-admin-detailed.md create mode 100644 v1.1/basicstutorials.md create mode 100644 v1.1/deploy-clusters.md create mode 100644 v1.1/docs/README.md create mode 100644 v1.1/docs/admin/README.md create mode 100644 v1.1/docs/admin/accessing-the-api.md create mode 100644 v1.1/docs/admin/admission-controllers.md create mode 100644 v1.1/docs/admin/authentication.md create mode 100644 v1.1/docs/admin/authorization.md create mode 100644 v1.1/docs/admin/cluster-components.md create mode 100644 v1.1/docs/admin/cluster-large.md create mode 100644 v1.1/docs/admin/cluster-management.md create mode 100644 v1.1/docs/admin/cluster-troubleshooting.md create mode 100644 v1.1/docs/admin/daemon.yaml create mode 100644 v1.1/docs/admin/daemons.md create mode 100644 v1.1/docs/admin/dns.md create mode 100644 v1.1/docs/admin/etcd.md create mode 100644 v1.1/docs/admin/garbage-collection.md create mode 100644 v1.1/docs/admin/high-availability.md create mode 100644 v1.1/docs/admin/high-availability/default-kubelet create mode 100644 v1.1/docs/admin/high-availability/etcd.yaml create mode 100644 v1.1/docs/admin/high-availability/ha.png create mode 100644 v1.1/docs/admin/high-availability/ha.svg create mode 100644 v1.1/docs/admin/high-availability/kube-apiserver.yaml create mode 100644 v1.1/docs/admin/high-availability/kube-controller-manager.yaml create mode 100644 v1.1/docs/admin/high-availability/kube-scheduler.yaml create mode 100644 v1.1/docs/admin/high-availability/monit-docker create mode 100644 v1.1/docs/admin/high-availability/monit-kubelet create mode 100644 v1.1/docs/admin/high-availability/podmaster.yaml create mode 100644 v1.1/docs/admin/index.md create mode 100644 v1.1/docs/admin/introduction.md create mode 100644 v1.1/docs/admin/kube-apiserver.md create mode 100644 v1.1/docs/admin/kube-controller-manager.md create mode 100644 v1.1/docs/admin/kube-proxy.md create mode 100644 v1.1/docs/admin/kube-scheduler.md create mode 100644 v1.1/docs/admin/kubelet.md create mode 100644 v1.1/docs/admin/limitrange/README.md create mode 100644 v1.1/docs/admin/limitrange/index.md create mode 100644 v1.1/docs/admin/limitrange/invalid-pod.yaml create mode 100644 v1.1/docs/admin/limitrange/limits.yaml create mode 100644 v1.1/docs/admin/limitrange/namespace.yaml create mode 100644 v1.1/docs/admin/limitrange/valid-pod.yaml create mode 100644 v1.1/docs/admin/multi-cluster.md create mode 100644 v1.1/docs/admin/namespaces.md create mode 100644 v1.1/docs/admin/namespaces/README.md create mode 100644 v1.1/docs/admin/namespaces/index.md create mode 100644 v1.1/docs/admin/namespaces/namespace-dev.json create mode 100644 v1.1/docs/admin/namespaces/namespace-prod.json create mode 100644 v1.1/docs/admin/networking.md create mode 100644 v1.1/docs/admin/node.md create mode 100644 v1.1/docs/admin/ovs-networking.md create mode 100755 v1.1/docs/admin/ovs-networking.png create mode 100755 v1.1/docs/admin/resource-quota.md create mode 100755 v1.1/docs/admin/resourcequota/README.md create mode 100644 v1.1/docs/admin/resourcequota/index.md create mode 100755 v1.1/docs/admin/resourcequota/limits.yaml create mode 100644 v1.1/docs/admin/resourcequota/namespace.yaml create mode 100644 v1.1/docs/admin/resourcequota/quota.yaml create mode 100644 v1.1/docs/admin/salt.md create mode 100644 v1.1/docs/admin/service-accounts-admin.md create mode 100644 v1.1/docs/admin/static-pods.md create mode 100644 v1.1/docs/api.md create mode 100644 v1.1/docs/design/README.md create mode 100644 v1.1/docs/design/access.md create mode 100644 v1.1/docs/design/admission_control.md create mode 100644 v1.1/docs/design/admission_control_limit_range.md create mode 100644 v1.1/docs/design/admission_control_resource_quota.md create mode 100644 v1.1/docs/design/architecture.dia create mode 100644 v1.1/docs/design/architecture.md create mode 100644 v1.1/docs/design/architecture.png create mode 100644 v1.1/docs/design/architecture.svg create mode 100644 v1.1/docs/design/clustering.md create mode 100644 v1.1/docs/design/clustering/.gitignore create mode 100644 v1.1/docs/design/clustering/Dockerfile create mode 100644 v1.1/docs/design/clustering/Makefile create mode 100644 v1.1/docs/design/clustering/README.md create mode 100644 v1.1/docs/design/clustering/dynamic.png create mode 100644 v1.1/docs/design/clustering/dynamic.seqdiag create mode 100644 v1.1/docs/design/clustering/index.md create mode 100644 v1.1/docs/design/clustering/static.png create mode 100644 v1.1/docs/design/clustering/static.seqdiag create mode 100644 v1.1/docs/design/command_execution_port_forwarding.md create mode 100644 v1.1/docs/design/daemon.md create mode 100644 v1.1/docs/design/event_compression.md create mode 100644 v1.1/docs/design/expansion.md create mode 100644 v1.1/docs/design/extending-api.md create mode 100644 v1.1/docs/design/horizontal-pod-autoscaler.md create mode 100644 v1.1/docs/design/identifiers.md create mode 100644 v1.1/docs/design/index.md create mode 100644 v1.1/docs/design/namespaces.md create mode 100644 v1.1/docs/design/networking.md create mode 100644 v1.1/docs/design/persistent-storage.md create mode 100644 v1.1/docs/design/principles.md create mode 100644 v1.1/docs/design/resources.md create mode 100644 v1.1/docs/design/secrets.md create mode 100644 v1.1/docs/design/security.md create mode 100644 v1.1/docs/design/security_context.md create mode 100644 v1.1/docs/design/service_accounts.md create mode 100644 v1.1/docs/design/simple-rolling-update.md create mode 100644 v1.1/docs/design/versioning.md create mode 100644 v1.1/docs/devel/README.md create mode 100644 v1.1/docs/devel/api-conventions.md create mode 100644 v1.1/docs/devel/api_changes.md create mode 100644 v1.1/docs/devel/automation.md create mode 100644 v1.1/docs/devel/cherry-picks.md create mode 100644 v1.1/docs/devel/cli-roadmap.md create mode 100644 v1.1/docs/devel/client-libraries.md create mode 100644 v1.1/docs/devel/coding-conventions.md create mode 100644 v1.1/docs/devel/collab.md create mode 100644 v1.1/docs/devel/developer-guides/vagrant.md create mode 100644 v1.1/docs/devel/development.md create mode 100644 v1.1/docs/devel/e2e-tests.md create mode 100644 v1.1/docs/devel/faster_reviews.md create mode 100644 v1.1/docs/devel/flaky-tests.md create mode 100644 v1.1/docs/devel/getting-builds.md create mode 100644 v1.1/docs/devel/git_workflow.png create mode 100644 v1.1/docs/devel/index.md create mode 100644 v1.1/docs/devel/instrumentation.md create mode 100644 v1.1/docs/devel/issues.md create mode 100644 v1.1/docs/devel/kubectl-conventions.md create mode 100644 v1.1/docs/devel/logging.md create mode 100644 v1.1/docs/devel/making-release-notes.md create mode 100644 v1.1/docs/devel/profiling.md create mode 100644 v1.1/docs/devel/pull-requests.md create mode 100644 v1.1/docs/devel/releasing.dot create mode 100644 v1.1/docs/devel/releasing.md create mode 100644 v1.1/docs/devel/releasing.png create mode 100644 v1.1/docs/devel/releasing.svg create mode 100755 v1.1/docs/devel/scheduler.md create mode 100755 v1.1/docs/devel/scheduler_algorithm.md create mode 100644 v1.1/docs/devel/writing-a-getting-started-guide.md create mode 100644 v1.1/docs/getting-started-guides/README.md create mode 100644 v1.1/docs/getting-started-guides/all-lines.png create mode 100644 v1.1/docs/getting-started-guides/aws.md create mode 100644 v1.1/docs/getting-started-guides/azure.md create mode 100644 v1.1/docs/getting-started-guides/bigquery-logging.png create mode 100644 v1.1/docs/getting-started-guides/binary_release.md create mode 100644 v1.1/docs/getting-started-guides/centos/centos_manual_config.md create mode 100644 v1.1/docs/getting-started-guides/cloud-logging-console.png create mode 100644 v1.1/docs/getting-started-guides/cloudstack.md create mode 100644 v1.1/docs/getting-started-guides/coreos.md create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/.gitignore create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/README.md create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-rc.yaml create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-svc.yaml create mode 100755 v1.1/docs/getting-started-guides/coreos/azure/azure-login.js create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-etcd-node-template.yml create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-main-nodes-template.yml create mode 100755 v1.1/docs/getting-started-guides/coreos/azure/create-kubernetes-cluster.js create mode 100755 v1.1/docs/getting-started-guides/coreos/azure/destroy-cluster.js create mode 100755 v1.1/docs/getting-started-guides/coreos/azure/expose_guestbook_app_port.sh create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/external_access.png create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/index.md create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/initial_cluster.png create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/lib/azure_wrapper.js create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/lib/cloud_config.js create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/lib/deployment_logic/kubernetes.js create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/lib/util.js create mode 100644 v1.1/docs/getting-started-guides/coreos/azure/package.json create mode 100755 v1.1/docs/getting-started-guides/coreos/azure/scale-kubernetes-cluster.js create mode 100644 v1.1/docs/getting-started-guides/coreos/bare_metal_calico.md create mode 100644 v1.1/docs/getting-started-guides/coreos/bare_metal_offline.md create mode 100644 v1.1/docs/getting-started-guides/coreos/cloud-configs/master.yaml create mode 100644 v1.1/docs/getting-started-guides/coreos/cloud-configs/node.yaml create mode 100644 v1.1/docs/getting-started-guides/coreos/coreos_multinode_cluster.md create mode 100644 v1.1/docs/getting-started-guides/dcos.md create mode 100644 v1.1/docs/getting-started-guides/docker-multinode.md create mode 100644 v1.1/docs/getting-started-guides/docker-multinode/deployDNS.md create mode 100644 v1.1/docs/getting-started-guides/docker-multinode/master.md create mode 100755 v1.1/docs/getting-started-guides/docker-multinode/master.sh create mode 100644 v1.1/docs/getting-started-guides/docker-multinode/skydns-rc.yaml.in create mode 100644 v1.1/docs/getting-started-guides/docker-multinode/skydns-svc.yaml.in create mode 100644 v1.1/docs/getting-started-guides/docker-multinode/testing.md create mode 100644 v1.1/docs/getting-started-guides/docker-multinode/worker.md create mode 100755 v1.1/docs/getting-started-guides/docker-multinode/worker.sh create mode 100644 v1.1/docs/getting-started-guides/docker.md create mode 100644 v1.1/docs/getting-started-guides/es-browser.png create mode 100644 v1.1/docs/getting-started-guides/fedora/fedora-calico.md create mode 100644 v1.1/docs/getting-started-guides/fedora/fedora_ansible_config.md create mode 100644 v1.1/docs/getting-started-guides/fedora/fedora_manual_config.md create mode 100644 v1.1/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md create mode 100644 v1.1/docs/getting-started-guides/gce.md create mode 100644 v1.1/docs/getting-started-guides/index.md create mode 100644 v1.1/docs/getting-started-guides/juju.md create mode 100644 v1.1/docs/getting-started-guides/k8s-docker.png create mode 100644 v1.1/docs/getting-started-guides/k8s-singlenode-docker.png create mode 100644 v1.1/docs/getting-started-guides/kibana-logs.png create mode 100644 v1.1/docs/getting-started-guides/libvirt-coreos.md create mode 100644 v1.1/docs/getting-started-guides/locally.md create mode 100644 v1.1/docs/getting-started-guides/logging-elasticsearch.md create mode 100644 v1.1/docs/getting-started-guides/logging.md create mode 100644 v1.1/docs/getting-started-guides/mesos-docker.md create mode 100644 v1.1/docs/getting-started-guides/mesos.md create mode 100755 v1.1/docs/getting-started-guides/mesos/k8s-firewall.png create mode 100755 v1.1/docs/getting-started-guides/mesos/k8s-guestbook.png create mode 100644 v1.1/docs/getting-started-guides/ovirt.md create mode 100644 v1.1/docs/getting-started-guides/rackspace.md create mode 100644 v1.1/docs/getting-started-guides/rkt/README.md create mode 100644 v1.1/docs/getting-started-guides/rkt/index.md create mode 100644 v1.1/docs/getting-started-guides/scratch.md create mode 100644 v1.1/docs/getting-started-guides/ubuntu-calico.md create mode 100644 v1.1/docs/getting-started-guides/ubuntu.md create mode 100644 v1.1/docs/getting-started-guides/vagrant.md create mode 100644 v1.1/docs/getting-started-guides/vsphere.md create mode 100644 v1.1/docs/index.md create mode 100644 v1.1/docs/reporting-security-issues.md create mode 100644 v1.1/docs/roadmap.md create mode 100644 v1.1/docs/troubleshooting.md create mode 100644 v1.1/docs/user-guide/README.md create mode 100644 v1.1/docs/user-guide/accessing-the-cluster.md create mode 100644 v1.1/docs/user-guide/annotations.md create mode 100644 v1.1/docs/user-guide/application-troubleshooting.md create mode 100644 v1.1/docs/user-guide/cadvisor.png create mode 100644 v1.1/docs/user-guide/compute-resources.md create mode 100644 v1.1/docs/user-guide/config-best-practices.md create mode 100644 v1.1/docs/user-guide/configuring-containers.md create mode 100644 v1.1/docs/user-guide/connecting-applications.md create mode 100644 v1.1/docs/user-guide/connecting-to-applications-port-forward.md create mode 100644 v1.1/docs/user-guide/connecting-to-applications-proxy.md create mode 100644 v1.1/docs/user-guide/container-environment.md create mode 100644 v1.1/docs/user-guide/containers.md create mode 100644 v1.1/docs/user-guide/debugging-services.md create mode 100644 v1.1/docs/user-guide/deploying-applications.md create mode 100644 v1.1/docs/user-guide/deployments.md rename v1.1/{reference => docs/user-guide}/docker-cli-to-kubectl.md (93%) create mode 100644 v1.1/docs/user-guide/downward-api.md create mode 100644 v1.1/docs/user-guide/downward-api/README.md create mode 100644 v1.1/docs/user-guide/downward-api/dapi-pod.yaml create mode 100644 v1.1/docs/user-guide/downward-api/index.md create mode 100644 v1.1/docs/user-guide/downward-api/volume/README.md create mode 100644 v1.1/docs/user-guide/downward-api/volume/dapi-volume.yaml create mode 100644 v1.1/docs/user-guide/downward-api/volume/index.md create mode 100644 v1.1/docs/user-guide/environment-guide/README.md create mode 100644 v1.1/docs/user-guide/environment-guide/backend-rc.yaml create mode 100644 v1.1/docs/user-guide/environment-guide/backend-srv.yaml create mode 100644 v1.1/docs/user-guide/environment-guide/containers/README.md create mode 100644 v1.1/docs/user-guide/environment-guide/containers/backend/Dockerfile create mode 100644 v1.1/docs/user-guide/environment-guide/containers/backend/backend.go create mode 100644 v1.1/docs/user-guide/environment-guide/containers/index.md create mode 100644 v1.1/docs/user-guide/environment-guide/containers/show/Dockerfile create mode 100644 v1.1/docs/user-guide/environment-guide/containers/show/show.go create mode 100644 v1.1/docs/user-guide/environment-guide/diagram.png create mode 100644 v1.1/docs/user-guide/environment-guide/index.md create mode 100644 v1.1/docs/user-guide/environment-guide/show-rc.yaml create mode 100644 v1.1/docs/user-guide/environment-guide/show-srv.yaml create mode 100644 v1.1/docs/user-guide/gcm.png create mode 100644 v1.1/docs/user-guide/getting-into-containers.md create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaler.md create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaler.png create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaler.svg create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaling/README.md create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaling/image/Dockerfile create mode 100755 v1.1/docs/user-guide/horizontal-pod-autoscaling/image/index.php create mode 100644 v1.1/docs/user-guide/horizontal-pod-autoscaling/index.md create mode 100644 v1.1/docs/user-guide/identifiers.md create mode 100644 v1.1/docs/user-guide/images.md create mode 100644 v1.1/docs/user-guide/index.md create mode 100644 v1.1/docs/user-guide/influx.png create mode 100644 v1.1/docs/user-guide/ingress.md create mode 100644 v1.1/docs/user-guide/ingress.yaml create mode 100644 v1.1/docs/user-guide/introspection-and-debugging.md create mode 100644 v1.1/docs/user-guide/job.yaml create mode 100644 v1.1/docs/user-guide/jobs.md create mode 100644 v1.1/docs/user-guide/jsonpath.md create mode 100644 v1.1/docs/user-guide/k8s-ui-explore-filter.png create mode 100644 v1.1/docs/user-guide/k8s-ui-explore-groupby.png create mode 100644 v1.1/docs/user-guide/k8s-ui-explore-poddetail.png create mode 100644 v1.1/docs/user-guide/k8s-ui-explore.png create mode 100644 v1.1/docs/user-guide/k8s-ui-nodes.png create mode 100644 v1.1/docs/user-guide/k8s-ui-overview.png create mode 100644 v1.1/docs/user-guide/kibana.png create mode 100644 v1.1/docs/user-guide/known-issues.md create mode 100644 v1.1/docs/user-guide/kubeconfig-file.md create mode 100644 v1.1/docs/user-guide/kubectl-overview.md create mode 100644 v1.1/docs/user-guide/kubectl/.files_generated create mode 100644 v1.1/docs/user-guide/kubectl/kubectl.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_annotate.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_api-versions.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_apply.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_attach.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_autoscale.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_cluster-info.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_set-cluster.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_set-context.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_set-credentials.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_set.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_unset.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_use-context.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_config_view.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_create.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_delete.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_describe.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_edit.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_exec.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_expose.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_get.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_label.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_logs.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_namespace.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_patch.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_port-forward.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_proxy.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_replace.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_rolling-update.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_run.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_scale.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_stop.md create mode 100644 v1.1/docs/user-guide/kubectl/kubectl_version.md create mode 100644 v1.1/docs/user-guide/labels.md create mode 100644 v1.1/docs/user-guide/liveness/README.md create mode 100644 v1.1/docs/user-guide/liveness/exec-liveness.yaml create mode 100644 v1.1/docs/user-guide/liveness/http-liveness.yaml create mode 100644 v1.1/docs/user-guide/liveness/image/Dockerfile create mode 100644 v1.1/docs/user-guide/liveness/image/Makefile create mode 100644 v1.1/docs/user-guide/liveness/image/server.go create mode 100644 v1.1/docs/user-guide/liveness/index.md create mode 100644 v1.1/docs/user-guide/logging-demo/Makefile create mode 100644 v1.1/docs/user-guide/logging-demo/README.md create mode 100644 v1.1/docs/user-guide/logging-demo/index.md create mode 100644 v1.1/docs/user-guide/logging-demo/synth-logger.png create mode 100644 v1.1/docs/user-guide/logging-demo/synthetic_0_25lps.yaml create mode 100644 v1.1/docs/user-guide/logging-demo/synthetic_10lps.yaml create mode 100644 v1.1/docs/user-guide/logging.md create mode 100644 v1.1/docs/user-guide/managing-deployments.md create mode 100644 v1.1/docs/user-guide/monitoring-architecture.png create mode 100644 v1.1/docs/user-guide/monitoring.md create mode 100644 v1.1/docs/user-guide/multi-pod.yaml create mode 100644 v1.1/docs/user-guide/namespaces.md create mode 100644 v1.1/docs/user-guide/new-nginx-deployment.yaml create mode 100644 v1.1/docs/user-guide/nginx-deployment.yaml create mode 100644 v1.1/docs/user-guide/node-selection/README.md create mode 100644 v1.1/docs/user-guide/node-selection/index.md create mode 100644 v1.1/docs/user-guide/node-selection/pod.yaml create mode 100644 v1.1/docs/user-guide/overview.md create mode 100644 v1.1/docs/user-guide/persistent-volumes.md create mode 100644 v1.1/docs/user-guide/persistent-volumes/README.md create mode 100644 v1.1/docs/user-guide/persistent-volumes/claims/claim-01.yaml create mode 100644 v1.1/docs/user-guide/persistent-volumes/claims/claim-02.yaml create mode 100644 v1.1/docs/user-guide/persistent-volumes/claims/claim-03.json create mode 100644 v1.1/docs/user-guide/persistent-volumes/index.md create mode 100644 v1.1/docs/user-guide/persistent-volumes/simpletest/namespace.json create mode 100644 v1.1/docs/user-guide/persistent-volumes/simpletest/pod.yaml create mode 100644 v1.1/docs/user-guide/persistent-volumes/simpletest/service.json create mode 100644 v1.1/docs/user-guide/persistent-volumes/volumes/gce.yaml create mode 100644 v1.1/docs/user-guide/persistent-volumes/volumes/local-01.yaml create mode 100644 v1.1/docs/user-guide/persistent-volumes/volumes/local-02.yaml create mode 100644 v1.1/docs/user-guide/persistent-volumes/volumes/nfs.yaml create mode 100644 v1.1/docs/user-guide/pod-states.md create mode 100644 v1.1/docs/user-guide/pod.yaml create mode 100644 v1.1/docs/user-guide/pods.md create mode 100644 v1.1/docs/user-guide/prereqs.md create mode 100644 v1.1/docs/user-guide/production-pods.md create mode 100644 v1.1/docs/user-guide/quick-start.md create mode 100644 v1.1/docs/user-guide/replication-controller.md create mode 100644 v1.1/docs/user-guide/replication.yaml create mode 100644 v1.1/docs/user-guide/resourcequota/README.md create mode 100644 v1.1/docs/user-guide/resourcequota/index.md create mode 100644 v1.1/docs/user-guide/secrets.md create mode 100644 v1.1/docs/user-guide/secrets/README.md create mode 100644 v1.1/docs/user-guide/secrets/index.md create mode 100644 v1.1/docs/user-guide/secrets/secret-pod.yaml create mode 100644 v1.1/docs/user-guide/secrets/secret.yaml create mode 100644 v1.1/docs/user-guide/security-context.md create mode 100644 v1.1/docs/user-guide/service-accounts.md create mode 100644 v1.1/docs/user-guide/services-detail.png create mode 100644 v1.1/docs/user-guide/services-detail.svg create mode 100644 v1.1/docs/user-guide/services-firewalls.md create mode 100644 v1.1/docs/user-guide/services-overview.png create mode 100644 v1.1/docs/user-guide/services-overview.svg create mode 100644 v1.1/docs/user-guide/services.md create mode 100644 v1.1/docs/user-guide/sharing-clusters.md create mode 100644 v1.1/docs/user-guide/simple-nginx.md create mode 100644 v1.1/docs/user-guide/simple-yaml.md create mode 100644 v1.1/docs/user-guide/ui.md create mode 100644 v1.1/docs/user-guide/update-demo/README.md create mode 100755 v1.1/docs/user-guide/update-demo/build-images.sh create mode 100644 v1.1/docs/user-guide/update-demo/images/kitten/Dockerfile create mode 100644 v1.1/docs/user-guide/update-demo/images/kitten/html/data.json create mode 100644 v1.1/docs/user-guide/update-demo/images/kitten/html/kitten.jpg create mode 100644 v1.1/docs/user-guide/update-demo/images/nautilus/Dockerfile create mode 100644 v1.1/docs/user-guide/update-demo/images/nautilus/html/data.json create mode 100644 v1.1/docs/user-guide/update-demo/images/nautilus/html/nautilus.jpg create mode 100644 v1.1/docs/user-guide/update-demo/index.md create mode 100644 v1.1/docs/user-guide/update-demo/kitten-rc.yaml create mode 100644 v1.1/docs/user-guide/update-demo/local/LICENSE.angular create mode 100644 v1.1/docs/user-guide/update-demo/local/angular.min.js create mode 100644 v1.1/docs/user-guide/update-demo/local/angular.min.js.map create mode 100644 v1.1/docs/user-guide/update-demo/local/index.html create mode 100644 v1.1/docs/user-guide/update-demo/local/script.js create mode 100644 v1.1/docs/user-guide/update-demo/local/style.css create mode 100644 v1.1/docs/user-guide/update-demo/nautilus-rc.yaml create mode 100644 v1.1/docs/user-guide/volumes.md create mode 100644 v1.1/docs/user-guide/walkthrough/README.md create mode 100644 v1.1/docs/user-guide/walkthrough/index.md create mode 100644 v1.1/docs/user-guide/walkthrough/k8s201.md create mode 100644 v1.1/docs/user-guide/walkthrough/pod-nginx-with-label.yaml create mode 100644 v1.1/docs/user-guide/walkthrough/pod-nginx.yaml create mode 100644 v1.1/docs/user-guide/walkthrough/pod-redis.yaml create mode 100644 v1.1/docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml create mode 100644 v1.1/docs/user-guide/walkthrough/podtemplate.json create mode 100644 v1.1/docs/user-guide/walkthrough/replication-controller.yaml create mode 100644 v1.1/docs/user-guide/walkthrough/service.yaml create mode 100644 v1.1/docs/user-guide/working-with-resources.md create mode 100644 v1.1/docs/warning.png create mode 100644 v1.1/docs/whatisk8s.md create mode 100644 v1.1/gs-custom.md create mode 100644 v1.1/gs-localmachine.md create mode 100644 v1.1/gs-turnkey.md delete mode 100644 v1.1/guides/index.md create mode 100644 v1.1/multi-tier.md delete mode 100644 v1.1/reference/index.md delete mode 100644 v1.1/samples/index.md create mode 100644 v1.1/setup-config.md delete mode 100644 v1.1/support/index.md diff --git a/_config.yml b/_config.yml index 012a42ab432dc..272bfc89ac071 100644 --- a/_config.yml +++ b/_config.yml @@ -22,24 +22,4 @@ defaults: values: version: "v1.1" versionfilesafe: "v1_1" - - - scope: - path: "v1.1/reference" - values: - section: "reference" - - - scope: - path: "v1.1/guides" - values: - section: "guides" - - - scope: - path: "v1.1/support" - values: - section: "support" - - - scope: - path: "v1.1/samples" - values: - section: "samples" permalink: pretty \ No newline at end of file diff --git a/v1.1/.DS_Store b/v1.1/.DS_Store index cf454e5a82630bfbcbcc3bfba578bf250412d15a..b22ac52793b4870228b861611296279b9af5e52b 100644 GIT binary patch literal 6148 zcmeHKPfrs;6rX`AEvQU^Dnd*)_M(9UAj-+G6pRoj4p}4<{tAIcM5ABEZBliw-=lZ4kHRKmnx#m%Td<@Y>UYk4A(WBGEMES z+lEQ)B`3vwpKs?`i97PmdxNylRLhf`{w7&W>bIK8C8-dUlnO#geO{_jg0l{HXe_Cx zr6mUE%m|u6iztV-&>nh-9-&w0HTsA?qp#>Y?!p9L#3OhTU&qsU9^b~xIExGT4lcT%7wg3-SbtmIGHh0QkYx*B`KPD|T`Do8EnQu7Fkb#haKW9Mf4;mDKy26IU zVC#S?xB>u1z#ItZ;w~X#G=;jthD7KA!7>z3hGKQaz%m@{n)1^XHYCb$gw^E(tC6v~ zq2OS2$gc(N2k0bD6mm%uSuG zZL<_-tp?>D6d}T|Au$MnN*%|6B97ugD1ktqCKNzjVM8KVK*Aq^fQGON8ThLV`~Vbo B;T!+} delta 133 zcmZoMXfc=|#>CJzu~2NHo}wrt0|NsP3otNLFz7MlGNgFsV&;<$yXE+<;gEh#CL?-z>->#Table of Contents:

+
    + + diff --git a/v1.1/app-admin-detailed.md b/v1.1/app-admin-detailed.md new file mode 100644 index 0000000000000..ec46284dddc83 --- /dev/null +++ b/v1.1/app-admin-detailed.md @@ -0,0 +1,17 @@ +--- +layout: docwithnav +title: "Application Administration: Detailed Walkthrough" +--- + +## {{ page.title }} ## + +The detailed walkthrough covers all the in-depth details and tasks for administering your applications in Kubernetes. + +

    Table of Contents:

    +
      + + diff --git a/v1.1/basicstutorials.md b/v1.1/basicstutorials.md new file mode 100644 index 0000000000000..d33e3885c038d --- /dev/null +++ b/v1.1/basicstutorials.md @@ -0,0 +1,17 @@ +--- +layout: docwithnav +title: "Quick Walkthrough: Kubernetes Basics" +--- + +## {{ page.title }} ## + +Use this quick walkthrough of Kubernetes to learn about the basic application administration tasks. + +

      Table of Contents:

      +
        + + diff --git a/v1.1/deploy-clusters.md b/v1.1/deploy-clusters.md new file mode 100644 index 0000000000000..f6eb48fefba7e --- /dev/null +++ b/v1.1/deploy-clusters.md @@ -0,0 +1,17 @@ +--- +layout: docwithnav +title: "Examples: Deploying Clusters" +--- + +## {{ page.title }} ## + +Use the following examples to learn how to deploy your application into a Kubernetes cluster. + +

        Table of Contents:

        +
          + + diff --git a/v1.1/docs/README.md b/v1.1/docs/README.md new file mode 100644 index 0000000000000..df574178325d5 --- /dev/null +++ b/v1.1/docs/README.md @@ -0,0 +1,49 @@ +--- +layout: docwithnav +title: "Kubernetes Documentation: releases.k8s.io/release-1.1" +--- + + + + + +# Kubernetes Documentation: releases.k8s.io/release-1.1 + +* The [User's guide](user-guide/README.html) is for anyone who wants to run programs and + services on an existing Kubernetes cluster. + +* The [Cluster Admin's guide](admin/README.html) is for anyone setting up + a Kubernetes cluster or administering it. + +* The [Developer guide](devel/README.html) is for anyone wanting to write + programs that access the Kubernetes API, write plugins or extensions, or + modify the core code of Kubernetes. + +* The [Kubectl Command Line Interface](user-guide/kubectl/kubectl.html) is a detailed reference on + the `kubectl` CLI. + +* The [API object documentation](http://kubernetes.io/third_party/swagger-ui/) + is a detailed description of all fields found in core API objects. + +* An overview of the [Design of Kubernetes](design/) + +* There are example files and walkthroughs in the [examples](../examples/) + folder. + +* If something went wrong, see the [troubleshooting](troubleshooting.html) document for how to debug. +You should also check the [known issues](user-guide/known-issues.html) for the release you're using. + +* To report a security issue, see [Reporting a Security Issue](reporting-security-issues.html). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/README.md b/v1.1/docs/admin/README.md new file mode 100644 index 0000000000000..def2322d6edb8 --- /dev/null +++ b/v1.1/docs/admin/README.md @@ -0,0 +1,58 @@ +--- +layout: docwithnav +title: "Kubernetes Cluster Admin Guide" +--- + + + + + +# Kubernetes Cluster Admin Guide + +The cluster admin guide is for anyone creating or administering a Kubernetes cluster. +It assumes some familiarity with concepts in the [User Guide](../user-guide/README.html). + +## Admin Guide Table of Contents + +[Introduction](introduction.html) + +1. [Components of a cluster](cluster-components.html) + 1. [Cluster Management](cluster-management.html) + 1. Administrating Master Components + 1. [The kube-apiserver binary](kube-apiserver.html) + 1. [Authorization](authorization.html) + 1. [Authentication](authentication.html) + 1. [Accessing the api](accessing-the-api.html) + 1. [Admission Controllers](admission-controllers.html) + 1. [Administrating Service Accounts](service-accounts-admin.html) + 1. [Resource Quotas](resource-quota.html) + 1. [The kube-scheduler binary](kube-scheduler.html) + 1. [The kube-controller-manager binary](kube-controller-manager.html) + 1. [Administrating Kubernetes Nodes](node.html) + 1. [The kubelet binary](kubelet.html) + 1. [Garbage Collection](garbage-collection.html) + 1. [The kube-proxy binary](kube-proxy.html) + 1. Administrating Addons + 1. [DNS](dns.html) + 1. [Networking](networking.html) + 1. [OVS Networking](ovs-networking.html) + 1. Example Configurations + 1. [Multiple Clusters](multi-cluster.html) + 1. [High Availability Clusters](high-availability.html) + 1. [Large Clusters](cluster-large.html) + 1. [Getting started from scratch](../getting-started-guides/scratch.html) + 1. [Kubernetes's use of salt](salt.html) + 1. [Troubleshooting](cluster-troubleshooting.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/accessing-the-api.md b/v1.1/docs/admin/accessing-the-api.md new file mode 100644 index 0000000000000..b4113652db0c1 --- /dev/null +++ b/v1.1/docs/admin/accessing-the-api.md @@ -0,0 +1,91 @@ +--- +layout: docwithnav +title: "Configuring APIserver ports" +--- + + + + + +# Configuring APIserver ports + +This document describes what ports the Kubernetes apiserver +may serve on and how to reach them. The audience is +cluster administrators who want to customize their cluster +or understand the details. + +Most questions about accessing the cluster are covered +in [Accessing the cluster](../user-guide/accessing-the-cluster.html). + + +## Ports and IPs Served On + +The Kubernetes API is served by the Kubernetes apiserver process. Typically, +there is one of these running on a single kubernetes-master node. + +By default the Kubernetes APIserver serves HTTP on 2 ports: + 1. Localhost Port + - serves HTTP + - default is port 8080, change with `--insecure-port` flag. + - defaults IP is localhost, change with `--insecure-bind-address` flag. + - no authentication or authorization checks in HTTP + - protected by need to have host access + 2. Secure Port + - default is port 6443, change with `--secure-port` flag. + - default IP is first non-localhost network interface, change with `--bind-address` flag. + - serves HTTPS. Set cert with `--tls-cert-file` and key with `--tls-private-key-file` flag. + - uses token-file or client-certificate based [authentication](authentication.html). + - uses policy-based [authorization](authorization.html). + 3. Removed: ReadOnly Port + - For security reasons, this had to be removed. Use the [service account](../user-guide/service-accounts.html) feature instead. + +## Proxies and Firewall rules + +Additionally, in some configurations there is a proxy (nginx) running +on the same machine as the apiserver process. The proxy serves HTTPS protected +by Basic Auth on port 443, and proxies to the apiserver on localhost:8080. In +these configurations the secure port is typically set to 6443. + +A firewall rule is typically configured to allow external HTTPS access to port 443. + +The above are defaults and reflect how Kubernetes is deployed to Google Compute Engine using +kube-up.sh. Other cloud providers may vary. + +## Use Cases vs IP:Ports + +There are three differently configured serving ports because there are a +variety of uses cases: + 1. Clients outside of a Kubernetes cluster, such as human running `kubectl` + on desktop machine. Currently, accesses the Localhost Port via a proxy (nginx) + running on the `kubernetes-master` machine. The proxy can use cert-based authentication + or token-based authentication. + 2. Processes running in Containers on Kubernetes that need to read from + the apiserver. Currently, these can use a [service account](../user-guide/service-accounts.html). + 3. Scheduler and Controller-manager processes, which need to do read-write + API operations. Currently, these have to run on the same host as the + apiserver and use the Localhost Port. In the future, these will be + switched to using service accounts to avoid the need to be co-located. + 4. Kubelets, which need to do read-write API operations and are necessarily + on different machines than the apiserver. Kubelet uses the Secure Port + to get their pods, to find the services that a pod can see, and to + write events. Credentials are distributed to kubelets at cluster + setup time. Kubelet and kube-proxy can use cert-based authentication or token-based + authentication. + +## Expected changes + + - Policy will limit the actions kubelets can do via the authed port. + - Scheduler and Controller-manager will use the Secure Port too. They + will then be able to run on different machines than the apiserver. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/accessing-the-api.md?pixel)]() + + diff --git a/v1.1/docs/admin/admission-controllers.md b/v1.1/docs/admin/admission-controllers.md new file mode 100644 index 0000000000000..9e5b9aa21f050 --- /dev/null +++ b/v1.1/docs/admin/admission-controllers.md @@ -0,0 +1,177 @@ +--- +layout: docwithnav +title: "Admission Controllers" +--- + + + + + +# Admission Controllers + +**Table of Contents** + + +- [Admission Controllers](#admission-controllers) + - [What are they?](#what-are-they) + - [Why do I need them?](#why-do-i-need-them) + - [How do I turn on an admission control plug-in?](#how-do-i-turn-on-an-admission-control-plug-in) + - [What does each plug-in do?](#what-does-each-plug-in-do) + - [AlwaysAdmit](#alwaysadmit) + - [AlwaysDeny](#alwaysdeny) + - [DenyExecOnPrivileged (deprecated)](#denyexeconprivileged-deprecated) + - [DenyEscalatingExec](#denyescalatingexec) + - [ServiceAccount](#serviceaccount) + - [SecurityContextDeny](#securitycontextdeny) + - [ResourceQuota](#resourcequota) + - [LimitRanger](#limitranger) + - [InitialResources (experimental)](#initialresources-experimental) + - [NamespaceExists (deprecated)](#namespaceexists-deprecated) + - [NamespaceAutoProvision (deprecated)](#namespaceautoprovision-deprecated) + - [NamespaceLifecycle](#namespacelifecycle) + - [Is there a recommended set of plug-ins to use?](#is-there-a-recommended-set-of-plug-ins-to-use) + + + +## What are they? + +An admission control plug-in is a piece of code that intercepts requests to the Kubernetes +API server prior to persistence of the object, but after the request is authenticated +and authorized. The plug-in code is in the API server process +and must be compiled into the binary in order to be used at this time. + +Each admission control plug-in is run in sequence before a request is accepted into the cluster. If +any of the plug-ins in the sequence reject the request, the entire request is rejected immediately +and an error is returned to the end-user. + +Admission control plug-ins may mutate the incoming object in some cases to apply system configured +defaults. In addition, admission control plug-ins may mutate related resources as part of request +processing to do things like increment quota usage. + +## Why do I need them? + +Many advanced features in Kubernetes require an admission control plug-in to be enabled in order +to properly support the feature. As a result, a Kubernetes API server that is not properly +configured with the right set of admission control plug-ins is an incomplete server and will not +support all the features you expect. + +## How do I turn on an admission control plug-in? + +The Kubernetes API server supports a flag, `admission-control` that takes a comma-delimited, +ordered list of admission control choices to invoke prior to modifying objects in the cluster. + +## What does each plug-in do? + +### AlwaysAdmit + +Use this plugin by itself to pass-through all requests. + +### AlwaysDeny + +Rejects all requests. Used for testing. + +### DenyExecOnPrivileged (deprecated) + +This plug-in will intercept all requests to exec a command in a pod if that pod has a privileged container. + +If your cluster supports privileged containers, and you want to restrict the ability of end-users to exec +commands in those containers, we strongly encourage enabling this plug-in. + +This functionality has been merged into [DenyEscalatingExec](#denyescalatingexec). + +### DenyEscalatingExec + +This plug-in will deny exec and attach commands to pods that run with escalated privileges that +allow host access. This includes pods that run as privileged, have access to the host IPC namespace, and +have access to the host PID namespace. + +If your cluster supports containers that run with escalated privileges, and you want to +restrict the ability of end-users to exec commands in those containers, we strongly encourage +enabling this plug-in. + +### ServiceAccount + +This plug-in implements automation for [serviceAccounts](../user-guide/service-accounts.html). +We strongly recommend using this plug-in if you intend to make use of Kubernetes `ServiceAccount` objects. + +### SecurityContextDeny + +This plug-in will deny any pod with a [SecurityContext](../user-guide/security-context.html) that defines options that were not available on the `Container`. + +### ResourceQuota + +This plug-in will observe the incoming request and ensure that it does not violate any of the constraints +enumerated in the `ResourceQuota` object in a `Namespace`. If you are using `ResourceQuota` +objects in your Kubernetes deployment, you MUST use this plug-in to enforce quota constraints. + +See the [resourceQuota design doc](../design/admission_control_resource_quota.html) and the [example of Resource Quota](resourcequota/) for more details. + +It is strongly encouraged that this plug-in is configured last in the sequence of admission control plug-ins. This is +so that quota is not prematurely incremented only for the request to be rejected later in admission control. + +### LimitRanger + +This plug-in will observe the incoming request and ensure that it does not violate any of the constraints +enumerated in the `LimitRange` object in a `Namespace`. If you are using `LimitRange` objects in +your Kubernetes deployment, you MUST use this plug-in to enforce those constraints. LimitRanger can also +be used to apply default resource requests to Pods that don't specify any; currently, the default LimitRanger +applies a 0.1 CPU requirement to all Pods in the `default` namespace. + +See the [limitRange design doc](../design/admission_control_limit_range.html) and the [example of Limit Range](limitrange/) for more details. + +### InitialResources (experimental) + +This plug-in observes pod creation requests. If a container omits compute resource requests and limits, +then the plug-in auto-populates a compute resource request based on historical usage of containers running the same image. +If there is not enough data to make a decision the Request is left unchanged. +When the plug-in sets a compute resource request, it annotates the pod with information on what compute resources it auto-populated. + +See the [InitialResouces proposal](../proposals/initial-resources.html) for more details. + +### NamespaceExists (deprecated) + +This plug-in will observe all incoming requests that attempt to create a resource in a Kubernetes `Namespace` +and reject the request if the `Namespace` was not previously created. We strongly recommend running +this plug-in to ensure integrity of your data. + +The functionality of this admission controller has been merged into `NamespaceLifecycle` + +### NamespaceAutoProvision (deprecated) + +This plug-in will observe all incoming requests that attempt to create a resource in a Kubernetes `Namespace` +and create a new `Namespace` if one did not already exist previously. + +We strongly recommend `NamespaceLifecycle` over `NamespaceAutoProvision`. + +### NamespaceLifecycle + +This plug-in enforces that a `Namespace` that is undergoing termination cannot have new objects created in it, +and ensures that requests in a non-existant `Namespace` are rejected. + +A `Namespace` deletion kicks off a sequence of operations that remove all objects (pods, services, etc.) in that +namespace. In order to enforce integrity of that process, we strongly recommend running this plug-in. + +## Is there a recommended set of plug-ins to use? + +Yes. + +For Kubernetes 1.0, we strongly recommend running the following set of admission control plug-ins (order matters): + +``` +{% raw %} +--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota +{% endraw %} +``` + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/admission-controllers.md?pixel)]() + + diff --git a/v1.1/docs/admin/authentication.md b/v1.1/docs/admin/authentication.md new file mode 100644 index 0000000000000..196463e0b1403 --- /dev/null +++ b/v1.1/docs/admin/authentication.md @@ -0,0 +1,146 @@ +--- +layout: docwithnav +title: "Authentication Plugins" +--- + + + + + +# Authentication Plugins + +Kubernetes uses client certificates, tokens, or http basic auth to authenticate users for API calls. + +**Client certificate authentication** is enabled by passing the `--client-ca-file=SOMEFILE` +option to apiserver. The referenced file must contain one or more certificates authorities +to use to validate client certificates presented to the apiserver. If a client certificate +is presented and verified, the common name of the subject is used as the user name for the +request. + +**Token File** is enabled by passing the `--token-auth-file=SOMEFILE` option +to apiserver. Currently, tokens last indefinitely, and the token list cannot +be changed without restarting apiserver. + +The token file format is implemented in `plugin/pkg/auth/authenticator/token/tokenfile/...` +and is a csv file with 3 columns: token, user name, user uid. + +When using token authentication from an http client the apiserver expects an `Authorization` +header with a value of `Bearer SOMETOKEN`. + +**OpenID Connect ID Token** is enabled by passing the following options to the apiserver: +- `--oidc-issuer-url` (required) tells the apiserver where to connect to the OpenID provider. Only HTTPS scheme will be accepted. +- `--oidc-client-id` (required) is used by apiserver to verify the audience of the token. +A valid [ID token](http://openid.net/specs/openid-connect-core-1_0.html#IDToken) MUST have this +client-id in its `aud` claims. +- `--oidc-ca-file` (optional) is used by apiserver to establish and verify the secure connection +to the OpenID provider. +- `--oidc-username-claim` (optional, experimental) specifies which OpenID claim to use as the user name. By default, `sub` +will be used, which should be unique and immutable under the issuer's domain. Cluster administrator can +choose other claims such as `email` to use as the user name, but the uniqueness and immutability is not guaranteed. + +Please note that this flag is still experimental until we settle more on how to handle the mapping of the OpenID user to the Kubernetes user. Thus further changes are possible. + +Currently, the ID token will be obtained by some third-party app. This means the app and apiserver +MUST share the `--oidc-client-id`. + +Like **Token File**, when using token authentication from an http client the apiserver expects +an `Authorization` header with a value of `Bearer SOMETOKEN`. + +**Basic authentication** is enabled by passing the `--basic-auth-file=SOMEFILE` +option to apiserver. Currently, the basic auth credentials last indefinitely, +and the password cannot be changed without restarting apiserver. Note that basic +authentication is currently supported for convenience while we finish making the +more secure modes described above easier to use. + +The basic auth file format is implemented in `plugin/pkg/auth/authenticator/password/passwordfile/...` +and is a csv file with 3 columns: password, user name, user id. + +When using basic authentication from an http client, the apiserver expects an `Authorization` header +with a value of `Basic BASE64ENCODED(USER:PASSWORD)`. + +**Keystone authentication** is enabled by passing the `--experimental-keystone-url=` +option to the apiserver during startup. The plugin is implemented in +`plugin/pkg/auth/authenticator/request/keystone/keystone.go`. +For details on how to use keystone to manage projects and users, refer to the +[Keystone documentation](http://docs.openstack.org/developer/keystone/). Please note that +this plugin is still experimental which means it is subject to changes. +Please refer to the [discussion](https://github.com/kubernetes/kubernetes/pull/11798#issuecomment-129655212) +and the [blueprint](https://github.com/kubernetes/kubernetes/issues/11626) for more details + +## Plugin Development + +We plan for the Kubernetes API server to issue tokens +after the user has been (re)authenticated by a *bedrock* authentication +provider external to Kubernetes. We plan to make it easy to develop modules +that interface between Kubernetes and a bedrock authentication provider (e.g. +github.com, google.com, enterprise directory, kerberos, etc.) + +## APPENDIX + +### Creating Certificates + +When using client certificate authentication, you can generate certificates manually or +using an existing deployment script. + +**Deployment script** is implemented at +`cluster/saltbase/salt/generate-cert/make-ca-cert.sh`. +Execute this script with two parameters. First is the IP address of apiserver, the second is +a list of subject alternate names in the form `IP: or DNS:`. +The script will generate three files:ca.crt, server.crt and server.key. +Finally, add these parameters +`--client-ca-file=/srv/kubernetes/ca.crt` +`--tls-cert-file=/srv/kubernetes/server.cert` +`--tls-private-key-file=/srv/kubernetes/server.key` +into apiserver start parameters. + +**easyrsa** can be used to manually generate certificates for your cluster. + +1. Download, unpack, and initialize the patched version of easyrsa3. + + curl -L -O https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz + tar xzf easy-rsa.tar.gz + cd easy-rsa-master/easyrsa3 + ./easyrsa init-pki +1. Generate a CA. (`--batch` set automatic mode. `--req-cn` default CN to use.) + + ./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass +1. Generate server certificate and key. + (build-server-full [filename]: Generate a keypair and sign locally for a client or server) + + ./easyrsa --subject-alt-name="IP:${MASTER_IP}" build-server-full kubernetes-master nopass +1. Copy `pki/ca.crt` `pki/issued/kubernetes-master.crt` + `pki/private/kubernetes-master.key` to your directory. +1. Remember fill the parameters + `--client-ca-file=/yourdirectory/ca.crt` + `--tls-cert-file=/yourdirectory/server.cert` + `--tls-private-key-file=/yourdirectory/server.key` + and add these into apiserver start parameters. + +**openssl** can also be use to manually generate certificates for your cluster. + +1. Generate a ca.key with 2048bit + `openssl genrsa -out ca.key 2048` +1. According to the ca.key generate a ca.crt. (-days set the certificate effective time). + `openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt` +1. Generate a server.key with 2048bit + `openssl genrsa -out server.key 2048` +1. According to the server.key generate a server.csr. + `openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr` +1. According to the ca.key, ca.crt and server.csr generate the server.crt. + `openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt + -days 10000` +1. View the certificate. + `openssl x509 -noout -text -in ./server.crt` + Finally, do not forget fill the same parameters and add parameters into apiserver start parameters. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/authentication.md?pixel)]() + + diff --git a/v1.1/docs/admin/authorization.md b/v1.1/docs/admin/authorization.md new file mode 100644 index 0000000000000..e0378b772c587 --- /dev/null +++ b/v1.1/docs/admin/authorization.md @@ -0,0 +1,159 @@ +--- +layout: docwithnav +title: "Authorization Plugins" +--- + + + + + +# Authorization Plugins + + +In Kubernetes, authorization happens as a separate step from authentication. +See the [authentication documentation](authentication.html) for an +overview of authentication. + +Authorization applies to all HTTP accesses on the main (secure) apiserver port. + +The authorization check for any request compares attributes of the context of +the request, (such as user, resource, and namespace) with access +policies. An API call must be allowed by some policy in order to proceed. + +The following implementations are available, and are selected by flag: + - `--authorization-mode=AlwaysDeny` + - `--authorization-mode=AlwaysAllow` + - `--authorization-mode=ABAC` + +`AlwaysDeny` blocks all requests (used in tests). +`AlwaysAllow` allows all requests; use if you don't need authorization. +`ABAC` allows for user-configured authorization policy. ABAC stands for Attribute-Based Access Control. + +## ABAC Mode + +### Request Attributes + +A request has 5 attributes that can be considered for authorization: + - user (the user-string which a user was authenticated as). + - group (the list of group names the authenticated user is a member of). + - whether the request is readonly (GETs are readonly). + - what resource is being accessed. + - applies only to the API endpoints, such as + `/api/v1/namespaces/default/pods`. For miscellaneous endpoints, like `/version`, the + resource is the empty string. + - the namespace of the object being access, or the empty string if the + endpoint does not support namespaced objects. + +We anticipate adding more attributes to allow finer grained access control and +to assist in policy management. + +### Policy File Format + +For mode `ABAC`, also specify `--authorization-policy-file=SOME_FILENAME`. + +The file format is [one JSON object per line](http://jsonlines.org/). There should be no enclosing list or map, just +one map per line. + +Each line is a "policy object". A policy object is a map with the following properties: + - `user`, type string; the user-string from `--token-auth-file`. If you specify `user`, it must match the username of the authenticated user. + - `group`, type string; if you specify `group`, it must match one of the groups of the authenticated user. + - `readonly`, type boolean, when true, means that the policy only applies to GET + operations. + - `resource`, type string; a resource from an URL, such as `pods`. + - `namespace`, type string; a namespace string. + +An unset property is the same as a property set to the zero value for its type (e.g. empty string, 0, false). +However, unset should be preferred for readability. + +In the future, policies may be expressed in a JSON format, and managed via a REST +interface. + +### Authorization Algorithm + +A request has attributes which correspond to the properties of a policy object. + +When a request is received, the attributes are determined. Unknown attributes +are set to the zero value of its type (e.g. empty string, 0, false). + +An unset property will match any value of the corresponding +attribute. An unset attribute will match any value of the corresponding property. + +The tuple of attributes is checked for a match against every policy in the policy file. +If at least one line matches the request attributes, then the request is authorized (but may fail later validation). + +To permit any user to do something, write a policy with the user property unset. +To permit an action Policy with an unset namespace applies regardless of namespace. + +### Examples + + 1. Alice can do anything: `{"user":"alice"}` + 2. Kubelet can read any pods: `{"user":"kubelet", "resource": "pods", "readonly": true}` + 3. Kubelet can read and write events: `{"user":"kubelet", "resource": "events"}` + 4. Bob can just read pods in namespace "projectCaribou": `{"user":"bob", "resource": "pods", "readonly": true, "namespace": "projectCaribou"}` + +[Complete file example](http://releases.k8s.io/release-1.1/pkg/auth/authorizer/abac/example_policy_file.jsonl) + +### A quick note on service accounts + +A service account automatically generates a user. The user's name is generated according to the naming convention: + +``` +{% raw %} +system:serviceaccount:: +{% endraw %} +``` + +Creating a new namespace also causes a new service account to be created, of this form:* + +``` +{% raw %} +system:serviceaccount::default +{% endraw %} +``` + +For example, if you wanted to grant the default service account in the kube-system full privilege to the API, you would add this line to your policy file: + +{% highlight json %} +{% raw %} +{"user":"system:serviceaccount:kube-system:default"} +{% endraw %} +{% endhighlight %} + +The apiserver will need to be restarted to pickup the new policy lines. + +## Plugin Development + +Other implementations can be developed fairly easily. +The APIserver calls the Authorizer interface: + +{% highlight go %} +{% raw %} +type Authorizer interface { + Authorize(a Attributes) error +} +{% endraw %} +{% endhighlight %} + +to determine whether or not to allow each API action. + +An authorization plugin is a module that implements this interface. +Authorization plugin code goes in `pkg/auth/authorizer/$MODULENAME`. + +An authorization module can be completely implemented in go, or can call out +to a remote authorization service. Authorization modules can implement +their own caching to reduce the cost of repeated authorization calls with the +same or similar arguments. Developers should then consider the interaction between +caching and revocation of permissions. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/authorization.md?pixel)]() + + diff --git a/v1.1/docs/admin/cluster-components.md b/v1.1/docs/admin/cluster-components.md new file mode 100644 index 0000000000000..48c4148e1a0e4 --- /dev/null +++ b/v1.1/docs/admin/cluster-components.md @@ -0,0 +1,136 @@ +--- +layout: docwithnav +title: "Kubernetes Cluster Admin Guide: Cluster Components" +--- + + + + + +# Kubernetes Cluster Admin Guide: Cluster Components + +This document outlines the various binary components that need to run to +deliver a functioning Kubernetes cluster. + +## Master Components + +Master components are those that provide the cluster's control plane. For +example, master components are responsible for making global decisions about the +cluster (e.g., scheduling), and detecting and responding to cluster events +(e.g., starting up a new pod when a replication controller's 'replicas' field is +unsatisfied). + +Master components could in theory be run on any node in the cluster. However, +for simplicity, current set up scripts typically start all master components on +the same VM, and does not run user containers on this VM. See +[high-availability.md](high-availability.html) for an example multi-master-VM setup. + +Even in the future, when Kubernetes is fully self-hosting, it will probably be +wise to only allow master components to schedule on a subset of nodes, to limit +co-running with user-run pods, reducing the possible scope of a +node-compromising security exploit. + +### kube-apiserver + +[kube-apiserver](kube-apiserver.html) exposes the Kubernetes API; it is the front-end for the +Kubernetes control plane. It is designed to scale horizontally (i.e., one scales +it by running more of them-- [high-availability.md](high-availability.html)). + +### etcd + +[etcd](etcd.html) is used as Kubernetes' backing store. All cluster data is stored here. +Proper administration of a Kubernetes cluster includes a backup plan for etcd's +data. + +### kube-controller-manager + +[kube-controller-manager](kube-controller-manager.html) is a binary that runs controllers, which are the +background threads that handle routine tasks in the cluster. Logically, each +controller is a separate process, but to reduce the number of moving pieces in +the system, they are all compiled into a single binary and run in a single +process. + +These controllers include: + +* Node Controller + * Responsible for noticing & responding when nodes go down. +* Replication Controller + * Responsible for maintaining the correct number of pods for every replication + controller object in the system. +* Endpoints Controller + * Populates the Endpoints object (i.e., join Services & Pods). +* Service Account & Token Controllers + * Create default accounts and API access tokens for new namespaces. +* ... and others. + +### kube-scheduler + +[kube-scheduler](kube-scheduler.html) watches newly created pods that have no node assigned, and +selects a node for them to run on. + +### addons + +Addons are pods and services that implement cluster features. They don't run on +the master VM, but currently the default setup scripts that make the API calls +to create these pods and services does run on the master VM. See: +[kube-master-addons](http://releases.k8s.io/release-1.1/cluster/saltbase/salt/kube-master-addons/kube-master-addons.sh) + +Addon objects are created in the "kube-system" namespace. + +Example addons are: +* [DNS](http://releases.k8s.io/release-1.1/cluster/addons/dns/) provides cluster local DNS. +* [kube-ui](http://releases.k8s.io/release-1.1/cluster/addons/kube-ui/) provides a graphical UI for the + cluster. +* [fluentd-elasticsearch](http://releases.k8s.io/release-1.1/cluster/addons/fluentd-elasticsearch/) provides + log storage. Also see the [gcp version](http://releases.k8s.io/release-1.1/cluster/addons/fluentd-gcp/). +* [cluster-monitoring](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/) provides + monitoring for the cluster. + +## Node components + +Node components run on every node, maintaining running pods and providing them +the Kubernetes runtime environment. + +### kubelet + +[kubelet](kubelet.html) is the primary node agent. It: +* Watches for pods that have been assigned to its node (either by apiserver + or via local configuration file) and: + * Mounts the pod's required volumes + * Downloads the pod's secrets + * Run the pod's containers via docker (or, experimentally, rkt). + * Periodically executes any requested container liveness probes. + * Reports the status of the pod back to the rest of the system, by creating a + "mirror pod" if necessary. +* Reports the status of the node back to the rest of the system. + +### kube-proxy + +[kube-proxy](kube-proxy.html) enables the Kubernetes service abstraction by maintaining +network rules on the host and performing connection forwarding. + +### docker + +`docker` is of course used for actually running containers. + +### rkt + +`rkt` is supported experimentally as an alternative to docker. + +### supervisord + +`supervisord` is a lightweight process babysitting system for keeping kubelet and docker +running. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/cluster-components.md?pixel)]() + + diff --git a/v1.1/docs/admin/cluster-large.md b/v1.1/docs/admin/cluster-large.md new file mode 100644 index 0000000000000..73ece08b56663 --- /dev/null +++ b/v1.1/docs/admin/cluster-large.md @@ -0,0 +1,86 @@ +--- +layout: docwithnav +title: "Kubernetes Large Cluster" +--- + + + + + +# Kubernetes Large Cluster + +## Support + +At v1.0, Kubernetes supports clusters up to 100 nodes with 30 pods per node and 1-2 containers per pod. + +## Setup + +A cluster is a set of nodes (physical or virtual machines) running Kubernetes agents, managed by a "master" (the cluster-level control plane). + +Normally the number of nodes in a cluster is controlled by the the value `NUM_MINIONS` in the platform-specific `config-default.sh` file (for example, see [GCE's `config-default.sh`](http://releases.k8s.io/release-1.1/cluster/gce/config-default.sh)). + +Simply changing that value to something very large, however, may cause the setup script to fail for many cloud providers. A GCE deployment, for example, will run in to quota issues and fail to bring the cluster up. + +When setting up a large Kubernetes cluster, the following issues must be considered. + +### Quota Issues + +To avoid running into cloud provider quota issues, when creating a cluster with many nodes, consider: +* Increase the quota for things like CPU, IPs, etc. + * In [GCE, for example,](https://cloud.google.com/compute/docs/resource-quotas) you'll want to increase the quota for: + * CPUs + * VM instances + * Total persistent disk reserved + * In-use IP addresses + * Firewall Rules + * Forwarding rules + * Routes + * Target pools +* Gating the setup script so that it brings up new node VMs in smaller batches with waits in between, because some cloud providers rate limit the creation of VMs. + +### Addon Resources + +To prevent memory leaks or other resource issues in [cluster addons](https://releases.k8s.io/release-1.1/cluster/addons) from consuming all the resources available on a node, Kubernetes sets resource limits on addon containers to limit the CPU and Memory resources they can consume (See PR [#10653](http://pr.k8s.io/10653/files) and [#10778](http://pr.k8s.io/10778/files)). + +For example: + +{% highlight yaml %} +{% raw %} +containers: + - image: gcr.io/google_containers/heapster:v0.15.0 + name: heapster + resources: + limits: + cpu: 100m + memory: 200Mi +{% endraw %} +{% endhighlight %} + +These limits, however, are based on data collected from addons running on 4-node clusters (see [#10335](http://issue.k8s.io/10335#issuecomment-117861225)). The addons consume a lot more resources when running on large deployment clusters (see [#5880](http://issue.k8s.io/5880#issuecomment-113984085)). So, if a large cluster is deployed without adjusting these values, the addons may continuously get killed because they keep hitting the limits. + +To avoid running into cluster addon resource issues, when creating a cluster with many nodes, consider the following: +* Scale memory and CPU limits for each of the following addons, if used, along with the size of cluster (there is one replica of each handling the entire cluster so memory and CPU usage tends to grow proportionally with size/load on cluster): + * Heapster ([GCM/GCL backed](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/google/heapster-controller.yaml), [InfluxDB backed](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/influxdb/heapster-controller.yaml), [InfluxDB/GCL backed](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/googleinfluxdb/heapster-controller-combined.yaml), [standalone](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/standalone/heapster-controller.yaml)) + * [InfluxDB and Grafana](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/influxdb/influxdb-grafana-controller.yaml) + * [skydns, kube2sky, and dns etcd](http://releases.k8s.io/release-1.1/cluster/addons/dns/skydns-rc.yaml.in) + * [Kibana](http://releases.k8s.io/release-1.1/cluster/addons/fluentd-elasticsearch/kibana-controller.yaml) +* Scale number of replicas for the following addons, if used, along with the size of cluster (there are multiple replicas of each so increasing replicas should help handle increased load, but, since load per replica also increases slightly, also consider increasing CPU/memory limits): + * [elasticsearch](http://releases.k8s.io/release-1.1/cluster/addons/fluentd-elasticsearch/es-controller.yaml) +* Increase memory and CPU limits slightly for each of the following addons, if used, along with the size of cluster (there is one replica per node but CPU/memory usage increases slightly along with cluster load/size as well): + * [FluentD with ElasticSearch Plugin](http://releases.k8s.io/release-1.1/cluster/saltbase/salt/fluentd-es/fluentd-es.yaml) + * [FluentD with GCP Plugin](http://releases.k8s.io/release-1.1/cluster/saltbase/salt/fluentd-gcp/fluentd-gcp.yaml) + +For directions on how to detect if addon containers are hitting resource limits, see the [Troubleshooting section of Compute Resources](../user-guide/compute-resources.html#troubleshooting). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/cluster-large.md?pixel)]() + + diff --git a/v1.1/docs/admin/cluster-management.md b/v1.1/docs/admin/cluster-management.md new file mode 100644 index 0000000000000..6de4e221ad14a --- /dev/null +++ b/v1.1/docs/admin/cluster-management.md @@ -0,0 +1,221 @@ +--- +layout: docwithnav +title: "Cluster Management" +--- + + + + + +# Cluster Management + +This document describes several topics related to the lifecycle of a cluster: creating a new cluster, +upgrading your cluster's +master and worker nodes, performing node maintenance (e.g. kernel upgrades), and upgrading the Kubernetes API version of a +running cluster. + +## Creating and configuring a Cluster + +To install Kubernetes on a set of machines, consult one of the existing [Getting Started guides](../../docs/getting-started-guides/README.html) depending on your environment. + +## Upgrading a cluster + +The current state of cluster upgrades is provider dependent. + +### Master Upgrades + +Both Google Container Engine (GKE) and +Compute Engine Open Source (GCE-OSS) support node upgrades via a [Managed Instance Group](https://cloud.google.com/compute/docs/instance-groups/). +Managed Instance Group upgrades sequentially delete and recreate each virtual machine, while maintaining the same +Persistent Disk (PD) to ensure that data is retained across the upgrade. + +In contrast, the `kube-push.sh` process used on [other platforms](#other-platforms) attempts to upgrade the binaries in +places, without recreating the virtual machines. + +### Node Upgrades + +Node upgrades for GKE and GCE-OSS again use a Managed Instance Group, each node is sequentially destroyed and then recreated with new software. Any Pods that are running +on that node need to be controlled by a Replication Controller, or manually re-created after the roll out. + +For other platforms, `kube-push.sh` is again used, performing an in-place binary upgrade on existing machines. + +### Upgrading Google Container Engine (GKE) + +Google Container Engine automatically updates master components (e.g. `kube-apiserver`, `kube-scheduler`) to the latest +version. It also handles upgrading the operating system and other components that the master runs on. + +The node upgrade process is user-initiated and is described in the [GKE documentation.](https://cloud.google.com/container-engine/docs/clusters/upgrade) + +### Upgrading open source Google Compute Engine clusters + +Upgrades on open source Google Compute Engine (GCE) clusters are controlled by the ```cluster/gce/upgrade.sh``` script. + +Get its usage by running `cluster/gce/upgrade.sh -h`. + +For example, to upgrade just your master to a specific version (v1.0.2): + +{% highlight console %} +{% raw %} +cluster/gce/upgrade.sh -M v1.0.2 +{% endraw %} +{% endhighlight %} + +Alternatively, to upgrade your entire cluster to the latest stable release: + +{% highlight console %} +{% raw %} +cluster/gce/upgrade.sh release/stable +{% endraw %} +{% endhighlight %} + +### Other platforms + +The `cluster/kube-push.sh` script will do a rudimentary update. This process is still quite experimental, we +recommend testing the upgrade on an experimental cluster before performing the update on a production cluster. + +## Resizing a cluster + +If your cluster runs short on resources you can easily add more machines to it if your cluster is running in [Node self-registration mode](node.html#self-registration-of-nodes). +If you're using GCE or GKE it's done by resizing Instance Group managing your Nodes. It can be accomplished by modifying number of instances on `Compute > Compute Engine > Instance groups > your group > Edit group` [Google Cloud Console page](https://console.developers.google.com) or using gcloud CLI: + +``` +{% raw %} +gcloud compute instance-groups managed --zone compute-zone resize my-cluster-minon-group --new-size 42 +{% endraw %} +``` + +Instance Group will take care of putting appropriate image on new machines and start them, while Kubelet will register its Node with API server to make it available for scheduling. If you scale the instance group down, system will randomly choose Nodes to kill. + +In other environments you may need to configure the machine yourself and tell the Kubelet on which machine API server is running. + + +### Horizontal auto-scaling of nodes (GCE) + +If you are using GCE, you can configure your cluster so that the number of nodes will be automatically scaled based on their CPU and memory utilization. +Before setting up the cluster by ```kube-up.sh```, you can set ```KUBE_ENABLE_NODE_AUTOSCALER``` environment variable to ```true``` and export it. +The script will create an autoscaler for the instance group managing your nodes. + +The autoscaler will try to maintain the average CPU and memory utilization of nodes within the cluster close to the target value. +The target value can be configured by ```KUBE_TARGET_NODE_UTILIZATION``` environment variable (default: 0.7) for ``kube-up.sh`` when creating the cluster. +The node utilization is the total node's CPU/memory usage (OS + k8s + user load) divided by the node's capacity. +If the desired numbers of nodes in the cluster resulting from CPU utilization and memory utilization are different, +the autoscaler will choose the bigger number. +The number of nodes in the cluster set by the autoscaler will be limited from ```KUBE_AUTOSCALER_MIN_NODES``` (default: 1) +to ```KUBE_AUTOSCALER_MAX_NODES``` (default: the initial number of nodes in the cluster). + +The autoscaler is implemented as a Compute Engine Autoscaler. +The initial values of the autoscaler parameters set by ``kube-up.sh`` and some more advanced options can be tweaked on +`Compute > Compute Engine > Instance groups > your group > Edit group`[Google Cloud Console page](https://console.developers.google.com) +or using gcloud CLI: + +``` +{% raw %} +gcloud preview autoscaler --zone compute-zone +{% endraw %} +``` + +Note that autoscaling will work properly only if node metrics are accessible in Google Cloud Monitoring. +To make the metrics accessible, you need to create your cluster with ```KUBE_ENABLE_CLUSTER_MONITORING``` +equal to ```google``` or ```googleinfluxdb``` (```googleinfluxdb``` is the default value). + +## Maintenance on a Node + +If you need to reboot a node (such as for a kernel upgrade, libc upgrade, hardware repair, etc.), and the downtime is +brief, then when the Kubelet restarts, it will attempt to restart the pods scheduled to it. If the reboot takes longer, +then the node controller will terminate the pods that are bound to the unavailable node. If there is a corresponding +replication controller, then a new copy of the pod will be started on a different node. So, in the case where all +pods are replicated, upgrades can be done without special coordination, assuming that not all nodes will go down at the same time. + +If you want more control over the upgrading process, you may use the following workflow: + +Mark the node to be rebooted as unschedulable: + +{% highlight console %} +{% raw %} +kubectl replace nodes $NODENAME --patch='{"apiVersion": "v1", "spec": {"unschedulable": true}}' +{% endraw %} +{% endhighlight %} + +This keeps new pods from landing on the node while you are trying to get them off. + +Get the pods off the machine, via any of the following strategies: + * Wait for finite-duration pods to complete. + * Delete pods with: + +{% highlight console %} +{% raw %} +kubectl delete pods $PODNAME +{% endraw %} +{% endhighlight %} + +For pods with a replication controller, the pod will eventually be replaced by a new pod which will be scheduled to a new node. Additionally, if the pod is part of a service, then clients will automatically be redirected to the new pod. + +For pods with no replication controller, you need to bring up a new copy of the pod, and assuming it is not part of a service, redirect clients to it. + +Perform maintenance work on the node. + +Make the node schedulable again: + +{% highlight console %} +{% raw %} +kubectl replace nodes $NODENAME --patch='{"apiVersion": "v1", "spec": {"unschedulable": false}}' +{% endraw %} +{% endhighlight %} + +If you deleted the node's VM instance and created a new one, then a new schedulable node resource will +be created automatically when you create a new VM instance (if you're using a cloud provider that supports +node discovery; currently this is only Google Compute Engine, not including CoreOS on Google Compute Engine using kube-register). See [Node](node.html) for more details. + +## Advanced Topics + +### Upgrading to a different API version + +When a new API version is released, you may need to upgrade a cluster to support the new API version (e.g. switching from 'v1' to 'v2' when 'v2' is launched) + +This is an infrequent event, but it requires careful management. There is a sequence of steps to upgrade to a new API version. + + 1. Turn on the new api version. + 1. Upgrade the cluster's storage to use the new version. + 1. Upgrade all config files. Identify users of the old API version endpoints. + 1. Update existing objects in the storage to new version by running `cluster/update-storage-objects.sh`. + 1. Turn off the old API version. + +### Turn on or off an API version for your cluster + +Specific API versions can be turned on or off by passing --runtime-config=api/ flag while bringing up the API server. For example: to turn off v1 API, pass `--runtime-config=api/v1=false`. +runtime-config also supports 2 special keys: api/all and api/legacy to control all and legacy APIs respectively. +For example, for turning off all api versions except v1, pass `--runtime-config=api/all=false,api/v1=true`. +For the purposes of these flags, _legacy_ APIs are those APIs which have been explicitly deprecated (e.g. `v1beta3`). + +### Switching your cluster's storage API version + +The objects that are stored to disk for a cluster's internal representation of the Kubernetes resources active in the cluster are written using a particular version of the API. +When the supported API changes, these objects may need to be rewritten in the newer API. Failure to do this will eventually result in resources that are no longer decodable or usable +by the kubernetes API server. + +`KUBE_API_VERSIONS` environment variable for the `kube-apiserver` binary which controls the API versions that are supported in the cluster. The first version in the list is used as the cluster's storage version. Hence, to set a specific version as the storage version, bring it to the front of list of versions in the value of `KUBE_API_VERSIONS`. You need to restart the `kube-apiserver` binary +for changes to this variable to take effect. + +### Switching your config files to a new API version + +You can use the `kube-version-change` utility to convert config files between different API versions. + +{% highlight console %} +{% raw %} +$ hack/build-go.sh cmd/kube-version-change +$ _output/local/go/bin/kube-version-change -i myPod.v1beta3.yaml -o myPod.v1.yaml +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/cluster-management.md?pixel)]() + + diff --git a/v1.1/docs/admin/cluster-troubleshooting.md b/v1.1/docs/admin/cluster-troubleshooting.md new file mode 100644 index 0000000000000..b2cec3288085c --- /dev/null +++ b/v1.1/docs/admin/cluster-troubleshooting.md @@ -0,0 +1,132 @@ +--- +layout: docwithnav +title: "Cluster Troubleshooting" +--- + + + + + +# Cluster Troubleshooting + +This doc is about cluster troubleshooting; we assume you have already ruled out your application as the root cause of the +problem you are experiencing. See +the [application troubleshooting guide](../user-guide/application-troubleshooting.html) for tips on application debugging. +You may also visit [troubleshooting document](../troubleshooting.html) for more information. + +## Listing your cluster + +The first thing to debug in your cluster is if your nodes are all registered correctly. + +Run + +{% highlight sh %} +{% raw %} +kubectl get nodes +{% endraw %} +{% endhighlight %} + +And verify that all of the nodes you expect to see are present and that they are all in the `Ready` state. + +## Looking at logs + +For now, digging deeper into the cluster requires logging into the relevant machines. Here are the locations +of the relevant log files. (note that on systemd-based systems, you may need to use `journalctl` instead) + +### Master + + * /var/log/kube-apiserver.log - API Server, responsible for serving the API + * /var/log/kube-scheduler.log - Scheduler, responsible for making scheduling decisions + * /var/log/kube-controller-manager.log - Controller that manages replication controllers + +### Worker Nodes + + * /var/log/kubelet.log - Kubelet, responsible for running containers on the node + * /var/log/kube-proxy.log - Kube Proxy, responsible for service load balancing + +## A general overview of cluster failure modes + +This is an incomplete list of things that could go wrong, and how to adjust your cluster setup to mitigate the problems. + +Root causes: + - VM(s) shutdown + - Network partition within cluster, or between cluster and users + - Crashes in Kubernetes software + - Data loss or unavailability of persistent storage (e.g. GCE PD or AWS EBS volume) + - Operator error, e.g. misconfigured Kubernetes software or application software + +Specific scenarios: + - Apiserver VM shutdown or apiserver crashing + - Results + - unable to stop, update, or start new pods, services, replication controller + - existing pods and services should continue to work normally, unless they depend on the Kubernetes API + - Apiserver backing storage lost + - Results + - apiserver should fail to come up + - kubelets will not be able to reach it but will continue to run the same pods and provide the same service proxying + - manual recovery or recreation of apiserver state necessary before apiserver is restarted + - Supporting services (node controller, replication controller manager, scheduler, etc) VM shutdown or crashes + - currently those are colocated with the apiserver, and their unavailability has similar consequences as apiserver + - in future, these will be replicated as well and may not be co-located + - they do not have their own persistent state + - Individual node (VM or physical machine) shuts down + - Results + - pods on that Node stop running + - Network partition + - Results + - partition A thinks the nodes in partition B are down; partition B thinks the apiserver is down. (Assuming the master VM ends up in partition A.) + - Kubelet software fault + - Results + - crashing kubelet cannot start new pods on the node + - kubelet might delete the pods or not + - node marked unhealthy + - replication controllers start new pods elsewhere + - Cluster operator error + - Results + - loss of pods, services, etc + - lost of apiserver backing store + - users unable to read API + - etc. + +Mitigations: +- Action: Use IaaS provider's automatic VM restarting feature for IaaS VMs + - Mitigates: Apiserver VM shutdown or apiserver crashing + - Mitigates: Supporting services VM shutdown or crashes + +- Action use IaaS providers reliable storage (e.g GCE PD or AWS EBS volume) for VMs with apiserver+etcd + - Mitigates: Apiserver backing storage lost + +- Action: Use (experimental) [high-availability](high-availability.html) configuration + - Mitigates: Master VM shutdown or master components (scheduler, API server, controller-managing) crashing + - Will tolerate one or more simultaneous node or component failures + - Mitigates: Apiserver backing storage (i.e., etcd's data directory) lost + - Assuming you used clustered etcd. + +- Action: Snapshot apiserver PDs/EBS-volumes periodically + - Mitigates: Apiserver backing storage lost + - Mitigates: Some cases of operator error + - Mitigates: Some cases of Kubernetes software fault + +- Action: use replication controller and services in front of pods + - Mitigates: Node shutdown + - Mitigates: Kubelet software fault + +- Action: applications (containers) designed to tolerate unexpected restarts + - Mitigates: Node shutdown + - Mitigates: Kubelet software fault + +- Action: [Multiple independent clusters](multi-cluster.html) (and avoid making risky changes to all clusters at once) + - Mitigates: Everything listed above. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/cluster-troubleshooting.md?pixel)]() + + diff --git a/v1.1/docs/admin/daemon.yaml b/v1.1/docs/admin/daemon.yaml new file mode 100644 index 0000000000000..c5cd14a5921ec --- /dev/null +++ b/v1.1/docs/admin/daemon.yaml @@ -0,0 +1,18 @@ +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: prometheus-node-exporter +spec: + template: + metadata: + name: prometheus-node-exporter + labels: + daemon: prom-node-exp + spec: + containers: + - name: c + image: prom/prometheus + ports: + - containerPort: 9090 + hostPort: 9090 + name: serverport diff --git a/v1.1/docs/admin/daemons.md b/v1.1/docs/admin/daemons.md new file mode 100644 index 0000000000000..02ae58103de1d --- /dev/null +++ b/v1.1/docs/admin/daemons.md @@ -0,0 +1,210 @@ +--- +layout: docwithnav +title: "Daemon Sets" +--- + + + + + +# Daemon Sets + +**Table of Contents** + + +- [Daemon Sets](#daemon-sets) + - [What is a _Daemon Set_?](#what-is-a-daemon-set) + - [Writing a DaemonSet Spec](#writing-a-daemonset-spec) + - [Required Fields](#required-fields) + - [Pod Template](#pod-template) + - [Pod Selector](#pod-selector) + - [Running Pods on Only Some Nodes](#running-pods-on-only-some-nodes) + - [How Daemon Pods are Scheduled](#how-daemon-pods-are-scheduled) + - [Communicating with DaemonSet Pods](#communicating-with-daemonset-pods) + - [Updating a DaemonSet](#updating-a-daemonset) + - [Alternatives to Daemon Set](#alternatives-to-daemon-set) + - [Init Scripts](#init-scripts) + - [Bare Pods](#bare-pods) + - [Static Pods](#static-pods) + - [Replication Controller](#replication-controller) + - [Caveats](#caveats) + + + +## What is a _Daemon Set_? + +A _Daemon Set_ ensures that all (or some) nodes run a copy of a pod. As nodes are added to the +cluster, pods are added to them. As nodes are removed from the cluster, those pods are garbage +collected. Deleting a Daemon Set will clean up the pods it created. + +Some typical uses of a Daemon Set are: + +- running a cluster storage daemon, such as `glusterd`, `ceph`, on each node. +- running a logs collection daemon on every node, such as `fluentd` or `logstash`. +- running a node monitoring daemon on every node, such as [Prometheus Node Exporter]( + https://github.com/prometheus/node_exporter), `collectd`, New Relic agent, or Ganglia `gmond`. + +In a simple case, one Daemon Set, covering all nodes, would be used for each type of daemon. +A more complex setup might use multiple DaemonSets would be used for a single type of daemon, +but with different flags and/or different memory and cpu requests for different hardware types. + +## Writing a DaemonSet Spec + +### Required Fields + +As with all other Kubernetes config, a DaemonSet needs `apiVersion`, `kind`, and `metadata` fields. For +general information about working with config files, see [here](../user-guide/simple-yaml.html), +[here](../user-guide/configuring-containers.html), and [here](../user-guide/working-with-resources.html). + +A DaemonSet also needs a [`.spec`](../devel/api-conventions.html#spec-and-status) section. + +### Pod Template + +The `.spec.template` is the only required field of the `.spec`. + +The `.spec.template` is a [pod template](../user-guide/replication-controller.html#pod-template). +It has exactly the same schema as a [pod](../user-guide/pods.html), except +it is nested and does not have an `apiVersion` or `kind`. + +In addition to required fields for a pod, a pod template in a DaemonSet has to specify appropriate +labels (see [pod selector](#pod-selector)). + +A pod template in a DaemonSet must have a [`RestartPolicy`](../user-guide/pod-states.html) + equal to `Always`, or be unspecified, which defaults to `Always`. + +### Pod Selector + +The `.spec.selector` field is a pod selector. It works the same as the `.spec.selector` of +a [ReplicationController](../user-guide/replication-controller.html) or +[Job](../user-guide/jobs.html). + +If the `.spec.selector` is specified, it must equal the `.spec.template.metadata.labels`. If not +specified, the are default to be equal. Config with these unequal will be rejected by the API. + +Also you should not normally create any pods whose labels match this selector, either directly, via +another DaemonSet, or via other controller such as ReplicationController. Otherwise, the DaemonSet +controller will think that those pods were created by it. Kubernetes will not stop you from doing +this. Once case where you might want to do this is manually create a pod with a different value on +a node for testing. + +### Running Pods on Only Some Nodes + +If you specify a `.spec.template.spec.nodeSelector`, then the DaemonSet controller will +create pods on nodes which match that [node +selector](../user-guide/node-selection/README.html). + +If you do not specify a `.spec.template.spec.nodeSelector`, then the DaemonSet controller will +create pods on all nodes. + +## How Daemon Pods are Scheduled + +Normally, the machine that a pod runs on is selected by the Kubernetes scheduler. However, pods +created by the Daemon controller have the machine already selected (`.spec.nodeName` is specified +when the pod is created, so it is ignored by the scheduler). Therefore: + + - the [`unschedulable`](node.html#manual-node-administration) field of a node is not respected + by the daemon set controller. + - daemon set controller can make pods even when the scheduler has not been started, which can help cluster + bootstrap. + +## Communicating with DaemonSet Pods + +Some possible patterns for communicating with pods in a DaemonSet are: + +- **Push**: Pods in the Daemon Set are configured to send updates to another service, such + as a stats database. They do not have clients. +- **NodeIP and Known Port**: Pods in the Daemon Set use a `hostPort`, so that the pods are reachable + via the node IPs. Clients knows the the list of nodes ips somehow, and know the port by convention. +- **DNS**: Create a [headless service](../user-guide/services.html#headless-services) with the same pod selector, + and then discover DaemonSets using the `endpoints` resource or retrieve multiple A records from + DNS. +- **Service**: Create a service with the same pod selector, and use the service to reach a + daemon on a random node. (No way to reach specific node.) + +## Updating a DaemonSet + +If node labels are changed, the DaemonSet will promptly add pods to newly matching nodes and delete +pods from newly not-matching nodes. + +You can modify the pods that a DaemonSet creates. However, pods do not allow all +fields to be updated. Also, the DeamonSet controller will use the original template the next +time a node (even with the same name) is created. + + +You can delete a DeamonSet. If you specify `--cascade=false` with `kubectl`, then the pods +will be left on the nodes. You can then create a new DaemonSet with a different template. +the new DaemonSet with the different template will recognize all the existing pods as having +matching labels. It will not modify or delete them despite a mismatch in the pod template. +You will need to force new pod creation by deleting the pod or deleting the node. + +You cannot update a DaemonSet. + +Support for updating DaemonSets and controlled updating of nodes is planned. + +## Alternatives to Daemon Set + +### Init Scripts + +It is certainly possible to run daemon processes by directly starting them on a node (e.g using +`init`, `upstartd`, or `systemd`). This is perfectly fine. However, there are several advantages to +running such processes via a DaemonSet: + +- Ability to monitor and manage logs for daemons in the same way as applications. +- Same config language and tools (e.g. pod templates, `kubectl`) for daemons and applications. +- Future versions of Kubernetes will likely support integration between DaemonSet-created + pods and node upgrade workflows. +- Running daemons in containers with resource limits increases isolation between daemons from app + containers. However, this can also be accomplished by running the daemons in a container but not in a pod + (e.g. start directly via Docker). + +### Bare Pods + +It is possible to create pods directly which specify a particular node to run on. However, +a Daemon Set replaces pods that are deleted or terminated for any reason, such as in the case of +node failure or disruptive node maintenance, such as a kernel upgrade. For this reason, you should +use a Daemon Set rather than creating individual pods. + +### Static Pods + +It is possible to create pods by writing a file to a certain directory watched by Kubelet. These +are called [static pods](static-pods.html). +Unlike DaemonSet, static pods cannot be managed with kubectl +or other Kubernetes API clients. Static pods do not depend on the apiserver, making them useful +in cluster bootstrapping cases. Also, static pods may be deprecated in the future. + +### Replication Controller + +Daemon Set are similar to [Replication Controllers](../user-guide/replication-controller.html) in that +they both create pods, and those pods have processes which are not expected to terminate (e.g. web servers, +storage servers). + +Use a replication controller for stateless services, like frontends, where scaling up and down the +number of replicas and rolling out updates are more important than controlling exactly which host +the pod runs on. Use a Daemon Controller when it is important that a copy of a pod always run on +all or certain hosts, and when it needs to start before other pods. + +## Caveats + +DaemonSet objects are in the [`extensions` API Group](../api.html#api-groups). +DaemonSet is not enabled by default. Enable it by setting +`--runtime-config=extensions/v1beta1/daemonsets=true` on the api server. This can be +achieved by exporting ENABLE_DAEMONSETS=true before running kube-up.sh script +on GCE. + +DaemonSet objects effectively have [API version `v1alpha1`](../api.html#api-versioning). + Alpha objects may change or even be discontinued in future software releases. +However, due to to a known issue, they will appear as API version `v1beta1` if enabled. + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/daemons.md?pixel)]() + + diff --git a/v1.1/docs/admin/dns.md b/v1.1/docs/admin/dns.md new file mode 100644 index 0000000000000..e58fb8f7b5015 --- /dev/null +++ b/v1.1/docs/admin/dns.md @@ -0,0 +1,60 @@ +--- +layout: docwithnav +title: "DNS Integration with Kubernetes" +--- + + + + + +# DNS Integration with Kubernetes + +As of Kubernetes 0.8, DNS is offered as a [cluster add-on](http://releases.k8s.io/release-1.1/cluster/addons/README.md). +If enabled, a DNS Pod and Service will be scheduled on the cluster, and the kubelets will be +configured to tell individual containers to use the DNS Service's IP to resolve DNS names. + +Every Service defined in the cluster (including the DNS server itself) will be +assigned a DNS name. By default, a client Pod's DNS search list will +include the Pod's own namespace and the cluster's default domain. This is best +illustrated by example: + +Assume a Service named `foo` in the Kubernetes namespace `bar`. A Pod running +in namespace `bar` can look up this service by simply doing a DNS query for +`foo`. A Pod running in namespace `quux` can look up this service by doing a +DNS query for `foo.bar`. + +The cluster DNS server ([SkyDNS](https://github.com/skynetservices/skydns)) +supports forward lookups (A records) and service lookups (SRV records). + +## How it Works + +The running DNS pod holds 3 containers - skydns, etcd (a private instance which skydns uses), +and a Kubernetes-to-skydns bridge called kube2sky. The kube2sky process +watches the Kubernetes master for changes in Services, and then writes the +information to etcd, which skydns reads. This etcd instance is not linked to +any other etcd clusters that might exist, including the Kubernetes master. + +## Issues + +The skydns service is reachable directly from Kubernetes nodes (outside +of any container) and DNS resolution works if the skydns service is targeted +explicitly. However, nodes are not configured to use the cluster DNS service or +to search the cluster's DNS domain by default. This may be resolved at a later +time. + +## For more information + +See [the docs for the DNS cluster addon](http://releases.k8s.io/release-1.1/cluster/addons/dns/README.md). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/dns.md?pixel)]() + + diff --git a/v1.1/docs/admin/etcd.md b/v1.1/docs/admin/etcd.md new file mode 100644 index 0000000000000..490afa83fa35a --- /dev/null +++ b/v1.1/docs/admin/etcd.md @@ -0,0 +1,69 @@ +--- +layout: docwithnav +title: "etcd" +--- + + + + + +# etcd + +[etcd](https://coreos.com/etcd/docs/2.0.12/) is a highly-available key value +store which Kubernetes uses for persistent storage of all of its REST API +objects. + +## Configuration: high-level goals + +Access Control: give *only* kube-apiserver read/write access to etcd. You do not +want apiserver's etcd exposed to every node in your cluster (or worse, to the +internet at large), because access to etcd is equivalent to root in your +cluster. + +Data Reliability: for reasonable safety, either etcd needs to be run as a +[cluster](high-availability.html#clustering-etcd) (multiple machines each running +etcd) or etcd's data directory should be located on durable storage (e.g., GCE's +persistent disk). In either case, if high availability is required--as it might +be in a production cluster--the data directory ought to be [backed up +periodically](https://coreos.com/etcd/docs/2.0.12/admin_guide.html#disaster-recovery), +to reduce downtime in case of corruption. + +## Default configuration + +The default setup scripts use kubelet's file-based static pods feature to run etcd in a +[pod](http://releases.k8s.io/release-1.1/cluster/saltbase/salt/etcd/etcd.manifest). This manifest should only +be run on master VMs. The default location that kubelet scans for manifests is +`/etc/kubernetes/manifests/`. + +## Kubernetes's usage of etcd + +By default, Kubernetes objects are stored under the `/registry` key in etcd. +This path can be prefixed by using the [kube-apiserver](kube-apiserver.html) flag +`--etcd-prefix="/foo"`. + +`etcd` is the only place that Kubernetes keeps state. + +## Troubleshooting + +To test whether `etcd` is running correctly, you can try writing a value to a +test key. On your master VM (or somewhere with firewalls configured such that +you can talk to your cluster's etcd), try: + +{% highlight sh %} +{% raw %} +curl -fs -X PUT "http://${host}:${port}/v2/keys/_test" +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/etcd.md?pixel)]() + + diff --git a/v1.1/docs/admin/garbage-collection.md b/v1.1/docs/admin/garbage-collection.md new file mode 100644 index 0000000000000..354f29d44c1f7 --- /dev/null +++ b/v1.1/docs/admin/garbage-collection.md @@ -0,0 +1,93 @@ +--- +layout: docwithnav +title: "Garbage Collection" +--- + + + + + +# Garbage Collection + +- [Introduction](#introduction) +- [Image Collection](#image-collection) +- [Container Collection](#container-collection) +- [User Configuration](#user-configuration) + +### Introduction + +Garbage collection is managed by kubelet automatically, mainly including unreferenced +images and dead containers. kubelet applies container garbage collection every minute +and image garbage collection every 5 minutes. +Note that we don't recommend external garbage collection tool generally, since it could +break the behavior of kubelet potentially if it attempts to remove all of the containers +which acts as the tombstone kubelet relies on. Yet those garbage collector aims to deal +with the docker leaking issues would be appreciated. + +### Image Collection + +kubernetes manages lifecycle of all images through imageManager, with the cooperation +of cadvisor. +The policy for garbage collecting images we apply takes two factors into consideration, +`HighThresholdPercent` and `LowThresholdPercent`. Disk usage above the the high threshold +will trigger garbage collection, which attempts to delete unused images until the low +threshold is met. Least recently used images are deleted first. + +### Container Collection + +The policy for garbage collecting containers we apply takes on three variables, which can +be user-defined. `MinAge` is the minimum age at which a container can be garbage collected, +zero for no limit. `MaxPerPodContainer` is the max number of dead containers any single +pod (UID, container name) pair is allowed to have, less than zero for no limit. +`MaxContainers` is the max number of total dead containers, less than zero for no limit as well. + +kubelet sorts out containers which are unidentified or stay out of bounds set by previous +mentioned three flags. Gernerally the oldest containers are removed first. Since we take both +`MaxPerPodContainer` and `MaxContainers` into consideration, it could happen when they +have conflict -- retaining the max number of containers per pod goes out of range set by max +number of global dead containers. In this case, we would sacrifice the `MaxPerPodContainer` +a little bit. For the worst case, we first downgrade it to 1 container per pod, and then +evict the oldest containers for the greater good. + +When kubelet removes the dead containers, all the files inside the container will be cleaned up as well. +Note that we will skip the containers that are not managed by kubelet. + +### User Configuration + +Users are free to set their own value to address image garbage collection. + +1. `image-gc-high-threshold`, the percent of disk usage which triggers image garbage collection. +Default is 90%. +2. `image-gc-low-threshold`, the percent of disk usage to which image garbage collection attempts +to free. Default is 80%. + +We also allow users to customize garbage collection policy, basically via following three flags. + +1. `minimum-container-ttl-duration`, minimum age for a finished container before it is +garbage collected. Default is 1 minute. +2. `maximum-dead-containers-per-container`, maximum number of old instances to retain +per container. Default is 2. +3. `maximum-dead-containers`, maximum number of old instances of containers to retain globally. +Default is 100. + +Note that we highly recommend a large enough value for `maximum-dead-containers-per-container` +to allow at least 2 dead containers retaining per expected container when you customize the flag +configuration. A loose value for `maximum-dead-containers` also assumes importance for a similar reason. +See [this issue](https://github.com/kubernetes/kubernetes/issues/13287) for more details. + + + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/garbage-collection.md?pixel)]() + + diff --git a/v1.1/docs/admin/high-availability.md b/v1.1/docs/admin/high-availability.md new file mode 100644 index 0000000000000..7f826b268312f --- /dev/null +++ b/v1.1/docs/admin/high-availability.md @@ -0,0 +1,280 @@ +--- +layout: docwithnav +title: "High Availability Kubernetes Clusters" +--- + + + + + +# High Availability Kubernetes Clusters + +**Table of Contents** + + +- [High Availability Kubernetes Clusters](#high-availability-kubernetes-clusters) + - [Introduction](#introduction) + - [Overview](#overview) + - [Initial set-up](#initial-set-up) + - [Reliable nodes](#reliable-nodes) + - [Establishing a redundant, reliable data storage layer](#establishing-a-redundant-reliable-data-storage-layer) + - [Clustering etcd](#clustering-etcd) + - [Validating your cluster](#validating-your-cluster) + - [Even more reliable storage](#even-more-reliable-storage) + - [Replicated API Servers](#replicated-api-servers) + - [Installing configuration files](#installing-configuration-files) + - [Starting the API Server](#starting-the-api-server) + - [Load balancing](#load-balancing) + - [Master elected components](#master-elected-components) + - [Installing configuration files](#installing-configuration-files) + - [Running the podmaster](#running-the-podmaster) + - [Conclusion](#conclusion) + - [Vagrant up!](#vagrant-up) + + + +## Introduction + +This document describes how to build a high-availability (HA) Kubernetes cluster. This is a fairly advanced topic. +Users who merely want to experiment with Kubernetes are encouraged to use configurations that are simpler to set up such as +the simple [Docker based single node cluster instructions](../../docs/getting-started-guides/docker.html), +or try [Google Container Engine](https://cloud.google.com/container-engine/) for hosted Kubernetes. + +Also, at this time high availability support for Kubernetes is not continuously tested in our end-to-end (e2e) testing. We will +be working to add this continuous testing, but for now the single-node master installations are more heavily tested. + +## Overview + +Setting up a truly reliable, highly available distributed system requires a number of steps, it is akin to +wearing underwear, pants, a belt, suspenders, another pair of underwear, and another pair of pants. We go into each +of these steps in detail, but a summary is given here to help guide and orient the user. + +The steps involved are as follows: + * [Creating the reliable constituent nodes that collectively form our HA master implementation.](#reliable-nodes) + * [Setting up a redundant, reliable storage layer with clustered etcd.](#establishing-a-redundant-reliable-data-storage-layer) + * [Starting replicated, load balanced Kubernetes API servers](#replicated-api-servers) + * [Setting up master-elected Kubernetes scheduler and controller-manager daemons](#master-elected-components) + +Here's what the system should look like when it's finished: +![High availability Kubernetes diagram](high-availability/ha.png) + +Ready? Let's get started. + +## Initial set-up + +The remainder of this guide assumes that you are setting up a 3-node clustered master, where each machine is running some flavor of Linux. +Examples in the guide are given for Debian distributions, but they should be easily adaptable to other distributions. +Likewise, this set up should work whether you are running in a public or private cloud provider, or if you are running +on bare metal. + +The easiest way to implement an HA Kubernetes cluster is to start with an existing single-master cluster. The +instructions at [https://get.k8s.io](https://get.k8s.io) +describe easy installation for single-master clusters on a variety of platforms. + +## Reliable nodes + +On each master node, we are going to run a number of processes that implement the Kubernetes API. The first step in making these reliable is +to make sure that each automatically restarts when it fails. To achieve this, we need to install a process watcher. We choose to use +the `kubelet` that we run on each of the worker nodes. This is convenient, since we can use containers to distribute our binaries, we can +establish resource limits, and introspect the resource usage of each daemon. Of course, we also need something to monitor the kubelet +itself (insert who watches the watcher jokes here). For Debian systems, we choose monit, but there are a number of alternate +choices. For example, on systemd-based systems (e.g. RHEL, CentOS), you can run 'systemctl enable kubelet'. + +If you are extending from a standard Kubernetes installation, the `kubelet` binary should already be present on your system. You can run +`which kubelet` to determine if the binary is in fact installed. If it is not installed, +you should install the [kubelet binary](https://storage.googleapis.com/kubernetes-release/release/v0.19.3/bin/linux/amd64/kubelet), the +[kubelet init file](http://releases.k8s.io/release-1.1/cluster/saltbase/salt/kubelet/initd) and [high-availability/default-kubelet](high-availability/default-kubelet) +scripts. + +If you are using monit, you should also install the monit daemon (`apt-get install monit`) and the [high-availability/monit-kubelet](high-availability/monit-kubelet) and +[high-availability/monit-docker](high-availability/monit-docker) configs. + +On systemd systems you `systemctl enable kubelet` and `systemctl enable docker`. + + +## Establishing a redundant, reliable data storage layer + +The central foundation of a highly available solution is a redundant, reliable storage layer. The number one rule of high-availability is +to protect the data. Whatever else happens, whatever catches on fire, if you have the data, you can rebuild. If you lose the data, you're +done. + +Clustered etcd already replicates your storage to all master instances in your cluster. This means that to lose data, all three nodes would need +to have their physical (or virtual) disks fail at the same time. The probability that this occurs is relatively low, so for many people +running a replicated etcd cluster is likely reliable enough. You can add additional reliability by increasing the +size of the cluster from three to five nodes. If that is still insufficient, you can add +[even more redundancy to your storage layer](#even-more-reliable-storage). + +### Clustering etcd + +The full details of clustering etcd are beyond the scope of this document, lots of details are given on the +[etcd clustering page](https://github.com/coreos/etcd/blob/master/Documentation/clustering.md). This example walks through +a simple cluster set up, using etcd's built in discovery to build our cluster. + +First, hit the etcd discovery service to create a new token: + +{% highlight sh %} +{% raw %} +curl https://discovery.etcd.io/new?size=3 +{% endraw %} +{% endhighlight %} + +On each node, copy the [etcd.yaml](high-availability/etcd.yaml) file into `/etc/kubernetes/manifests/etcd.yaml` + +The kubelet on each node actively monitors the contents of that directory, and it will create an instance of the `etcd` +server from the definition of the pod specified in `etcd.yaml`. + +Note that in `etcd.yaml` you should substitute the token URL you got above for `${DISCOVERY_TOKEN}` on all three machines, +and you should substitute a different name (e.g. `node-1`) for ${NODE_NAME} and the correct IP address +for `${NODE_IP}` on each machine. + + +#### Validating your cluster + +Once you copy this into all three nodes, you should have a clustered etcd set up. You can validate with + +{% highlight sh %} +{% raw %} +etcdctl member list +{% endraw %} +{% endhighlight %} + +and + +{% highlight sh %} +{% raw %} +etcdctl cluster-health +{% endraw %} +{% endhighlight %} + +You can also validate that this is working with `etcdctl set foo bar` on one node, and `etcd get foo` +on a different node. + +### Even more reliable storage + +Of course, if you are interested in increased data reliability, there are further options which makes the place where etcd +installs it's data even more reliable than regular disks (belts *and* suspenders, ftw!). + +If you use a cloud provider, then they usually provide this +for you, for example [Persistent Disk](https://cloud.google.com/compute/docs/disks/persistent-disks) on the Google Cloud Platform. These +are block-device persistent storage that can be mounted onto your virtual machine. Other cloud providers provide similar solutions. + +If you are running on physical machines, you can also use network attached redundant storage using an iSCSI or NFS interface. +Alternatively, you can run a clustered file system like Gluster or Ceph. Finally, you can also run a RAID array on each physical machine. + +Regardless of how you choose to implement it, if you chose to use one of these options, you should make sure that your storage is mounted +to each machine. If your storage is shared between the three masters in your cluster, you should create a different directory on the storage +for each node. Throughout these instructions, we assume that this storage is mounted to your machine in `/var/etcd/data` + + +## Replicated API Servers + +Once you have replicated etcd set up correctly, we will also install the apiserver using the kubelet. + +### Installing configuration files + +First you need to create the initial log file, so that Docker mounts a file instead of a directory: + +{% highlight sh %} +{% raw %} +touch /var/log/kube-apiserver.log +{% endraw %} +{% endhighlight %} + +Next, you need to create a `/srv/kubernetes/` directory on each node. This directory includes: + * basic_auth.csv - basic auth user and password + * ca.crt - Certificate Authority cert + * known_tokens.csv - tokens that entities (e.g. the kubelet) can use to talk to the apiserver + * kubecfg.crt - Client certificate, public key + * kubecfg.key - Client certificate, private key + * server.cert - Server certificate, public key + * server.key - Server certificate, private key + +The easiest way to create this directory, may be to copy it from the master node of a working cluster, or you can manually generate these files yourself. + +### Starting the API Server + +Once these files exist, copy the [kube-apiserver.yaml](high-availability/kube-apiserver.yaml) into `/etc/kubernetes/manifests/` on each master node. + +The kubelet monitors this directory, and will automatically create an instance of the `kube-apiserver` container using the pod definition specified +in the file. + +### Load balancing + +At this point, you should have 3 apiservers all working correctly. If you set up a network load balancer, you should +be able to access your cluster via that load balancer, and see traffic balancing between the apiserver instances. Setting +up a load balancer will depend on the specifics of your platform, for example instructions for the Google Cloud +Platform can be found [here](https://cloud.google.com/compute/docs/load-balancing/) + +Note, if you are using authentication, you may need to regenerate your certificate to include the IP address of the balancer, +in addition to the IP addresses of the individual nodes. + +For pods that you deploy into the cluster, the `kubernetes` service/dns name should provide a load balanced endpoint for the master automatically. + +For external users of the API (e.g. the `kubectl` command line interface, continuous build pipelines, or other clients) you will want to configure +them to talk to the external load balancer's IP address. + +## Master elected components + +So far we have set up state storage, and we have set up the API server, but we haven't run anything that actually modifies +cluster state, such as the controller manager and scheduler. To achieve this reliably, we only want to have one actor modifying state at a time, but we want replicated +instances of these actors, in case a machine dies. To achieve this, we are going to use a lease-lock in etcd to perform +master election. On each of the three apiserver nodes, we run a small utility application named `podmaster`. It's job is to implement a master +election protocol using etcd "compare and swap". If the apiserver node wins the election, it starts the master component it is managing (e.g. the scheduler), if it +loses the election, it ensures that any master components running on the node (e.g. the scheduler) are stopped. + +In the future, we expect to more tightly integrate this lease-locking into the scheduler and controller-manager binaries directly, as described in the [high availability design proposal](../proposals/high-availability.html) + +### Installing configuration files + +First, create empty log files on each node, so that Docker will mount the files not make new directories: + +{% highlight sh %} +{% raw %} +touch /var/log/kube-scheduler.log +touch /var/log/kube-controller-manager.log +{% endraw %} +{% endhighlight %} + +Next, set up the descriptions of the scheduler and controller manager pods on each node. +by copying [kube-scheduler.yaml](high-availability/kube-scheduler.yaml) and [kube-controller-manager.yaml](high-availability/kube-controller-manager.yaml) into the `/srv/kubernetes/` + directory. + +### Running the podmaster + +Now that the configuration files are in place, copy the [podmaster.yaml](high-availability/podmaster.yaml) config file into `/etc/kubernetes/manifests/` + +As before, the kubelet on the node monitors this directory, and will start an instance of the podmaster using the pod specification provided in `podmaster.yaml`. + +Now you will have one instance of the scheduler process running on a single master node, and likewise one +controller-manager process running on a single (possibly different) master node. If either of these processes fail, +the kubelet will restart them. If any of these nodes fail, the process will move to a different instance of a master +node. + +## Conclusion + +At this point, you are done (yeah!) with the master components, but you still need to add worker nodes (boo!). + +If you have an existing cluster, this is as simple as reconfiguring your kubelets to talk to the load-balanced endpoint, and +restarting the kubelets on each node. + +If you are turning up a fresh cluster, you will need to install the kubelet and kube-proxy on each worker node, and +set the `--apiserver` flag to your replicated endpoint. + +## Vagrant up! + +We indeed have an initial proof of concept tester for this, which is available [here](https://releases.k8s.io/release-1.1/examples/high-availability). + +It implements the major concepts (with a few minor reductions for simplicity), of the podmaster HA implementation alongside a quick smoke test using k8petstore. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/high-availability.md?pixel)]() + + diff --git a/v1.1/docs/admin/high-availability/default-kubelet b/v1.1/docs/admin/high-availability/default-kubelet new file mode 100644 index 0000000000000..41ee5301510a3 --- /dev/null +++ b/v1.1/docs/admin/high-availability/default-kubelet @@ -0,0 +1,8 @@ +# This should be the IP address of the load balancer for all masters +MASTER_IP= +# This should be the internal service IP address reserved for DNS +DNS_IP= + +DAEMON_ARGS="$DAEMON_ARGS --api-servers=https://${MASTER_IP} --enable-debugging-handlers=true --cloud-provider= +gce --config=/etc/kubernetes/manifests --allow-privileged=False --v=2 --cluster-dns=${DNS_IP} --cluster-domain=c +luster.local --configure-cbr0=true --cgroup-root=/ --system-container=/system " diff --git a/v1.1/docs/admin/high-availability/etcd.yaml b/v1.1/docs/admin/high-availability/etcd.yaml new file mode 100644 index 0000000000000..fc9fe67e7546b --- /dev/null +++ b/v1.1/docs/admin/high-availability/etcd.yaml @@ -0,0 +1,87 @@ +apiVersion: v1 +kind: Pod +metadata: + name: etcd-server +spec: + hostNetwork: true + containers: + - image: gcr.io/google_containers/etcd:2.0.9 + name: etcd-container + command: + - /usr/local/bin/etcd + - --name + - ${NODE_NAME} + - --initial-advertise-peer-urls + - http://${NODE_IP}:2380 + - --listen-peer-urls + - http://${NODE_IP}:2380 + - --advertise-client-urls + - http://${NODE_IP}:4001 + - --listen-client-urls + - http://127.0.0.1:4001 + - --data-dir + - /var/etcd/data + - --discovery + - ${DISCOVERY_TOKEN} + ports: + - containerPort: 2380 + hostPort: 2380 + name: serverport + - containerPort: 4001 + hostPort: 4001 + name: clientport + volumeMounts: + - mountPath: /var/etcd + name: varetcd + - mountPath: /etc/ssl + name: etcssl + readOnly: true + - mountPath: /usr/share/ssl + name: usrsharessl + readOnly: true + - mountPath: /var/ssl + name: varssl + readOnly: true + - mountPath: /usr/ssl + name: usrssl + readOnly: true + - mountPath: /usr/lib/ssl + name: usrlibssl + readOnly: true + - mountPath: /usr/local/openssl + name: usrlocalopenssl + readOnly: true + - mountPath: /etc/openssl + name: etcopenssl + readOnly: true + - mountPath: /etc/pki/tls + name: etcpkitls + readOnly: true + volumes: + - hostPath: + path: /var/etcd/data + name: varetcd + - hostPath: + path: /etc/ssl + name: etcssl + - hostPath: + path: /usr/share/ssl + name: usrsharessl + - hostPath: + path: /var/ssl + name: varssl + - hostPath: + path: /usr/ssl + name: usrssl + - hostPath: + path: /usr/lib/ssl + name: usrlibssl + - hostPath: + path: /usr/local/openssl + name: usrlocalopenssl + - hostPath: + path: /etc/openssl + name: etcopenssl + - hostPath: + path: /etc/pki/tls + name: etcpkitls diff --git a/v1.1/docs/admin/high-availability/ha.png b/v1.1/docs/admin/high-availability/ha.png new file mode 100644 index 0000000000000000000000000000000000000000..a005de69d7fc860a25fc871968bbfa8fe32d63eb GIT binary patch literal 38814 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 + + + diff --git a/v1.1/docs/admin/high-availability/kube-apiserver.yaml b/v1.1/docs/admin/high-availability/kube-apiserver.yaml new file mode 100644 index 0000000000000..33d5cff5cdc56 --- /dev/null +++ b/v1.1/docs/admin/high-availability/kube-apiserver.yaml @@ -0,0 +1,90 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kube-apiserver +spec: + hostNetwork: true + containers: + - name: kube-apiserver + image: gcr.io/google_containers/kube-apiserver:9680e782e08a1a1c94c656190011bd02 + command: + - /bin/sh + - -c + - /usr/local/bin/kube-apiserver --address=127.0.0.1 --etcd-servers=http://127.0.0.1:4001 + --cloud-provider=gce --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota + --service-cluster-ip-range=10.0.0.0/16 --client-ca-file=/srv/kubernetes/ca.crt + --basic-auth-file=/srv/kubernetes/basic_auth.csv --cluster-name=e2e-test-bburns + --tls-cert-file=/srv/kubernetes/server.cert --tls-private-key-file=/srv/kubernetes/server.key + --secure-port=443 --token-auth-file=/srv/kubernetes/known_tokens.csv --v=2 + --allow-privileged=False 1>>/var/log/kube-apiserver.log 2>&1 + ports: + - containerPort: 443 + hostPort: 443 + name: https + - containerPort: 7080 + hostPort: 7080 + name: http + - containerPort: 8080 + hostPort: 8080 + name: local + volumeMounts: + - mountPath: /srv/kubernetes + name: srvkube + readOnly: true + - mountPath: /var/log/kube-apiserver.log + name: logfile + - mountPath: /etc/ssl + name: etcssl + readOnly: true + - mountPath: /usr/share/ssl + name: usrsharessl + readOnly: true + - mountPath: /var/ssl + name: varssl + readOnly: true + - mountPath: /usr/ssl + name: usrssl + readOnly: true + - mountPath: /usr/lib/ssl + name: usrlibssl + readOnly: true + - mountPath: /usr/local/openssl + name: usrlocalopenssl + readOnly: true + - mountPath: /etc/openssl + name: etcopenssl + readOnly: true + - mountPath: /etc/pki/tls + name: etcpkitls + readOnly: true + volumes: + - hostPath: + path: /srv/kubernetes + name: srvkube + - hostPath: + path: /var/log/kube-apiserver.log + name: logfile + - hostPath: + path: /etc/ssl + name: etcssl + - hostPath: + path: /usr/share/ssl + name: usrsharessl + - hostPath: + path: /var/ssl + name: varssl + - hostPath: + path: /usr/ssl + name: usrssl + - hostPath: + path: /usr/lib/ssl + name: usrlibssl + - hostPath: + path: /usr/local/openssl + name: usrlocalopenssl + - hostPath: + path: /etc/openssl + name: etcopenssl + - hostPath: + path: /etc/pki/tls + name: etcpkitls diff --git a/v1.1/docs/admin/high-availability/kube-controller-manager.yaml b/v1.1/docs/admin/high-availability/kube-controller-manager.yaml new file mode 100644 index 0000000000000..736181fc7c214 --- /dev/null +++ b/v1.1/docs/admin/high-availability/kube-controller-manager.yaml @@ -0,0 +1,82 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kube-controller-manager +spec: + containers: + - command: + - /bin/sh + - -c + - /usr/local/bin/kube-controller-manager --master=127.0.0.1:8080 --cluster-name=e2e-test-bburns + --cluster-cidr=10.245.0.0/16 --allocate-node-cidrs=true --cloud-provider=gce --service-account-private-key-file=/srv/kubernetes/server.key + --v=2 1>>/var/log/kube-controller-manager.log 2>&1 + image: gcr.io/google_containers/kube-controller-manager:fda24638d51a48baa13c35337fcd4793 + livenessProbe: + httpGet: + path: /healthz + port: 10252 + initialDelaySeconds: 15 + timeoutSeconds: 1 + name: kube-controller-manager + volumeMounts: + - mountPath: /srv/kubernetes + name: srvkube + readOnly: true + - mountPath: /var/log/kube-controller-manager.log + name: logfile + - mountPath: /etc/ssl + name: etcssl + readOnly: true + - mountPath: /usr/share/ssl + name: usrsharessl + readOnly: true + - mountPath: /var/ssl + name: varssl + readOnly: true + - mountPath: /usr/ssl + name: usrssl + readOnly: true + - mountPath: /usr/lib/ssl + name: usrlibssl + readOnly: true + - mountPath: /usr/local/openssl + name: usrlocalopenssl + readOnly: true + - mountPath: /etc/openssl + name: etcopenssl + readOnly: true + - mountPath: /etc/pki/tls + name: etcpkitls + readOnly: true + hostNetwork: true + volumes: + - hostPath: + path: /srv/kubernetes + name: srvkube + - hostPath: + path: /var/log/kube-controller-manager.log + name: logfile + - hostPath: + path: /etc/ssl + name: etcssl + - hostPath: + path: /usr/share/ssl + name: usrsharessl + - hostPath: + path: /var/ssl + name: varssl + - hostPath: + path: /usr/ssl + name: usrssl + - hostPath: + path: /usr/lib/ssl + name: usrlibssl + - hostPath: + path: /usr/local/openssl + name: usrlocalopenssl + - hostPath: + path: /etc/openssl + name: etcopenssl + - hostPath: + path: /etc/pki/tls + name: etcpkitls diff --git a/v1.1/docs/admin/high-availability/kube-scheduler.yaml b/v1.1/docs/admin/high-availability/kube-scheduler.yaml new file mode 100644 index 0000000000000..1b23ee1bb8bcc --- /dev/null +++ b/v1.1/docs/admin/high-availability/kube-scheduler.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kube-scheduler +spec: + hostNetwork: true + containers: + - name: kube-scheduler + image: gcr.io/google_containers/kube-scheduler:34d0b8f8b31e27937327961528739bc9 + command: + - /bin/sh + - -c + - /usr/local/bin/kube-scheduler --master=127.0.0.1:8080 --v=2 1>>/var/log/kube-scheduler.log + 2>&1 + livenessProbe: + httpGet: + path: /healthz + port: 10251 + initialDelaySeconds: 15 + timeoutSeconds: 1 + volumeMounts: + - mountPath: /var/log/kube-scheduler.log + name: logfile + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: default-token-s8ejd + readOnly: true + volumes: + - hostPath: + path: /var/log/kube-scheduler.log + name: logfile diff --git a/v1.1/docs/admin/high-availability/monit-docker b/v1.1/docs/admin/high-availability/monit-docker new file mode 100644 index 0000000000000..8c2753a430a58 --- /dev/null +++ b/v1.1/docs/admin/high-availability/monit-docker @@ -0,0 +1,9 @@ +check process docker with pidfile /var/run/docker.pid +group docker +start program = "/etc/init.d/docker start" +stop program = "/etc/init.d/docker stop" +if does not exist then restart +if failed + unixsocket /var/run/docker.sock + protocol HTTP request "/version" +then restart \ No newline at end of file diff --git a/v1.1/docs/admin/high-availability/monit-kubelet b/v1.1/docs/admin/high-availability/monit-kubelet new file mode 100644 index 0000000000000..eb3211b06a389 --- /dev/null +++ b/v1.1/docs/admin/high-availability/monit-kubelet @@ -0,0 +1,11 @@ +check process kubelet with pidfile /var/run/kubelet.pid +group kubelet +start program = "/etc/init.d/kubelet start" +stop program = "/etc/init.d/kubelet stop" +if does not exist then restart +if failed + host 127.0.0.1 + port 10255 + protocol HTTP + request "/healthz" +then restart diff --git a/v1.1/docs/admin/high-availability/podmaster.yaml b/v1.1/docs/admin/high-availability/podmaster.yaml new file mode 100644 index 0000000000000..d634225b93347 --- /dev/null +++ b/v1.1/docs/admin/high-availability/podmaster.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: Pod +metadata: + name: scheduler-master +spec: + hostNetwork: true + containers: + - name: scheduler-elector + image: gcr.io/google_containers/podmaster:1.1 + command: + - /podmaster + - --etcd-servers=http://127.0.0.1:4001 + - --key=scheduler + - --source-file=/kubernetes/kube-scheduler.manifest + - --dest-file=/manifests/kube-scheduler.manifest + volumeMounts: + - mountPath: /kubernetes + name: k8s + readOnly: true + - mountPath: /manifests + name: manifests + - name: controller-manager-elector + image: gcr.io/google_containers/podmaster:1.1 + command: + - /podmaster + - --etcd-servers=http://127.0.0.1:4001 + - --key=controller + - --source-file=/kubernetes/kube-controller-manager.manifest + - --dest-file=/manifests/kube-controller-manager.manifest + terminationMessagePath: /dev/termination-log + volumeMounts: + - mountPath: /kubernetes + name: k8s + readOnly: true + - mountPath: /manifests + name: manifests + volumes: + - hostPath: + path: /srv/kubernetes + name: k8s + - hostPath: + path: /etc/kubernetes/manifests + name: manifests diff --git a/v1.1/docs/admin/index.md b/v1.1/docs/admin/index.md new file mode 100644 index 0000000000000..def2322d6edb8 --- /dev/null +++ b/v1.1/docs/admin/index.md @@ -0,0 +1,58 @@ +--- +layout: docwithnav +title: "Kubernetes Cluster Admin Guide" +--- + + + + + +# Kubernetes Cluster Admin Guide + +The cluster admin guide is for anyone creating or administering a Kubernetes cluster. +It assumes some familiarity with concepts in the [User Guide](../user-guide/README.html). + +## Admin Guide Table of Contents + +[Introduction](introduction.html) + +1. [Components of a cluster](cluster-components.html) + 1. [Cluster Management](cluster-management.html) + 1. Administrating Master Components + 1. [The kube-apiserver binary](kube-apiserver.html) + 1. [Authorization](authorization.html) + 1. [Authentication](authentication.html) + 1. [Accessing the api](accessing-the-api.html) + 1. [Admission Controllers](admission-controllers.html) + 1. [Administrating Service Accounts](service-accounts-admin.html) + 1. [Resource Quotas](resource-quota.html) + 1. [The kube-scheduler binary](kube-scheduler.html) + 1. [The kube-controller-manager binary](kube-controller-manager.html) + 1. [Administrating Kubernetes Nodes](node.html) + 1. [The kubelet binary](kubelet.html) + 1. [Garbage Collection](garbage-collection.html) + 1. [The kube-proxy binary](kube-proxy.html) + 1. Administrating Addons + 1. [DNS](dns.html) + 1. [Networking](networking.html) + 1. [OVS Networking](ovs-networking.html) + 1. Example Configurations + 1. [Multiple Clusters](multi-cluster.html) + 1. [High Availability Clusters](high-availability.html) + 1. [Large Clusters](cluster-large.html) + 1. [Getting started from scratch](../getting-started-guides/scratch.html) + 1. [Kubernetes's use of salt](salt.html) + 1. [Troubleshooting](cluster-troubleshooting.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/introduction.md b/v1.1/docs/admin/introduction.md new file mode 100644 index 0000000000000..ef44e497212d7 --- /dev/null +++ b/v1.1/docs/admin/introduction.md @@ -0,0 +1,96 @@ +--- +layout: docwithnav +title: "Kubernetes Cluster Admin Guide" +--- + + + + + +# Kubernetes Cluster Admin Guide + +The cluster admin guide is for anyone creating or administering a Kubernetes cluster. +It assumes some familiarity with concepts in the [User Guide](../user-guide/README.html). + +## Planning a cluster + +There are many different examples of how to setup a kubernetes cluster. Many of them are listed in this +[matrix](../getting-started-guides/README.html). We call each of the combinations in this matrix a *distro*. + +Before choosing a particular guide, here are some things to consider: + + - Are you just looking to try out Kubernetes on your laptop, or build a high-availability many-node cluster? Both + models are supported, but some distros are better for one case or the other. + - Will you be using a hosted Kubernetes cluster, such as [GKE](https://cloud.google.com/container-engine), or setting + one up yourself? + - Will your cluster be on-premises, or in the cloud (IaaS)? Kubernetes does not directly support hybrid clusters. We + recommend setting up multiple clusters rather than spanning distant locations. + - Will you be running Kubernetes on "bare metal" or virtual machines? Kubernetes supports both, via different distros. + - Do you just want to run a cluster, or do you expect to do active development of kubernetes project code? If the + latter, it is better to pick a distro actively used by other developers. Some distros only use binary releases, but + offer is a greater variety of choices. + - Not all distros are maintained as actively. Prefer ones which are listed as tested on a more recent version of + Kubernetes. + - If you are configuring kubernetes on-premises, you will need to consider what [networking + model](networking.html) fits best. + - If you are designing for very high-availability, you may want [clusters in multiple zones](multi-cluster.html). + - You may want to familiarize yourself with the various + [components](cluster-components.html) needed to run a cluster. + +## Setting up a cluster + +Pick one of the Getting Started Guides from the [matrix](../getting-started-guides/README.html) and follow it. +If none of the Getting Started Guides fits, you may want to pull ideas from several of the guides. + +One option for custom networking is *OpenVSwitch GRE/VxLAN networking* ([ovs-networking.md](ovs-networking.html)), which +uses OpenVSwitch to set up networking between pods across + Kubernetes nodes. + +If you are modifying an existing guide which uses Salt, this document explains [how Salt is used in the Kubernetes +project](salt.html). + +## Managing a cluster, including upgrades + +[Managing a cluster](cluster-management.html). + +## Managing nodes + +[Managing nodes](node.html). + +## Optional Cluster Services + +* **DNS Integration with SkyDNS** ([dns.md](dns.html)): + Resolving a DNS name directly to a Kubernetes service. + +* **Logging** with [Kibana](../user-guide/logging.html) + +## Multi-tenant support + +* **Resource Quota** ([resource-quota.md](resource-quota.html)) + +## Security + +* **Kubernetes Container Environment** ([docs/user-guide/container-environment.md](../user-guide/container-environment.html)): + Describes the environment for Kubelet managed containers on a Kubernetes + node. + +* **Securing access to the API Server** [accessing the api](accessing-the-api.html) + +* **Authentication** [authentication](authentication.html) + +* **Authorization** [authorization](authorization.html) + +* **Admission Controllers** [admission_controllers](admission-controllers.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/introduction.md?pixel)]() + + diff --git a/v1.1/docs/admin/kube-apiserver.md b/v1.1/docs/admin/kube-apiserver.md new file mode 100644 index 0000000000000..803ea705b4fd3 --- /dev/null +++ b/v1.1/docs/admin/kube-apiserver.md @@ -0,0 +1,102 @@ +--- +layout: docwithnav +title: "kube-apiserver" +--- + + + + + +## kube-apiserver + + + +### Synopsis + + +The Kubernetes API server validates and configures data +for the api objects which include pods, services, replicationcontrollers, and +others. The API Server services REST operations and provides the frontend to the +cluster's shared state through which all other components interact. + +``` +{% raw %} +kube-apiserver +{% endraw %} +``` + +### Options + +``` +{% raw %} + --admission-control="AlwaysAdmit": Ordered list of plug-ins to do admission control of resources into cluster. Comma-delimited list of: AlwaysAdmit, AlwaysDeny, DenyEscalatingExec, DenyExecOnPrivileged, InitialResources, LimitRanger, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, ResourceQuota, SecurityContextDeny, ServiceAccount + --admission-control-config-file="": File with admission control configuration. + --advertise-address=: The IP address on which to advertise the apiserver to members of the cluster. This address must be reachable by the rest of the cluster. If blank, the --bind-address will be used. If --bind-address is unspecified, the host's default interface will be used. + --allow-privileged[=false]: If true, allow privileged containers. + --authorization-mode="AlwaysAllow": Ordered list of plug-ins to do authorization on secure port. Comma-delimited list of: AlwaysAllow,AlwaysDeny,ABAC + --authorization-policy-file="": File with authorization policy in csv format, used with --authorization-mode=ABAC, on the secure port. + --basic-auth-file="": If set, the file that will be used to admit requests to the secure port of the API server via http basic authentication. + --bind-address=0.0.0.0: The IP address on which to serve the --read-only-port and --secure-port ports. The associated interface(s) must be reachable by the rest of the cluster, and by CLI/web clients. If blank, all interfaces will be used (0.0.0.0). + --cert-dir="/var/run/kubernetes": The directory where the TLS certs are located (by default /var/run/kubernetes). If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored. + --client-ca-file="": If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate. + --cloud-config="": The path to the cloud provider configuration file. Empty string for no configuration file. + --cloud-provider="": The provider for cloud services. Empty string for no provider. + --cluster-name="kubernetes": The instance prefix for the cluster + --cors-allowed-origins=[]: List of allowed origins for CORS, comma separated. An allowed origin can be a regular expression to support subdomain matching. If this list is empty CORS will not be enabled. + --etcd-config="": The config file for the etcd client. Mutually exclusive with -etcd-servers. + --etcd-prefix="/registry": The prefix for all resource paths in etcd. + --etcd-servers=[]: List of etcd servers to watch (http://ip:port), comma separated. Mutually exclusive with -etcd-config + --etcd-servers-overrides=[]: Per-resource etcd servers overrides, comma separated. The individual override format: group/resource#servers, where servers are http://ip:port, semicolon separated. + --event-ttl=1h0m0s: Amount of time to retain events. Default 1 hour. + --experimental-keystone-url="": If passed, activates the keystone authentication plugin + --external-hostname="": The hostname to use when generating externalized URLs for this master (e.g. Swagger API Docs.) + --google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication. + --insecure-bind-address=127.0.0.1: The IP address on which to serve the --insecure-port (set to 0.0.0.0 for all interfaces). Defaults to localhost. + --insecure-port=8080: The port on which to serve unsecured, unauthenticated access. Default 8080. It is assumed that firewall rules are set up such that this port is not reachable from outside of the cluster and that port 443 on the cluster's public address is proxied to this port. This is performed by nginx in the default setup. + --kubelet-certificate-authority="": Path to a cert. file for the certificate authority. + --kubelet-client-certificate="": Path to a client cert file for TLS. + --kubelet-client-key="": Path to a client key file for TLS. + --kubelet-https[=true]: Use https for kubelet connections + --kubelet-port=10250: Kubelet port + --kubelet-timeout=5s: Timeout for kubelet operations + --log-flush-frequency=5s: Maximum number of seconds between log flushes + --long-running-request-regexp="(/|^)((watch|proxy)(/|$)|(logs?|portforward|exec|attach)/?$)": A regular expression matching long running requests which should be excluded from maximum inflight request handling. + --master-service-namespace="default": The namespace from which the kubernetes master services should be injected into pods + --max-connection-bytes-per-sec=0: If non-zero, throttle each user connection to this number of bytes/sec. Currently only applies to long-running requests + --max-requests-inflight=400: The maximum number of requests in flight at a given time. When the server exceeds this, it rejects requests. Zero for no limit. + --min-request-timeout=1800: An optional field indicating the minimum number of seconds a handler must keep a request open before timing it out. Currently only honored by the watch request handler, which picks a randomized value above this number as the connection timeout, to spread out load. + --oidc-ca-file="": If set, the OpenID server's certificate will be verified by one of the authorities in the oidc-ca-file, otherwise the host's root CA set will be used + --oidc-client-id="": The client ID for the OpenID Connect client, must be set if oidc-issuer-url is set + --oidc-issuer-url="": The URL of the OpenID issuer, only HTTPS scheme will be accepted. If set, it will be used to verify the OIDC JSON Web Token (JWT) + --oidc-username-claim="sub": The OpenID claim to use as the user name. Note that claims other than the default ('sub') is not guaranteed to be unique and immutable. This flag is experimental, please see the authentication documentation for further details. + --profiling[=true]: Enable profiling via web interface host:port/debug/pprof/ + --runtime-config=: A set of key=value pairs that describe runtime configuration that may be passed to apiserver. apis/ key can be used to turn on/off specific api versions. apis// can be used to turn on/off specific resources. api/all and api/legacy are special keys to control all and legacy api versions respectively. + --secure-port=6443: The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all. + --service-account-key-file="": File containing PEM-encoded x509 RSA private or public key, used to verify ServiceAccount tokens. If unspecified, --tls-private-key-file is used. + --service-account-lookup[=false]: If true, validate ServiceAccount tokens exist in etcd as part of authentication. + --service-cluster-ip-range=: A CIDR notation IP range from which to assign service cluster IPs. This must not overlap with any IP ranges assigned to nodes for pods. + --service-node-port-range=: A port range to reserve for services with NodePort visibility. Example: '30000-32767'. Inclusive at both ends of the range. + --ssh-keyfile="": If non-empty, use secure SSH proxy to the nodes, using this user keyfile + --ssh-user="": If non-empty, use secure SSH proxy to the nodes, using this user name + --storage-versions="extensions/v1beta1,v1": The versions to store resources with. Different groups may be stored in different versions. Specified in the format "group1/version1,group2/version2...". This flag expects a complete list of storage versions of ALL groups registered in the server. It defaults to a list of preferred versions of all registered groups, which is derived from the KUBE_API_VERSIONS environment variable. + --tls-cert-file="": File containing x509 Certificate for HTTPS. (CA cert, if any, concatenated after server cert). If HTTPS serving is enabled, and --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to /var/run/kubernetes. + --tls-private-key-file="": File containing x509 private key matching --tls-cert-file. + --token-auth-file="": If set, the file that will be used to secure the secure port of the API server via token authentication. + --watch-cache[=true]: Enable watch caching in the apiserver +{% endraw %} +``` + +###### Auto generated by spf13/cobra at 2015-10-29 20:12:33.554980405 +0000 UTC + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/kube-apiserver.md?pixel)]() + + diff --git a/v1.1/docs/admin/kube-controller-manager.md b/v1.1/docs/admin/kube-controller-manager.md new file mode 100644 index 0000000000000..03ad30a867343 --- /dev/null +++ b/v1.1/docs/admin/kube-controller-manager.md @@ -0,0 +1,89 @@ +--- +layout: docwithnav +title: "kube-controller-manager" +--- + + + + + +## kube-controller-manager + + + +### Synopsis + + +The Kubernetes controller manager is a daemon that embeds +the core control loops shipped with Kubernetes. In applications of robotics and +automation, a control loop is a non-terminating loop that regulates the state of +the system. In Kubernetes, a controller is a control loop that watches the shared +state of the cluster through the apiserver and makes changes attempting to move the +current state towards the desired state. Examples of controllers that ship with +Kubernetes today are the replication controller, endpoints controller, namespace +controller, and serviceaccounts controller. + +``` +{% raw %} +kube-controller-manager +{% endraw %} +``` + +### Options + +``` +{% raw %} + --address=127.0.0.1: The IP address to serve on (set to 0.0.0.0 for all interfaces) + --allocate-node-cidrs[=false]: Should CIDRs for Pods be allocated and set on the cloud provider. + --cloud-config="": The path to the cloud provider configuration file. Empty string for no configuration file. + --cloud-provider="": The provider for cloud services. Empty string for no provider. + --cluster-cidr=: CIDR Range for Pods in cluster. + --cluster-name="kubernetes": The instance prefix for the cluster + --concurrent-endpoint-syncs=5: The number of endpoint syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load + --concurrent_rc_syncs=5: The number of replication controllers that are allowed to sync concurrently. Larger number = more reponsive replica management, but more CPU (and network) load + --deleting-pods-burst=10: Number of nodes on which pods are bursty deleted in case of node failure. For more details look into RateLimiter. + --deleting-pods-qps=0.1: Number of nodes per second on which pods are deleted in case of node failure. + --deployment-controller-sync-period=30s: Period for syncing the deployments. + --google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication. + --horizontal-pod-autoscaler-sync-period=30s: The period for syncing the number of pods in horizontal pod autoscaler. + --kubeconfig="": Path to kubeconfig file with authorization and master location information. + --log-flush-frequency=5s: Maximum number of seconds between log flushes + --master="": The address of the Kubernetes API server (overrides any value in kubeconfig) + --min-resync-period=12h0m0s: The resync period in reflectors will be random between MinResyncPeriod and 2*MinResyncPeriod + --namespace-sync-period=5m0s: The period for syncing namespace life-cycle updates + --node-monitor-grace-period=40s: Amount of time which we allow running Node to be unresponsive before marking it unhealty. Must be N times more than kubelet's nodeStatusUpdateFrequency, where N means number of retries allowed for kubelet to post node status. + --node-monitor-period=5s: The period for syncing NodeStatus in NodeController. + --node-startup-grace-period=1m0s: Amount of time which we allow starting Node to be unresponsive before marking it unhealty. + --node-sync-period=10s: The period for syncing nodes from cloudprovider. Longer periods will result in fewer calls to cloud provider, but may delay addition of new nodes to cluster. + --pod-eviction-timeout=5m0s: The grace period for deleting pods on failed nodes. + --port=10252: The port that the controller-manager's http service runs on + --profiling[=true]: Enable profiling via web interface host:port/debug/pprof/ + --pv-recycler-increment-timeout-nfs=30: the increment of time added per Gi to ActiveDeadlineSeconds for an NFS scrubber pod + --pv-recycler-minimum-timeout-hostpath=60: The minimum ActiveDeadlineSeconds to use for a HostPath Recycler pod. This is for development and testing only and will not work in a multi-node cluster. + --pv-recycler-minimum-timeout-nfs=300: The minimum ActiveDeadlineSeconds to use for an NFS Recycler pod + --pv-recycler-pod-template-filepath-hostpath="": The file path to a pod definition used as a template for HostPath persistent volume recycling. This is for development and testing only and will not work in a multi-node cluster. + --pv-recycler-pod-template-filepath-nfs="": The file path to a pod definition used as a template for NFS persistent volume recycling + --pv-recycler-timeout-increment-hostpath=30: the increment of time added per Gi to ActiveDeadlineSeconds for a HostPath scrubber pod. This is for development and testing only and will not work in a multi-node cluster. + --pvclaimbinder-sync-period=10s: The period for syncing persistent volumes and persistent volume claims + --resource-quota-sync-period=10s: The period for syncing quota usage status in the system + --root-ca-file="": If set, this root certificate authority will be included in service account's token secret. This must be a valid PEM-encoded CA bundle. + --service-account-private-key-file="": Filename containing a PEM-encoded private RSA key used to sign service account tokens. + --service-sync-period=5m0s: The period for syncing services with their external load balancers + --terminated-pod-gc-threshold=12500: Number of terminated pods that can exist before the terminated pod garbage collector starts deleting terminated pods. If <= 0, the terminated pod garbage collector is disabled. +{% endraw %} +``` + +###### Auto generated by spf13/cobra at 2015-10-29 20:12:25.539938496 +0000 UTC + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/kube-controller-manager.md?pixel)]() + + diff --git a/v1.1/docs/admin/kube-proxy.md b/v1.1/docs/admin/kube-proxy.md new file mode 100644 index 0000000000000..d25bf68d49944 --- /dev/null +++ b/v1.1/docs/admin/kube-proxy.md @@ -0,0 +1,67 @@ +--- +layout: docwithnav +title: "kube-proxy" +--- + + + + + +## kube-proxy + + + +### Synopsis + + +The Kubernetes network proxy runs on each node. This +reflects services as defined in the Kubernetes API on each node and can do simple +TCP,UDP stream forwarding or round robin TCP,UDP forwarding across a set of backends. +Service cluster ips and ports are currently found through Docker-links-compatible +environment variables specifying ports opened by the service proxy. There is an optional +addon that provides cluster DNS for these cluster IPs. The user must create a service +with the apiserver API to configure the proxy. + +``` +{% raw %} +kube-proxy +{% endraw %} +``` + +### Options + +``` +{% raw %} + --bind-address=0.0.0.0: The IP address for the proxy server to serve on (set to 0.0.0.0 for all interfaces) + --cleanup-iptables[=false]: If true cleanup iptables rules and exit. + --google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication. + --healthz-bind-address=127.0.0.1: The IP address for the health check server to serve on, defaulting to 127.0.0.1 (set to 0.0.0.0 for all interfaces) + --healthz-port=10249: The port to bind the health check server. Use 0 to disable. + --hostname-override="": If non-empty, will use this string as identification instead of the actual hostname. + --iptables-sync-period=30s: How often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0. + --kubeconfig="": Path to kubeconfig file with authorization information (the master location is set by the master flag). + --log-flush-frequency=5s: Maximum number of seconds between log flushes + --masquerade-all[=false]: If using the pure iptables proxy, SNAT everything + --master="": The address of the Kubernetes API server (overrides any value in kubeconfig) + --oom-score-adj=-999: The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000] + --proxy-mode="": Which proxy mode to use: 'userspace' (older, stable) or 'iptables' (experimental). If blank, look at the Node object on the Kubernetes API and respect the 'net.experimental.kubernetes.io/proxy-mode' annotation if provided. Otherwise use the best-available proxy (currently userspace, but may change in future versions). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy. + --proxy-port-range=: Range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen. + --resource-container="/kube-proxy": Absolute name of the resource-only container to create and run the Kube-proxy in (Default: /kube-proxy). + --udp-timeout=250ms: How long an idle UDP connection will be kept open (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxy-mode=userspace +{% endraw %} +``` + +###### Auto generated by spf13/cobra at 2015-10-29 20:12:28.465584706 +0000 UTC + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/kube-proxy.md?pixel)]() + + diff --git a/v1.1/docs/admin/kube-scheduler.md b/v1.1/docs/admin/kube-scheduler.md new file mode 100644 index 0000000000000..e26b922774592 --- /dev/null +++ b/v1.1/docs/admin/kube-scheduler.md @@ -0,0 +1,62 @@ +--- +layout: docwithnav +title: "kube-scheduler" +--- + + + + + +## kube-scheduler + + + +### Synopsis + + +The Kubernetes scheduler is a policy-rich, topology-aware, +workload-specific function that significantly impacts availability, performance, +and capacity. The scheduler needs to take into account individual and collective +resource requirements, quality of service requirements, hardware/software/policy +constraints, affinity and anti-affinity specifications, data locality, inter-workload +interference, deadlines, and so on. Workload-specific requirements will be exposed +through the API as necessary. + +``` +{% raw %} +kube-scheduler +{% endraw %} +``` + +### Options + +``` +{% raw %} + --address=127.0.0.1: The IP address to serve on (set to 0.0.0.0 for all interfaces) + --algorithm-provider="DefaultProvider": The scheduling algorithm provider to use, one of: DefaultProvider + --bind-pods-burst=100: Number of bindings per second scheduler is allowed to make during bursts + --bind-pods-qps=50: Number of bindings per second scheduler is allowed to continuously make + --google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication. + --kubeconfig="": Path to kubeconfig file with authorization and master location information. + --log-flush-frequency=5s: Maximum number of seconds between log flushes + --master="": The address of the Kubernetes API server (overrides any value in kubeconfig) + --policy-config-file="": File with scheduler policy configuration + --port=10251: The port that the scheduler's http service runs on + --profiling[=true]: Enable profiling via web interface host:port/debug/pprof/ +{% endraw %} +``` + +###### Auto generated by spf13/cobra at 2015-10-29 20:12:20.542446971 +0000 UTC + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/kube-scheduler.md?pixel)]() + + diff --git a/v1.1/docs/admin/kubelet.md b/v1.1/docs/admin/kubelet.md new file mode 100644 index 0000000000000..dbdff7d9c9fee --- /dev/null +++ b/v1.1/docs/admin/kubelet.md @@ -0,0 +1,129 @@ +--- +layout: docwithnav +title: "kubelet" +--- + + + + + +## kubelet + + + +### Synopsis + + +The kubelet is the primary "node agent" that runs on each +node. The kubelet works in terms of a PodSpec. A PodSpec is a YAML or JSON object +that describes a pod. The kubelet takes a set of PodSpecs that are provided through +various mechanisms (primarily through the apiserver) and ensures that the containers +described in those PodSpecs are running and healthy. + +Other than from an PodSpec from the apiserver, there are three ways that a container +manifest can be provided to the Kubelet. + +File: Path passed as a flag on the command line. This file is rechecked every 20 +seconds (configurable with a flag). + +HTTP endpoint: HTTP endpoint passed as a parameter on the command line. This endpoint +is checked every 20 seconds (also configurable with a flag). + +HTTP server: The kubelet can also listen for HTTP and respond to a simple API +(underspec'd currently) to submit a new manifest. + +``` +{% raw %} +kubelet +{% endraw %} +``` + +### Options + +``` +{% raw %} + --address=0.0.0.0: The IP address for the Kubelet to serve on (set to 0.0.0.0 for all interfaces) + --allow-privileged[=false]: If true, allow containers to request privileged mode. [default=false] + --api-servers=[]: List of Kubernetes API servers for publishing events, and reading pods and services. (ip:port), comma separated. + --cadvisor-port=4194: The port of the localhost cAdvisor endpoint + --cert-dir="/var/run/kubernetes": The directory where the TLS certs are located (by default /var/run/kubernetes). If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored. + --cgroup-root="": Optional root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Default: '', which means use the container runtime default. + --chaos-chance=0: If > 0.0, introduce random client errors and latency. Intended for testing. [default=0.0] + --cloud-config="": The path to the cloud provider configuration file. Empty string for no configuration file. + --cloud-provider="": The provider for cloud services. Empty string for no provider. + --cluster-dns=: IP address for a cluster DNS server. If set, kubelet will configure all containers to use this for DNS resolution in addition to the host's DNS servers + --cluster-domain="": Domain for this cluster. If set, kubelet will configure all containers to search this domain in addition to the host's search domains + --config="": Path to the config file or directory of files + --configure-cbr0[=false]: If true, kubelet will configure cbr0 based on Node.Spec.PodCIDR. + --container-runtime="docker": The container runtime to use. Possible values: 'docker', 'rkt'. Default: 'docker'. + --containerized[=false]: Experimental support for running kubelet in a container. Intended for testing. [default=false] + --cpu-cfs-quota[=false]: Enable CPU CFS quota enforcement for containers that specify CPU limits + --docker-endpoint="": If non-empty, use this for the docker endpoint to communicate with + --docker-exec-handler="native": Handler to use when executing a command in a container. Valid values are 'native' and 'nsenter'. Defaults to 'native'. + --enable-debugging-handlers[=true]: Enables server endpoints for log collection and local running of containers and commands + --enable-server[=true]: Enable the Kubelet's server + --event-burst=0: Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding event-qps. Only used if --event-qps > 0 + --event-qps=0: If > 0, limit event creations per second to this value. If 0, unlimited. [default=0.0] + --file-check-frequency=20s: Duration between checking config files for new data + --google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication. + --healthz-bind-address=127.0.0.1: The IP address for the healthz server to serve on, defaulting to 127.0.0.1 (set to 0.0.0.0 for all interfaces) + --healthz-port=10248: The port of the localhost healthz endpoint + --host-ipc-sources="*": Comma-separated list of sources from which the Kubelet allows pods to use the host ipc namespace. [default="*"] + --host-network-sources="*": Comma-separated list of sources from which the Kubelet allows pods to use of host network. [default="*"] + --host-pid-sources="*": Comma-separated list of sources from which the Kubelet allows pods to use the host pid namespace. [default="*"] + --hostname-override="": If non-empty, will use this string as identification instead of the actual hostname. + --http-check-frequency=20s: Duration between checking http for new data + --image-gc-high-threshold=90: The percent of disk usage after which image garbage collection is always run. Default: 90%% + --image-gc-low-threshold=80: The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Default: 80%% + --kubeconfig="/var/lib/kubelet/kubeconfig": Path to a kubeconfig file, specifying how to authenticate to API server (the master location is set by the api-servers flag). + --log-flush-frequency=5s: Maximum number of seconds between log flushes + --low-diskspace-threshold-mb=256: The absolute free disk space, in MB, to maintain. When disk space falls below this threshold, new pods would be rejected. Default: 256 + --manifest-url="": URL for accessing the container manifest + --manifest-url-header="": HTTP header to use when accessing the manifest URL, with the key separated from the value with a ':', as in 'key:value' + --master-service-namespace="default": The namespace from which the kubernetes master services should be injected into pods + --max-open-files=1000000: Number of files that can be opened by Kubelet process. [default=1000000] + --max-pods=40: Number of Pods that can run on this Kubelet. + --maximum-dead-containers=100: Maximum number of old instances of containers to retain globally. Each container takes up some disk space. Default: 100. + --maximum-dead-containers-per-container=2: Maximum number of old instances to retain per container. Each container takes up some disk space. Default: 2. + --minimum-container-ttl-duration=1m0s: Minimum age for a finished container before it is garbage collected. Examples: '300ms', '10s' or '2h45m' + --network-plugin="": The name of the network plugin to be invoked for various events in kubelet/pod lifecycle + --network-plugin-dir="/usr/libexec/kubernetes/kubelet-plugins/net/exec/": The full path of the directory in which to search for network plugins + --node-status-update-frequency=10s: Specifies how often kubelet posts node status to master. Note: be cautious when changing the constant, it must work with nodeMonitorGracePeriod in nodecontroller. Default: 10s + --oom-score-adj=-999: The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000] + --pod-cidr="": The CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. + --pod-infra-container-image="gcr.io/google_containers/pause:0.8.0": The image whose network/ipc namespaces containers in each pod will use. + --port=10250: The port for the Kubelet to serve on. Note that "kubectl logs" will not work if you set this flag. + --read-only-port=10255: The read-only port for the Kubelet to serve on (set to 0 to disable) + --really-crash-for-testing[=false]: If true, when panics occur crash. Intended for testing. + --register-node[=true]: Register the node with the apiserver (defaults to true if --api-servers is set) + --registry-burst=10: Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0 + --registry-qps=0: If > 0, limit registry pull QPS to this value. If 0, unlimited. [default=0.0] + --resolv-conf="/etc/resolv.conf": Resolver configuration file used as the basis for the container DNS resolution configuration. + --resource-container="/kubelet": Absolute name of the resource-only container to create and run the Kubelet in (Default: /kubelet). + --rkt-path="": Path of rkt binary. Leave empty to use the first rkt in $PATH. Only used if --container-runtime='rkt' + --rkt-stage1-image="": image to use as stage1. Local paths and http/https URLs are supported. If empty, the 'stage1.aci' in the same directory as '--rkt-path' will be used + --root-dir="/var/lib/kubelet": Directory path for managing kubelet files (volume mounts,etc). + --runonce[=false]: If true, exit after spawning pods from local manifests or remote urls. Exclusive with --api-servers, and --enable-server + --serialize-image-pulls[=true]: Pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an Aufs storage backend. Issue #10959 has more details. [default=true] + --streaming-connection-idle-timeout=0: Maximum time a streaming connection can be idle before the connection is automatically closed. Example: '5m' + --sync-frequency=10s: Max period between synchronizing running containers and config + --system-container="": Optional resource-only container in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. (Default: ""). + --tls-cert-file="": File containing x509 Certificate for HTTPS. (CA cert, if any, concatenated after server cert). If --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to --cert-dir. + --tls-private-key-file="": File containing x509 private key matching --tls-cert-file. +{% endraw %} +``` + +###### Auto generated by spf13/cobra at 2015-10-29 20:12:15.480131233 +0000 UTC + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/kubelet.md?pixel)]() + + diff --git a/v1.1/docs/admin/limitrange/README.md b/v1.1/docs/admin/limitrange/README.md new file mode 100644 index 0000000000000..557fd35ff4678 --- /dev/null +++ b/v1.1/docs/admin/limitrange/README.md @@ -0,0 +1,236 @@ +--- +layout: docwithnav +title: "Limit Range" +--- + + + + +Limit Range +======================================== +By default, pods run with unbounded CPU and memory limits. This means that any pod in the +system will be able to consume as much CPU and memory on the node that executes the pod. + +Users may want to impose restrictions on the amount of resource a single pod in the system may consume +for a variety of reasons. + +For example: + +1. Each node in the cluster has 2GB of memory. The cluster operator does not want to accept pods +that require more than 2GB of memory since no node in the cluster can support the requirement. To prevent a +pod from being permanently unscheduled to a node, the operator instead chooses to reject pods that exceed 2GB +of memory as part of admission control. +2. A cluster is shared by two communities in an organization that runs production and development workloads +respectively. Production workloads may consume up to 8GB of memory, but development workloads may consume up +to 512MB of memory. The cluster operator creates a separate namespace for each workload, and applies limits to +each namespace. +3. Users may create a pod which consumes resources just below the capacity of a machine. The left over space +may be too small to be useful, but big enough for the waste to be costly over the entire cluster. As a result, +the cluster operator may want to set limits that a pod must consume at least 20% of the memory and cpu of their +average node size in order to provide for more uniform scheduling and to limit waste. + +This example demonstrates how limits can be applied to a Kubernetes namespace to control +min/max resource limits per pod. In addition, this example demonstrates how you can +apply default resource limits to pods in the absence of an end-user specified value. + +See [LimitRange design doc](../../design/admission_control_limit_range.html) for more information. For a detailed description of the Kubernetes resource model, see [Resources](../../../docs/user-guide/compute-resources.html) + +Step 0: Prerequisites +----------------------------------------- +This example requires a running Kubernetes cluster. See the [Getting Started guides](../../../docs/getting-started-guides/) for how to get started. + +Change to the `` directory if you're not already there. + +Step 1: Create a namespace +----------------------------------------- +This example will work in a custom namespace to demonstrate the concepts involved. + +Let's create a new namespace called limit-example: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/namespace.yaml +namespace "limit-example" created +$ kubectl get namespaces +NAME LABELS STATUS AGE +default Active 5m +limit-example Active 53s +{% endraw %} +{% endhighlight %} + +Step 2: Apply a limit to the namespace +----------------------------------------- +Let's create a simple limit in our namespace. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/limits.yaml --namespace=limit-example +limitrange "mylimits" created +{% endraw %} +{% endhighlight %} + +Let's describe the limits that we have imposed in our namespace. + +{% highlight console %} +{% raw %} +$ kubectl describe limits mylimits --namespace=limit-example +Name: mylimits +Namespace: limit-example +Type Resource Min Max Request Limit Limit/Request +---- -------- --- --- ------- ----- ------------- +Pod cpu 200m 2 - - - +Pod memory 6Mi 1Gi - - - +Container cpu 100m 2 200m 300m - +Container memory 3Mi 1Gi 100Mi 200Mi - +{% endraw %} +{% endhighlight %} + +In this scenario, we have said the following: + +1. If a max constraint is specified for a resource (2 CPU and 1Gi memory in this case), then a limit +must be specified for that resource across all containers. Failure to specify a limit will result in +a validation error when attempting to create the pod. Note that a default value of limit is set by +*default* in file `limits.yaml` (300m CPU and 200Mi memory). +2. If a min constraint is specified for a resource (100m CPU and 3Mi memory in this case), then a +request must be specified for that resource across all containers. Failure to specify a request will +result in a validation error when attempting to create the pod. Note that a default value of request is +set by *defaultRequest* in file `limits.yaml` (200m CPU and 100Mi memory). +3. For any pod, the sum of all containers memory requests must be >= 6Mi and the sum of all containers +memory limits must be <= 1Gi; the sum of all containers CPU requests must be >= 200m and the sum of all +containers CPU limits must be <= 2. + +Step 3: Enforcing limits at point of creation +----------------------------------------- +The limits enumerated in a namespace are only enforced when a pod is created or updated in +the cluster. If you change the limits to a different value range, it does not affect pods that +were previously created in a namespace. + +If a resource (cpu or memory) is being restricted by a limit, the user will get an error at time +of creation explaining why. + +Let's first spin up a replication controller that creates a single container pod to demonstrate +how default values are applied to each pod. + +{% highlight console %} +{% raw %} +$ kubectl run nginx --image=nginx --replicas=1 --namespace=limit-example +replicationcontroller "nginx" created +$ kubectl get pods --namespace=limit-example +NAME READY STATUS RESTARTS AGE +nginx-aq0mf 1/1 Running 0 35s +$ kubectl get pods nginx-aq0mf --namespace=limit-example -o yaml | grep resources -C 8 +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} + resourceVersion: "127" + selfLink: /api/v1/namespaces/limit-example/pods/nginx-aq0mf + uid: 51be42a7-7156-11e5-9921-286ed488f785 +spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + resources: + limits: + cpu: 300m + memory: 200Mi + requests: + cpu: 200m + memory: 100Mi + terminationMessagePath: /dev/termination-log + volumeMounts: +{% endraw %} +{% endhighlight %} + +Note that our nginx container has picked up the namespace default cpu and memory resource *limits* and *requests*. + +Let's create a pod that exceeds our allowed limits by having it have a container that requests 3 cpu cores. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/invalid-pod.yaml --namespace=limit-example +Error from server: error when creating "docs/admin/limitrange/invalid-pod.yaml": Pod "invalid-pod" is forbidden: [Maximum cpu usage per Pod is 2, but limit is 3., Maximum cpu usage per Container is 2, but limit is 3.] +{% endraw %} +{% endhighlight %} + +Let's create a pod that falls within the allowed limit boundaries. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/valid-pod.yaml --namespace=limit-example +pod "valid-pod" created +$ kubectl get pods valid-pod --namespace=limit-example -o yaml | grep -C 6 resources +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} + uid: 162a12aa-7157-11e5-9921-286ed488f785 +spec: + containers: + - image: gcr.io/google_containers/serve_hostname + imagePullPolicy: IfNotPresent + name: kubernetes-serve-hostname + resources: + limits: + cpu: "1" + memory: 512Mi + requests: + cpu: "1" + memory: 512Mi +{% endraw %} +{% endhighlight %} + +Note that this pod specifies explicit resource *limits* and *requests* so it did not pick up the namespace +default values. + +Note: The *limits* for CPU resource are not enforced in the default Kubernetes setup on the physical node +that runs the container unless the administrator deploys the kubelet with the folllowing flag: + +``` +{% raw %} +$ kubelet --help +Usage of kubelet +.... + --cpu-cfs-quota[=false]: Enable CPU CFS quota enforcement for containers that specify CPU limits +$ kubelet --cpu-cfs-quota=true ... +{% endraw %} +``` + +Step 4: Cleanup +---------------------------- +To remove the resources used by this example, you can just delete the limit-example namespace. + +{% highlight console %} +{% raw %} +$ kubectl delete namespace limit-example +namespace "limit-example" deleted +$ kubectl get namespaces +NAME LABELS STATUS AGE +default Active 20m +{% endraw %} +{% endhighlight %} + +Summary +---------------------------- +Cluster operators that want to restrict the amount of resources a single container or pod may consume +are able to define allowable ranges per Kubernetes namespace. In the absence of any explicit assignments, +the Kubernetes system is able to apply default resource *limits* and *requests* if desired in order to +constrain the amount of resource a pod consumes on a node. + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/limitrange/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/limitrange/index.md b/v1.1/docs/admin/limitrange/index.md new file mode 100644 index 0000000000000..557fd35ff4678 --- /dev/null +++ b/v1.1/docs/admin/limitrange/index.md @@ -0,0 +1,236 @@ +--- +layout: docwithnav +title: "Limit Range" +--- + + + + +Limit Range +======================================== +By default, pods run with unbounded CPU and memory limits. This means that any pod in the +system will be able to consume as much CPU and memory on the node that executes the pod. + +Users may want to impose restrictions on the amount of resource a single pod in the system may consume +for a variety of reasons. + +For example: + +1. Each node in the cluster has 2GB of memory. The cluster operator does not want to accept pods +that require more than 2GB of memory since no node in the cluster can support the requirement. To prevent a +pod from being permanently unscheduled to a node, the operator instead chooses to reject pods that exceed 2GB +of memory as part of admission control. +2. A cluster is shared by two communities in an organization that runs production and development workloads +respectively. Production workloads may consume up to 8GB of memory, but development workloads may consume up +to 512MB of memory. The cluster operator creates a separate namespace for each workload, and applies limits to +each namespace. +3. Users may create a pod which consumes resources just below the capacity of a machine. The left over space +may be too small to be useful, but big enough for the waste to be costly over the entire cluster. As a result, +the cluster operator may want to set limits that a pod must consume at least 20% of the memory and cpu of their +average node size in order to provide for more uniform scheduling and to limit waste. + +This example demonstrates how limits can be applied to a Kubernetes namespace to control +min/max resource limits per pod. In addition, this example demonstrates how you can +apply default resource limits to pods in the absence of an end-user specified value. + +See [LimitRange design doc](../../design/admission_control_limit_range.html) for more information. For a detailed description of the Kubernetes resource model, see [Resources](../../../docs/user-guide/compute-resources.html) + +Step 0: Prerequisites +----------------------------------------- +This example requires a running Kubernetes cluster. See the [Getting Started guides](../../../docs/getting-started-guides/) for how to get started. + +Change to the `` directory if you're not already there. + +Step 1: Create a namespace +----------------------------------------- +This example will work in a custom namespace to demonstrate the concepts involved. + +Let's create a new namespace called limit-example: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/namespace.yaml +namespace "limit-example" created +$ kubectl get namespaces +NAME LABELS STATUS AGE +default Active 5m +limit-example Active 53s +{% endraw %} +{% endhighlight %} + +Step 2: Apply a limit to the namespace +----------------------------------------- +Let's create a simple limit in our namespace. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/limits.yaml --namespace=limit-example +limitrange "mylimits" created +{% endraw %} +{% endhighlight %} + +Let's describe the limits that we have imposed in our namespace. + +{% highlight console %} +{% raw %} +$ kubectl describe limits mylimits --namespace=limit-example +Name: mylimits +Namespace: limit-example +Type Resource Min Max Request Limit Limit/Request +---- -------- --- --- ------- ----- ------------- +Pod cpu 200m 2 - - - +Pod memory 6Mi 1Gi - - - +Container cpu 100m 2 200m 300m - +Container memory 3Mi 1Gi 100Mi 200Mi - +{% endraw %} +{% endhighlight %} + +In this scenario, we have said the following: + +1. If a max constraint is specified for a resource (2 CPU and 1Gi memory in this case), then a limit +must be specified for that resource across all containers. Failure to specify a limit will result in +a validation error when attempting to create the pod. Note that a default value of limit is set by +*default* in file `limits.yaml` (300m CPU and 200Mi memory). +2. If a min constraint is specified for a resource (100m CPU and 3Mi memory in this case), then a +request must be specified for that resource across all containers. Failure to specify a request will +result in a validation error when attempting to create the pod. Note that a default value of request is +set by *defaultRequest* in file `limits.yaml` (200m CPU and 100Mi memory). +3. For any pod, the sum of all containers memory requests must be >= 6Mi and the sum of all containers +memory limits must be <= 1Gi; the sum of all containers CPU requests must be >= 200m and the sum of all +containers CPU limits must be <= 2. + +Step 3: Enforcing limits at point of creation +----------------------------------------- +The limits enumerated in a namespace are only enforced when a pod is created or updated in +the cluster. If you change the limits to a different value range, it does not affect pods that +were previously created in a namespace. + +If a resource (cpu or memory) is being restricted by a limit, the user will get an error at time +of creation explaining why. + +Let's first spin up a replication controller that creates a single container pod to demonstrate +how default values are applied to each pod. + +{% highlight console %} +{% raw %} +$ kubectl run nginx --image=nginx --replicas=1 --namespace=limit-example +replicationcontroller "nginx" created +$ kubectl get pods --namespace=limit-example +NAME READY STATUS RESTARTS AGE +nginx-aq0mf 1/1 Running 0 35s +$ kubectl get pods nginx-aq0mf --namespace=limit-example -o yaml | grep resources -C 8 +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} + resourceVersion: "127" + selfLink: /api/v1/namespaces/limit-example/pods/nginx-aq0mf + uid: 51be42a7-7156-11e5-9921-286ed488f785 +spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + resources: + limits: + cpu: 300m + memory: 200Mi + requests: + cpu: 200m + memory: 100Mi + terminationMessagePath: /dev/termination-log + volumeMounts: +{% endraw %} +{% endhighlight %} + +Note that our nginx container has picked up the namespace default cpu and memory resource *limits* and *requests*. + +Let's create a pod that exceeds our allowed limits by having it have a container that requests 3 cpu cores. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/invalid-pod.yaml --namespace=limit-example +Error from server: error when creating "docs/admin/limitrange/invalid-pod.yaml": Pod "invalid-pod" is forbidden: [Maximum cpu usage per Pod is 2, but limit is 3., Maximum cpu usage per Container is 2, but limit is 3.] +{% endraw %} +{% endhighlight %} + +Let's create a pod that falls within the allowed limit boundaries. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/limitrange/valid-pod.yaml --namespace=limit-example +pod "valid-pod" created +$ kubectl get pods valid-pod --namespace=limit-example -o yaml | grep -C 6 resources +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} + uid: 162a12aa-7157-11e5-9921-286ed488f785 +spec: + containers: + - image: gcr.io/google_containers/serve_hostname + imagePullPolicy: IfNotPresent + name: kubernetes-serve-hostname + resources: + limits: + cpu: "1" + memory: 512Mi + requests: + cpu: "1" + memory: 512Mi +{% endraw %} +{% endhighlight %} + +Note that this pod specifies explicit resource *limits* and *requests* so it did not pick up the namespace +default values. + +Note: The *limits* for CPU resource are not enforced in the default Kubernetes setup on the physical node +that runs the container unless the administrator deploys the kubelet with the folllowing flag: + +``` +{% raw %} +$ kubelet --help +Usage of kubelet +.... + --cpu-cfs-quota[=false]: Enable CPU CFS quota enforcement for containers that specify CPU limits +$ kubelet --cpu-cfs-quota=true ... +{% endraw %} +``` + +Step 4: Cleanup +---------------------------- +To remove the resources used by this example, you can just delete the limit-example namespace. + +{% highlight console %} +{% raw %} +$ kubectl delete namespace limit-example +namespace "limit-example" deleted +$ kubectl get namespaces +NAME LABELS STATUS AGE +default Active 20m +{% endraw %} +{% endhighlight %} + +Summary +---------------------------- +Cluster operators that want to restrict the amount of resources a single container or pod may consume +are able to define allowable ranges per Kubernetes namespace. In the absence of any explicit assignments, +the Kubernetes system is able to apply default resource *limits* and *requests* if desired in order to +constrain the amount of resource a pod consumes on a node. + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/limitrange/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/limitrange/invalid-pod.yaml b/v1.1/docs/admin/limitrange/invalid-pod.yaml new file mode 100644 index 0000000000000..b63f25debabde --- /dev/null +++ b/v1.1/docs/admin/limitrange/invalid-pod.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Pod +metadata: + name: invalid-pod +spec: + containers: + - name: kubernetes-serve-hostname + image: gcr.io/google_containers/serve_hostname + resources: + limits: + cpu: "3" + memory: 100Mi diff --git a/v1.1/docs/admin/limitrange/limits.yaml b/v1.1/docs/admin/limitrange/limits.yaml new file mode 100644 index 0000000000000..5de4841705f90 --- /dev/null +++ b/v1.1/docs/admin/limitrange/limits.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: mylimits +spec: + limits: + - max: + cpu: "2" + memory: 1Gi + min: + cpu: 200m + memory: 6Mi + type: Pod + - default: + cpu: 300m + memory: 200Mi + defaultRequest: + cpu: 200m + memory: 100Mi + max: + cpu: "2" + memory: 1Gi + min: + cpu: 100m + memory: 3Mi + type: Container diff --git a/v1.1/docs/admin/limitrange/namespace.yaml b/v1.1/docs/admin/limitrange/namespace.yaml new file mode 100644 index 0000000000000..200a894b0b5ea --- /dev/null +++ b/v1.1/docs/admin/limitrange/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: limit-example diff --git a/v1.1/docs/admin/limitrange/valid-pod.yaml b/v1.1/docs/admin/limitrange/valid-pod.yaml new file mode 100644 index 0000000000000..c1ec54183beb7 --- /dev/null +++ b/v1.1/docs/admin/limitrange/valid-pod.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: valid-pod + labels: + name: valid-pod +spec: + containers: + - name: kubernetes-serve-hostname + image: gcr.io/google_containers/serve_hostname + resources: + limits: + cpu: "1" + memory: 512Mi diff --git a/v1.1/docs/admin/multi-cluster.md b/v1.1/docs/admin/multi-cluster.md new file mode 100644 index 0000000000000..67da61c6bce1b --- /dev/null +++ b/v1.1/docs/admin/multi-cluster.md @@ -0,0 +1,83 @@ +--- +layout: docwithnav +title: "Considerations for running multiple Kubernetes clusters" +--- + + + + + +# Considerations for running multiple Kubernetes clusters + +You may want to set up multiple Kubernetes clusters, both to +have clusters in different regions to be nearer to your users, and to tolerate failures and/or invasive maintenance. +This document describes some of the issues to consider when making a decision about doing so. + +Note that at present, +Kubernetes does not offer a mechanism to aggregate multiple clusters into a single virtual cluster. However, +we [plan to do this in the future](../proposals/federation.html). + +## Scope of a single cluster + +On IaaS providers such as Google Compute Engine or Amazon Web Services, a VM exists in a +[zone](https://cloud.google.com/compute/docs/zones) or [availability +zone](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html). +We suggest that all the VMs in a Kubernetes cluster should be in the same availability zone, because: + - compared to having a single global Kubernetes cluster, there are fewer single-points of failure + - compared to a cluster that spans availability zones, it is easier to reason about the availability properties of a + single-zone cluster. + - when the Kubernetes developers are designing the system (e.g. making assumptions about latency, bandwidth, or + correlated failures) they are assuming all the machines are in a single data center, or otherwise closely connected. + +It is okay to have multiple clusters per availability zone, though on balance we think fewer is better. +Reasons to prefer fewer clusters are: + - improved bin packing of Pods in some cases with more nodes in one cluster (less resource fragmentation) + - reduced operational overhead (though the advantage is diminished as ops tooling and processes matures) + - reduced costs for per-cluster fixed resource costs, e.g. apiserver VMs (but small as a percentage + of overall cluster cost for medium to large clusters). + +Reasons to have multiple clusters include: + - strict security policies requiring isolation of one class of work from another (but, see Partitioning Clusters + below). + - test clusters to canary new Kubernetes releases or other cluster software. + +## Selecting the right number of clusters + +The selection of the number of Kubernetes clusters may be a relatively static choice, only revisited occasionally. +By contrast, the number of nodes in a cluster and the number of pods in a service may be change frequently according to +load and growth. + +To pick the number of clusters, first, decide which regions you need to be in to have adequate latency to all your end users, for services that will run +on Kubernetes (if you use a Content Distribution Network, the latency requirements for the CDN-hosted content need not +be considered). Legal issues might influence this as well. For example, a company with a global customer base might decide to have clusters in US, EU, AP, and SA regions. +Call the number of regions to be in `R`. + +Second, decide how many clusters should be able to be unavailable at the same time, while still being available. Call +the number that can be unavailable `U`. If you are not sure, then 1 is a fine choice. + +If it is allowable for load-balancing to direct traffic to any region in the event of a cluster failure, then +you need `R + U` clusters. If it is not (e.g you want to ensure low latency for all users in the event of a +cluster failure), then you need to have `R * U` clusters (`U` in each of `R` regions). In any case, try to put each cluster in a different zone. + +Finally, if any of your clusters would need more than the maximum recommended number of nodes for a Kubernetes cluster, then +you may need even more clusters. Kubernetes v1.0 currently supports clusters up to 100 nodes in size, but we are targeting +1000-node clusters by early 2016. + +## Working with multiple clusters + +When you have multiple clusters, you would typically create services with the same config in each cluster and put each of those +service instances behind a load balancer (AWS Elastic Load Balancer, GCE Forwarding Rule or HTTP Load Balancer) spanning all of them, so that +failures of a single cluster are not visible to end users. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/multi-cluster.md?pixel)]() + + diff --git a/v1.1/docs/admin/namespaces.md b/v1.1/docs/admin/namespaces.md new file mode 100644 index 0000000000000..a30effd53f9c9 --- /dev/null +++ b/v1.1/docs/admin/namespaces.md @@ -0,0 +1,180 @@ +--- +layout: docwithnav +title: "Namespaces" +--- + + + + + +# Namespaces + +## Abstract + +A Namespace is a mechanism to partition resources created by users into +a logically named group. + +## Motivation + +A single cluster should be able to satisfy the needs of multiple users or groups of users (henceforth a 'user community'). + +Each user community wants to be able to work in isolation from other communities. + +Each user community has its own: + +1. resources (pods, services, replication controllers, etc.) +2. policies (who can or cannot perform actions in their community) +3. constraints (this community is allowed this much quota, etc.) + +A cluster operator may create a Namespace for each unique user community. + +The Namespace provides a unique scope for: + +1. named resources (to avoid basic naming collisions) +2. delegated management authority to trusted users +3. ability to limit community resource consumption + +## Use cases + +1. As a cluster operator, I want to support multiple user communities on a single cluster. +2. As a cluster operator, I want to delegate authority to partitions of the cluster to trusted users + in those communities. +3. As a cluster operator, I want to limit the amount of resources each community can consume in order + to limit the impact to other communities using the cluster. +4. As a cluster user, I want to interact with resources that are pertinent to my user community in + isolation of what other user communities are doing on the cluster. + + +## Usage + +Look [here](namespaces/) for an in depth example of namespaces. + +### Viewing namespaces + +You can list the current namespaces in a cluster using: + +{% highlight console %} +{% raw %} +$ kubectl get namespaces +NAME LABELS STATUS +default Active +kube-system Active +{% endraw %} +{% endhighlight %} + +Kubernetes starts with two initial namespaces: + * `default` The default namespace for objects with no other namespace + * `kube-system` The namespace for objects created by the Kubernetes system + +You can also get the summary of a specific namespace using: + +{% highlight console %} +{% raw %} +$ kubectl get namespaces +{% endraw %} +{% endhighlight %} + +Or you can get detailed information with: + +{% highlight console %} +{% raw %} +$ kubectl describe namespaces +Name: default +Labels: +Status: Active + +No resource quota. + +Resource Limits + Type Resource Min Max Default + ---- -------- --- --- --- + Container cpu - - 100m +{% endraw %} +{% endhighlight %} + +Note that these details show both resource quota (if present) as well as resource limit ranges. + +Resource quota tracks aggregate usage of resources in the *Namespace* and allows cluster operators +to define *Hard* resource usage limits that a *Namespace* may consume. + +A limit range defines min/max constraints on the amount of resources a single entity can consume in +a *Namespace*. + +See [Admission control: Limit Range](../design/admission_control_limit_range.html) + +A namespace can be in one of two phases: + * `Active` the namespace is in use + * `Terminating` the namespace is being deleted, and can not be used for new objects + +See the [design doc](../design/namespaces.html#phases) for more details. + +### Creating a new namespace + +To create a new namespace, first create a new YAML file called `my-namespace.yaml` with the contents: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Namespace +metadata: + name: +{% endraw %} +{% endhighlight %} + +Note that the name of your namespace must be a DNS compatible label. + +More information on the `finalizers` field can be found in the namespace [design doc](../design/namespaces.html#finalizers). + +Then run: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./my-namespace.yaml +{% endraw %} +{% endhighlight %} + +### Working in namespaces + +See [Setting the namespace for a request](../../docs/user-guide/namespaces.html#setting-the-namespace-for-a-request) +and [Setting the namespace preference](../../docs/user-guide/namespaces.html#setting-the-namespace-preference). + +### Deleting a namespace + +You can delete a namespace with + +{% highlight console %} +{% raw %} +$ kubectl delete namespaces +{% endraw %} +{% endhighlight %} + +**WARNING, this deletes _everything_ under the namespace!** + +This delete is asynchronous, so for a time you will see the namespace in the `Terminating` state. + +## Namespaces and DNS + +When you create a [Service](../../docs/user-guide/services.html), it creates a corresponding [DNS entry](dns.html). +This entry is of the form `..svc.cluster.local`, which means +that if a container just uses `` it will resolve to the service which +is local to a namespace. This is useful for using the same configuration across +multiple namespaces such as Development, Staging and Production. If you want to reach +across namespaces, you need to use the fully qualified domain name (FQDN). + +## Design + +Details of the design of namespaces in Kubernetes, including a [detailed example](../design/namespaces.html#example-openshift-origin-managing-a-kubernetes-namespace) +can be found in the [namespaces design doc](../design/namespaces.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/namespaces.md?pixel)]() + + diff --git a/v1.1/docs/admin/namespaces/README.md b/v1.1/docs/admin/namespaces/README.md new file mode 100644 index 0000000000000..b5fdc15e7f93c --- /dev/null +++ b/v1.1/docs/admin/namespaces/README.md @@ -0,0 +1,302 @@ +--- +layout: docwithnav +title: "Kubernetes Namespaces" +--- + + + + + +## Kubernetes Namespaces + +Kubernetes _[namespaces](../../../docs/admin/namespaces.html)_ help different projects, teams, or customers to share a Kubernetes cluster. + +It does this by providing the following: + +1. A scope for [Names](../../user-guide/identifiers.html). +2. A mechanism to attach authorization and policy to a subsection of the cluster. + +Use of multiple namespaces is optional. + +This example demonstrates how to use Kubernetes namespaces to subdivide your cluster. + +### Step Zero: Prerequisites + +This example assumes the following: + +1. You have an [existing Kubernetes cluster](../../getting-started-guides/). +2. You have a basic understanding of Kubernetes _[pods](../../user-guide/pods.html)_, _[services](../../user-guide/services.html)_, and _[replication controllers](../../user-guide/replication-controller.html)_. + +### Step One: Understand the default namespace + +By default, a Kubernetes cluster will instantiate a default namespace when provisioning the cluster to hold the default set of pods, +services, and replication controllers used by the cluster. + +Assuming you have a fresh cluster, you can introspect the available namespace's by doing the following: + +{% highlight console %} +{% raw %} +$ kubectl get namespaces +NAME LABELS +default +{% endraw %} +{% endhighlight %} + +### Step Two: Create new namespaces + +For this exercise, we will create two additional Kubernetes namespaces to hold our content. + +Let's imagine a scenario where an organization is using a shared Kubernetes cluster for development and production use cases. + +The development team would like to maintain a space in the cluster where they can get a view on the list of pods, services, and replication controllers +they use to build and run their application. In this space, Kubernetes resources come and go, and the restrictions on who can or cannot modify resources +are relaxed to enable agile development. + +The operations team would like to maintain a space in the cluster where they can enforce strict procedures on who can or cannot manipulate the set of +pods, services, and replication controllers that run the production site. + +One pattern this organization could follow is to partition the Kubernetes cluster into two namespaces: development and production. + +Let's create two new namespaces to hold our work. + +Use the file [`namespace-dev.json`](namespace-dev.json) which describes a development namespace: + + + +{% highlight json %} +{% raw %} +{ + "kind": "Namespace", + "apiVersion": "v1", + "metadata": { + "name": "development", + "labels": { + "name": "development" + } + } +} +{% endraw %} +{% endhighlight %} + +[Download example](namespace-dev.json) + + +Create the development namespace using kubectl. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/namespaces/namespace-dev.json +{% endraw %} +{% endhighlight %} + +And then lets create the production namespace using kubectl. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/namespaces/namespace-prod.json +{% endraw %} +{% endhighlight %} + +To be sure things are right, let's list all of the namespaces in our cluster. + +{% highlight console %} +{% raw %} +$ kubectl get namespaces +NAME LABELS STATUS +default Active +development name=development Active +production name=production Active +{% endraw %} +{% endhighlight %} + + +### Step Three: Create pods in each namespace + +A Kubernetes namespace provides the scope for pods, services, and replication controllers in the cluster. + +Users interacting with one namespace do not see the content in another namespace. + +To demonstrate this, let's spin up a simple replication controller and pod in the development namespace. + +We first check what is the current context: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: REDACTED + server: https://130.211.122.180 + name: lithe-cocoa-92103_kubernetes +contexts: +- context: + cluster: lithe-cocoa-92103_kubernetes + user: lithe-cocoa-92103_kubernetes + name: lithe-cocoa-92103_kubernetes +current-context: lithe-cocoa-92103_kubernetes +kind: Config +preferences: {} +users: +- name: lithe-cocoa-92103_kubernetes + user: + client-certificate-data: REDACTED + client-key-data: REDACTED + token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b +- name: lithe-cocoa-92103_kubernetes-basic-auth + user: + password: h5M0FtUUIflBSdI7 + username: admin +{% endraw %} +{% endhighlight %} + +The next step is to define a context for the kubectl client to work in each namespace. The value of "cluster" and "user" fields are copied from the current context. + +{% highlight console %} +{% raw %} +$ kubectl config set-context dev --namespace=development --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes +$ kubectl config set-context prod --namespace=production --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes +{% endraw %} +{% endhighlight %} + +The above commands provided two request contexts you can alternate against depending on what namespace you +wish to work against. + +Let's switch to operate in the development namespace. + +{% highlight console %} +{% raw %} +$ kubectl config use-context dev +{% endraw %} +{% endhighlight %} + +You can verify your current context by doing the following: + +{% highlight console %} +{% raw %} +$ kubectl config view +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: REDACTED + server: https://130.211.122.180 + name: lithe-cocoa-92103_kubernetes +contexts: +- context: + cluster: lithe-cocoa-92103_kubernetes + namespace: development + user: lithe-cocoa-92103_kubernetes + name: dev +- context: + cluster: lithe-cocoa-92103_kubernetes + user: lithe-cocoa-92103_kubernetes + name: lithe-cocoa-92103_kubernetes +- context: + cluster: lithe-cocoa-92103_kubernetes + namespace: production + user: lithe-cocoa-92103_kubernetes + name: prod +current-context: dev +kind: Config +preferences: {} +users: +- name: lithe-cocoa-92103_kubernetes + user: + client-certificate-data: REDACTED + client-key-data: REDACTED + token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b +- name: lithe-cocoa-92103_kubernetes-basic-auth + user: + password: h5M0FtUUIflBSdI7 + username: admin +{% endraw %} +{% endhighlight %} + +At this point, all requests we make to the Kubernetes cluster from the command line are scoped to the development namespace. + +Let's create some content. + +{% highlight console %} +{% raw %} +$ kubectl run snowflake --image=kubernetes/serve_hostname --replicas=2 +{% endraw %} +{% endhighlight %} + +We have just created a replication controller whose replica size is 2 that is running the pod called snowflake with a basic container that just serves the hostname. + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +snowflake snowflake kubernetes/serve_hostname run=snowflake 2 + +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +snowflake-8w0qn 1/1 Running 0 22s +snowflake-jrpzb 1/1 Running 0 22s +{% endraw %} +{% endhighlight %} + +And this is great, developers are able to do what they want, and they do not have to worry about affecting content in the production namespace. + +Let's switch to the production namespace and show how resources in one namespace are hidden from the other. + +{% highlight console %} +{% raw %} +$ kubectl config use-context prod +{% endraw %} +{% endhighlight %} + +The production namespace should be empty. + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS + +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +{% endraw %} +{% endhighlight %} + +Production likes to run cattle, so let's create some cattle pods. + +{% highlight console %} +{% raw %} +$ kubectl run cattle --image=kubernetes/serve_hostname --replicas=5 + +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +cattle cattle kubernetes/serve_hostname run=cattle 5 + +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +cattle-97rva 1/1 Running 0 12s +cattle-i9ojn 1/1 Running 0 12s +cattle-qj3yv 1/1 Running 0 12s +cattle-yc7vn 1/1 Running 0 12s +cattle-zz7ea 1/1 Running 0 12s +{% endraw %} +{% endhighlight %} + +At this point, it should be clear that the resources users create in one namespace are hidden from the other namespace. + +As the policy support in Kubernetes evolves, we will extend this scenario to show how you can provide different +authorization rules for each namespace. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/namespaces/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/namespaces/index.md b/v1.1/docs/admin/namespaces/index.md new file mode 100644 index 0000000000000..b5fdc15e7f93c --- /dev/null +++ b/v1.1/docs/admin/namespaces/index.md @@ -0,0 +1,302 @@ +--- +layout: docwithnav +title: "Kubernetes Namespaces" +--- + + + + + +## Kubernetes Namespaces + +Kubernetes _[namespaces](../../../docs/admin/namespaces.html)_ help different projects, teams, or customers to share a Kubernetes cluster. + +It does this by providing the following: + +1. A scope for [Names](../../user-guide/identifiers.html). +2. A mechanism to attach authorization and policy to a subsection of the cluster. + +Use of multiple namespaces is optional. + +This example demonstrates how to use Kubernetes namespaces to subdivide your cluster. + +### Step Zero: Prerequisites + +This example assumes the following: + +1. You have an [existing Kubernetes cluster](../../getting-started-guides/). +2. You have a basic understanding of Kubernetes _[pods](../../user-guide/pods.html)_, _[services](../../user-guide/services.html)_, and _[replication controllers](../../user-guide/replication-controller.html)_. + +### Step One: Understand the default namespace + +By default, a Kubernetes cluster will instantiate a default namespace when provisioning the cluster to hold the default set of pods, +services, and replication controllers used by the cluster. + +Assuming you have a fresh cluster, you can introspect the available namespace's by doing the following: + +{% highlight console %} +{% raw %} +$ kubectl get namespaces +NAME LABELS +default +{% endraw %} +{% endhighlight %} + +### Step Two: Create new namespaces + +For this exercise, we will create two additional Kubernetes namespaces to hold our content. + +Let's imagine a scenario where an organization is using a shared Kubernetes cluster for development and production use cases. + +The development team would like to maintain a space in the cluster where they can get a view on the list of pods, services, and replication controllers +they use to build and run their application. In this space, Kubernetes resources come and go, and the restrictions on who can or cannot modify resources +are relaxed to enable agile development. + +The operations team would like to maintain a space in the cluster where they can enforce strict procedures on who can or cannot manipulate the set of +pods, services, and replication controllers that run the production site. + +One pattern this organization could follow is to partition the Kubernetes cluster into two namespaces: development and production. + +Let's create two new namespaces to hold our work. + +Use the file [`namespace-dev.json`](namespace-dev.json) which describes a development namespace: + + + +{% highlight json %} +{% raw %} +{ + "kind": "Namespace", + "apiVersion": "v1", + "metadata": { + "name": "development", + "labels": { + "name": "development" + } + } +} +{% endraw %} +{% endhighlight %} + +[Download example](namespace-dev.json) + + +Create the development namespace using kubectl. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/namespaces/namespace-dev.json +{% endraw %} +{% endhighlight %} + +And then lets create the production namespace using kubectl. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/namespaces/namespace-prod.json +{% endraw %} +{% endhighlight %} + +To be sure things are right, let's list all of the namespaces in our cluster. + +{% highlight console %} +{% raw %} +$ kubectl get namespaces +NAME LABELS STATUS +default Active +development name=development Active +production name=production Active +{% endraw %} +{% endhighlight %} + + +### Step Three: Create pods in each namespace + +A Kubernetes namespace provides the scope for pods, services, and replication controllers in the cluster. + +Users interacting with one namespace do not see the content in another namespace. + +To demonstrate this, let's spin up a simple replication controller and pod in the development namespace. + +We first check what is the current context: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: REDACTED + server: https://130.211.122.180 + name: lithe-cocoa-92103_kubernetes +contexts: +- context: + cluster: lithe-cocoa-92103_kubernetes + user: lithe-cocoa-92103_kubernetes + name: lithe-cocoa-92103_kubernetes +current-context: lithe-cocoa-92103_kubernetes +kind: Config +preferences: {} +users: +- name: lithe-cocoa-92103_kubernetes + user: + client-certificate-data: REDACTED + client-key-data: REDACTED + token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b +- name: lithe-cocoa-92103_kubernetes-basic-auth + user: + password: h5M0FtUUIflBSdI7 + username: admin +{% endraw %} +{% endhighlight %} + +The next step is to define a context for the kubectl client to work in each namespace. The value of "cluster" and "user" fields are copied from the current context. + +{% highlight console %} +{% raw %} +$ kubectl config set-context dev --namespace=development --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes +$ kubectl config set-context prod --namespace=production --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes +{% endraw %} +{% endhighlight %} + +The above commands provided two request contexts you can alternate against depending on what namespace you +wish to work against. + +Let's switch to operate in the development namespace. + +{% highlight console %} +{% raw %} +$ kubectl config use-context dev +{% endraw %} +{% endhighlight %} + +You can verify your current context by doing the following: + +{% highlight console %} +{% raw %} +$ kubectl config view +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: REDACTED + server: https://130.211.122.180 + name: lithe-cocoa-92103_kubernetes +contexts: +- context: + cluster: lithe-cocoa-92103_kubernetes + namespace: development + user: lithe-cocoa-92103_kubernetes + name: dev +- context: + cluster: lithe-cocoa-92103_kubernetes + user: lithe-cocoa-92103_kubernetes + name: lithe-cocoa-92103_kubernetes +- context: + cluster: lithe-cocoa-92103_kubernetes + namespace: production + user: lithe-cocoa-92103_kubernetes + name: prod +current-context: dev +kind: Config +preferences: {} +users: +- name: lithe-cocoa-92103_kubernetes + user: + client-certificate-data: REDACTED + client-key-data: REDACTED + token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b +- name: lithe-cocoa-92103_kubernetes-basic-auth + user: + password: h5M0FtUUIflBSdI7 + username: admin +{% endraw %} +{% endhighlight %} + +At this point, all requests we make to the Kubernetes cluster from the command line are scoped to the development namespace. + +Let's create some content. + +{% highlight console %} +{% raw %} +$ kubectl run snowflake --image=kubernetes/serve_hostname --replicas=2 +{% endraw %} +{% endhighlight %} + +We have just created a replication controller whose replica size is 2 that is running the pod called snowflake with a basic container that just serves the hostname. + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +snowflake snowflake kubernetes/serve_hostname run=snowflake 2 + +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +snowflake-8w0qn 1/1 Running 0 22s +snowflake-jrpzb 1/1 Running 0 22s +{% endraw %} +{% endhighlight %} + +And this is great, developers are able to do what they want, and they do not have to worry about affecting content in the production namespace. + +Let's switch to the production namespace and show how resources in one namespace are hidden from the other. + +{% highlight console %} +{% raw %} +$ kubectl config use-context prod +{% endraw %} +{% endhighlight %} + +The production namespace should be empty. + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS + +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +{% endraw %} +{% endhighlight %} + +Production likes to run cattle, so let's create some cattle pods. + +{% highlight console %} +{% raw %} +$ kubectl run cattle --image=kubernetes/serve_hostname --replicas=5 + +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +cattle cattle kubernetes/serve_hostname run=cattle 5 + +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +cattle-97rva 1/1 Running 0 12s +cattle-i9ojn 1/1 Running 0 12s +cattle-qj3yv 1/1 Running 0 12s +cattle-yc7vn 1/1 Running 0 12s +cattle-zz7ea 1/1 Running 0 12s +{% endraw %} +{% endhighlight %} + +At this point, it should be clear that the resources users create in one namespace are hidden from the other namespace. + +As the policy support in Kubernetes evolves, we will extend this scenario to show how you can provide different +authorization rules for each namespace. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/namespaces/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/namespaces/namespace-dev.json b/v1.1/docs/admin/namespaces/namespace-dev.json new file mode 100644 index 0000000000000..b2b43b0b73294 --- /dev/null +++ b/v1.1/docs/admin/namespaces/namespace-dev.json @@ -0,0 +1,10 @@ +{ + "kind": "Namespace", + "apiVersion": "v1", + "metadata": { + "name": "development", + "labels": { + "name": "development" + } + } +} diff --git a/v1.1/docs/admin/namespaces/namespace-prod.json b/v1.1/docs/admin/namespaces/namespace-prod.json new file mode 100644 index 0000000000000..d4503f1ac12cb --- /dev/null +++ b/v1.1/docs/admin/namespaces/namespace-prod.json @@ -0,0 +1,10 @@ +{ + "kind": "Namespace", + "apiVersion": "v1", + "metadata": { + "name": "production", + "labels": { + "name": "production" + } + } +} diff --git a/v1.1/docs/admin/networking.md b/v1.1/docs/admin/networking.md new file mode 100644 index 0000000000000..d4ae37b6017cb --- /dev/null +++ b/v1.1/docs/admin/networking.md @@ -0,0 +1,223 @@ +--- +layout: docwithnav +title: "Networking in Kubernetes" +--- + + + + + +# Networking in Kubernetes + +**Table of Contents** + + +- [Networking in Kubernetes](#networking-in-kubernetes) + - [Summary](#summary) + - [Docker model](#docker-model) + - [Kubernetes model](#kubernetes-model) + - [How to achieve this](#how-to-achieve-this) + - [Google Compute Engine (GCE)](#google-compute-engine-gce) + - [L2 networks and linux bridging](#l2-networks-and-linux-bridging) + - [Flannel](#flannel) + - [OpenVSwitch](#openvswitch) + - [Weave](#weave) + - [Calico](#calico) + - [Other reading](#other-reading) + + + +Kubernetes approaches networking somewhat differently than Docker does by +default. There are 4 distinct networking problems to solve: +1. Highly-coupled container-to-container communications: this is solved by + [pods](../user-guide/pods.html) and `localhost` communications. +2. Pod-to-Pod communications: this is the primary focus of this document. +3. Pod-to-Service communications: this is covered by [services](../user-guide/services.html). +4. External-to-Service communications: this is covered by [services](../user-guide/services.html). + +## Summary + +Kubernetes assumes that pods can communicate with other pods, regardless of +which host they land on. We give every pod its own IP address so you do not +need to explicitly create links between pods and you almost never need to deal +with mapping container ports to host ports. This creates a clean, +backwards-compatible model where pods can be treated much like VMs or physical +hosts from the perspectives of port allocation, naming, service discovery, load +balancing, application configuration, and migration. + +To achieve this we must impose some requirements on how you set up your cluster +networking. + +## Docker model + +Before discussing the Kubernetes approach to networking, it is worthwhile to +review the "normal" way that networking works with Docker. By default, Docker +uses host-private networking. It creates a virtual bridge, called `docker0` by +default, and allocates a subnet from one of the private address blocks defined +in [RFC1918](https://tools.ietf.org/html/rfc1918) for that bridge. For each +container that Docker creates, it allocates a virtual ethernet device (called +`veth`) which is attached to the bridge. The veth is mapped to appear as `eth0` +in the container, using Linux namespaces. The in-container `eth0` interface is +given an IP address from the bridge's address range. + +The result is that Docker containers can talk to other containers only if they +are on the same machine (and thus the same virtual bridge). Containers on +different machines can not reach each other - in fact they may end up with the +exact same network ranges and IP addresses. + +In order for Docker containers to communicate across nodes, they must be +allocated ports on the machine's own IP address, which are then forwarded or +proxied to the containers. This obviously means that containers must either +coordinate which ports they use very carefully or else be allocated ports +dynamically. + +## Kubernetes model + +Coordinating ports across multiple developers is very difficult to do at +scale and exposes users to cluster-level issues outside of their control. +Dynamic port allocation brings a lot of complications to the system - every +application has to take ports as flags, the API servers have to know how to +insert dynamic port numbers into configuration blocks, services have to know +how to find each other, etc. Rather than deal with this, Kubernetes takes a +different approach. + +Kubernetes imposes the following fundamental requirements on any networking +implementation (barring any intentional network segmentation policies): + * all containers can communicate with all other containers without NAT + * all nodes can communicate with all containers (and vice-versa) without NAT + * the IP that a container sees itself as is the same IP that others see it as + +What this means in practice is that you can not just take two computers +running Docker and expect Kubernetes to work. You must ensure that the +fundamental requirements are met. + +This model is not only less complex overall, but it is principally compatible +with the desire for Kubernetes to enable low-friction porting of apps from VMs +to containers. If your job previously ran in a VM, your VM had an IP and could +talk to other VMs in your project. This is the same basic model. + +Until now this document has talked about containers. In reality, Kubernetes +applies IP addresses at the `Pod` scope - containers within a `Pod` share their +network namespaces - including their IP address. This means that containers +within a `Pod` can all reach each other’s ports on `localhost`. This does imply +that containers within a `Pod` must coordinate port usage, but this is no +different than processes in a VM. We call this the "IP-per-pod" model. This +is implemented in Docker as a "pod container" which holds the network namespace +open while "app containers" (the things the user specified) join that namespace +with Docker's `--net=container:` function. + +As with Docker, it is possible to request host ports, but this is reduced to a +very niche operation. In this case a port will be allocated on the host `Node` +and traffic will be forwarded to the `Pod`. The `Pod` itself is blind to the +existence or non-existence of host ports. + +## How to achieve this + +There are a number of ways that this network model can be implemented. This +document is not an exhaustive study of the various methods, but hopefully serves +as an introduction to various technologies and serves as a jumping-off point. +If some techniques become vastly preferable to others, we might detail them more +here. + +### Google Compute Engine (GCE) + +For the Google Compute Engine cluster configuration scripts, we use [advanced +routing](https://developers.google.com/compute/docs/networking#routing) to +assign each VM a subnet (default is `/24` - 254 IPs). Any traffic bound for that +subnet will be routed directly to the VM by the GCE network fabric. This is in +addition to the "main" IP address assigned to the VM, which is NAT'ed for +outbound internet access. A linux bridge (called `cbr0`) is configured to exist +on that subnet, and is passed to docker's `--bridge` flag. + +We start Docker with: + +{% highlight sh %} +{% raw %} + DOCKER_OPTS="--bridge=cbr0 --iptables=false --ip-masq=false" +{% endraw %} +{% endhighlight %} + +This bridge is created by Kubelet (controlled by the `--configure-cbr0=true` +flag) according to the `Node`'s `spec.podCIDR`. + +Docker will now allocate IPs from the `cbr-cidr` block. Containers can reach +each other and `Nodes` over the `cbr0` bridge. Those IPs are all routable +within the GCE project network. + +GCE itself does not know anything about these IPs, though, so it will not NAT +them for outbound internet traffic. To achieve that we use an iptables rule to +masquerade (aka SNAT - to make it seem as if packets came from the `Node` +itself) traffic that is bound for IPs outside the GCE project network +(10.0.0.0/8). + +{% highlight sh %} +{% raw %} +iptables -t nat -A POSTROUTING ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE +{% endraw %} +{% endhighlight %} + +Lastly we enable IP forwarding in the kernel (so the kernel will process +packets for bridged containers): + +{% highlight sh %} +{% raw %} +sysctl net.ipv4.ip_forward=1 +{% endraw %} +{% endhighlight %} + +The result of all this is that all `Pods` can reach each other and can egress +traffic to the internet. + +### L2 networks and linux bridging + +If you have a "dumb" L2 network, such as a simple switch in a "bare-metal" +environment, you should be able to do something similar to the above GCE setup. +Note that these instructions have only been tried very casually - it seems to +work, but has not been thoroughly tested. If you use this technique and +perfect the process, please let us know. + +Follow the "With Linux Bridge devices" section of [this very nice +tutorial](http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/) from +Lars Kellogg-Stedman. + +### Flannel + +[Flannel](https://github.com/coreos/flannel#flannel) is a very simple overlay +network that satisfies the Kubernetes requirements. It installs in minutes and +should get you up and running if the above techniques are not working. Many +people have reported success with Flannel and Kubernetes. + +### OpenVSwitch + +[OpenVSwitch](ovs-networking.html) is a somewhat more mature but also +complicated way to build an overlay network. This is endorsed by several of the +"Big Shops" for networking. + +### Weave + +[Weave](https://github.com/zettio/weave) is yet another way to build an overlay +network, primarily aiming at Docker integration. + +### Calico + +[Calico](https://github.com/Metaswitch/calico) uses BGP to enable real container +IPs. + +## Other reading + +The early design of the networking model and its rationale, and some future +plans are described in more detail in the [networking design +document](../design/networking.html). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/networking.md?pixel)]() + + diff --git a/v1.1/docs/admin/node.md b/v1.1/docs/admin/node.md new file mode 100644 index 0000000000000..e296041cf9636 --- /dev/null +++ b/v1.1/docs/admin/node.md @@ -0,0 +1,257 @@ +--- +layout: docwithnav +title: "Node" +--- + + + + + +# Node + +**Table of Contents** + + +- [Node](#node) + - [What is a node?](#what-is-a-node) + - [Node Status](#node-status) + - [Node Addresses](#node-addresses) + - [Node Phase](#node-phase) + - [Node Condition](#node-condition) + - [Node Capacity](#node-capacity) + - [Node Info](#node-info) + - [Node Management](#node-management) + - [Node Controller](#node-controller) + - [Self-Registration of Nodes](#self-registration-of-nodes) + - [Manual Node Administration](#manual-node-administration) + - [Node capacity](#node-capacity) + - [API Object](#api-object) + + + +## What is a node? + +`Node` is a worker machine in Kubernetes, previously known as `Minion`. Node +may be a VM or physical machine, depending on the cluster. Each node has +the services necessary to run [Pods](../user-guide/pods.html) and is managed by the master +components. The services on a node include docker, kubelet and network proxy. See +[The Kubernetes Node](../design/architecture.html#the-kubernetes-node) section in the +architecture design doc for more details. + +## Node Status + +Node status describes current status of a node. For now, there are the following +pieces of information: + +### Node Addresses + +The usage of these fields varies depending on your cloud provider or bare metal configuration. + +* HostName: Generally not used + +* ExternalIP: Generally the IP address of the node that is externally routable (available from outside the cluster) + +* InternalIP: Generally the IP address of the node that is routable only within the cluster + + +### Node Phase + +Node Phase is the current lifecycle phase of node, one of `Pending`, +`Running` and `Terminated`. + +* Pending: New nodes are created in this state. A node stays in this state until it is configured. + +* Running: Node has been configured and the Kubernetes components are running + +* Terminated: Node has been removed from the cluster. It will not receive any scheduling requests, +and any running pods will be removed from the node. + +Node with `Running` phase is necessary but not sufficient requirement for +scheduling Pods. For a node to be considered a scheduling candidate, it +must have appropriate conditions, see below. + +### Node Condition + +Node Condition describes the conditions of `Running` nodes. Currently the only +node condition is Ready. The Status of this condition can be True, False, or +Unknown. True means the Kubelet is healthy and ready to accept pods. +False means the Kubelet is not healthy and is not accepting pods. Unknown +means the Node Controller, which manages node lifecycle and is responsible for +setting the Status of the condition, has not heard from the +node recently (currently 40 seconds). +Node condition is represented as a json object. For example, +the following conditions mean the node is in sane state: + +{% highlight json %} +{% raw %} +"conditions": [ + { + "kind": "Ready", + "status": "True", + }, +] +{% endraw %} +{% endhighlight %} + +If the Status of the Ready condition +is Unknown or False for more than five minutes, then all of the Pods on the node are terminated by the Node Controller. + +### Node Capacity + +Describes the resources available on the node: CPUs, memory and the maximum +number of pods that can be scheduled onto the node. + +### Node Info + +General information about the node, for instance kernel version, Kubernetes version +(kubelet version, kube-proxy version), docker version (if used), OS name. +The information is gathered by Kubelet from the node. + +## Node Management + +Unlike [Pods](../user-guide/pods.html) and [Services](../user-guide/services.html), a Node is not inherently +created by Kubernetes: it is either taken from cloud providers like Google Compute Engine, +or from your pool of physical or virtual machines. What this means is that when +Kubernetes creates a node, it is really just creating an object that represents the node in its internal state. +After creation, Kubernetes will check whether the node is valid or not. +For example, if you try to create a node from the following content: + +{% highlight json %} +{% raw %} +{ + "kind": "Node", + "apiVersion": "v1", + "metadata": { + "name": "10.240.79.157", + "labels": { + "name": "my-first-k8s-node" + } + } +} +{% endraw %} +{% endhighlight %} + +Kubernetes will create a Node object internally (the representation), and +validate the node by health checking based on the `metadata.name` field: we +assume `metadata.name` can be resolved. If the node is valid, i.e. all necessary +services are running, it is eligible to run a Pod; otherwise, it will be +ignored for any cluster activity, until it becomes valid. Note that Kubernetes +will keep the object for the invalid node unless it is explicitly deleted by the client, and it will keep +checking to see if it becomes valid. + +Currently, there are three components that interact with the Kubernetes node interface: Node Controller, Kubelet, and kubectl. + +### Node Controller + +Node controller is a component in Kubernetes master which manages Node +objects. It performs two major functions: cluster-wide node synchronization +and single node life-cycle management. + +Node controller has a sync loop that creates/deletes Nodes from Kubernetes +based on all matching VM instances listed from the cloud provider. The sync period +can be controlled via flag `--node-sync-period`. If a new VM instance +gets created, Node Controller creates a representation for it. If an existing +instance gets deleted, Node Controller deletes the representation. Note however, +that Node Controller is unable to provision the node for you, i.e. it won't install +any binary; therefore, to +join a node to a Kubernetes cluster, you as an admin need to make sure proper services are +running in the node. In the future, we plan to automatically provision some node +services. + +### Self-Registration of Nodes + +When kubelet flag `--register-node` is true (the default), the kubelet will attempt to +register itself with the API server. This is the preferred pattern, used by most distros. + +For self-registration, the kubelet is started with the following options: + - `--api-servers=` tells the kubelet the location of the apiserver. + - `--kubeconfig` tells kubelet where to find credentials to authenticate itself to the apiserver. + - `--cloud-provider=` tells the kubelet how to talk to a cloud provider to read metadata about itself. + - `--register-node` tells the kubelet to create its own node resource. + +Currently, any kubelet is authorized to create/modify any node resource, but in practice it only creates/modifies +its own. (In the future, we plan to limit authorization to only allow a kubelet to modify its own Node resource.) + +#### Manual Node Administration + +A cluster administrator can create and modify Node objects. + +If the administrator wishes to create node objects manually, set kubelet flag +`--register-node=false`. + +The administrator can modify Node resources (regardless of the setting of `--register-node`). +Modifications include setting labels on the Node, and marking it unschedulable. + +Labels on nodes can be used in conjunction with node selectors on pods to control scheduling, +e.g. to constrain a Pod to only be eligible to run on a subset of the nodes. + +Making a node unscheduleable will prevent new pods from being scheduled to that +node, but will not affect any existing pods on the node. This is useful as a +preparatory step before a node reboot, etc. For example, to mark a node +unschedulable, run this command: + +{% highlight sh %} +{% raw %} +kubectl replace nodes 10.1.2.3 --patch='{"apiVersion": "v1", "unschedulable": true}' +{% endraw %} +{% endhighlight %} + +Note that pods which are created by a daemonSet controller bypass the Kubernetes scheduler, +and do not respect the unschedulable attribute on a node. The assumption is that daemons belong on +the machine even if it is being drained of applications in preparation for a reboot. + +### Node capacity + +The capacity of the node (number of cpus and amount of memory) is part of the node resource. +Normally, nodes register themselves and report their capacity when creating the node resource. If +you are doing [manual node administration](#manual-node-administration), then you need to set node +capacity when adding a node. + +The Kubernetes scheduler ensures that there are enough resources for all the pods on a node. It +checks that the sum of the limits of containers on the node is no greater than the node capacity. It +includes all containers started by kubelet, but not containers started directly by docker, nor +processes not in containers. + +If you want to explicitly reserve resources for non-Pod processes, you can create a placeholder +pod. Use the following template: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: resource-reserver +spec: + containers: + - name: sleep-forever + image: gcr.io/google_containers/pause:0.8.0 + resources: + limits: + cpu: 100m + memory: 100Mi +{% endraw %} +{% endhighlight %} + +Set the `cpu` and `memory` values to the amount of resources you want to reserve. +Place the file in the manifest directory (`--config=DIR` flag of kubelet). Do this +on each kubelet where you want to reserve resources. + + +## API Object + +Node is a top-level resource in the kubernetes REST API. More details about the +API object can be found at: [Node API +object](http://kubernetes.io/v1.1/docs/api-reference/v1/definitions.html#_v1_node). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/node.md?pixel)]() + + diff --git a/v1.1/docs/admin/ovs-networking.md b/v1.1/docs/admin/ovs-networking.md new file mode 100644 index 0000000000000..1f054c2314c62 --- /dev/null +++ b/v1.1/docs/admin/ovs-networking.md @@ -0,0 +1,36 @@ +--- +layout: docwithnav +title: "Kubernetes OpenVSwitch GRE/VxLAN networking" +--- + + + + + +# Kubernetes OpenVSwitch GRE/VxLAN networking + +This document describes how OpenVSwitch is used to setup networking between pods across nodes. +The tunnel type could be GRE or VxLAN. VxLAN is preferable when large scale isolation needs to be performed within the network. + +![ovs-networking](ovs-networking.png "OVS Networking") + +The vagrant setup in Kubernetes does the following: + +The docker bridge is replaced with a brctl generated linux bridge (kbr0) with a 256 address space subnet. Basically, a node gets 10.244.x.0/24 subnet and docker is configured to use that bridge instead of the default docker0 bridge. + +Also, an OVS bridge is created(obr0) and added as a port to the kbr0 bridge. All OVS bridges across all nodes are linked with GRE tunnels. So, each node has an outgoing GRE tunnel to all other nodes. It does not need to be a complete mesh really, just meshier the better. STP (spanning tree) mode is enabled in the bridges to prevent loops. + +Routing rules enable any 10.244.0.0/16 target to become reachable via the OVS bridge connected with the tunnels. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/ovs-networking.md?pixel)]() + + diff --git a/v1.1/docs/admin/ovs-networking.png b/v1.1/docs/admin/ovs-networking.png new file mode 100755 index 0000000000000000000000000000000000000000..172161bd0bc86b89a151d84043656db74134089a GIT binary patch literal 105445 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

          jwj@&+>QVOc|n4*$KRQ5I7p zp$6FY#iu7iIAa-{1JEQNzUZ%MdsMUYN;w_0>(1UCZLyhG2h=I>OFjqIcQ*ytwLjUv zI)Yc7jv}zQ-u+Ty$%(|^4(3eQ&PdT9n>g=66w#L!as#NJCfS}#rR_bOhKLt>f$iNr zTeYR8*|Z0ZgC;`#Go0DUie|X>bJLlIU>tWBvJ@?EtGuJiGa|57$K9cC)QALvuH^se<<*9n2%c_4;FrUBH zd(^AXIU;jKLvPeb4HdA429ZL5g6|4k0DrW9^6B14&E6AI70XCS_w z{ss=W`87QH%zs(0Ly3z!b#Pewq_8C~|HMuuJuA(!&?t_5(^{3ksr9vGJ4w`RFU%T! z6^B2WSD2k^r>bu4i@P@2HL2+WZPcu!^j9oXdTAb$RCb`&iY`{zKJ6gZQxJK}#M7@J z++rMK@~_;57w@iZ5hM6rrV3$-ck_0!jI09J#r&=-pRY8R?zLCbrlq>w;^xMA>&PN3 zqh`UrUv*16>9Fk@Rl`7mh5xD*7W3lwy<^>YiU&@6J ztp^MD)c@BTEpeHmYurEv#qJZba5W!K}e;`kdaxt3ocR9IXk1MYsu^PpJS^XMYdwbd6Vy6}FoKO}Jz5Z(Sl+b=Zy-11^rk4m zde$@(EGD{7MKmWclOTzKggNE1v`sly>9M5;RtINK{IL;riScGoPl!%kpQL!=SUkkw zy59Bc#5Y>9GaNGZnz{V4FxgloF=Q>$DTbmU+MTF`@uv&L(#11x;U9DrAsvtZ^cC

          PX8Fy`6 zQPf&ZaREP$S0wf;cOr``^@-fJiOLD3wgMeJj93ZxIP{C8i+P?1ag%ttZ_w|tU`ofO z-E6z>qqp3|j`Q;=pN3*(ohV@s0&5=FIhqpl0ulK|H;lRMk6zGKMJUsTMw4BbB8|LV z>t8`N8kdT@m=uWP_qL*g$=|WXw&WN4`dfUYh$jm{zhuL~ZVEEkXpO{)*6c>lCPh59 z&fR(ya`i&Td5~0MVs;B^>d-#YnzU`D=bOv!v97PE9*%E-f{x?rb{)N` znf3h_%klfB`cGb9pUK~Cx3PG2{rQ-E4T4qmGr~}Z;`~4p zm6nR{jK-`j+6L)_7=T+2))?Wfi!ls4?3812^4-*yJM`+{!od>WS4pSEoBbpBT5N)0 zdHAdsCoJ1ZV-+y!$0CZe}SIU(H+(u%Wck zdIy10q-jH60(BLqTwb9cO9dXWTiAJUX8A^-K)<}e|Gek_=s>HBE^7sIiA17L3LaW< z%^I^)u9i-#mP)IUN|P|f@=U<53+}V&HsN-MlLH4@79u|uF&goZE#tJy>l;R1mJ&z? zh9<0c&?hkwq8#H+x0$cIJ-sOKWOO?HT?0B77OqbvTJ!HG-E3?c9g+GnT%BE)a_dP^ z)HFH(6(#G7Mpu^Tprnxnb;%~WfBltsjFkZ*sHTM77&}?@49vq`OXIVNkvgozu(N1e zs`|c2jY?==^~OkvldXP-2H5U59r)EFSKZSAHzEGYv9fjfl~QeET4MVc!k=cpw@mhh z_rI8vYr&1%As0U>-KKWVubRhrQsT}-KE@_DTsJ?yi>c3^i-f084E?KhHA!Qqip=<^Xtd1Stmi6r|C<_|*4f%wj>w{lCXZr( zp0R_V@dCO}YI@^kifad6%g|!lI)b+F3XJp%wYxoiu12`-mKKbdPUO%*osdx_D^$5m zPJb?l3zPU1T#R68#05UYRVS6GYeOzCpy9j}itgybMVffK+p~|jgS#$>)_t~P7mX^j z;m*o$2>)sHnnCN;H!-Pa^mH{qQuw9lc1iNiu_z=ulQjS5^j6R877YzUm~~x}xW5%M zPW|+;vTrg3cyc^7Wq3jEOskwe^U5Hy!JXWcM-Rm5Vv_2ufnmzfcavV|y}R=gc!IdJUuFKx)S;eof%dH&3s@`yo9FfT3j@ALcR!?2WQt;% zq2$ob`Aa?`Sk2%!Hl$Rfd#1y5=5Eq|vWMjX_$&!VVy`3vQ8v6}osw6hgw^}Izuimh{8nE5O2q@{3^Tmc6I5b zXaMI3Myr0ehwwr!kX!A1`L#@B%%AeTk2455x&qQ#zkj=h=QU`XnzW+1e=a(c&@)^; zTLo;S0y-%RxZ&`H^bUoJK|HfCa(J$+zz(S8E zvtXQIC#BfdzhU_02wb68%h-`Ndg4#5+o*8rc}?Gi`eu=T>iTQM?1}+&e3zrStyHhR zB`JVHR=&tglM70N*PBeWa$LVhU5Kya@t1wW3#4-r&LW2$q8_7y`ldv!@X?9UiID;5 z=0l(2R+vH6w~9-mY;3%Ra~nGP`^FLZ{sGMKfzX~<66D(zf|r2NkRrPD*!g0k-!%RZ zH>l6W0-Yuhf|L^K-$9a}(Zym!ye<3uH;U2nabU0|9*G66BZz(el^?j ztRhT$e%k@c*DvKr=YYEgAs$yuR9BKc?L~3`69yqjE8bRl?$hCv5x3qTO7TxZy7|d`&wc5%h7OW` zE&aHgTdPA(BV5DTqHg+R&Q7FCS|K!pC#B{CP(OYS%lbyU9N1xNTNk%PN0ro~M#S^PX?N58cc}V4?s_I5^ zGUV558!i;^K)P)OgE( zJE`jL9J>lDU<0uHo}Rj+tX19oX6|M4zpwbTNGw<~ZVH^oMIm#@IxiIF*`bkmrpK1A znp(QaZH5nTUT?zb>6ej2F~;y*Y;efB8JWh$N9$A;z&#Pg3fN<|HR+_B?3KFgV;R}s z`|^~WOJ)}=+Idey%=3S*efeCJwE!FZ;?ciiHjL9$!uL1wxr-9n>_3vNVRx{Z-*e0u zA*q3g9h3>>%DT#Ds*iW7s)9ledr8Nw7^Jy87@c0yu1guAkUvlt8*#Nepgu-VnYm?T zYImdUELLB%x_0v$JJG=k;*eXH@82%X$eY^x=3Hp}s1McgiJ>5oIo|S8Q@4a#a!adj zxbT`X^xxc(ZQoe`)$qWYfz{tyYuVGg>09oSU~}>MocXA|u@PF8w*GR>eZ$n~pgAxh zKbK0X!a)i&d_7Pe+&Mn*a41Zhh)cbKD^_o1!e5Li@dz*t(7^AY*0+%&)xXX+?Kzjil)#zEe;o4Bc|` zEm@md1#xkE{bsQ~s*5ES(KA&^7bY|#MFWAuW-YpRX9ow5`F3KHOC~RQG$9kNGcqy+ z8Ae?vGvaV#9_C(#B`Z%dJhRy4iyO3fd|sKC z5?cn53j>1@2lF9hx9yT*t4V?}Wb9i=Nh!rr zW5FLrF7@Kyx#7LPjN$tZ7ch;DN3iiCu5o>u?h8-r@G4hu*3I87#VV?T(h#s7932eAB08SPT?;^zgrMk zG*3m{Qv~oJSPq`dL|Bfcb9>}Wc*ayhF@r`BWKKnUCz-%QPM^VM_B?nim%r zsN0DBn5=E_71m3k^aO^yY4W?jOL+|DYmiDxBZtho%{XdoX5WvQ@R0wVdMYfv6IGy} z@de0J-?LXl6WpZAs{-ry4zw_h=#JyYcMl+`VAP1rwnuE+y{nSd;S;0v3!B3gJ<0<^ zAsaip-V*}=I%LNO6y!SRzG!~bpQoXo1wz+kvjXsZiLsxa_SWl{t|~9}9Lt1OKKD^= z)(WOmQ7y09Nd6Vz@A>Lhe$N7gTsIo^`=yn_i1ER?`|nRJ-e{8-AqY~rhNf3(@)!+_ z`^(hl%T*AZr&pB_(OxKtkMZsKb{cWiwnNo?Drp57g?vh zBwadV+4B5$Rw#OB0HUt$z6hv))tc&8L>gsR+q#bJv;2eSwul_;IxLwGYYNukznvz5s90Y4tTzM4)B<$~rya*T~EPgUAr^8wwS5 z_l|qZ562om<}4^<>W_qDU00Is!(@^e#^r@d8C{OIko^pPluq;5Ft74Km-rtt|0Wpb z5CXvi^cW!2%ZxKqBP!{lJpz3}KMWWGOmckKwD{Mr&cw8|TN){43i?Sv;QkPcZkkBS zDUbkLSj%{IcmJN-z2YsS{Z{9Ov>)h-1-QwwLHk`Ot6NscDQ3k$MK#f`!ZQe#zF!OUo=^srtGH)}CbNWGPlh)3mVlWBN7< zqCVus%}w!(u(&Z`+)0_xlyb}>w1!}_)o#R2Lza@9;LT!Q^VGZ}A`az%rZS;RaWAfH zc1SOsj)a6lKfTuCO(8*!=H}@mF@4rfeAyRdtyjomTQ`L9hJm6eTO`pN`ouY%{>`tN zSWoW|OxtFYiYAI47JKU-QwJB4|r0_HO5 z3!Wv}i7u8{O6wQiC(JA?ZOo#gPuuy7MW}53WjHC2iv$NO>aL!eU`OuIbS9{e%slG{ zd1*Kq(Up&yho1q-0cR$_PcCI{eZoI2Ikm|8puu&@BoLySh>!iSgyU{}uAl7qJESNMKap57Hi{ z*_hsLY}q~c&e_h)^~=*?ThGS`x~Q})yTPw=%$o%#b6b#+73x3S2AyW``= zZWi6_{=jOD`wQHPzRH?jXc8T+XqrxQJqj}TUeW6t?)?5+CG-Z75C1UJ z`_9Uxj(ngEw|Nl<_|IS7mc@H@l)@hh&YfRa+myW8i_RWSANE2l*~8c|Y7v{>?k_Xr z3&}@B)VX1){w)ow6%EJLCd`=hlr~kLU2JadP`nj>lm4cSYtHAi!M4C+iAHi}xiXAA zsl&anrR^wnOLN{m((}zwtGq=hKqyEAT!hnMa>}_V;Q`$|asotE8q_s7*@n<0a_UWY zN>_b>d^qCC#&NWU5BpGu;AxDNf5}&!NdS>-H7wU_K7TKze5|VOZcvhFt|IH)8=poT zE<7x57fnD?*x%V@S#9m=JktF5knrJ*=A$9CH; zJ%2TiI09pr%k-RE07>bhQs-LcBq%sEgedaPwIH#?E@< znK?ww$op&`e4#{H*@jT$rqVw@&SvnH)wAww6lL*y>UeqodRf`?IFRh;=Sw{3;T}6+ zT-{>RCt*;wl5|oG)^Rwvh)cTezS~CC6^Ews&EO?kD$M@oGc&Vsu)j`7#SdL9|5Yl$ zy-luNnWPf)a0%y%ee3WddgWu6NdGa9D5?i<=#CUDNf6LOhKEVM7hQ1vJ-}~9O8b91BL#H&h@(hFMwbNs*nGRlgP+um41bzR z?h+#x2?iFkQ~$+9a>Skw)~hk;LrNODwEHDgqciH`&>)e<^)YSq4-6!u`Cgh{ zb$AhgCZvUSPA{Ef7?AqzOHqNUWH7lhTzWKxoSWw-4P6CL1t(1N=%o9>+H^_`9hMk< zdr!3d>ltW6(T8~Q^2VBUXTNX!{4Z;l+`+iB>UlW*84zX{{eE{=)Bkt$UOQ$(HveTg{qz36)69#l_t|^9YZicgo0mmNo`es- z>U>y?ox*jc>h~%WJ4dRmrQq}BBU(@AwtZWsQK4hZktTv-(I=^URW&ibfeI1P=YPu7 zleVPCD)G(*Fm<#W}^`sa{W*BzLQ8 z6umiq-;{L!5lRatUe}LCbAH<`o46jPkip}8R6jqxw6wH2x^Z*=@A?JYB<0O#Ys(B~>1{`yy`?ek6U5<<1-H8njaak^fefPt9I{3b^SP zci1>(ixtMj())_Pjm-N66{w^)lm%7r5X|h*hF`0bE;42fTo8OCh?v<&e#gYLkN0aG zIJ|l*2$do}7|(|;6=tF`O(ri7lGwU|IdPt`Kdnv&jUvY^;NkO71rhjRoo@_s$W%Cw5V{)M zKW}R1##?J^u5{{weqEo#3Fw85+K+|}XSlLF##w~Mw2X}B5Cfox_03oe8UP)FMh26K zP8IGCpG6VUv4{}!`PE6;mY43c4(ViVfU>n%9-nN1%PoeJS4v)MTc0NTIVv)BjFY7Z{rIZrTMWDH;UDw+ zEgf&ZfB6!-eedc*Bopi}+hESYB%hN!{;g)nZb4HK#r*WUoU?5LMPJTkWC75R)O_nHmo)t5PfL_1pAE8!!nJ(k)mW%+o3 z3)ay%*?dXXLnC#=UmoYg6I+T$hEB!S(Is4srpxPe<`t?(vzmt64{$pi#aTTqBl~AwcdXPP< z3IEt0$;`0^KZQPVupEb*ef%6}cZ>G-dmJ

          6}5Mx+$UPGw*QBzRoBH9|jCe%nNsY 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 Wm2LO%(=i_K_vDeTT9t}T)c*huy$7ZM literal 0 HcmV?d00001 diff --git a/v1.1/docs/admin/resource-quota.md b/v1.1/docs/admin/resource-quota.md new file mode 100755 index 0000000000000..0821047c98071 --- /dev/null +++ b/v1.1/docs/admin/resource-quota.md @@ -0,0 +1,174 @@ +--- +layout: docwithnav +title: "Resource Quotas" +--- + + + + + +# Resource Quotas + +When several users or teams share a cluster with a fixed number of nodes, +there is a concern that one team could use more than its fair share of resources. + +Resource quotas are a tool for administrators to address this concern. Resource quotas +work like this: +- Different teams work in different namespaces. Currently this is voluntary, but + support for making this mandatory via ACLs is planned. +- The administrator creates a Resource Quota for each namespace. +- Users put compute resource requests on their pods. The sum of all resource requests across + all pods in the same namespace must not exceed any hard resource limit in any Resource Quota + document for the namespace. Note that we used to verify Resource Quota by taking the sum of + resource limits of the pods, but this was altered to use resource requests. Backwards compatibility + for those pods previously created is preserved because pods that only specify a resource limit have + their resource requests defaulted to match their defined limits. The user is only charged for the + resources they request in the Resource Quota versus their limits because the request is the minimum + amount of resource guaranteed by the cluster during scheduling. For more information on over commit, + see [compute-resources](../user-guide/compute-resources.html). +- If creating a pod would cause the namespace to exceed any of the limits specified in the + the Resource Quota for that namespace, then the request will fail with HTTP status + code `403 FORBIDDEN`. +- If quota is enabled in a namespace and the user does not specify *requests* on the pod for each + of the resources for which quota is enabled, then the POST of the pod will fail with HTTP + status code `403 FORBIDDEN`. Hint: Use the LimitRange admission controller to force default + values of *limits* (then resource *requests* would be equal to *limits* by default, see + [admission controller](admission-controllers.html)) before the quota is checked to avoid this problem. + +Examples of policies that could be created using namespaces and quotas are: +- In a cluster with a capacity of 32 GiB RAM, and 16 cores, let team A use 20 Gib and 10 cores, + let B use 10GiB and 4 cores, and hold 2GiB and 2 cores in reserve for future allocation. +- Limit the "testing" namespace to using 1 core and 1GiB RAM. Let the "production" namespace + use any amount. + +In the case where the total capacity of the cluster is less than the sum of the quotas of the namespaces, +there may be contention for resources. This is handled on a first-come-first-served basis. + +Neither contention nor changes to quota will affect already-running pods. + +## Enabling Resource Quota + +Resource Quota support is enabled by default for many Kubernetes distributions. It is +enabled when the apiserver `--admission-control=` flag has `ResourceQuota` as +one of its arguments. + +Resource Quota is enforced in a particular namespace when there is a +`ResourceQuota` object in that namespace. There should be at most one +`ResourceQuota` object in a namespace. + +## Compute Resource Quota + +The total sum of [compute resources](../user-guide/compute-resources.html) requested by pods +in a namespace can be limited. The following compute resource types are supported: + +| ResourceName | Description | +| ------------ | ----------- | +| cpu | Total cpu requests of containers | +| memory | Total memory requests of containers + +For example, `cpu` quota sums up the `resources.requests.cpu` fields of every +container of every pod in the namespace, and enforces a maximum on that sum. + +## Object Count Quota + +The number of objects of a given type can be restricted. The following types +are supported: + +| ResourceName | Description | +| ------------ | ----------- | +| pods | Total number of pods | +| services | Total number of services | +| replicationcontrollers | Total number of replication controllers | +| resourcequotas | Total number of [resource quotas](admission-controllers.html#resourcequota) | +| secrets | Total number of secrets | +| persistentvolumeclaims | Total number of [persistent volume claims](../user-guide/persistent-volumes.html#persistentvolumeclaims) | + +For example, `pods` quota counts and enforces a maximum on the number of `pods` +created in a single namespace. + +You might want to set a pods quota on a namespace +to avoid the case where a user creates many small pods and exhausts the cluster's +supply of Pod IPs. + +## Viewing and Setting Quotas + +Kubectl supports creating, updating, and viewing quotas: + +{% highlight console %} +{% raw %} +$ kubectl namespace myspace +$ cat < quota.json +{ + "apiVersion": "v1", + "kind": "ResourceQuota", + "metadata": { + "name": "quota", + }, + "spec": { + "hard": { + "memory": "1Gi", + "cpu": "20", + "pods": "10", + "services": "5", + "replicationcontrollers":"20", + "resourcequotas":"1", + }, + } +} +EOF +$ kubectl create -f ./quota.json +$ kubectl get quota +NAME +quota +$ kubectl describe quota quota +Name: quota +Resource Used Hard +-------- ---- ---- +cpu 0m 20 +memory 0 1Gi +pods 5 10 +replicationcontrollers 5 20 +resourcequotas 1 1 +services 3 5 +{% endraw %} +{% endhighlight %} + +## Quota and Cluster Capacity + +Resource Quota objects are independent of the Cluster Capacity. They are +expressed in absolute units. So, if you add nodes to your cluster, this does *not* +automatically give each namespace the ability to consume more resources. + +Sometimes more complex policies may be desired, such as: + - proportionally divide total cluster resources among several teams. + - allow each tenant to grow resource usage as needed, but have a generous + limit to prevent accidental resource exhaustion. + - detect demand from one namespace, add nodes, and increase quota. + +Such policies could be implemented using ResourceQuota as a building-block, by +writing a 'controller' which watches the quota usage and adjusts the quota +hard limits of each namespace according to other signals. + +Note that resource quota divides up aggregate cluster resources, but it creates no +restrictions around nodes: pods from several namespaces may run on the same node. + +## Example + +See a [detailed example for how to use resource quota](resourcequota/).. + +## Read More + +See [ResourceQuota design doc](../design/admission_control_resource_quota.html) for more information. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/resource-quota.md?pixel)]() + + diff --git a/v1.1/docs/admin/resourcequota/README.md b/v1.1/docs/admin/resourcequota/README.md new file mode 100755 index 0000000000000..f138084b3fe28 --- /dev/null +++ b/v1.1/docs/admin/resourcequota/README.md @@ -0,0 +1,197 @@ +--- +layout: docwithnav +title: "Resource Quota" +--- + + + + +Resource Quota +======================================== +This example demonstrates how [resource quota](../../admin/admission-controllers.html#resourcequota) and +[limitsranger](../../admin/admission-controllers.html#limitranger) can be applied to a Kubernetes namespace. +See [ResourceQuota design doc](../../design/admission_control_resource_quota.html) for more information. + +This example assumes you have a functional Kubernetes setup. + +Step 1: Create a namespace +----------------------------------------- +This example will work in a custom namespace to demonstrate the concepts involved. + +Let's create a new namespace called quota-example: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/namespace.yaml +namespace "quota-example" created +$ kubectl get namespaces +NAME LABELS STATUS AGE +default Active 2m +quota-example Active 39s +{% endraw %} +{% endhighlight %} + +Step 2: Apply a quota to the namespace +----------------------------------------- +By default, a pod will run with unbounded CPU and memory requests/limits. This means that any pod in the +system will be able to consume as much CPU and memory on the node that executes the pod. + +Users may want to restrict how much of the cluster resources a given namespace may consume +across all of its pods in order to manage cluster usage. To do this, a user applies a quota to +a namespace. A quota lets the user set hard limits on the total amount of node resources (cpu, memory) +and API resources (pods, services, etc.) that a namespace may consume. In term of resources, Kubernetes +checks the total resource *requests*, not resource *limits* of all containers/pods in the namespace. + +Let's create a simple quota in our namespace: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/quota.yaml --namespace=quota-example +resourcequota "quota" created +{% endraw %} +{% endhighlight %} + +Once your quota is applied to a namespace, the system will restrict any creation of content +in the namespace until the quota usage has been calculated. This should happen quickly. + +You can describe your current quota usage to see what resources are being consumed in your +namespace. + +{% highlight console %} +{% raw %} +$ kubectl describe quota quota --namespace=quota-example +Name: quota +Namespace: quota-example +Resource Used Hard +-------- ---- ---- +cpu 0 20 +memory 0 1Gi +persistentvolumeclaims 0 10 +pods 0 10 +replicationcontrollers 0 20 +resourcequotas 1 1 +secrets 1 10 +services 0 5 +{% endraw %} +{% endhighlight %} + +Step 3: Applying default resource requests and limits +----------------------------------------- +Pod authors rarely specify resource requests and limits for their pods. + +Since we applied a quota to our project, let's see what happens when an end-user creates a pod that has unbounded +cpu and memory by creating an nginx container. + +To demonstrate, lets create a replication controller that runs nginx: + +{% highlight console %} +{% raw %} +$ kubectl run nginx --image=nginx --replicas=1 --namespace=quota-example +replicationcontroller "nginx" created +{% endraw %} +{% endhighlight %} + +Now let's look at the pods that were created. + +{% highlight console %} +{% raw %} +$ kubectl get pods --namespace=quota-example +NAME READY STATUS RESTARTS AGE +{% endraw %} +{% endhighlight %} + +What happened? I have no pods! Let's describe the replication controller to get a view of what is happening. + +{% highlight console %} +{% raw %} +kubectl describe rc nginx --namespace=quota-example +Name: nginx +Namespace: quota-example +Image(s): nginx +Selector: run=nginx +Labels: run=nginx +Replicas: 0 current / 1 desired +Pods Status: 0 Running / 0 Waiting / 0 Succeeded / 0 Failed +No volumes. +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + 42s 11s 3 {replication-controller } FailedCreate Error creating: Pod "nginx-" is forbidden: Must make a non-zero request for memory since it is tracked by quota. +{% endraw %} +{% endhighlight %} + +The Kubernetes API server is rejecting the replication controllers requests to create a pod because our pods +do not specify any memory usage *request*. + +So let's set some default values for the amount of cpu and memory a pod can consume: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/limits.yaml --namespace=quota-example +limitrange "limits" created +$ kubectl describe limits limits --namespace=quota-example +Name: limits +Namespace: quota-example +Type Resource Min Max Request Limit Limit/Request +---- -------- --- --- ------- ----- ------------- +Container memory - - 256Mi 512Mi - +Container cpu - - 100m 200m - +{% endraw %} +{% endhighlight %} + +Now any time a pod is created in this namespace, if it has not specified any resource request/limit, the default +amount of cpu and memory per container will be applied, and the request will be used as part of admission control. + +Now that we have applied default resource *request* for our namespace, our replication controller should be able to +create its pods. + +{% highlight console %} +{% raw %} +$ kubectl get pods --namespace=quota-example +NAME READY STATUS RESTARTS AGE +nginx-fca65 1/1 Running 0 1m +{% endraw %} +{% endhighlight %} + +And if we print out our quota usage in the namespace: + +{% highlight console %} +{% raw %} +$ kubectl describe quota quota --namespace=quota-example +Name: quota +Namespace: quota-example +Resource Used Hard +-------- ---- ---- +cpu 100m 20 +memory 256Mi 1Gi +persistentvolumeclaims 0 10 +pods 1 10 +replicationcontrollers 1 20 +resourcequotas 1 1 +secrets 1 10 +services 0 5 +{% endraw %} +{% endhighlight %} + +You can now see the pod that was created is consuming explicit amounts of resources (specified by resource *request*), +and the usage is being tracked by the Kubernetes system properly. + +Summary +---------------------------- +Actions that consume node resources for cpu and memory can be subject to hard quota limits defined +by the namespace quota. The resource consumption is measured by resource *request* in pod specification. + +Any action that consumes those resources can be tweaked, or can pick up namespace level defaults to +meet your end goal. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/resourcequota/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/resourcequota/index.md b/v1.1/docs/admin/resourcequota/index.md new file mode 100644 index 0000000000000..f138084b3fe28 --- /dev/null +++ b/v1.1/docs/admin/resourcequota/index.md @@ -0,0 +1,197 @@ +--- +layout: docwithnav +title: "Resource Quota" +--- + + + + +Resource Quota +======================================== +This example demonstrates how [resource quota](../../admin/admission-controllers.html#resourcequota) and +[limitsranger](../../admin/admission-controllers.html#limitranger) can be applied to a Kubernetes namespace. +See [ResourceQuota design doc](../../design/admission_control_resource_quota.html) for more information. + +This example assumes you have a functional Kubernetes setup. + +Step 1: Create a namespace +----------------------------------------- +This example will work in a custom namespace to demonstrate the concepts involved. + +Let's create a new namespace called quota-example: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/namespace.yaml +namespace "quota-example" created +$ kubectl get namespaces +NAME LABELS STATUS AGE +default Active 2m +quota-example Active 39s +{% endraw %} +{% endhighlight %} + +Step 2: Apply a quota to the namespace +----------------------------------------- +By default, a pod will run with unbounded CPU and memory requests/limits. This means that any pod in the +system will be able to consume as much CPU and memory on the node that executes the pod. + +Users may want to restrict how much of the cluster resources a given namespace may consume +across all of its pods in order to manage cluster usage. To do this, a user applies a quota to +a namespace. A quota lets the user set hard limits on the total amount of node resources (cpu, memory) +and API resources (pods, services, etc.) that a namespace may consume. In term of resources, Kubernetes +checks the total resource *requests*, not resource *limits* of all containers/pods in the namespace. + +Let's create a simple quota in our namespace: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/quota.yaml --namespace=quota-example +resourcequota "quota" created +{% endraw %} +{% endhighlight %} + +Once your quota is applied to a namespace, the system will restrict any creation of content +in the namespace until the quota usage has been calculated. This should happen quickly. + +You can describe your current quota usage to see what resources are being consumed in your +namespace. + +{% highlight console %} +{% raw %} +$ kubectl describe quota quota --namespace=quota-example +Name: quota +Namespace: quota-example +Resource Used Hard +-------- ---- ---- +cpu 0 20 +memory 0 1Gi +persistentvolumeclaims 0 10 +pods 0 10 +replicationcontrollers 0 20 +resourcequotas 1 1 +secrets 1 10 +services 0 5 +{% endraw %} +{% endhighlight %} + +Step 3: Applying default resource requests and limits +----------------------------------------- +Pod authors rarely specify resource requests and limits for their pods. + +Since we applied a quota to our project, let's see what happens when an end-user creates a pod that has unbounded +cpu and memory by creating an nginx container. + +To demonstrate, lets create a replication controller that runs nginx: + +{% highlight console %} +{% raw %} +$ kubectl run nginx --image=nginx --replicas=1 --namespace=quota-example +replicationcontroller "nginx" created +{% endraw %} +{% endhighlight %} + +Now let's look at the pods that were created. + +{% highlight console %} +{% raw %} +$ kubectl get pods --namespace=quota-example +NAME READY STATUS RESTARTS AGE +{% endraw %} +{% endhighlight %} + +What happened? I have no pods! Let's describe the replication controller to get a view of what is happening. + +{% highlight console %} +{% raw %} +kubectl describe rc nginx --namespace=quota-example +Name: nginx +Namespace: quota-example +Image(s): nginx +Selector: run=nginx +Labels: run=nginx +Replicas: 0 current / 1 desired +Pods Status: 0 Running / 0 Waiting / 0 Succeeded / 0 Failed +No volumes. +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + 42s 11s 3 {replication-controller } FailedCreate Error creating: Pod "nginx-" is forbidden: Must make a non-zero request for memory since it is tracked by quota. +{% endraw %} +{% endhighlight %} + +The Kubernetes API server is rejecting the replication controllers requests to create a pod because our pods +do not specify any memory usage *request*. + +So let's set some default values for the amount of cpu and memory a pod can consume: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/limits.yaml --namespace=quota-example +limitrange "limits" created +$ kubectl describe limits limits --namespace=quota-example +Name: limits +Namespace: quota-example +Type Resource Min Max Request Limit Limit/Request +---- -------- --- --- ------- ----- ------------- +Container memory - - 256Mi 512Mi - +Container cpu - - 100m 200m - +{% endraw %} +{% endhighlight %} + +Now any time a pod is created in this namespace, if it has not specified any resource request/limit, the default +amount of cpu and memory per container will be applied, and the request will be used as part of admission control. + +Now that we have applied default resource *request* for our namespace, our replication controller should be able to +create its pods. + +{% highlight console %} +{% raw %} +$ kubectl get pods --namespace=quota-example +NAME READY STATUS RESTARTS AGE +nginx-fca65 1/1 Running 0 1m +{% endraw %} +{% endhighlight %} + +And if we print out our quota usage in the namespace: + +{% highlight console %} +{% raw %} +$ kubectl describe quota quota --namespace=quota-example +Name: quota +Namespace: quota-example +Resource Used Hard +-------- ---- ---- +cpu 100m 20 +memory 256Mi 1Gi +persistentvolumeclaims 0 10 +pods 1 10 +replicationcontrollers 1 20 +resourcequotas 1 1 +secrets 1 10 +services 0 5 +{% endraw %} +{% endhighlight %} + +You can now see the pod that was created is consuming explicit amounts of resources (specified by resource *request*), +and the usage is being tracked by the Kubernetes system properly. + +Summary +---------------------------- +Actions that consume node resources for cpu and memory can be subject to hard quota limits defined +by the namespace quota. The resource consumption is measured by resource *request* in pod specification. + +Any action that consumes those resources can be tweaked, or can pick up namespace level defaults to +meet your end goal. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/resourcequota/README.md?pixel)]() + + diff --git a/v1.1/docs/admin/resourcequota/limits.yaml b/v1.1/docs/admin/resourcequota/limits.yaml new file mode 100755 index 0000000000000..84b50b4e2aece --- /dev/null +++ b/v1.1/docs/admin/resourcequota/limits.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: limits +spec: + limits: + - default: + cpu: 200m + memory: 512Mi + defaultRequest: + cpu: 100m + memory: 256Mi + type: Container diff --git a/v1.1/docs/admin/resourcequota/namespace.yaml b/v1.1/docs/admin/resourcequota/namespace.yaml new file mode 100644 index 0000000000000..2da842033bb43 --- /dev/null +++ b/v1.1/docs/admin/resourcequota/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: quota-example diff --git a/v1.1/docs/admin/resourcequota/quota.yaml b/v1.1/docs/admin/resourcequota/quota.yaml new file mode 100644 index 0000000000000..6885efc6d12d9 --- /dev/null +++ b/v1.1/docs/admin/resourcequota/quota.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: ResourceQuota +metadata: + name: quota +spec: + hard: + cpu: "20" + memory: 1Gi + persistentvolumeclaims: "10" + pods: "10" + replicationcontrollers: "20" + resourcequotas: "1" + secrets: "10" + services: "5" diff --git a/v1.1/docs/admin/salt.md b/v1.1/docs/admin/salt.md new file mode 100644 index 0000000000000..6613b72562baf --- /dev/null +++ b/v1.1/docs/admin/salt.md @@ -0,0 +1,129 @@ +--- +layout: docwithnav +title: "Using Salt to configure Kubernetes" +--- + + + + + +# Using Salt to configure Kubernetes + +The Kubernetes cluster can be configured using Salt. + +The Salt scripts are shared across multiple hosting providers, so it's important to understand some background information prior to making a modification to ensure your changes do not break hosting Kubernetes across multiple environments. Depending on where you host your Kubernetes cluster, you may be using different operating systems and different networking configurations. As a result, it's important to understand some background information before making Salt changes in order to minimize introducing failures for other hosting providers. + +## Salt cluster setup + +The **salt-master** service runs on the kubernetes-master [(except on the default GCE setup)](#standalone-salt-configuration-on-gce). + +The **salt-minion** service runs on the kubernetes-master and each kubernetes-node in the cluster. + +Each salt-minion service is configured to interact with the **salt-master** service hosted on the kubernetes-master via the **master.conf** file [(except on GCE)](#standalone-salt-configuration-on-gce). + +{% highlight console %} +{% raw %} +[root@kubernetes-master] $ cat /etc/salt/minion.d/master.conf +master: kubernetes-master +{% endraw %} +{% endhighlight %} + +The salt-master is contacted by each salt-minion and depending upon the machine information presented, the salt-master will provision the machine as either a kubernetes-master or kubernetes-node with all the required capabilities needed to run Kubernetes. + +If you are running the Vagrant based environment, the **salt-api** service is running on the kubernetes-master. It is configured to enable the vagrant user to introspect the salt cluster in order to find out about machines in the Vagrant environment via a REST API. + +## Standalone Salt Configuration on GCE + +On GCE, the master and nodes are all configured as [standalone minions](http://docs.saltstack.com/en/latest/topics/tutorials/standalone_minion.html). The configuration for each VM is derived from the VM's [instance metadata](https://cloud.google.com/compute/docs/metadata) and then stored in Salt grains (`/etc/salt/minion.d/grains.conf`) and pillars (`/srv/salt-overlay/pillar/cluster-params.sls`) that local Salt uses to enforce state. + +All remaining sections that refer to master/minion setups should be ignored for GCE. One fallout of the GCE setup is that the Salt mine doesn't exist - there is no sharing of configuration amongst nodes. + +## Salt security + +*(Not applicable on default GCE setup.)* + +Security is not enabled on the salt-master, and the salt-master is configured to auto-accept incoming requests from minions. It is not recommended to use this security configuration in production environments without deeper study. (In some environments this isn't as bad as it might sound if the salt master port isn't externally accessible and you trust everyone on your network.) + +{% highlight console %} +{% raw %} +[root@kubernetes-master] $ cat /etc/salt/master.d/auto-accept.conf +open_mode: True +auto_accept: True +{% endraw %} +{% endhighlight %} + +## Salt minion configuration + +Each minion in the salt cluster has an associated configuration that instructs the salt-master how to provision the required resources on the machine. + +An example file is presented below using the Vagrant based environment. + +{% highlight console %} +{% raw %} +[root@kubernetes-master] $ cat /etc/salt/minion.d/grains.conf +grains: + etcd_servers: $MASTER_IP + cloud_provider: vagrant + roles: + - kubernetes-master +{% endraw %} +{% endhighlight %} + +Each hosting environment has a slightly different grains.conf file that is used to build conditional logic where required in the Salt files. + +The following enumerates the set of defined key/value pairs that are supported today. If you add new ones, please make sure to update this list. + +Key | Value +------------- | ------------- +`api_servers` | (Optional) The IP address / host name where a kubelet can get read-only access to kube-apiserver +`cbr-cidr` | (Optional) The minion IP address range used for the docker container bridge. +`cloud` | (Optional) Which IaaS platform is used to host Kubernetes, *gce*, *azure*, *aws*, *vagrant* +`etcd_servers` | (Optional) Comma-delimited list of IP addresses the kube-apiserver and kubelet use to reach etcd. Uses the IP of the first machine in the kubernetes_master role, or 127.0.0.1 on GCE. +`hostnamef` | (Optional) The full host name of the machine, i.e. uname -n +`node_ip` | (Optional) The IP address to use to address this node +`hostname_override` | (Optional) Mapped to the kubelet hostname-override +`network_mode` | (Optional) Networking model to use among nodes: *openvswitch* +`networkInterfaceName` | (Optional) Networking interface to use to bind addresses, default value *eth0* +`publicAddressOverride` | (Optional) The IP address the kube-apiserver should use to bind against for external read-only access +`roles` | (Required) 1. `kubernetes-master` means this machine is the master in the Kubernetes cluster. 2. `kubernetes-pool` means this machine is a kubernetes-node. Depending on the role, the Salt scripts will provision different resources on the machine. + +These keys may be leveraged by the Salt sls files to branch behavior. + +In addition, a cluster may be running a Debian based operating system or Red Hat based operating system (Centos, Fedora, RHEL, etc.). As a result, it's important to sometimes distinguish behavior based on operating system using if branches like the following. + +{% highlight jinja %} +{% raw %} +{% if grains['os_family'] == 'RedHat' %} +// something specific to a RedHat environment (Centos, Fedora, RHEL) where you may use yum, systemd, etc. +{% else %} +// something specific to Debian environment (apt-get, initd) +{% endif %} +{% endraw %} +{% endhighlight %} + +## Best Practices + +1. When configuring default arguments for processes, it's best to avoid the use of EnvironmentFiles (Systemd in Red Hat environments) or init.d files (Debian distributions) to hold default values that should be common across operating system environments. This helps keep our Salt template files easy to understand for editors who may not be familiar with the particulars of each distribution. + +## Future enhancements (Networking) + +Per pod IP configuration is provider-specific, so when making networking changes, it's important to sandbox these as all providers may not use the same mechanisms (iptables, openvswitch, etc.) + +We should define a grains.conf key that captures more specifically what network configuration environment is being used to avoid future confusion across providers. + +## Further reading + +The [cluster/saltbase](http://releases.k8s.io/release-1.1/cluster/saltbase/) tree has more details on the current SaltStack configuration. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/salt.md?pixel)]() + + diff --git a/v1.1/docs/admin/service-accounts-admin.md b/v1.1/docs/admin/service-accounts-admin.md new file mode 100644 index 0000000000000..c1395a5f1a360 --- /dev/null +++ b/v1.1/docs/admin/service-accounts-admin.md @@ -0,0 +1,120 @@ +--- +layout: docwithnav +title: "Cluster Admin Guide to Service Accounts" +--- + + + + + +# Cluster Admin Guide to Service Accounts + +*This is a Cluster Administrator guide to service accounts. It assumes knowledge of +the [User Guide to Service Accounts](../user-guide/service-accounts.html).* + +*Support for authorization and user accounts is planned but incomplete. Sometimes +incomplete features are referred to in order to better describe service accounts.* + +## User accounts vs service accounts + +Kubernetes distinguished between the concept of a user account and a service accounts +for a number of reasons: + - User accounts are for humans. Service accounts are for processes, which + run in pods. + - User accounts are intended to be global. Names must be unique across all + namespaces of a cluster, future user resource will not be namespaced). + Service accounts are namespaced. + - Typically, a cluster's User accounts might be synced from a corporate + database, where new user account creation requires special privileges and + is tied to complex business processes. Service account creation is intended + to be more lightweight, allowing cluster users to create service accounts for + specific tasks (i.e. principle of least privilege). + - Auditing considerations for humans and service accounts may differ. + - A config bundle for a complex system may include definition of various service + accounts for components of that system. Because service accounts can be created + ad-hoc and have namespaced names, such config is portable. + +## Service account automation + +Three separate components cooperate to implement the automation around service accounts: + - A Service account admission controller + - A Token controller + - A Service account controller + +### Service Account Admission Controller + +The modification of pods is implemented via a plugin +called an [Admission Controller](admission-controllers.html). It is part of the apiserver. +It acts synchronously to modify pods as they are created or updated. When this plugin is active +(and it is by default on most distributions), then it does the following when a pod is created or modified: + 1. If the pod does not have a `ServiceAccount` set, it sets the `ServiceAccount` to `default`. + 2. It ensures that the `ServiceAccount` referenced by the pod exists, and otherwise rejects it. + 4. If the pod does not contain any `ImagePullSecrets`, then `ImagePullSecrets` of the +`ServiceAccount` are added to the pod. + 5. It adds a `volume` to the pod which contains a token for API access. + 6. It adds a `volumeSource` to each container of the pod mounted at `/var/run/secrets/kubernetes.io/serviceaccount`. + +### Token Controller + +TokenController runs as part of controller-manager. It acts asynchronously. It: +- observes serviceAccount creation and creates a corresponding Secret to allow API access. +- observes serviceAccount deletion and deletes all corresponding ServiceAccountToken Secrets +- observes secret addition, and ensures the referenced ServiceAccount exists, and adds a token to the secret if needed +- observes secret deletion and removes a reference from the corresponding ServiceAccount if needed + +#### To create additional API tokens + +A controller loop ensures a secret with an API token exists for each service +account. To create additional API tokens for a service account, create a secret +of type `ServiceAccountToken` with an annotation referencing the service +account, and the controller will update it with a generated token: + +{% highlight json %} +{% raw %} +secret.json: +{ + "kind": "Secret", + "apiVersion": "v1", + "metadata": { + "name": "mysecretname", + "annotations": { + "kubernetes.io/service-account.name": "myserviceaccount" + } + }, + "type": "kubernetes.io/service-account-token" +} +{% endraw %} +{% endhighlight %} + +{% highlight sh %} +{% raw %} +kubectl create -f ./secret.json +kubectl describe secret mysecretname +{% endraw %} +{% endhighlight %} + +#### To delete/invalidate a service account token + +{% highlight sh %} +{% raw %} +kubectl delete secret mysecretname +{% endraw %} +{% endhighlight %} + +### Service Account Controller + +Service Account Controller manages ServiceAccount inside namespaces, and ensures +a ServiceAccount named "default" exists in every active namespace. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/service-accounts-admin.md?pixel)]() + + diff --git a/v1.1/docs/admin/static-pods.md b/v1.1/docs/admin/static-pods.md new file mode 100644 index 0000000000000..14daeed6ea1bd --- /dev/null +++ b/v1.1/docs/admin/static-pods.md @@ -0,0 +1,165 @@ +--- +layout: docwithnav +title: "Static pods (deprecated)" +--- + + + + + +# Static pods (deprecated) + +**Static pods are to be deprecated and can be removed in any future Kubernetes release!** + +*Static pod* are managed directly by kubelet daemon on a specific node, without API server observing it. It does not have associated any replication controller, kubelet daemon itself watches it and restarts it when it crashes. There is no health check though. Static pods are always bound to one kubelet daemon and always run on the same node with it. + +Kubelet automatically creates so-called *mirror pod* on Kubernetes API server for each static pod, so the pods are visible there, but they cannot be controlled from the API server. + +## Static pod creation + +Static pod can be created in two ways: either by using configuration file(s) or by HTTP. + +### Configuration files + +The configuration files are just standard pod definition in json or yaml format in specific directory. Use `kubelet --config=` to start kubelet daemon, which periodically scans the directory and creates/deletes static pods as yaml/json files appear/disappear there. + +For example, this is how to start a simple web server as a static pod: + +1. Choose a node where we want to run the static pod. In this example, it's `my-minion1`. + +{% highlight console %} +{% raw %} + [joe@host ~] $ ssh my-minion1 +{% endraw %} +{% endhighlight %} + +2. Choose a directory, say `/etc/kubelet.d` and place a web server pod definition there, e.g. `/etc/kubernetes.d/static-web.yaml`: + +{% highlight console %} +{% raw %} + [root@my-minion1 ~] $ mkdir /etc/kubernetes.d/ + [root@my-minion1 ~] $ cat </etc/kubernetes.d/static-web.yaml + apiVersion: v1 + kind: Pod + metadata: + name: static-web + labels: + role: myrole + spec: + containers: + - name: web + image: nginx + ports: + - name: web + containerPort: 80 + protocol: tcp + EOF +{% endraw %} +{% endhighlight %} + +2. Configure your kubelet daemon on the node to use this directory by running it with `--config=/etc/kubelet.d/` argument. On Fedora Fedora 21 with Kubernetes 0.17 edit `/etc/kubernetes/kubelet` to include this line: + + ``` +{% raw %} + KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --config=/etc/kubelet.d/" +{% endraw %} + ``` + + Instructions for other distributions or Kubernetes installations may vary. + +3. Restart kubelet. On Fedora 21, this is: + +{% highlight console %} +{% raw %} + [root@my-minion1 ~] $ systemctl restart kubelet +{% endraw %} +{% endhighlight %} + +## Pods created via HTTP + +Kubelet periodically downloads a file specified by `--manifest-url=` argument and interprets it as a json/yaml file with a pod definition. It works the same as `--config=`, i.e. it's reloaded every now and then and changes are applied to running static pods (see below). + +## Behavior of static pods + +When kubelet starts, it automatically starts all pods defined in directory specified in `--config=` or `--manifest-url=` arguments, i.e. our static-web. (It may take some time to pull nginx image, be patient…): + +{% highlight console %} +{% raw %} +[joe@my-minion1 ~] $ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES +f6d05272b57e nginx:latest "nginx" 8 minutes ago Up 8 minutes k8s_web.6f802af4_static-web-fk-minion1_default_67e24ed9466ba55986d120c867395f3c_378e5f3c +{% endraw %} +{% endhighlight %} + +If we look at our Kubernetes API server (running on host `my-master`), we see that a new mirror-pod was created there too: + +{% highlight console %} +{% raw %} +[joe@host ~] $ ssh my-master +[joe@my-master ~] $ kubectl get pods +POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE +static-web-my-minion1 172.17.0.3 my-minion1/192.168.100.71 role=myrole Running 11 minutes + web nginx Running 11 minutes +{% endraw %} +{% endhighlight %} + +Labels from the static pod are propagated into the mirror-pod and can be used as usual for filtering. + +Notice we cannot delete the pod with the API server (e.g. via [`kubectl`](../user-guide/kubectl/kubectl.html) command), kubelet simply won't remove it. + +{% highlight console %} +{% raw %} +[joe@my-master ~] $ kubectl delete pod static-web-my-minion1 +pods/static-web-my-minion1 +[joe@my-master ~] $ kubectl get pods +POD IP CONTAINER(S) IMAGE(S) HOST ... +static-web-my-minion1 172.17.0.3 my-minion1/192.168.100.71 ... +{% endraw %} +{% endhighlight %} + +Back to our `my-minion1` host, we can try to stop the container manually and see, that kubelet automatically restarts it in a while: + +{% highlight console %} +{% raw %} +[joe@host ~] $ ssh my-minion1 +[joe@my-minion1 ~] $ docker stop f6d05272b57e +[joe@my-minion1 ~] $ sleep 20 +[joe@my-minion1 ~] $ docker ps +CONTAINER ID IMAGE COMMAND CREATED ... +5b920cbaf8b1 nginx:latest "nginx -g 'daemon of 2 seconds ago ... +{% endraw %} +{% endhighlight %} + +## Dynamic addition and removal of static pods + +Running kubelet periodically scans the configured directory (`/etc/kubelet.d` in our example) for changes and adds/removes pods as files appear/disappear in this directory. + +{% highlight console %} +{% raw %} +[joe@my-minion1 ~] $ mv /etc/kubernetes.d/static-web.yaml /tmp +[joe@my-minion1 ~] $ sleep 20 +[joe@my-minion1 ~] $ docker ps +// no nginx container is running +[joe@my-minion1 ~] $ mv /tmp/static-web.yaml /etc/kubernetes.d/ +[joe@my-minion1 ~] $ sleep 20 +[joe@my-minion1 ~] $ docker ps +CONTAINER ID IMAGE COMMAND CREATED ... +e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago +{% endraw %} +{% endhighlight %} + + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/static-pods.md?pixel)]() + + diff --git a/v1.1/docs/api.md b/v1.1/docs/api.md new file mode 100644 index 0000000000000..f93f44775139c --- /dev/null +++ b/v1.1/docs/api.md @@ -0,0 +1,147 @@ +--- +layout: docwithnav +title: "The Kubernetes API" +--- + + + + + +# The Kubernetes API + +Primary system and API concepts are documented in the [User guide](user-guide/README.html). + +Overall API conventions are described in the [API conventions doc](devel/api-conventions.html). + +Complete API details are documented via [Swagger](http://swagger.io/). The Kubernetes apiserver (aka "master") exports an API that can be used to retrieve the [Swagger spec](https://github.com/swagger-api/swagger-spec/tree/master/schemas/v1.2) for the Kubernetes API, by default at `/swaggerapi`, and a UI you can use to browse the API documentation at `/swagger-ui`. We also periodically update a [statically generated UI](http://kubernetes.io/third_party/swagger-ui/). + +Remote access to the API is discussed in the [access doc](admin/accessing-the-api.html). + +The Kubernetes API also serves as the foundation for the declarative configuration schema for the system. The [Kubectl](user-guide/kubectl/kubectl.html) command-line tool can be used to create, update, delete, and get API objects. + +Kubernetes also stores its serialized state (currently in [etcd](https://coreos.com/docs/distributed-configuration/getting-started-with-etcd/)) in terms of the API resources. + +Kubernetes itself is decomposed into multiple components, which interact through its API. + +## API changes + +In our experience, any system that is successful needs to grow and change as new use cases emerge or existing ones change. Therefore, we expect the Kubernetes API to continuously change and grow. However, we intend to not break compatibility with existing clients, for an extended period of time. In general, new API resources and new resource fields can be expected to be added frequently. Elimination of resources or fields will require following a deprecation process. The precise deprecation policy for eliminating features is TBD, but once we reach our 1.0 milestone, there will be a specific policy. + +What constitutes a compatible change and how to change the API are detailed by the [API change document](devel/api_changes.html). + +## API versioning + +To make it easier to eliminate fields or restructure resource representations, Kubernetes supports +multiple API versions, each at a different API path, such as `/api/v1` or +`/apis/extensions/v1beta1`. + +We chose to version at the API level rather than at the resource or field level to ensure that the API presents a clear, consistent view of system resources and behavior, and to enable controlling access to end-of-lifed and/or experimental APIs. + +Note that API versioning and Software versioning are only indirectly related. The [API and release +versioning proposal](design/versioning.html) describes the relationship between API versioning and +software versioning. + + +Different API versions imply different levels of stability and support. The criteria for each level are described +in more detail in the [API Changes documentation](devel/api_changes.html#alpha-beta-and-stable-versions). They are summarized here: + +- Alpha level: + - The version names contain `alpha` (e.g. `v1alpha1`). + - May be buggy. Enabling the feature may expose bugs. Disabled by default. + - Support for feature may be dropped at any time without notice. + - The API may change in incompatible ways in a later software release without notice. + - Recommended for use only in short-lived testing clusters, due to increased risk of bugs and lack of long-term support. +- Beta level: + - The version names contain `beta` (e.g. `v2beta3`). + - Code is well tested. Enabling the feature is considered safe. Enabled by default. + - Support for the overall feature will not be dropped, though details may change. + - The schema and/or semantics of objects may change in incompatible ways in a subsequent beta or stable release. When this happens, + we will provide instructions for migrating to the next version. This may require deleting, editing, and re-creating + API objects. The editing process may require some thought. This may require downtime for appplications that rely on the feature. + - Recommended for only non-business-critical uses because of potential for incompatible changes in subsequent releases. If you have + multiple clusters which can be upgraded independently, you may be able to relax this restriction. + - **Please do try our beta features and give feedback on them! Once they exit beta, it may not be practical for us to make more changes.** +- Stable level: + - The version name is `vX` where `X` is an integer. + - Stable versions of features will appear in released software for many subsequent versions. + +## API groups + +To make it easier to extend the Kubernetes API, we are in the process of implementing [*API +groups*](proposals/api-group.html). These are simply different interfaces to read and/or modify the +same underlying resources. The API group is specified in a REST path and in the `apiVersion` field +of a serialized object. + +Currently there are two API groups in use: + +1. the "core" group, which is at REST path `/api/v1` and is not specified as part of the `apiVersion` field, e.g. + `apiVersion: v1`. +1. the "extensions" group, which is at REST path `/apis/extensions/$VERSION`, and which uses + `apiVersion: extensions/$VERSION` (e.g. currently `apiVersion: extensions/v1beta1`). + +In the future we expect that there will be more API groups, all at REST path `/apis/$API_GROUP` and +using `apiVersion: $API_GROUP/$VERSION`. We expect that there will be a way for (third parties to +create their own API groups](design/extending-api.md), and to avoid naming collisions. + +## Enabling resources in the extensions group + +Jobs, Ingress and HorizontalPodAutoscalers are enabled by default. +Other extensions resources can be enabled by setting runtime-config on +apiserver. runtime-config accepts comma separated values. For ex: to enable deployments and disable jobs, set +`--runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/jobs=false` + +## v1beta1, v1beta2, and v1beta3 are deprecated; please move to v1 ASAP + +As of June 4, 2015, the Kubernetes v1 API has been enabled by default. The v1beta1 and v1beta2 APIs were deleted on June 1, 2015. v1beta3 is planned to be deleted on July 6, 2015. + +### v1 conversion tips (from v1beta3) + +We're working to convert all documentation and examples to v1. A simple [API conversion tool](admin/cluster-management.html#switching-your-config-files-to-a-new-api-version) has been written to simplify the translation process. Use `kubectl create --validate` in order to validate your json or yaml against our Swagger spec. + +Changes to services are the most significant difference between v1beta3 and v1. + +* The `service.spec.portalIP` property is renamed to `service.spec.clusterIP`. +* The `service.spec.createExternalLoadBalancer` property is removed. Specify `service.spec.type: "LoadBalancer"` to create an external load balancer instead. +* The `service.spec.publicIPs` property is deprecated and now called `service.spec.deprecatedPublicIPs`. This property will be removed entirely when v1beta3 is removed. The vast majority of users of this field were using it to expose services on ports on the node. Those users should specify `service.spec.type: "NodePort"` instead. Read [External Services](user-guide/services.html#external-services) for more info. If this is not sufficient for your use case, please file an issue or contact @thockin. + +Some other difference between v1beta3 and v1: + +* The `pod.spec.containers[*].privileged` and `pod.spec.containers[*].capabilities` properties are now nested under the `pod.spec.containers[*].securityContext` property. See [Security Contexts](user-guide/security-context.html). +* The `pod.spec.host` property is renamed to `pod.spec.nodeName`. +* The `endpoints.subsets[*].addresses.IP` property is renamed to `endpoints.subsets[*].addresses.ip`. +* The `pod.status.containerStatuses[*].state.termination` and `pod.status.containerStatuses[*].lastState.termination` properties are renamed to `pod.status.containerStatuses[*].state.terminated` and `pod.status.containerStatuses[*].lastState.terminated` respectively. +* The `pod.status.Condition` property is renamed to `pod.status.conditions`. +* The `status.details.id` property is renamed to `status.details.name`. + +### v1beta3 conversion tips (from v1beta1/2) + +Some important differences between v1beta1/2 and v1beta3: + +* The resource `id` is now called `name`. +* `name`, `labels`, `annotations`, and other metadata are now nested in a map called `metadata` +* `desiredState` is now called `spec`, and `currentState` is now called `status` +* `/minions` has been moved to `/nodes`, and the resource has kind `Node` +* The namespace is required (for all namespaced resources) and has moved from a URL parameter to the path: `/api/v1beta3/namespaces/{namespace}/{resource_collection}/{resource_name}`. If you were not using a namespace before, use `default` here. +* The names of all resource collections are now lower cased - instead of `replicationControllers`, use `replicationcontrollers`. +* To watch for changes to a resource, open an HTTP or Websocket connection to the collection query and provide the `?watch=true` query parameter along with the desired `resourceVersion` parameter to watch from. +* The `labels` query parameter has been renamed to `labelSelector`. +* The `fields` query parameter has been renamed to `fieldSelector`. +* The container `entrypoint` has been renamed to `command`, and `command` has been renamed to `args`. +* Container, volume, and node resources are expressed as nested maps (e.g., `resources{cpu:1}`) rather than as individual fields, and resource values support [scaling suffixes](user-guide/compute-resources.html#specifying-resource-quantities) rather than fixed scales (e.g., milli-cores). +* Restart policy is represented simply as a string (e.g., `"Always"`) rather than as a nested map (`always{}`). +* Pull policies changed from `PullAlways`, `PullNever`, and `PullIfNotPresent` to `Always`, `Never`, and `IfNotPresent`. +* The volume `source` is inlined into `volume` rather than nested. +* Host volumes have been changed from `hostDir` to `hostPath` to better reflect that they can be files or directories. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/api.md?pixel)]() + + diff --git a/v1.1/docs/design/README.md b/v1.1/docs/design/README.md new file mode 100644 index 0000000000000..3d2378afc9009 --- /dev/null +++ b/v1.1/docs/design/README.md @@ -0,0 +1,39 @@ +--- +layout: docwithnav +title: "Kubernetes Design Overview" +--- + + + + + +# Kubernetes Design Overview + +Kubernetes is a system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications. + +Kubernetes establishes robust declarative primitives for maintaining the desired state requested by the user. We see these primitives as the main value added by Kubernetes. Self-healing mechanisms, such as auto-restarting, re-scheduling, and replicating containers require active controllers, not just imperative orchestration. + +Kubernetes is primarily targeted at applications composed of multiple containers, such as elastic, distributed micro-services. It is also designed to facilitate migration of non-containerized application stacks to Kubernetes. It therefore includes abstractions for grouping containers in both loosely coupled and tightly coupled formations, and provides ways for containers to find and communicate with each other in relatively familiar ways. + +Kubernetes enables users to ask a cluster to run a set of containers. The system automatically chooses hosts to run those containers on. While Kubernetes's scheduler is currently very simple, we expect it to grow in sophistication over time. Scheduling is a policy-rich, topology-aware, workload-specific function that significantly impacts availability, performance, and capacity. The scheduler needs to take into account individual and collective resource requirements, quality of service requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, deadlines, and so on. Workload-specific requirements will be exposed through the API as necessary. + +Kubernetes is intended to run on a number of cloud providers, as well as on physical hosts. + +A single Kubernetes cluster is not intended to span multiple availability zones. Instead, we recommend building a higher-level layer to replicate complete deployments of highly available applications across multiple zones (see [the multi-cluster doc](../admin/multi-cluster.html) and [cluster federation proposal](../proposals/federation.html) for more details). + +Finally, Kubernetes aspires to be an extensible, pluggable, building-block OSS platform and toolkit. Therefore, architecturally, we want Kubernetes to be built as a collection of pluggable components and layers, with the ability to use alternative schedulers, controllers, storage systems, and distribution mechanisms, and we're evolving its current code in that direction. Furthermore, we want others to be able to extend Kubernetes functionality, such as with higher-level PaaS functionality or multi-cluster layers, without modification of core Kubernetes source. Therefore, its API isn't just (or even necessarily mainly) targeted at end users, but at tool and extension developers. Its APIs are intended to serve as the foundation for an open ecosystem of tools, automation systems, and higher-level API layers. Consequently, there are no "internal" inter-component APIs. All APIs are visible and available, including the APIs used by the scheduler, the node controller, the replication-controller manager, Kubelet's API, etc. There's no glass to break -- in order to handle more complex use cases, one can just access the lower-level APIs in a fully transparent, composable manner. + +For more about the Kubernetes architecture, see [architecture](architecture.html). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/README.md?pixel)]() + + diff --git a/v1.1/docs/design/access.md b/v1.1/docs/design/access.md new file mode 100644 index 0000000000000..e2a243178693e --- /dev/null +++ b/v1.1/docs/design/access.md @@ -0,0 +1,278 @@ +--- +layout: docwithnav +title: "K8s Identity and Access Management Sketch" +--- + + + + + +# K8s Identity and Access Management Sketch + +This document suggests a direction for identity and access management in the Kubernetes system. + + +## Background + +High level goals are: + - Have a plan for how identity, authentication, and authorization will fit in to the API. + - Have a plan for partitioning resources within a cluster between independent organizational units. + - Ease integration with existing enterprise and hosted scenarios. + +### Actors + +Each of these can act as normal users or attackers. + - External Users: People who are accessing applications running on K8s (e.g. a web site served by webserver running in a container on K8s), but who do not have K8s API access. + - K8s Users : People who access the K8s API (e.g. create K8s API objects like Pods) + - K8s Project Admins: People who manage access for some K8s Users + - K8s Cluster Admins: People who control the machines, networks, or binaries that make up a K8s cluster. + - K8s Admin means K8s Cluster Admins and K8s Project Admins taken together. + +### Threats + +Both intentional attacks and accidental use of privilege are concerns. + +For both cases it may be useful to think about these categories differently: + - Application Path - attack by sending network messages from the internet to the IP/port of any application running on K8s. May exploit weakness in application or misconfiguration of K8s. + - K8s API Path - attack by sending network messages to any K8s API endpoint. + - Insider Path - attack on K8s system components. Attacker may have privileged access to networks, machines or K8s software and data. Software errors in K8s system components and administrator error are some types of threat in this category. + +This document is primarily concerned with K8s API paths, and secondarily with Internal paths. The Application path also needs to be secure, but is not the focus of this document. + +### Assets to protect + +External User assets: + - Personal information like private messages, or images uploaded by External Users. + - web server logs. + +K8s User assets: + - External User assets of each K8s User. + - things private to the K8s app, like: + - credentials for accessing other services (docker private repos, storage services, facebook, etc) + - SSL certificates for web servers + - proprietary data and code + +K8s Cluster assets: + - Assets of each K8s User. + - Machine Certificates or secrets. + - The value of K8s cluster computing resources (cpu, memory, etc). + +This document is primarily about protecting K8s User assets and K8s cluster assets from other K8s Users and K8s Project and Cluster Admins. + +### Usage environments + +Cluster in Small organization: + - K8s Admins may be the same people as K8s Users. + - few K8s Admins. + - prefer ease of use to fine-grained access control/precise accounting, etc. + - Product requirement that it be easy for potential K8s Cluster Admin to try out setting up a simple cluster. + +Cluster in Large organization: + - K8s Admins typically distinct people from K8s Users. May need to divide K8s Cluster Admin access by roles. + - K8s Users need to be protected from each other. + - Auditing of K8s User and K8s Admin actions important. + - flexible accurate usage accounting and resource controls important. + - Lots of automated access to APIs. + - Need to integrate with existing enterprise directory, authentication, accounting, auditing, and security policy infrastructure. + +Org-run cluster: + - organization that runs K8s master components is same as the org that runs apps on K8s. + - Nodes may be on-premises VMs or physical machines; Cloud VMs; or a mix. + +Hosted cluster: + - Offering K8s API as a service, or offering a Paas or Saas built on K8s. + - May already offer web services, and need to integrate with existing customer account concept, and existing authentication, accounting, auditing, and security policy infrastructure. + - May want to leverage K8s User accounts and accounting to manage their User accounts (not a priority to support this use case.) + - Precise and accurate accounting of resources needed. Resource controls needed for hard limits (Users given limited slice of data) and soft limits (Users can grow up to some limit and then be expanded). + +K8s ecosystem services: + - There may be companies that want to offer their existing services (Build, CI, A/B-test, release automation, etc) for use with K8s. There should be some story for this case. + +Pods configs should be largely portable between Org-run and hosted configurations. + + +# Design + +Related discussion: +- http://issue.k8s.io/442 +- http://issue.k8s.io/443 + +This doc describes two security profiles: + - Simple profile: like single-user mode. Make it easy to evaluate K8s without lots of configuring accounts and policies. Protects from unauthorized users, but does not partition authorized users. + - Enterprise profile: Provide mechanisms needed for large numbers of users. Defense in depth. Should integrate with existing enterprise security infrastructure. + +K8s distribution should include templates of config, and documentation, for simple and enterprise profiles. System should be flexible enough for knowledgeable users to create intermediate profiles, but K8s developers should only reason about those two Profiles, not a matrix. + +Features in this doc are divided into "Initial Feature", and "Improvements". Initial features would be candidates for version 1.00. + +## Identity + +### userAccount + +K8s will have a `userAccount` API object. +- `userAccount` has a UID which is immutable. This is used to associate users with objects and to record actions in audit logs. +- `userAccount` has a name which is a string and human readable and unique among userAccounts. It is used to refer to users in Policies, to ensure that the Policies are human readable. It can be changed only when there are no Policy objects or other objects which refer to that name. An email address is a suggested format for this field. +- `userAccount` is not related to the unix username of processes in Pods created by that userAccount. +- `userAccount` API objects can have labels. + +The system may associate one or more Authentication Methods with a +`userAccount` (but they are not formally part of the userAccount object.) +In a simple deployment, the authentication method for a +user might be an authentication token which is verified by a K8s server. In a +more complex deployment, the authentication might be delegated to +another system which is trusted by the K8s API to authenticate users, but where +the authentication details are unknown to K8s. + +Initial Features: +- there is no superuser `userAccount` +- `userAccount` objects are statically populated in the K8s API store by reading a config file. Only a K8s Cluster Admin can do this. +- `userAccount` can have a default `namespace`. If API call does not specify a `namespace`, the default `namespace` for that caller is assumed. +- `userAccount` is global. A single human with access to multiple namespaces is recommended to only have one userAccount. + +Improvements: +- Make `userAccount` part of a separate API group from core K8s objects like `pod`. Facilitates plugging in alternate Access Management. + +Simple Profile: + - single `userAccount`, used by all K8s Users and Project Admins. One access token shared by all. + +Enterprise Profile: + - every human user has own `userAccount`. + - `userAccount`s have labels that indicate both membership in groups, and ability to act in certain roles. + - each service using the API has own `userAccount` too. (e.g. `scheduler`, `repcontroller`) + - automated jobs to denormalize the ldap group info into the local system list of users into the K8s userAccount file. + +### Unix accounts + +A `userAccount` is not a Unix user account. The fact that a pod is started by a `userAccount` does not mean that the processes in that pod's containers run as a Unix user with a corresponding name or identity. + +Initially: +- The unix accounts available in a container, and used by the processes running in a container are those that are provided by the combination of the base operating system and the Docker manifest. +- Kubernetes doesn't enforce any relation between `userAccount` and unix accounts. + +Improvements: +- Kubelet allocates disjoint blocks of root-namespace uids for each container. This may provide some defense-in-depth against container escapes. (https://github.com/docker/docker/pull/4572) +- requires docker to integrate user namespace support, and deciding what getpwnam() does for these uids. +- any features that help users avoid use of privileged containers (http://issue.k8s.io/391) + +### Namespaces + +K8s will have a have a `namespace` API object. It is similar to a Google Compute Engine `project`. It provides a namespace for objects created by a group of people co-operating together, preventing name collisions with non-cooperating groups. It also serves as a reference point for authorization policies. + +Namespaces are described in [namespaces.md](namespaces.html). + +In the Enterprise Profile: + - a `userAccount` may have permission to access several `namespace`s. + +In the Simple Profile: + - There is a single `namespace` used by the single user. + +Namespaces versus userAccount vs Labels: +- `userAccount`s are intended for audit logging (both name and UID should be logged), and to define who has access to `namespace`s. +- `labels` (see [docs/user-guide/labels.md](../../docs/user-guide/labels.html)) should be used to distinguish pods, users, and other objects that cooperate towards a common goal but are different in some way, such as version, or responsibilities. +- `namespace`s prevent name collisions between uncoordinated groups of people, and provide a place to attach common policies for co-operating groups of people. + + +## Authentication + +Goals for K8s authentication: +- Include a built-in authentication system with no configuration required to use in single-user mode, and little configuration required to add several user accounts, and no https proxy required. +- Allow for authentication to be handled by a system external to Kubernetes, to allow integration with existing to enterprise authorization systems. The Kubernetes namespace itself should avoid taking contributions of multiple authorization schemes. Instead, a trusted proxy in front of the apiserver can be used to authenticate users. + - For organizations whose security requirements only allow FIPS compliant implementations (e.g. apache) for authentication. + - So the proxy can terminate SSL, and isolate the CA-signed certificate from less trusted, higher-touch APIserver. + - For organizations that already have existing SaaS web services (e.g. storage, VMs) and want a common authentication portal. +- Avoid mixing authentication and authorization, so that authorization policies be centrally managed, and to allow changes in authentication methods without affecting authorization code. + +Initially: +- Tokens used to authenticate a user. +- Long lived tokens identify a particular `userAccount`. +- Administrator utility generates tokens at cluster setup. +- OAuth2.0 Bearer tokens protocol, http://tools.ietf.org/html/rfc6750 +- No scopes for tokens. Authorization happens in the API server +- Tokens dynamically generated by apiserver to identify pods which are making API calls. +- Tokens checked in a module of the APIserver. +- Authentication in apiserver can be disabled by flag, to allow testing without authorization enabled, and to allow use of an authenticating proxy. In this mode, a query parameter or header added by the proxy will identify the caller. + +Improvements: +- Refresh of tokens. +- SSH keys to access inside containers. + +To be considered for subsequent versions: +- Fuller use of OAuth (http://tools.ietf.org/html/rfc6749) +- Scoped tokens. +- Tokens that are bound to the channel between the client and the api server + - http://www.ietf.org/proceedings/90/slides/slides-90-uta-0.pdf + - http://www.browserauth.net + + +## Authorization + +K8s authorization should: +- Allow for a range of maturity levels, from single-user for those test driving the system, to integration with existing to enterprise authorization systems. +- Allow for centralized management of users and policies. In some organizations, this will mean that the definition of users and access policies needs to reside on a system other than k8s and encompass other web services (such as a storage service). +- Allow processes running in K8s Pods to take on identity, and to allow narrow scoping of permissions for those identities in order to limit damage from software faults. +- Have Authorization Policies exposed as API objects so that a single config file can create or delete Pods, Replication Controllers, Services, and the identities and policies for those Pods and Replication Controllers. +- Be separate as much as practical from Authentication, to allow Authentication methods to change over time and space, without impacting Authorization policies. + +K8s will implement a relatively simple +[Attribute-Based Access Control](http://en.wikipedia.org/wiki/Attribute_Based_Access_Control) model. +The model will be described in more detail in a forthcoming document. The model will +- Be less complex than XACML +- Be easily recognizable to those familiar with Amazon IAM Policies. +- Have a subset/aliases/defaults which allow it to be used in a way comfortable to those users more familiar with Role-Based Access Control. + +Authorization policy is set by creating a set of Policy objects. + +The API Server will be the Enforcement Point for Policy. For each API call that it receives, it will construct the Attributes needed to evaluate the policy (what user is making the call, what resource they are accessing, what they are trying to do that resource, etc) and pass those attributes to a Decision Point. The Decision Point code evaluates the Attributes against all the Policies and allows or denies the API call. The system will be modular enough that the Decision Point code can either be linked into the APIserver binary, or be another service that the apiserver calls for each Decision (with appropriate time-limited caching as needed for performance). + +Policy objects may be applicable only to a single namespace or to all namespaces; K8s Project Admins would be able to create those as needed. Other Policy objects may be applicable to all namespaces; a K8s Cluster Admin might create those in order to authorize a new type of controller to be used by all namespaces, or to make a K8s User into a K8s Project Admin.) + + +## Accounting + +The API should have a `quota` concept (see http://issue.k8s.io/442). A quota object relates a namespace (and optionally a label selector) to a maximum quantity of resources that may be used (see [resources design doc](resources.html)). + +Initially: +- a `quota` object is immutable. +- for hosted K8s systems that do billing, Project is recommended level for billing accounts. +- Every object that consumes resources should have a `namespace` so that Resource usage stats are roll-up-able to `namespace`. +- K8s Cluster Admin sets quota objects by writing a config file. + +Improvements: +- allow one namespace to charge the quota for one or more other namespaces. This would be controlled by a policy which allows changing a billing_namespace= label on an object. +- allow quota to be set by namespace owners for (namespace x label) combinations (e.g. let "webserver" namespace use 100 cores, but to prevent accidents, don't allow "webserver" namespace and "instance=test" use more than 10 cores. +- tools to help write consistent quota config files based on number of nodes, historical namespace usages, QoS needs, etc. +- way for K8s Cluster Admin to incrementally adjust Quota objects. + +Simple profile: + - a single `namespace` with infinite resource limits. + +Enterprise profile: + - multiple namespaces each with their own limits. + +Issues: +- need for locking or "eventual consistency" when multiple apiserver goroutines are accessing the object store and handling pod creations. + + +## Audit Logging + +API actions can be logged. + +Initial implementation: +- All API calls logged to nginx logs. + +Improvements: +- API server does logging instead. +- Policies to drop logging for high rate trusted API calls, or by users performing audit or other sensitive functions. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/access.md?pixel)]() + + diff --git a/v1.1/docs/design/admission_control.md b/v1.1/docs/design/admission_control.md new file mode 100644 index 0000000000000..976388d7775e8 --- /dev/null +++ b/v1.1/docs/design/admission_control.md @@ -0,0 +1,106 @@ +--- +layout: docwithnav +title: "Kubernetes Proposal - Admission Control" +--- + + + + + +# Kubernetes Proposal - Admission Control + +**Related PR:** + +| Topic | Link | +| ----- | ---- | +| Separate validation from RESTStorage | http://issue.k8s.io/2977 | + +## Background + +High level goals: + +* Enable an easy-to-use mechanism to provide admission control to cluster +* Enable a provider to support multiple admission control strategies or author their own +* Ensure any rejected request can propagate errors back to the caller with why the request failed + +Authorization via policy is focused on answering if a user is authorized to perform an action. + +Admission Control is focused on if the system will accept an authorized action. + +Kubernetes may choose to dismiss an authorized action based on any number of admission control strategies. + +This proposal documents the basic design, and describes how any number of admission control plug-ins could be injected. + +Implementation of specific admission control strategies are handled in separate documents. + +## kube-apiserver + +The kube-apiserver takes the following OPTIONAL arguments to enable admission control + +| Option | Behavior | +| ------ | -------- | +| admission-control | Comma-delimited, ordered list of admission control choices to invoke prior to modifying or deleting an object. | +| admission-control-config-file | File with admission control configuration parameters to boot-strap plug-in. | + +An **AdmissionControl** plug-in is an implementation of the following interface: + +{% highlight go %} +{% raw %} +package admission + +// Attributes is an interface used by a plug-in to make an admission decision on a individual request. +type Attributes interface { + GetNamespace() string + GetKind() string + GetOperation() string + GetObject() runtime.Object +} + +// Interface is an abstract, pluggable interface for Admission Control decisions. +type Interface interface { + // Admit makes an admission decision based on the request attributes + // An error is returned if it denies the request. + Admit(a Attributes) (err error) +} +{% endraw %} +{% endhighlight %} + +A **plug-in** must be compiled with the binary, and is registered as an available option by providing a name, and implementation +of admission.Interface. + +{% highlight go %} +{% raw %} +func init() { + admission.RegisterPlugin("AlwaysDeny", func(client client.Interface, config io.Reader) (admission.Interface, error) { return NewAlwaysDeny(), nil }) +} +{% endraw %} +{% endhighlight %} + +Invocation of admission control is handled by the **APIServer** and not individual **RESTStorage** implementations. + +This design assumes that **Issue 297** is adopted, and as a consequence, the general framework of the APIServer request/response flow will ensure the following: + +1. Incoming request +2. Authenticate user +3. Authorize user +4. If operation=create|update|delete|connect, then admission.Admit(requestAttributes) + - invoke each admission.Interface object in sequence +5. Case on the operation: + - If operation=create|update, then validate(object) and persist + - If operation=delete, delete the object + - If operation=connect, exec + +If at any step, there is an error, the request is canceled. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/admission_control.md?pixel)]() + + diff --git a/v1.1/docs/design/admission_control_limit_range.md b/v1.1/docs/design/admission_control_limit_range.md new file mode 100644 index 0000000000000..8a1bf367443df --- /dev/null +++ b/v1.1/docs/design/admission_control_limit_range.md @@ -0,0 +1,219 @@ +--- +layout: docwithnav +title: "Admission control plugin: LimitRanger" +--- + + + + + +# Admission control plugin: LimitRanger + +## Background + +This document proposes a system for enforcing resource requirements constraints as part of admission control. + +## Use cases + +1. Ability to enumerate resource requirement constraints per namespace +2. Ability to enumerate min/max resource constraints for a pod +3. Ability to enumerate min/max resource constraints for a container +4. Ability to specify default resource limits for a container +5. Ability to specify default resource requests for a container +6. Ability to enforce a ratio between request and limit for a resource. + +## Data Model + +The **LimitRange** resource is scoped to a **Namespace**. + +### Type + +{% highlight go %} +{% raw %} +// LimitType is a type of object that is limited +type LimitType string + +const ( + // Limit that applies to all pods in a namespace + LimitTypePod LimitType = "Pod" + // Limit that applies to all containers in a namespace + LimitTypeContainer LimitType = "Container" +) + +// LimitRangeItem defines a min/max usage limit for any resource that matches on kind. +type LimitRangeItem struct { + // Type of resource that this limit applies to. + Type LimitType `json:"type,omitempty"` + // Max usage constraints on this kind by resource name. + Max ResourceList `json:"max,omitempty"` + // Min usage constraints on this kind by resource name. + Min ResourceList `json:"min,omitempty"` + // Default resource requirement limit value by resource name if resource limit is omitted. + Default ResourceList `json:"default,omitempty"` + // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. + DefaultRequest ResourceList `json:"defaultRequest,omitempty"` + // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. + MaxLimitRequestRatio ResourceList `json:"maxLimitRequestRatio,omitempty"` +} + +// LimitRangeSpec defines a min/max usage limit for resources that match on kind. +type LimitRangeSpec struct { + // Limits is the list of LimitRangeItem objects that are enforced. + Limits []LimitRangeItem `json:"limits"` +} + +// LimitRange sets resource usage limits for each kind of resource in a Namespace. +type LimitRange struct { + TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the limits enforced. + // More info: http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#spec-and-status + Spec LimitRangeSpec `json:"spec,omitempty"` +} + +// LimitRangeList is a list of LimitRange items. +type LimitRangeList struct { + TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#types-kinds + ListMeta `json:"metadata,omitempty"` + + // Items is a list of LimitRange objects. + // More info: http://releases.k8s.io/release-1.1/docs/design/admission_control_limit_range.md + Items []LimitRange `json:"items"` +} +{% endraw %} +{% endhighlight %} + +### Validation + +Validation of a **LimitRange** enforces that for a given named resource the following rules apply: + +Min (if specified) <= DefaultRequest (if specified) <= Default (if specified) <= Max (if specified) + +### Default Value Behavior + +The following default value behaviors are applied to a LimitRange for a given named resource. + +``` +{% raw %} +if LimitRangeItem.Default[resourceName] is undefined + if LimitRangeItem.Max[resourceName] is defined + LimitRangeItem.Default[resourceName] = LimitRangeItem.Max[resourceName] +{% endraw %} +``` + +``` +{% raw %} +if LimitRangeItem.DefaultRequest[resourceName] is undefined + if LimitRangeItem.Default[resourceName] is defined + LimitRangeItem.DefaultRequest[resourceName] = LimitRangeItem.Default[resourceName] + else if LimitRangeItem.Min[resourceName] is defined + LimitRangeItem.DefaultRequest[resourceName] = LimitRangeItem.Min[resourceName] +{% endraw %} +``` + +## AdmissionControl plugin: LimitRanger + +The **LimitRanger** plug-in introspects all incoming pod requests and evaluates the constraints defined on a LimitRange. + +If a constraint is not specified for an enumerated resource, it is not enforced or tracked. + +To enable the plug-in and support for LimitRange, the kube-apiserver must be configured as follows: + +{% highlight console %} +{% raw %} +$ kube-apiserver --admission-control=LimitRanger +{% endraw %} +{% endhighlight %} + +### Enforcement of constraints + +**Type: Container** + +Supported Resources: + +1. memory +2. cpu + +Supported Constraints: + +Per container, the following must hold true + +| Constraint | Behavior | +| ---------- | -------- | +| Min | Min <= Request (required) <= Limit (optional) | +| Max | Limit (required) <= Max | +| LimitRequestRatio | LimitRequestRatio <= ( Limit (required, non-zero) / Request (required, non-zero)) | + +Supported Defaults: + +1. Default - if the named resource has no enumerated value, the Limit is equal to the Default +2. DefaultRequest - if the named resource has no enumerated value, the Request is equal to the DefaultRequest + +**Type: Pod** + +Supported Resources: + +1. memory +2. cpu + +Supported Constraints: + +Across all containers in pod, the following must hold true + +| Constraint | Behavior | +| ---------- | -------- | +| Min | Min <= Request (required) <= Limit (optional) | +| Max | Limit (required) <= Max | +| LimitRequestRatio | LimitRequestRatio <= ( Limit (required, non-zero) / Request (non-zero) ) | + +## Run-time configuration + +The default ```LimitRange``` that is applied via Salt configuration will be updated as follows: + +``` +{% raw %} +apiVersion: "v1" +kind: "LimitRange" +metadata: + name: "limits" + namespace: default +spec: + limits: + - type: "Container" + defaultRequests: + cpu: "100m" +{% endraw %} +``` + +## Example + +An example LimitRange configuration: + +| Type | Resource | Min | Max | Default | DefaultRequest | LimitRequestRatio | +| ---- | -------- | --- | --- | ------- | -------------- | ----------------- | +| Container | cpu | .1 | 1 | 500m | 250m | 4 | +| Container | memory | 250Mi | 1Gi | 500Mi | 250Mi | | + +Assuming an incoming container that specified no incoming resource requirements, +the following would happen. + +1. The incoming container cpu would request 250m with a limit of 500m. +2. The incoming container memory would request 250Mi with a limit of 500Mi +3. If the container is later resized, it's cpu would be constrained to between .1 and 1 and the ratio of limit to request could not exceed 4. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/admission_control_limit_range.md?pixel)]() + + diff --git a/v1.1/docs/design/admission_control_resource_quota.md b/v1.1/docs/design/admission_control_resource_quota.md new file mode 100644 index 0000000000000..77011589f6f57 --- /dev/null +++ b/v1.1/docs/design/admission_control_resource_quota.md @@ -0,0 +1,219 @@ +--- +layout: docwithnav +title: "Admission control plugin: ResourceQuota" +--- + + + + + +# Admission control plugin: ResourceQuota + +## Background + +This document describes a system for enforcing hard resource usage limits per namespace as part of admission control. + +## Use cases + +1. Ability to enumerate resource usage limits per namespace. +2. Ability to monitor resource usage for tracked resources. +3. Ability to reject resource usage exceeding hard quotas. + +## Data Model + +The **ResourceQuota** object is scoped to a **Namespace**. + +{% highlight go %} +{% raw %} +// The following identify resource constants for Kubernetes object types +const ( + // Pods, number + ResourcePods ResourceName = "pods" + // Services, number + ResourceServices ResourceName = "services" + // ReplicationControllers, number + ResourceReplicationControllers ResourceName = "replicationcontrollers" + // ResourceQuotas, number + ResourceQuotas ResourceName = "resourcequotas" + // ResourceSecrets, number + ResourceSecrets ResourceName = "secrets" + // ResourcePersistentVolumeClaims, number + ResourcePersistentVolumeClaims ResourceName = "persistentvolumeclaims" +) + +// ResourceQuotaSpec defines the desired hard limits to enforce for Quota +type ResourceQuotaSpec struct { + // Hard is the set of desired hard limits for each named resource + Hard ResourceList `json:"hard,omitempty" description:"hard is the set of desired hard limits for each named resource; see http://releases.k8s.io/release-1.1/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota"` +} + +// ResourceQuotaStatus defines the enforced hard limits and observed use +type ResourceQuotaStatus struct { + // Hard is the set of enforced hard limits for each named resource + Hard ResourceList `json:"hard,omitempty" description:"hard is the set of enforced hard limits for each named resource; see http://releases.k8s.io/release-1.1/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota"` + // Used is the current observed total usage of the resource in the namespace + Used ResourceList `json:"used,omitempty" description:"used is the current observed total usage of the resource in the namespace"` +} + +// ResourceQuota sets aggregate quota restrictions enforced per namespace +type ResourceQuota struct { + TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty" description:"standard object metadata; see http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#metadata"` + + // Spec defines the desired quota + Spec ResourceQuotaSpec `json:"spec,omitempty" description:"spec defines the desired quota; http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#spec-and-status"` + + // Status defines the actual enforced quota and its current usage + Status ResourceQuotaStatus `json:"status,omitempty" description:"status defines the actual enforced quota and current usage; http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#spec-and-status"` +} + +// ResourceQuotaList is a list of ResourceQuota items +type ResourceQuotaList struct { + TypeMeta `json:",inline"` + ListMeta `json:"metadata,omitempty" description:"standard list metadata; see http://releases.k8s.io/release-1.1/docs/devel/api-conventions.md#metadata"` + + // Items is a list of ResourceQuota objects + Items []ResourceQuota `json:"items" description:"items is a list of ResourceQuota objects; see http://releases.k8s.io/release-1.1/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota"` +} +{% endraw %} +{% endhighlight %} + +## Quota Tracked Resources + +The following resources are supported by the quota system. + +| Resource | Description | +| ------------ | ----------- | +| cpu | Total requested cpu usage | +| memory | Total requested memory usage | +| pods | Total number of active pods where phase is pending or active. | +| services | Total number of services | +| replicationcontrollers | Total number of replication controllers | +| resourcequotas | Total number of resource quotas | +| secrets | Total number of secrets | +| persistentvolumeclaims | Total number of persistent volume claims | + +If a third-party wants to track additional resources, it must follow the resource naming conventions prescribed +by Kubernetes. This means the resource must have a fully-qualified name (i.e. mycompany.org/shinynewresource) + +## Resource Requirements: Requests vs Limits + +If a resource supports the ability to distinguish between a request and a limit for a resource, +the quota tracking system will only cost the request value against the quota usage. If a resource +is tracked by quota, and no request value is provided, the associated entity is rejected as part of admission. + +For an example, consider the following scenarios relative to tracking quota on CPU: + +| Pod | Container | Request CPU | Limit CPU | Result | +| --- | --------- | ----------- | --------- | ------ | +| X | C1 | 100m | 500m | The quota usage is incremented 100m | +| Y | C2 | 100m | none | The quota usage is incremented 100m | +| Y | C2 | none | 500m | The quota usage is incremented 500m since request will default to limit | +| Z | C3 | none | none | The pod is rejected since it does not enumerate a request. | + +The rationale for accounting for the requested amount of a resource versus the limit is the belief +that a user should only be charged for what they are scheduled against in the cluster. In addition, +attempting to track usage against actual usage, where request < actual < limit, is considered highly +volatile. + +As a consequence of this decision, the user is able to spread its usage of a resource across multiple tiers +of service. Let's demonstrate this via an example with a 4 cpu quota. + +The quota may be allocated as follows: + +| Pod | Container | Request CPU | Limit CPU | Tier | Quota Usage | +| --- | --------- | ----------- | --------- | ---- | ----------- | +| X | C1 | 1 | 4 | Burstable | 1 | +| Y | C2 | 2 | 2 | Guaranteed | 2 | +| Z | C3 | 1 | 3 | Burstable | 1 | + +It is possible that the pods may consume 9 cpu over a given time period depending on the nodes available cpu +that held pod X and Z, but since we scheduled X and Z relative to the request, we only track the requesting +value against their allocated quota. If one wants to restrict the ratio between the request and limit, +it is encouraged that the user define a **LimitRange** with **LimitRequestRatio** to control burst out behavior. +This would in effect, let an administrator keep the difference between request and limit more in line with +tracked usage if desired. + +## Status API + +A REST API endpoint to update the status section of the **ResourceQuota** is exposed. It requires an atomic compare-and-swap +in order to keep resource usage tracking consistent. + +## Resource Quota Controller + +A resource quota controller monitors observed usage for tracked resources in the **Namespace**. + +If there is observed difference between the current usage stats versus the current **ResourceQuota.Status**, the controller +posts an update of the currently observed usage metrics to the **ResourceQuota** via the /status endpoint. + +The resource quota controller is the only component capable of monitoring and recording usage updates after a DELETE operation +since admission control is incapable of guaranteeing a DELETE request actually succeeded. + +## AdmissionControl plugin: ResourceQuota + +The **ResourceQuota** plug-in introspects all incoming admission requests. + +To enable the plug-in and support for ResourceQuota, the kube-apiserver must be configured as follows: + +``` +{% raw %} +$ kube-apiserver --admission-control=ResourceQuota +{% endraw %} +``` + +It makes decisions by evaluating the incoming object against all defined **ResourceQuota.Status.Hard** resource limits in the request +namespace. If acceptance of the resource would cause the total usage of a named resource to exceed its hard limit, the request is denied. + +If the incoming request does not cause the total usage to exceed any of the enumerated hard resource limits, the plug-in will post a +**ResourceQuota.Status** document to the server to atomically update the observed usage based on the previously read +**ResourceQuota.ResourceVersion**. This keeps incremental usage atomically consistent, but does introduce a bottleneck (intentionally) +into the system. + +To optimize system performance, it is encouraged that all resource quotas are tracked on the same **ResourceQuota** document in a **Namespace**. As a result, its encouraged to impose a cap on the total number of individual quotas that are tracked in the **Namespace** +to 1 in the **ResourceQuota** document. + +## kubectl + +kubectl is modified to support the **ResourceQuota** resource. + +`kubectl describe` provides a human-readable output of quota. + +For example, + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/admin/resourcequota/namespace.yaml +namespace "quota-example" created +$ kubectl create -f docs/admin/resourcequota/quota.yaml --namespace=quota-example +resourcequota "quota" created +$ kubectl describe quota quota --namespace=quota-example +Name: quota +Namespace: quota-example +Resource Used Hard +-------- ---- ---- +cpu 0 20 +memory 0 1Gi +persistentvolumeclaims 0 10 +pods 0 10 +replicationcontrollers 0 20 +resourcequotas 1 1 +secrets 1 10 +services 0 5 +{% endraw %} +{% endhighlight %} + +## More information + +See [resource quota document](../admin/resource-quota.html) and the [example of Resource Quota](../admin/resourcequota/) for more information. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/admission_control_resource_quota.md?pixel)]() + + diff --git a/v1.1/docs/design/architecture.dia b/v1.1/docs/design/architecture.dia new file mode 100644 index 0000000000000000000000000000000000000000..5c87409f266d0af17bbec155c4a43ef8055786a3 GIT binary patch literal 6523 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/design/architecture.md b/v1.1/docs/design/architecture.md new file mode 100644 index 0000000000000..b959e05c5151c --- /dev/null +++ b/v1.1/docs/design/architecture.md @@ -0,0 +1,67 @@ +--- +layout: docwithnav +title: "Kubernetes architecture" +--- + + + + + +# Kubernetes architecture + +A running Kubernetes cluster contains node agents (`kubelet`) and master components (APIs, scheduler, etc), on top of a distributed storage solution. This diagram shows our desired eventual state, though we're still working on a few things, like making `kubelet` itself (all our components, really) run within containers, and making the scheduler 100% pluggable. + +![Architecture Diagram](architecture.png?raw=true "Architecture overview") + +## The Kubernetes Node + +When looking at the architecture of the system, we'll break it down to services that run on the worker node and services that compose the cluster-level control plane. + +The Kubernetes node has the services necessary to run application containers and be managed from the master systems. + +Each node runs Docker, of course. Docker takes care of the details of downloading images and running containers. + +### `kubelet` + +The `kubelet` manages [pods](../user-guide/pods.html) and their containers, their images, their volumes, etc. + +### `kube-proxy` + +Each node also runs a simple network proxy and load balancer (see the [services FAQ](https://github.com/kubernetes/kubernetes/wiki/Services-FAQ) for more details). This reflects `services` (see [the services doc](../user-guide/services.html) for more details) as defined in the Kubernetes API on each node and can do simple TCP and UDP stream forwarding (round robin) across a set of backends. + +Service endpoints are currently found via [DNS](../admin/dns.html) or through environment variables (both [Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) and Kubernetes `{FOO}_SERVICE_HOST` and `{FOO}_SERVICE_PORT` variables are supported). These variables resolve to ports managed by the service proxy. + +## The Kubernetes Control Plane + +The Kubernetes control plane is split into a set of components. Currently they all run on a single _master_ node, but that is expected to change soon in order to support high-availability clusters. These components work together to provide a unified view of the cluster. + +### `etcd` + +All persistent master state is stored in an instance of `etcd`. This provides a great way to store configuration data reliably. With `watch` support, coordinating components can be notified very quickly of changes. + +### Kubernetes API Server + +The apiserver serves up the [Kubernetes API](../api.html). It is intended to be a CRUD-y server, with most/all business logic implemented in separate components or in plug-ins. It mainly processes REST operations, validates them, and updates the corresponding objects in `etcd` (and eventually other stores). + +### Scheduler + +The scheduler binds unscheduled pods to nodes via the `/binding` API. The scheduler is pluggable, and we expect to support multiple cluster schedulers and even user-provided schedulers in the future. + +### Kubernetes Controller Manager Server + +All other cluster-level functions are currently performed by the Controller Manager. For instance, `Endpoints` objects are created and updated by the endpoints controller, and nodes are discovered, managed, and monitored by the node controller. These could eventually be split into separate components to make them independently pluggable. + +The [`replicationcontroller`](../user-guide/replication-controller.html) is a mechanism that is layered on top of the simple [`pod`](../user-guide/pods.html) API. We eventually plan to port it to a generic plug-in mechanism, once one is implemented. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/architecture.md?pixel)]() + + diff --git a/v1.1/docs/design/architecture.png b/v1.1/docs/design/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee8bceb43ee5ff3d8aa9545d5889340b82202bc GIT binary patch literal 268126 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 BuN?pY literal 0 HcmV?d00001 diff --git a/v1.1/docs/design/architecture.svg b/v1.1/docs/design/architecture.svg new file mode 100644 index 0000000000000..d6b6aab0ee847 --- /dev/null +++ b/v1.1/docs/design/architecture.svg @@ -0,0 +1,1943 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + Node + + + + + + kubelet + + + + + + + + + + + container + + + + + + + container + + + + + + + cAdvisor + + + + + + + Pod + + + + + + + + + + + container + + + + + + + container + + + + + + + container + + + + + + + Pod + + + + + + + + + + + + container + + + + + + + container + + + + + + + container + + + + + + + Pod + + + + + + + Proxy + + + + + + + kubectl (user commands) + + + + + + + + + + + + + + + Firewall + + + + + + + Internet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + controller manager + (replication controller etc.) + + + + + + + Scheduler + + + + + + + Scheduler + + + + Master components + Colocated, or spread across machines, + as dictated by cluster size. + + + + + + + + + + + + REST + (pods, services, + rep. controllers) + + + + + + + authentication + authorization + + + + + + + scheduling + actuator + + + + APIs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + docker + + + + + + + + .. + + + ... + + + + + + + + + + + + + + + + + + + + + + + + Node + + + + + + kubelet + + + + + + + + + + + container + + + + + + + container + + + + + + + cAdvisor + + + + + + + Pod + + + + + + + + + + + container + + + + + + + container + + + + + + + container + + + + + + + Pod + + + + + + + + + + + + container + + + + + + + container + + + + + + + container + + + + + + + Pod + + + + + + + Proxy + + + + + + + + + + + + + + + + + + + docker + + + + + + + + .. + + + ... + + + + + + + + + + + + + + + + + + + + + + + + + + Distributed + Watchable + Storage + + (implemented via etcd) + + + diff --git a/v1.1/docs/design/clustering.md b/v1.1/docs/design/clustering.md new file mode 100644 index 0000000000000..d7de3c70eabb2 --- /dev/null +++ b/v1.1/docs/design/clustering.md @@ -0,0 +1,83 @@ +--- +layout: docwithnav +title: "Clustering in Kubernetes" +--- + + + + + +# Clustering in Kubernetes + + +## Overview + +The term "clustering" refers to the process of having all members of the Kubernetes cluster find and trust each other. There are multiple different ways to achieve clustering with different security and usability profiles. This document attempts to lay out the user experiences for clustering that Kubernetes aims to address. + +Once a cluster is established, the following is true: + +1. **Master -> Node** The master needs to know which nodes can take work and what their current status is wrt capacity. + 1. **Location** The master knows the name and location of all of the nodes in the cluster. + * For the purposes of this doc, location and name should be enough information so that the master can open a TCP connection to the Node. Most probably we will make this either an IP address or a DNS name. It is going to be important to be consistent here (master must be able to reach kubelet on that DNS name) so that we can verify certificates appropriately. + 2. **Target AuthN** A way to securely talk to the kubelet on that node. Currently we call out to the kubelet over HTTP. This should be over HTTPS and the master should know what CA to trust for that node. + 3. **Caller AuthN/Z** This would be the master verifying itself (and permissions) when calling the node. Currently, this is only used to collect statistics as authorization isn't critical. This may change in the future though. +2. **Node -> Master** The nodes currently talk to the master to know which pods have been assigned to them and to publish events. + 1. **Location** The nodes must know where the master is at. + 2. **Target AuthN** Since the master is assigning work to the nodes, it is critical that they verify whom they are talking to. + 3. **Caller AuthN/Z** The nodes publish events and so must be authenticated to the master. Ideally this authentication is specific to each node so that authorization can be narrowly scoped. The details of the work to run (including things like environment variables) might be considered sensitive and should be locked down also. + +**Note:** While the description here refers to a singular Master, in the future we should enable multiple Masters operating in an HA mode. While the "Master" is currently the combination of the API Server, Scheduler and Controller Manager, we will restrict ourselves to thinking about the main API and policy engine -- the API Server. + +## Current Implementation + +A central authority (generally the master) is responsible for determining the set of machines which are members of the cluster. Calls to create and remove worker nodes in the cluster are restricted to this single authority, and any other requests to add or remove worker nodes are rejected. (1.i). + +Communication from the master to nodes is currently over HTTP and is not secured or authenticated in any way. (1.ii, 1.iii). + +The location of the master is communicated out of band to the nodes. For GCE, this is done via Salt. Other cluster instructions/scripts use other methods. (2.i) + +Currently most communication from the node to the master is over HTTP. When it is done over HTTPS there is currently no verification of the cert of the master (2.ii). + +Currently, the node/kubelet is authenticated to the master via a token shared across all nodes. This token is distributed out of band (using Salt for GCE) and is optional. If it is not present then the kubelet is unable to publish events to the master. (2.iii) + +Our current mix of out of band communication doesn't meet all of our needs from a security point of view and is difficult to set up and configure. + +## Proposed Solution + +The proposed solution will provide a range of options for setting up and maintaining a secure Kubernetes cluster. We want to both allow for centrally controlled systems (leveraging pre-existing trust and configuration systems) or more ad-hoc automagic systems that are incredibly easy to set up. + +The building blocks of an easier solution: + +* **Move to TLS** We will move to using TLS for all intra-cluster communication. We will explicitly identify the trust chain (the set of trusted CAs) as opposed to trusting the system CAs. We will also use client certificates for all AuthN. +* [optional] **API driven CA** Optionally, we will run a CA in the master that will mint certificates for the nodes/kubelets. There will be pluggable policies that will automatically approve certificate requests here as appropriate. + * **CA approval policy** This is a pluggable policy object that can automatically approve CA signing requests. Stock policies will include `always-reject`, `queue` and `insecure-always-approve`. With `queue` there would be an API for evaluating and accepting/rejecting requests. Cloud providers could implement a policy here that verifies other out of band information and automatically approves/rejects based on other external factors. +* **Scoped Kubelet Accounts** These accounts are per-node and (optionally) give a node permission to register itself. + * To start with, we'd have the kubelets generate a cert/account in the form of `kubelet:`. To start we would then hard code policy such that we give that particular account appropriate permissions. Over time, we can make the policy engine more generic. +* [optional] **Bootstrap API endpoint** This is a helper service hosted outside of the Kubernetes cluster that helps with initial discovery of the master. + +### Static Clustering + +In this sequence diagram there is out of band admin entity that is creating all certificates and distributing them. It is also making sure that the kubelets know where to find the master. This provides for a lot of control but is more difficult to set up as lots of information must be communicated outside of Kubernetes. + +![Static Sequence Diagram](clustering/static.png) + +### Dynamic Clustering + +This diagram dynamic clustering using the bootstrap API endpoint. That API endpoint is used to both find the location of the master and communicate the root CA for the master. + +This flow has the admin manually approving the kubelet signing requests. This is the `queue` policy defined above.This manual intervention could be replaced by code that can verify the signing requests via other means. + +![Dynamic Sequence Diagram](clustering/dynamic.png) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/clustering.md?pixel)]() + + diff --git a/v1.1/docs/design/clustering/.gitignore b/v1.1/docs/design/clustering/.gitignore new file mode 100644 index 0000000000000..67bcd6cb58a60 --- /dev/null +++ b/v1.1/docs/design/clustering/.gitignore @@ -0,0 +1 @@ +DroidSansMono.ttf diff --git a/v1.1/docs/design/clustering/Dockerfile b/v1.1/docs/design/clustering/Dockerfile new file mode 100644 index 0000000000000..3353419d84342 --- /dev/null +++ b/v1.1/docs/design/clustering/Dockerfile @@ -0,0 +1,12 @@ +FROM debian:jessie + +RUN apt-get update +RUN apt-get -qy install python-seqdiag make curl + +WORKDIR /diagrams + +RUN curl -sLo DroidSansMono.ttf https://googlefontdirectory.googlecode.com/hg/apache/droidsansmono/DroidSansMono.ttf + +ADD . /diagrams + +CMD bash -c 'make >/dev/stderr && tar cf - *.png' \ No newline at end of file diff --git a/v1.1/docs/design/clustering/Makefile b/v1.1/docs/design/clustering/Makefile new file mode 100644 index 0000000000000..f6aa53ed442e0 --- /dev/null +++ b/v1.1/docs/design/clustering/Makefile @@ -0,0 +1,29 @@ +FONT := DroidSansMono.ttf + +PNGS := $(patsubst %.seqdiag,%.png,$(wildcard *.seqdiag)) + +.PHONY: all +all: $(PNGS) + +.PHONY: watch +watch: + fswatch *.seqdiag | xargs -n 1 sh -c "make || true" + +$(FONT): + curl -sLo $@ https://googlefontdirectory.googlecode.com/hg/apache/droidsansmono/$(FONT) + +%.png: %.seqdiag $(FONT) + seqdiag --no-transparency -a -f '$(FONT)' $< + +# Build the stuff via a docker image +.PHONY: docker +docker: + docker build -t clustering-seqdiag . + docker run --rm clustering-seqdiag | tar xvf - + +docker-clean: + docker rmi clustering-seqdiag || true + docker images -q --filter "dangling=true" | xargs docker rmi + +fix-clock-skew: + boot2docker ssh sudo date -u -D "%Y%m%d%H%M.%S" --set "$(shell date -u +%Y%m%d%H%M.%S)" diff --git a/v1.1/docs/design/clustering/README.md b/v1.1/docs/design/clustering/README.md new file mode 100644 index 0000000000000..42b9f36b6c2ae --- /dev/null +++ b/v1.1/docs/design/clustering/README.md @@ -0,0 +1,52 @@ +--- +layout: docwithnav +title: "Building with Docker" +--- + + + + +This directory contains diagrams for the clustering design doc. + +This depends on the `seqdiag` [utility](http://blockdiag.com/en/seqdiag/index.html). Assuming you have a non-borked python install, this should be installable with + +{% highlight sh %} +{% raw %} +pip install seqdiag +{% endraw %} +{% endhighlight %} + +Just call `make` to regenerate the diagrams. + +## Building with Docker + +If you are on a Mac or your pip install is messed up, you can easily build with docker. + +{% highlight sh %} +{% raw %} +make docker +{% endraw %} +{% endhighlight %} + +The first run will be slow but things should be fast after that. + +To clean up the docker containers that are created (and other cruft that is left around) you can run `make docker-clean`. + +If you are using boot2docker and get warnings about clock skew (or if things aren't building for some reason) then you can fix that up with `make fix-clock-skew`. + +## Automatically rebuild on file changes + +If you have the fswatch utility installed, you can have it monitor the file system and automatically rebuild when files have changed. Just do a `make watch`. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/clustering/README.md?pixel)]() + + diff --git a/v1.1/docs/design/clustering/dynamic.png b/v1.1/docs/design/clustering/dynamic.png new file mode 100644 index 0000000000000000000000000000000000000000..92b40fee36281ad3bdb474a52c12d2150eb40b53 GIT binary patch literal 72373 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 bhXv-PK3X(=MY$aQ2+xkKTB^w^`%e8Ic1I?; literal 0 HcmV?d00001 diff --git a/v1.1/docs/design/clustering/dynamic.seqdiag b/v1.1/docs/design/clustering/dynamic.seqdiag new file mode 100644 index 0000000000000..95bb395e88684 --- /dev/null +++ b/v1.1/docs/design/clustering/dynamic.seqdiag @@ -0,0 +1,24 @@ +seqdiag { + activation = none; + + + user[label = "Admin User"]; + bootstrap[label = "Bootstrap API\nEndpoint"]; + master; + kubelet[stacked]; + + user -> bootstrap [label="createCluster", return="cluster ID"]; + user <-- bootstrap [label="returns\n- bootstrap-cluster-uri"]; + + user ->> master [label="start\n- bootstrap-cluster-uri"]; + master => bootstrap [label="setMaster\n- master-location\n- master-ca"]; + + user ->> kubelet [label="start\n- bootstrap-cluster-uri"]; + kubelet => bootstrap [label="get-master", return="returns\n- master-location\n- master-ca"]; + kubelet ->> master [label="signCert\n- unsigned-kubelet-cert", return="retuns\n- kubelet-cert"]; + user => master [label="getSignRequests"]; + user => master [label="approveSignRequests"]; + kubelet <<-- master [label="returns\n- kubelet-cert"]; + + kubelet => master [label="register\n- kubelet-location"] +} diff --git a/v1.1/docs/design/clustering/index.md b/v1.1/docs/design/clustering/index.md new file mode 100644 index 0000000000000..42b9f36b6c2ae --- /dev/null +++ b/v1.1/docs/design/clustering/index.md @@ -0,0 +1,52 @@ +--- +layout: docwithnav +title: "Building with Docker" +--- + + + + +This directory contains diagrams for the clustering design doc. + +This depends on the `seqdiag` [utility](http://blockdiag.com/en/seqdiag/index.html). Assuming you have a non-borked python install, this should be installable with + +{% highlight sh %} +{% raw %} +pip install seqdiag +{% endraw %} +{% endhighlight %} + +Just call `make` to regenerate the diagrams. + +## Building with Docker + +If you are on a Mac or your pip install is messed up, you can easily build with docker. + +{% highlight sh %} +{% raw %} +make docker +{% endraw %} +{% endhighlight %} + +The first run will be slow but things should be fast after that. + +To clean up the docker containers that are created (and other cruft that is left around) you can run `make docker-clean`. + +If you are using boot2docker and get warnings about clock skew (or if things aren't building for some reason) then you can fix that up with `make fix-clock-skew`. + +## Automatically rebuild on file changes + +If you have the fswatch utility installed, you can have it monitor the file system and automatically rebuild when files have changed. Just do a `make watch`. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/clustering/README.md?pixel)]() + + diff --git a/v1.1/docs/design/clustering/static.png b/v1.1/docs/design/clustering/static.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdeca7e6f56222e00e8e6f23d9ea1ef3bf23a34 GIT binary patch literal 36583 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� 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/design/clustering/static.seqdiag b/v1.1/docs/design/clustering/static.seqdiag new file mode 100644 index 0000000000000..bdc54b764e251 --- /dev/null +++ b/v1.1/docs/design/clustering/static.seqdiag @@ -0,0 +1,16 @@ +seqdiag { + activation = none; + + admin[label = "Manual Admin"]; + ca[label = "Manual CA"] + master; + kubelet[stacked]; + + admin => ca [label="create\n- master-cert"]; + admin ->> master [label="start\n- ca-root\n- master-cert"]; + + admin => ca [label="create\n- kubelet-cert"]; + admin ->> kubelet [label="start\n- ca-root\n- kubelet-cert\n- master-location"]; + + kubelet => master [label="register\n- kubelet-location"]; +} diff --git a/v1.1/docs/design/command_execution_port_forwarding.md b/v1.1/docs/design/command_execution_port_forwarding.md new file mode 100644 index 0000000000000..e605d32fe7af7 --- /dev/null +++ b/v1.1/docs/design/command_execution_port_forwarding.md @@ -0,0 +1,168 @@ +--- +layout: docwithnav +title: "Container Command Execution & Port Forwarding in Kubernetes" +--- + + + + + +# Container Command Execution & Port Forwarding in Kubernetes + +## Abstract + +This describes an approach for providing support for: + +- executing commands in containers, with stdin/stdout/stderr streams attached +- port forwarding to containers + +## Background + +There are several related issues/PRs: + +- [Support attach](http://issue.k8s.io/1521) +- [Real container ssh](http://issue.k8s.io/1513) +- [Provide easy debug network access to services](http://issue.k8s.io/1863) +- [OpenShift container command execution proposal](https://github.com/openshift/origin/pull/576) + +## Motivation + +Users and administrators are accustomed to being able to access their systems +via SSH to run remote commands, get shell access, and do port forwarding. + +Supporting SSH to containers in Kubernetes is a difficult task. You must +specify a "user" and a hostname to make an SSH connection, and `sshd` requires +real users (resolvable by NSS and PAM). Because a container belongs to a pod, +and the pod belongs to a namespace, you need to specify namespace/pod/container +to uniquely identify the target container. Unfortunately, a +namespace/pod/container is not a real user as far as SSH is concerned. Also, +most Linux systems limit user names to 32 characters, which is unlikely to be +large enough to contain namespace/pod/container. We could devise some scheme to +map each namespace/pod/container to a 32-character user name, adding entries to +`/etc/passwd` (or LDAP, etc.) and keeping those entries fully in sync all the +time. Alternatively, we could write custom NSS and PAM modules that allow the +host to resolve a namespace/pod/container to a user without needing to keep +files or LDAP in sync. + +As an alternative to SSH, we are using a multiplexed streaming protocol that +runs on top of HTTP. There are no requirements about users being real users, +nor is there any limitation on user name length, as the protocol is under our +control. The only downside is that standard tooling that expects to use SSH +won't be able to work with this mechanism, unless adapters can be written. + +## Constraints and Assumptions + +- SSH support is not currently in scope +- CGroup confinement is ultimately desired, but implementing that support is not currently in scope +- SELinux confinement is ultimately desired, but implementing that support is not currently in scope + +## Use Cases + +- As a user of a Kubernetes cluster, I want to run arbitrary commands in a container, attaching my local stdin/stdout/stderr to the container +- As a user of a Kubernetes cluster, I want to be able to connect to local ports on my computer and have them forwarded to ports in the container + +## Process Flow + +### Remote Command Execution Flow + +1. The client connects to the Kubernetes Master to initiate a remote command execution +request +2. The Master proxies the request to the Kubelet where the container lives +3. The Kubelet executes nsenter + the requested command and streams stdin/stdout/stderr back and forth between the client and the container + +### Port Forwarding Flow + +1. The client connects to the Kubernetes Master to initiate a remote command execution +request +2. The Master proxies the request to the Kubelet where the container lives +3. The client listens on each specified local port, awaiting local connections +4. The client connects to one of the local listening ports +4. The client notifies the Kubelet of the new connection +5. The Kubelet executes nsenter + socat and streams data back and forth between the client and the port in the container + + +## Design Considerations + +### Streaming Protocol + +The current multiplexed streaming protocol used is SPDY. This is not the +long-term desire, however. As soon as there is viable support for HTTP/2 in Go, +we will switch to that. + +### Master as First Level Proxy + +Clients should not be allowed to communicate directly with the Kubelet for +security reasons. Therefore, the Master is currently the only suggested entry +point to be used for remote command execution and port forwarding. This is not +necessarily desirable, as it means that all remote command execution and port +forwarding traffic must travel through the Master, potentially impacting other +API requests. + +In the future, it might make more sense to retrieve an authorization token from +the Master, and then use that token to initiate a remote command execution or +port forwarding request with a load balanced proxy service dedicated to this +functionality. This would keep the streaming traffic out of the Master. + +### Kubelet as Backend Proxy + +The kubelet is currently responsible for handling remote command execution and +port forwarding requests. Just like with the Master described above, this means +that all remote command execution and port forwarding streaming traffic must +travel through the Kubelet, which could result in a degraded ability to service +other requests. + +In the future, it might make more sense to use a separate service on the node. + +Alternatively, we could possibly inject a process into the container that only +listens for a single request, expose that process's listening port on the node, +and then issue a redirect to the client such that it would connect to the first +level proxy, which would then proxy directly to the injected process's exposed +port. This would minimize the amount of proxying that takes place. + +### Scalability + +There are at least 2 different ways to execute a command in a container: +`docker exec` and `nsenter`. While `docker exec` might seem like an easier and +more obvious choice, it has some drawbacks. + +#### `docker exec` + +We could expose `docker exec` (i.e. have Docker listen on an exposed TCP port +on the node), but this would require proxying from the edge and securing the +Docker API. `docker exec` calls go through the Docker daemon, meaning that all +stdin/stdout/stderr traffic is proxied through the Daemon, adding an extra hop. +Additionally, you can't isolate 1 malicious `docker exec` call from normal +usage, meaning an attacker could initiate a denial of service or other attack +and take down the Docker daemon, or the node itself. + +We expect remote command execution and port forwarding requests to be long +running and/or high bandwidth operations, and routing all the streaming data +through the Docker daemon feels like a bottleneck we can avoid. + +#### `nsenter` + +The implementation currently uses `nsenter` to run commands in containers, +joining the appropriate container namespaces. `nsenter` runs directly on the +node and is not proxied through any single daemon process. + +### Security + +Authentication and authorization hasn't specifically been tested yet with this +functionality. We need to make sure that users are not allowed to execute +remote commands or do port forwarding to containers they aren't allowed to +access. + +Additional work is required to ensure that multiple command execution or port forwarding connections from different clients are not able to see each other's data. This can most likely be achieved via SELinux labeling and unique process contexts. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/command_execution_port_forwarding.md?pixel)]() + + diff --git a/v1.1/docs/design/daemon.md b/v1.1/docs/design/daemon.md new file mode 100644 index 0000000000000..5f707f634a024 --- /dev/null +++ b/v1.1/docs/design/daemon.md @@ -0,0 +1,145 @@ +--- +layout: docwithnav +title: "DaemonSet in Kubernetes" +--- + + + + + +# DaemonSet in Kubernetes + +**Author**: Ananya Kumar (@AnanyaKumar) + +**Status**: Implemented. + +This document presents the design of the Kubernetes DaemonSet, describes use cases, and gives an overview of the code. + +## Motivation + +Many users have requested for a way to run a daemon on every node in a Kubernetes cluster, or on a certain set of nodes in a cluster. This is essential for use cases such as building a sharded datastore, or running a logger on every node. In comes the DaemonSet, a way to conveniently create and manage daemon-like workloads in Kubernetes. + +## Use Cases + +The DaemonSet can be used for user-specified system services, cluster-level applications with strong node ties, and Kubernetes node services. Below are example use cases in each category. + +### User-Specified System Services: + +Logging: Some users want a way to collect statistics about nodes in a cluster and send those logs to an external database. For example, system administrators might want to know if their machines are performing as expected, if they need to add more machines to the cluster, or if they should switch cloud providers. The DaemonSet can be used to run a data collection service (for example fluentd) on every node and send the data to a service like ElasticSearch for analysis. + +### Cluster-Level Applications + +Datastore: Users might want to implement a sharded datastore in their cluster. A few nodes in the cluster, labeled ‘app=datastore’, might be responsible for storing data shards, and pods running on these nodes might serve data. This architecture requires a way to bind pods to specific nodes, so it cannot be achieved using a Replication Controller. A DaemonSet is a convenient way to implement such a datastore. + +For other uses, see the related [feature request](https://issues.k8s.io/1518) + +## Functionality + +The DaemonSet supports standard API features: +- create + - The spec for DaemonSets has a pod template field. + - Using the pod’s nodeSelector field, DaemonSets can be restricted to operate over nodes that have a certain label. For example, suppose that in a cluster some nodes are labeled ‘app=database’. You can use a DaemonSet to launch a datastore pod on exactly those nodes labeled ‘app=database’. + - Using the pod's nodeName field, DaemonSets can be restricted to operate on a specified node. + - The PodTemplateSpec used by the DaemonSet is the same as the PodTemplateSpec used by the Replication Controller. + - The initial implementation will not guarnatee that DaemonSet pods are created on nodes before other pods. + - The initial implementation of DaemonSet does not guarantee that DaemonSet pods show up on nodes (for example because of resource limitations of the node), but makes a best effort to launch DaemonSet pods (like Replication Controllers do with pods). Subsequent revisions might ensure that DaemonSet pods show up on nodes, preempting other pods if necessary. + - The DaemonSet controller adds an annotation "kubernetes.io/created-by: \" + - YAML example: + +{% highlight yaml %} +{% raw %} + apiVersion: v1 + kind: DaemonSet + metadata: + labels: + app: datastore + name: datastore + spec: + template: + metadata: + labels: + app: datastore-shard + spec: + nodeSelector: + app: datastore-node + containers: + name: datastore-shard + image: kubernetes/sharded + ports: + - containerPort: 9042 + name: main +{% endraw %} +{% endhighlight %} + + - commands that get info + - get (e.g. kubectl get daemonsets) + - describe + - Modifiers + - delete (if --cascade=true, then first the client turns down all the pods controlled by the DaemonSet (by setting the nodeSelector to a uuid pair that is unlikely to be set on any node); then it deletes the DaemonSet; then it deletes the pods) + - label + - annotate + - update operations like patch and replace (only allowed to selector and to nodeSelector and nodeName of pod template) + - DaemonSets have labels, so you could, for example, list all DaemonSets with certain labels (the same way you would for a Replication Controller). + - In general, for all the supported features like get, describe, update, etc, the DaemonSet works in a similar way to the Replication Controller. However, note that the DaemonSet and the Replication Controller are different constructs. + +### Persisting Pods + + - Ordinary liveness probes specified in the pod template work to keep pods created by a DaemonSet running. + - If a daemon pod is killed or stopped, the DaemonSet will create a new replica of the daemon pod on the node. + +### Cluster Mutations + + - When a new node is added to the cluster, the DaemonSet controller starts daemon pods on the node for DaemonSets whose pod template nodeSelectors match the node’s labels. + - Suppose the user launches a DaemonSet that runs a logging daemon on all nodes labeled “logger=fluentd”. If the user then adds the “logger=fluentd” label to a node (that did not initially have the label), the logging daemon will launch on the node. Additionally, if a user removes the label from a node, the logging daemon on that node will be killed. + +## Alternatives Considered + +We considered several alternatives, that were deemed inferior to the approach of creating a new DaemonSet abstraction. + +One alternative is to include the daemon in the machine image. In this case it would run outside of Kubernetes proper, and thus not be monitored, health checked, usable as a service endpoint, easily upgradable, etc. + +A related alternative is to package daemons as static pods. This would address most of the problems described above, but they would still not be easily upgradable, and more generally could not be managed through the API server interface. + +A third alternative is to generalize the Replication Controller. We would do something like: if you set the `replicas` field of the ReplicationConrollerSpec to -1, then it means "run exactly one replica on every node matching the nodeSelector in the pod template." The ReplicationController would pretend `replicas` had been set to some large number -- larger than the largest number of nodes ever expected in the cluster -- and would use some anti-affinity mechanism to ensure that no more than one Pod from the ReplicationController runs on any given node. There are two downsides to this approach. First, there would always be a large number of Pending pods in the scheduler (these will be scheduled onto new machines when they are added to the cluster). The second downside is more philosophical: DaemonSet and the Replication Controller are very different concepts. We believe that having small, targeted controllers for distinct purposes makes Kubernetes easier to understand and use, compared to having larger multi-functional controllers (see ["Convert ReplicationController to a plugin"](http://issues.k8s.io/3058) for some discussion of this topic). + +## Design + +#### Client + +- Add support for DaemonSet commands to kubectl and the client. Client code was added to client/unversioned. The main files in Kubectl that were modified are kubectl/describe.go and kubectl/stop.go, since for other calls like Get, Create, and Update, the client simply forwards the request to the backend via the REST API. + +#### Apiserver + +- Accept, parse, validate client commands +- REST API calls are handled in registry/daemon + - In particular, the api server will add the object to etcd + - DaemonManager listens for updates to etcd (using Framework.informer) +- API objects for DaemonSet were created in expapi/v1/types.go and expapi/v1/register.go +- Validation code is in expapi/validation + +#### Daemon Manager + +- Creates new DaemonSets when requested. Launches the corresponding daemon pod on all nodes with labels matching the new DaemonSet’s selector. +- Listens for addition of new nodes to the cluster, by setting up a framework.NewInformer that watches for the creation of Node API objects. When a new node is added, the daemon manager will loop through each DaemonSet. If the label of the node matches the selector of the DaemonSet, then the daemon manager will create the corresponding daemon pod in the new node. +- The daemon manager creates a pod on a node by sending a command to the API server, requesting for a pod to be bound to the node (the node will be specified via its hostname) + +#### Kubelet + +- Does not need to be modified, but health checking will occur for the daemon pods and revive the pods if they are killed (we set the pod restartPolicy to Always). We reject DaemonSet objects with pod templates that don’t have restartPolicy set to Always. + +## Open Issues + +- Should work similarly to [Deployment](http://issues.k8s.io/1743). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/daemon.md?pixel)]() + + diff --git a/v1.1/docs/design/event_compression.md b/v1.1/docs/design/event_compression.md new file mode 100644 index 0000000000000..0eed74ac2fa1d --- /dev/null +++ b/v1.1/docs/design/event_compression.md @@ -0,0 +1,107 @@ +--- +layout: docwithnav +title: "Kubernetes Event Compression" +--- + + + + + +# Kubernetes Event Compression + +This document captures the design of event compression. + + +## Background + +Kubernetes components can get into a state where they generate tons of events which are identical except for the timestamp. For example, when pulling a non-existing image, Kubelet will repeatedly generate `image_not_existing` and `container_is_waiting` events until upstream components correct the image. When this happens, the spam from the repeated events makes the entire event mechanism useless. It also appears to cause memory pressure in etcd (see [#3853](http://issue.k8s.io/3853)). + +## Proposal + +Each binary that generates events (for example, `kubelet`) should keep track of previously generated events so that it can collapse recurring events into a single event instead of creating a new instance for each new event. + +Event compression should be best effort (not guaranteed). Meaning, in the worst case, `n` identical (minus timestamp) events may still result in `n` event entries. + +## Design + +Instead of a single Timestamp, each event object [contains](http://releases.k8s.io/release-1.1/pkg/api/types.go#L1111) the following fields: + * `FirstTimestamp unversioned.Time` + * The date/time of the first occurrence of the event. + * `LastTimestamp unversioned.Time` + * The date/time of the most recent occurrence of the event. + * On first occurrence, this is equal to the FirstTimestamp. + * `Count int` + * The number of occurrences of this event between FirstTimestamp and LastTimestamp + * On first occurrence, this is 1. + +Each binary that generates events: + * Maintains a historical record of previously generated events: + * Implemented with ["Least Recently Used Cache"](https://github.com/golang/groupcache/blob/master/lru/lru.go) in [`pkg/client/record/events_cache.go`](https://releases.k8s.io/release-1.1/pkg/client/record/events_cache.go). + * The key in the cache is generated from the event object minus timestamps/count/transient fields, specifically the following events fields are used to construct a unique key for an event: + * `event.Source.Component` + * `event.Source.Host` + * `event.InvolvedObject.Kind` + * `event.InvolvedObject.Namespace` + * `event.InvolvedObject.Name` + * `event.InvolvedObject.UID` + * `event.InvolvedObject.APIVersion` + * `event.Reason` + * `event.Message` + * The LRU cache is capped at 4096 events. That means if a component (e.g. kubelet) runs for a long period of time and generates tons of unique events, the previously generated events cache will not grow unchecked in memory. Instead, after 4096 unique events are generated, the oldest events are evicted from the cache. + * When an event is generated, the previously generated events cache is checked (see [`pkg/client/unversioned/record/event.go`](http://releases.k8s.io/release-1.1/pkg/client/unversioned/record/event.go)). + * If the key for the new event matches the key for a previously generated event (meaning all of the above fields match between the new event and some previously generated event), then the event is considered to be a duplicate and the existing event entry is updated in etcd: + * The new PUT (update) event API is called to update the existing event entry in etcd with the new last seen timestamp and count. + * The event is also updated in the previously generated events cache with an incremented count, updated last seen timestamp, name, and new resource version (all required to issue a future event update). + * If the key for the new event does not match the key for any previously generated event (meaning none of the above fields match between the new event and any previously generated events), then the event is considered to be new/unique and a new event entry is created in etcd: + * The usual POST/create event API is called to create a new event entry in etcd. + * An entry for the event is also added to the previously generated events cache. + +## Issues/Risks + + * Compression is not guaranteed, because each component keeps track of event history in memory + * An application restart causes event history to be cleared, meaning event history is not preserved across application restarts and compression will not occur across component restarts. + * Because an LRU cache is used to keep track of previously generated events, if too many unique events are generated, old events will be evicted from the cache, so events will only be compressed until they age out of the events cache, at which point any new instance of the event will cause a new entry to be created in etcd. + +## Example + +Sample kubectl output + +{% highlight console %} +{% raw %} +FIRSTSEEN LASTSEEN COUNT NAME KIND SUBOBJECT REASON SOURCE MESSAGE +Thu, 12 Feb 2015 01:13:02 +0000 Thu, 12 Feb 2015 01:13:02 +0000 1 kubernetes-minion-4.c.saad-dev-vms.internal Minion starting {kubelet kubernetes-minion-4.c.saad-dev-vms.internal} Starting kubelet. +Thu, 12 Feb 2015 01:13:09 +0000 Thu, 12 Feb 2015 01:13:09 +0000 1 kubernetes-minion-1.c.saad-dev-vms.internal Minion starting {kubelet kubernetes-minion-1.c.saad-dev-vms.internal} Starting kubelet. +Thu, 12 Feb 2015 01:13:09 +0000 Thu, 12 Feb 2015 01:13:09 +0000 1 kubernetes-minion-3.c.saad-dev-vms.internal Minion starting {kubelet kubernetes-minion-3.c.saad-dev-vms.internal} Starting kubelet. +Thu, 12 Feb 2015 01:13:09 +0000 Thu, 12 Feb 2015 01:13:09 +0000 1 kubernetes-minion-2.c.saad-dev-vms.internal Minion starting {kubelet kubernetes-minion-2.c.saad-dev-vms.internal} Starting kubelet. +Thu, 12 Feb 2015 01:13:05 +0000 Thu, 12 Feb 2015 01:13:12 +0000 4 monitoring-influx-grafana-controller-0133o Pod failedScheduling {scheduler } Error scheduling: no nodes available to schedule pods +Thu, 12 Feb 2015 01:13:05 +0000 Thu, 12 Feb 2015 01:13:12 +0000 4 elasticsearch-logging-controller-fplln Pod failedScheduling {scheduler } Error scheduling: no nodes available to schedule pods +Thu, 12 Feb 2015 01:13:05 +0000 Thu, 12 Feb 2015 01:13:12 +0000 4 kibana-logging-controller-gziey Pod failedScheduling {scheduler } Error scheduling: no nodes available to schedule pods +Thu, 12 Feb 2015 01:13:05 +0000 Thu, 12 Feb 2015 01:13:12 +0000 4 skydns-ls6k1 Pod failedScheduling {scheduler } Error scheduling: no nodes available to schedule pods +Thu, 12 Feb 2015 01:13:05 +0000 Thu, 12 Feb 2015 01:13:12 +0000 4 monitoring-heapster-controller-oh43e Pod failedScheduling {scheduler } Error scheduling: no nodes available to schedule pods +Thu, 12 Feb 2015 01:13:20 +0000 Thu, 12 Feb 2015 01:13:20 +0000 1 kibana-logging-controller-gziey BoundPod implicitly required container POD pulled {kubelet kubernetes-minion-4.c.saad-dev-vms.internal} Successfully pulled image "kubernetes/pause:latest" +Thu, 12 Feb 2015 01:13:20 +0000 Thu, 12 Feb 2015 01:13:20 +0000 1 kibana-logging-controller-gziey Pod scheduled {scheduler } Successfully assigned kibana-logging-controller-gziey to kubernetes-minion-4.c.saad-dev-vms.internal +{% endraw %} +{% endhighlight %} + +This demonstrates what would have been 20 separate entries (indicating scheduling failure) collapsed/compressed down to 5 entries. + +## Related Pull Requests/Issues + + * Issue [#4073](http://issue.k8s.io/4073): Compress duplicate events + * PR [#4157](http://issue.k8s.io/4157): Add "Update Event" to Kubernetes API + * PR [#4206](http://issue.k8s.io/4206): Modify Event struct to allow compressing multiple recurring events in to a single event + * PR [#4306](http://issue.k8s.io/4306): Compress recurring events in to a single event to optimize etcd storage + * PR [#4444](http://pr.k8s.io/4444): Switch events history to use LRU cache instead of map + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/event_compression.md?pixel)]() + + diff --git a/v1.1/docs/design/expansion.md b/v1.1/docs/design/expansion.md new file mode 100644 index 0000000000000..6e2dfe42b9b45 --- /dev/null +++ b/v1.1/docs/design/expansion.md @@ -0,0 +1,420 @@ +--- +layout: docwithnav +title: "Variable expansion in pod command, args, and env" +--- + + + + + +# Variable expansion in pod command, args, and env + +## Abstract + +A proposal for the expansion of environment variables using a simple `$(var)` syntax. + +## Motivation + +It is extremely common for users to need to compose environment variables or pass arguments to +their commands using the values of environment variables. Kubernetes should provide a facility for +the 80% cases in order to decrease coupling and the use of workarounds. + +## Goals + +1. Define the syntax format +2. Define the scoping and ordering of substitutions +3. Define the behavior for unmatched variables +4. Define the behavior for unexpected/malformed input + +## Constraints and Assumptions + +* This design should describe the simplest possible syntax to accomplish the use-cases +* Expansion syntax will not support more complicated shell-like behaviors such as default values + (viz: `$(VARIABLE_NAME:"default")`), inline substitution, etc. + +## Use Cases + +1. As a user, I want to compose new environment variables for a container using a substitution + syntax to reference other variables in the container's environment and service environment + variables +1. As a user, I want to substitute environment variables into a container's command +1. As a user, I want to do the above without requiring the container's image to have a shell +1. As a user, I want to be able to specify a default value for a service variable which may + not exist +1. As a user, I want to see an event associated with the pod if an expansion fails (ie, references + variable names that cannot be expanded) + +### Use Case: Composition of environment variables + +Currently, containers are injected with docker-style environment variables for the services in +their pod's namespace. There are several variables for each service, but users routinely need +to compose URLs based on these variables because there is not a variable for the exact format +they need. Users should be able to build new environment variables with the exact format they need. +Eventually, it should also be possible to turn off the automatic injection of the docker-style +variables into pods and let the users consume the exact information they need via the downward API +and composition. + +#### Expanding expanded variables + +It should be possible to reference an variable which is itself the result of an expansion, if the +referenced variable is declared in the container's environment prior to the one referencing it. +Put another way -- a container's environment is expanded in order, and expanded variables are +available to subsequent expansions. + +### Use Case: Variable expansion in command + +Users frequently need to pass the values of environment variables to a container's command. +Currently, Kubernetes does not perform any expansion of variables. The workaround is to invoke a +shell in the container's command and have the shell perform the substitution, or to write a wrapper +script that sets up the environment and runs the command. This has a number of drawbacks: + +1. Solutions that require a shell are unfriendly to images that do not contain a shell +2. Wrapper scripts make it harder to use images as base images +3. Wrapper scripts increase coupling to Kubernetes + +Users should be able to do the 80% case of variable expansion in command without writing a wrapper +script or adding a shell invocation to their containers' commands. + +### Use Case: Images without shells + +The current workaround for variable expansion in a container's command requires the container's +image to have a shell. This is unfriendly to images that do not contain a shell (`scratch` images, +for example). Users should be able to perform the other use-cases in this design without regard to +the content of their images. + +### Use Case: See an event for incomplete expansions + +It is possible that a container with incorrect variable values or command line may continue to run +for a long period of time, and that the end-user would have no visual or obvious warning of the +incorrect configuration. If the kubelet creates an event when an expansion references a variable +that cannot be expanded, it will help users quickly detect problems with expansions. + +## Design Considerations + +### What features should be supported? + +In order to limit complexity, we want to provide the right amount of functionality so that the 80% +cases can be realized and nothing more. We felt that the essentials boiled down to: + +1. Ability to perform direct expansion of variables in a string +2. Ability to specify default values via a prioritized mapping function but without support for + defaults as a syntax-level feature + +### What should the syntax be? + +The exact syntax for variable expansion has a large impact on how users perceive and relate to the +feature. We considered implementing a very restrictive subset of the shell `${var}` syntax. This +syntax is an attractive option on some level, because many people are familiar with it. However, +this syntax also has a large number of lesser known features such as the ability to provide +default values for unset variables, perform inline substitution, etc. + +In the interest of preventing conflation of the expansion feature in Kubernetes with the shell +feature, we chose a different syntax similar to the one in Makefiles, `$(var)`. We also chose not +to support the bar `$var` format, since it is not required to implement the required use-cases. + +Nested references, ie, variable expansion within variable names, are not supported. + +#### How should unmatched references be treated? + +Ideally, it should be extremely clear when a variable reference couldn't be expanded. We decided +the best experience for unmatched variable references would be to have the entire reference, syntax +included, show up in the output. As an example, if the reference `$(VARIABLE_NAME)` cannot be +expanded, then `$(VARIABLE_NAME)` should be present in the output. + +#### Escaping the operator + +Although the `$(var)` syntax does overlap with the `$(command)` form of command substitution +supported by many shells, because unexpanded variables are present verbatim in the output, we +expect this will not present a problem to many users. If there is a collision between a variable +name and command substitution syntax, the syntax can be escaped with the form `$$(VARIABLE_NAME)`, +which will evaluate to `$(VARIABLE_NAME)` whether `VARIABLE_NAME` can be expanded or not. + +## Design + +This design encompasses the variable expansion syntax and specification and the changes needed to +incorporate the expansion feature into the container's environment and command. + +### Syntax and expansion mechanics + +This section describes the expansion syntax, evaluation of variable values, and how unexpected or +malformed inputs are handled. + +#### Syntax + +The inputs to the expansion feature are: + +1. A utf-8 string (the input string) which may contain variable references +2. A function (the mapping function) that maps the name of a variable to the variable's value, of + type `func(string) string` + +Variable references in the input string are indicated exclusively with the syntax +`$()`. The syntax tokens are: + +- `$`: the operator +- `(`: the reference opener +- `)`: the reference closer + +The operator has no meaning unless accompanied by the reference opener and closer tokens. The +operator can be escaped using `$$`. One literal `$` will be emitted for each `$$` in the input. + +The reference opener and closer characters have no meaning when not part of a variable reference. +If a variable reference is malformed, viz: `$(VARIABLE_NAME` without a closing expression, the +operator and expression opening characters are treated as ordinary characters without special +meanings. + +#### Scope and ordering of substitutions + +The scope in which variable references are expanded is defined by the mapping function. Within the +mapping function, any arbitrary strategy may be used to determine the value of a variable name. +The most basic implementation of a mapping function is to use a `map[string]string` to lookup the +value of a variable. + +In order to support default values for variables like service variables presented by the kubelet, +which may not be bound because the service that provides them does not yet exist, there should be a +mapping function that uses a list of `map[string]string` like: + +{% highlight go %} +{% raw %} +func MakeMappingFunc(maps ...map[string]string) func(string) string { + return func(input string) string { + for _, context := range maps { + val, ok := context[input] + if ok { + return val + } + } + + return "" + } +} + +// elsewhere +containerEnv := map[string]string{ + "FOO": "BAR", + "ZOO": "ZAB", + "SERVICE2_HOST": "some-host", +} + +serviceEnv := map[string]string{ + "SERVICE_HOST": "another-host", + "SERVICE_PORT": "8083", +} + +// single-map variation +mapping := MakeMappingFunc(containerEnv) + +// default variables not found in serviceEnv +mappingWithDefaults := MakeMappingFunc(serviceEnv, containerEnv) +{% endraw %} +{% endhighlight %} + +### Implementation changes + +The necessary changes to implement this functionality are: + +1. Add a new interface, `ObjectEventRecorder`, which is like the `EventRecorder` interface, but + scoped to a single object, and a function that returns an `ObjectEventRecorder` given an + `ObjectReference` and an `EventRecorder` +2. Introduce `third_party/golang/expansion` package that provides: + 1. An `Expand(string, func(string) string) string` function + 2. A `MappingFuncFor(ObjectEventRecorder, ...map[string]string) string` function +3. Make the kubelet expand environment correctly +4. Make the kubelet expand command correctly + +#### Event Recording + +In order to provide an event when an expansion references undefined variables, the mapping function +must be able to create an event. In order to facilitate this, we should create a new interface in +the `api/client/record` package which is similar to `EventRecorder`, but scoped to a single object: + +{% highlight go %} +{% raw %} +// ObjectEventRecorder knows how to record events about a single object. +type ObjectEventRecorder interface { + // Event constructs an event from the given information and puts it in the queue for sending. + // 'reason' is the reason this event is generated. 'reason' should be short and unique; it will + // be used to automate handling of events, so imagine people writing switch statements to + // handle them. You want to make that easy. + // 'message' is intended to be human readable. + // + // The resulting event will be created in the same namespace as the reference object. + Event(reason, message string) + + // Eventf is just like Event, but with Sprintf for the message field. + Eventf(reason, messageFmt string, args ...interface{}) + + // PastEventf is just like Eventf, but with an option to specify the event's 'timestamp' field. + PastEventf(timestamp unversioned.Time, reason, messageFmt string, args ...interface{}) +} +{% endraw %} +{% endhighlight %} + +There should also be a function that can construct an `ObjectEventRecorder` from a `runtime.Object` +and an `EventRecorder`: + +{% highlight go %} +{% raw %} +type objectRecorderImpl struct { + object runtime.Object + recorder EventRecorder +} + +func (r *objectRecorderImpl) Event(reason, message string) { + r.recorder.Event(r.object, reason, message) +} + +func ObjectEventRecorderFor(object runtime.Object, recorder EventRecorder) ObjectEventRecorder { + return &objectRecorderImpl{object, recorder} +} +{% endraw %} +{% endhighlight %} + +#### Expansion package + +The expansion package should provide two methods: + +{% highlight go %} +{% raw %} +// MappingFuncFor returns a mapping function for use with Expand that +// implements the expansion semantics defined in the expansion spec; it +// returns the input string wrapped in the expansion syntax if no mapping +// for the input is found. If no expansion is found for a key, an event +// is raised on the given recorder. +func MappingFuncFor(recorder record.ObjectEventRecorder, context ...map[string]string) func(string) string { + // ... +} + +// Expand replaces variable references in the input string according to +// the expansion spec using the given mapping function to resolve the +// values of variables. +func Expand(input string, mapping func(string) string) string { + // ... +} +{% endraw %} +{% endhighlight %} + +#### Kubelet changes + +The Kubelet should be made to correctly expand variables references in a container's environment, +command, and args. Changes will need to be made to: + +1. The `makeEnvironmentVariables` function in the kubelet; this is used by + `GenerateRunContainerOptions`, which is used by both the docker and rkt container runtimes +2. The docker manager `setEntrypointAndCommand` func has to be changed to perform variable + expansion +3. The rkt runtime should be made to support expansion in command and args when support for it is + implemented + +### Examples + +#### Inputs and outputs + +These examples are in the context of the mapping: + +| Name | Value | +|-------------|------------| +| `VAR_A` | `"A"` | +| `VAR_B` | `"B"` | +| `VAR_C` | `"C"` | +| `VAR_REF` | `$(VAR_A)` | +| `VAR_EMPTY` | `""` | + +No other variables are defined. + +| Input | Result | +|--------------------------------|----------------------------| +| `"$(VAR_A)"` | `"A"` | +| `"___$(VAR_B)___"` | `"___B___"` | +| `"___$(VAR_C)"` | `"___C"` | +| `"$(VAR_A)-$(VAR_A)"` | `"A-A"` | +| `"$(VAR_A)-1"` | `"A-1"` | +| `"$(VAR_A)_$(VAR_B)_$(VAR_C)"` | `"A_B_C"` | +| `"$$(VAR_B)_$(VAR_A)"` | `"$(VAR_B)_A"` | +| `"$$(VAR_A)_$$(VAR_B)"` | `"$(VAR_A)_$(VAR_B)"` | +| `"f000-$$VAR_A"` | `"f000-$VAR_A"` | +| `"foo\\$(VAR_C)bar"` | `"foo\Cbar"` | +| `"foo\\\\$(VAR_C)bar"` | `"foo\\Cbar"` | +| `"foo\\\\\\\\$(VAR_A)bar"` | `"foo\\\\Abar"` | +| `"$(VAR_A$(VAR_B))"` | `"$(VAR_A$(VAR_B))"` | +| `"$(VAR_A$(VAR_B)"` | `"$(VAR_A$(VAR_B)"` | +| `"$(VAR_REF)"` | `"$(VAR_A)"` | +| `"%%$(VAR_REF)--$(VAR_REF)%%"` | `"%%$(VAR_A)--$(VAR_A)%%"` | +| `"foo$(VAR_EMPTY)bar"` | `"foobar"` | +| `"foo$(VAR_Awhoops!"` | `"foo$(VAR_Awhoops!"` | +| `"f00__(VAR_A)__"` | `"f00__(VAR_A)__"` | +| `"$?_boo_$!"` | `"$?_boo_$!"` | +| `"$VAR_A"` | `"$VAR_A"` | +| `"$(VAR_DNE)"` | `"$(VAR_DNE)"` | +| `"$$$$$$(BIG_MONEY)"` | `"$$$(BIG_MONEY)"` | +| `"$$$$$$(VAR_A)"` | `"$$$(VAR_A)"` | +| `"$$$$$$$(GOOD_ODDS)"` | `"$$$$(GOOD_ODDS)"` | +| `"$$$$$$$(VAR_A)"` | `"$$$A"` | +| `"$VAR_A)"` | `"$VAR_A)"` | +| `"${VAR_A}"` | `"${VAR_A}"` | +| `"$(VAR_B)_______$(A"` | `"B_______$(A"` | +| `"$(VAR_C)_______$("` | `"C_______$("` | +| `"$(VAR_A)foobarzab$"` | `"Afoobarzab$"` | +| `"foo-\\$(VAR_A"` | `"foo-\$(VAR_A"` | +| `"--$($($($($--"` | `"--$($($($($--"` | +| `"$($($($($--foo$("` | `"$($($($($--foo$("` | +| `"foo0--$($($($("` | `"foo0--$($($($("` | +| `"$(foo$$var)` | `$(foo$$var)` | + +#### In a pod: building a URL + +Notice the `$(var)` syntax. + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: expansion-pod +spec: + containers: + - name: test-container + image: gcr.io/google_containers/busybox + command: [ "/bin/sh", "-c", "env" ] + env: + - name: PUBLIC_URL + value: "http://$(GITSERVER_SERVICE_HOST):$(GITSERVER_SERVICE_PORT)" + restartPolicy: Never +{% endraw %} +{% endhighlight %} + +#### In a pod: building a URL using downward API + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: expansion-pod +spec: + containers: + - name: test-container + image: gcr.io/google_containers/busybox + command: [ "/bin/sh", "-c", "env" ] + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: "metadata.namespace" + - name: PUBLIC_URL + value: "http://gitserver.$(POD_NAMESPACE):$(SERVICE_PORT)" + restartPolicy: Never +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/expansion.md?pixel)]() + + diff --git a/v1.1/docs/design/extending-api.md b/v1.1/docs/design/extending-api.md new file mode 100644 index 0000000000000..a1f3866ac49c0 --- /dev/null +++ b/v1.1/docs/design/extending-api.md @@ -0,0 +1,222 @@ +--- +layout: docwithnav +title: "Adding custom resources to the Kubernetes API server" +--- + + + + + +# Adding custom resources to the Kubernetes API server + +This document describes the design for implementing the storage of custom API types in the Kubernetes API Server. + + +## Resource Model + +### The ThirdPartyResource + +The `ThirdPartyResource` resource describes the multiple versions of a custom resource that the user wants to add +to the Kubernetes API. `ThirdPartyResource` is a non-namespaced resource, attempting to place it in a resource +will return an error. + +Each `ThirdPartyResource` resource has the following: + * Standard Kubernetes object metadata. + * ResourceKind - The kind of the resources described by this third party resource. + * Description - A free text description of the resource. + * APIGroup - An API group that this resource should be placed into. + * Versions - One or more `Version` objects. + +### The `Version` Object + +The `Version` object describes a single concrete version of a custom resource. The `Version` object currently +only specifies: + * The `Name` of the version. + * The `APIGroup` this version should belong to. + +## Expectations about third party objects + +Every object that is added to a third-party Kubernetes object store is expected to contain Kubernetes +compatible [object metadata](../devel/api-conventions.html#metadata). This requirement enables the +Kubernetes API server to provide the following features: + * Filtering lists of objects via LabelQueries + * `resourceVersion`-based optimistic concurrency via compare-and-swap + * Versioned storage + * Event recording + * Integration with basic `kubectl` command line tooling. + * Watch for resource changes. + +The `Kind` for an instance of a third-party object (e.g. CronTab) below is expected to be +programmatically convertible to the name of the resource using +the following conversion. Kinds are expected to be of the form ``, the +`APIVersion` for the object is expected to be `//`. + +For example `example.com/stable/v1` + +`domain-name` is expected to be a fully qualified domain name. + +'CamelCaseKind' is the specific type name. + +To convert this into the `metadata.name` for the `ThirdPartyResource` resource instance, +the `` is copied verbatim, the `CamelCaseKind` is +then converted +using '-' instead of capitalization ('camel-case'), with the first character being assumed to be +capitalized. In pseudo code: + +{% highlight go %} +{% raw %} +var result string +for ix := range kindName { + if isCapital(kindName[ix]) { + result = append(result, '-') + } + result = append(result, toLowerCase(kindName[ix]) +} +{% endraw %} +{% endhighlight %} + +As a concrete example, the resource named `camel-case-kind.example.com` defines resources of Kind `CamelCaseKind`, in +the APIGroup with the prefix `example.com/...`. + +The reason for this is to enable rapid lookup of a `ThirdPartyResource` object given the kind information. +This is also the reason why `ThirdPartyResource` is not namespaced. + +## Usage + +When a user creates a new `ThirdPartyResource`, the Kubernetes API Server reacts by creating a new, namespaced +RESTful resource path. For now, non-namespaced objects are not supported. As with existing built-in objects +deleting a namespace, deletes all third party resources in that namespace. + +For example, if a user creates: + +{% highlight yaml %} +{% raw %} +metadata: + name: cron-tab.example.com +apiVersion: extensions/v1beta1 +kind: ThirdPartyResource +description: "A specification of a Pod to run on a cron style schedule" +versions: + - name: stable/v1 + - name: experimental/v2 +{% endraw %} +{% endhighlight %} + +Then the API server will program in two new RESTful resource paths: + * `/thirdparty/example.com/stable/v1/namespaces//crontabs/...` + * `/thirdparty/example.com/experimental/v2/namespaces//crontabs/...` + + +Now that this schema has been created, a user can `POST`: + +{% highlight json %} +{% raw %} +{ + "metadata": { + "name": "my-new-cron-object" + }, + "apiVersion": "example.com/stable/v1", + "kind": "CronTab", + "cronSpec": "* * * * /5", + "image": "my-awesome-chron-image" +} +{% endraw %} +{% endhighlight %} + +to: `/third-party/example.com/stable/v1/namespaces/default/crontabs/my-new-cron-object` + +and the corresponding data will be stored into etcd by the APIServer, so that when the user issues: + +``` +{% raw %} +GET /third-party/example.com/stable/v1/namespaces/default/crontabs/my-new-cron-object` +{% endraw %} +``` + +And when they do that, they will get back the same data, but with additional Kubernetes metadata +(e.g. `resourceVersion`, `createdTimestamp`) filled in. + +Likewise, to list all resources, a user can issue: + +``` +{% raw %} +GET /third-party/example.com/stable/v1/namespaces/default/crontabs +{% endraw %} +``` + +and get back: + +{% highlight json %} +{% raw %} +{ + "apiVersion": "example.com/stable/v1", + "kind": "CronTabList", + "items": [ + { + "metadata": { + "name": "my-new-cron-object" + }, + "apiVersion": "example.com/stable/v1", + "kind": "CronTab", + "cronSpec": "* * * * /5", + "image": "my-awesome-chron-image" + } + ] +} +{% endraw %} +{% endhighlight %} + +Because all objects are expected to contain standard Kubernetes metadata fields, these +list operations can also use `Label` queries to filter requests down to specific subsets. + +Likewise, clients can use watch endpoints to watch for changes to stored objects. + + +## Storage + +In order to store custom user data in a versioned fashion inside of etcd, we need to also introduce a +`Codec`-compatible object for persistent storage in etcd. This object is `ThirdPartyResourceData` and it contains: + * Standard API Metadata + * `Data`: The raw JSON data for this custom object. + +### Storage key specification + +Each custom object stored by the API server needs a custom key in storage, this is described below: + +#### Definitions + + * `resource-namespace` : the namespace of the particular resource that is being stored + * `resource-name`: the name of the particular resource being stored + * `third-party-resource-namespace`: the namespace of the `ThirdPartyResource` resource that represents the type for the specific instance being stored. + * `third-party-resource-name`: the name of the `ThirdPartyResource` resource that represents the type for the specific instance being stored. + +#### Key + +Given the definitions above, the key for a specific third-party object is: + +``` +{% raw %} +${standard-k8s-prefix}/third-party-resources/${third-party-resource-namespace}/${third-party-resource-name}/${resource-namespace}/${resource-name} +{% endraw %} +``` + +Thus, listing a third-party resource can be achieved by listing the directory: + +``` +{% raw %} +${standard-k8s-prefix}/third-party-resources/${third-party-resource-namespace}/${third-party-resource-name}/${resource-namespace}/ +{% endraw %} +``` + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/extending-api.md?pixel)]() + + diff --git a/v1.1/docs/design/horizontal-pod-autoscaler.md b/v1.1/docs/design/horizontal-pod-autoscaler.md new file mode 100644 index 0000000000000..ec595742393b0 --- /dev/null +++ b/v1.1/docs/design/horizontal-pod-autoscaler.md @@ -0,0 +1,264 @@ +--- +layout: docwithnav +title: "Horizontal Pod Autoscaling" +--- + + + + + +# Horizontal Pod Autoscaling + +## Preface + +This document briefly describes the design of the horizontal autoscaler for pods. +The autoscaler (implemented as a Kubernetes API resource and controller) is responsible for dynamically controlling +the number of replicas of some collection (e.g. the pods of a ReplicationController) to meet some objective(s), +for example a target per-pod CPU utilization. + +This design supersedes [autoscaling.md](http://releases.k8s.io/release-1.1/docs/proposals/autoscaling.md). + +## Overview + +The resource usage of a serving application usually varies over time: sometimes the demand for the application rises, +and sometimes it drops. +In Kubernetes version 1.0, a user can only manually set the number of serving pods. +Our aim is to provide a mechanism for the automatic adjustment of the number of pods based on CPU utilization statistics +(a future version will allow autoscaling based on other resources/metrics). + +## Scale Subresource + +In Kubernetes version 1.1, we are introducing Scale subresource and implementing horizontal autoscaling of pods based on it. +Scale subresource is supported for replication controllers and deployments. +Scale subresource is a Virtual Resource (does not correspond to an object stored in etcd). +It is only present in the API as an interface that a controller (in this case the HorizontalPodAutoscaler) can use to dynamically scale +the number of replicas controlled by some other API object (currently ReplicationController and Deployment) and to learn the current number of replicas. +Scale is a subresource of the API object that it serves as the interface for. +The Scale subresource is useful because whenever we introduce another type we want to autoscale, we just need to implement the Scale subresource for it. +The wider discussion regarding Scale took place in [#1629](https://github.com/kubernetes/kubernetes/issues/1629). + +Scale subresource is in API for replication controller or deployment under the following paths: + +`apis/extensions/v1beta1/replicationcontrollers/myrc/scale` + +`apis/extensions/v1beta1/deployments/mydeployment/scale` + +It has the following structure: + +{% highlight go %} +{% raw %} +// represents a scaling request for a resource. +type Scale struct { + unversioned.TypeMeta + api.ObjectMeta + + // defines the behavior of the scale. + Spec ScaleSpec + + // current status of the scale. + Status ScaleStatus +} + +// describes the attributes of a scale subresource +type ScaleSpec struct { + // desired number of instances for the scaled object. + Replicas int `json:"replicas,omitempty"` +} + +// represents the current status of a scale subresource. +type ScaleStatus struct { + // actual number of observed instances of the scaled object. + Replicas int `json:"replicas"` + + // label query over pods that should match the replicas count. + Selector map[string]string `json:"selector,omitempty"` +} +{% endraw %} +{% endhighlight %} + +Writing to `ScaleSpec.Replicas` resizes the replication controller/deployment associated with +the given Scale subresource. +`ScaleStatus.Replicas` reports how many pods are currently running in the replication controller/deployment, +and `ScaleStatus.Selector` returns selector for the pods. + +## HorizontalPodAutoscaler Object + +In Kubernetes version 1.1, we are introducing HorizontalPodAutoscaler object. It is accessible under: + +`apis/extensions/v1beta1/horizontalpodautoscalers/myautoscaler` + +It has the following structure: + +{% highlight go %} +{% raw %} +// configuration of a horizontal pod autoscaler. +type HorizontalPodAutoscaler struct { + unversioned.TypeMeta + api.ObjectMeta + + // behavior of autoscaler. + Spec HorizontalPodAutoscalerSpec + + // current information about the autoscaler. + Status HorizontalPodAutoscalerStatus +} + +// specification of a horizontal pod autoscaler. +type HorizontalPodAutoscalerSpec struct { + // reference to Scale subresource; horizontal pod autoscaler will learn the current resource + // consumption from its status,and will set the desired number of pods by modifying its spec. + ScaleRef SubresourceReference + // lower limit for the number of pods that can be set by the autoscaler, default 1. + MinReplicas *int + // upper limit for the number of pods that can be set by the autoscaler. + // It cannot be smaller than MinReplicas. + MaxReplicas int + // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; + // if not specified it defaults to the target CPU utilization at 80% of the requested resources. + CPUUtilization *CPUTargetUtilization +} + +type CPUTargetUtilization struct { + // fraction of the requested CPU that should be utilized/used, + // e.g. 70 means that 70% of the requested CPU should be in use. + TargetPercentage int +} + +// current status of a horizontal pod autoscaler +type HorizontalPodAutoscalerStatus struct { + // most recent generation observed by this autoscaler. + ObservedGeneration *int64 + + // last time the HorizontalPodAutoscaler scaled the number of pods; + // used by the autoscaler to control how often the number of pods is changed. + LastScaleTime *unversioned.Time + + // current number of replicas of pods managed by this autoscaler. + CurrentReplicas int + + // desired number of replicas of pods managed by this autoscaler. + DesiredReplicas int + + // current average CPU utilization over all pods, represented as a percentage of requested CPU, + // e.g. 70 means that an average pod is using now 70% of its requested CPU. + CurrentCPUUtilizationPercentage *int +} +{% endraw %} +{% endhighlight %} + +`ScaleRef` is a reference to the Scale subresource. +`MinReplicas`, `MaxReplicas` and `CPUUtilization` define autoscaler configuration. +We are also introducing HorizontalPodAutoscalerList object to enable listing all autoscalers in a namespace: + +{% highlight go %} +{% raw %} +// list of horizontal pod autoscaler objects. +type HorizontalPodAutoscalerList struct { + unversioned.TypeMeta + unversioned.ListMeta + + // list of horizontal pod autoscaler objects. + Items []HorizontalPodAutoscaler +} +{% endraw %} +{% endhighlight %} + +## Autoscaling Algorithm + +The autoscaler is implemented as a control loop. It periodically queries pods described by `Status.PodSelector` of Scale subresource, and collects their CPU utilization. +Then, it compares the arithmetic mean of the pods' CPU utilization with the target defined in `Spec.CPUUtilization`, +and adjust the replicas of the Scale if needed to match the target +(preserving condition: MinReplicas <= Replicas <= MaxReplicas). + +The period of the autoscaler is controlled by `--horizontal-pod-autoscaler-sync-period` flag of controller manager. +The default value is 30 seconds. + + +CPU utilization is the recent CPU usage of a pod (average across the last 1 minute) divided by the CPU requested by the pod. +In Kubernetes version 1.1, CPU usage is taken directly from Heapster. +In future, there will be API on master for this purpose +(see [#11951](https://github.com/kubernetes/kubernetes/issues/11951)). + +The target number of pods is calculated from the following formula: + +``` +{% raw %} +TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target) +{% endraw %} +``` + +Starting and stopping pods may introduce noise to the metric (for instance, starting may temporarily increase CPU). +So, after each action, the autoscaler should wait some time for reliable data. +Scale-up can only happen if there was no rescaling within the last 3 minutes. +Scale-down will wait for 5 minutes from the last rescaling. +Moreover any scaling will only be made if: `avg(CurrentPodsConsumption) / Target` drops below 0.9 or increases above 1.1 (10% tolerance). +Such approach has two benefits: + +* Autoscaler works in a conservative way. + If new user load appears, it is important for us to rapidly increase the number of pods, + so that user requests will not be rejected. + Lowering the number of pods is not that urgent. + +* Autoscaler avoids thrashing, i.e.: prevents rapid execution of conflicting decision if the load is not stable. + +## Relative vs. absolute metrics + +We chose values of the target metric to be relative (e.g. 90% of requested CPU resource) rather than absolute (e.g. 0.6 core) for the following reason. +If we choose absolute metric, user will need to guarantee that the target is lower than the request. +Otherwise, overloaded pods may not be able to consume more than the autoscaler's absolute target utilization, +thereby preventing the autoscaler from seeing high enough utilization to trigger it to scale up. +This may be especially troublesome when user changes requested resources for a pod +because they would need to also change the autoscaler utilization threshold. +Therefore, we decided to choose relative metric. +For user, it is enough to set it to a value smaller than 100%, and further changes of requested resources will not invalidate it. + +## Support in kubectl + +To make manipulation of HorizontalPodAutoscaler object simpler, we added support for +creating/updating/deleting/listing of HorizontalPodAutoscaler to kubectl. +In addition, in future, we are planning to add kubectl support for the following use-cases: +* When creating a replication controller or deployment with `kubectl create [-f]`, there should be + a possibility to specify an additional autoscaler object. + (This should work out-of-the-box when creation of autoscaler is supported by kubectl as we may include + multiple objects in the same config file). +* *[future]* When running an image with `kubectl run`, there should be an additional option to create + an autoscaler for it. +* *[future]* We will add a new command `kubectl autoscale` that will allow for easy creation of an autoscaler object + for already existing replication controller/deployment. + +## Next steps + +We list here some features that are not supported in Kubernetes version 1.1. +However, we want to keep them in mind, as they will most probably be needed in future. +Our design is in general compatible with them. +* *[future]* **Autoscale pods based on metrics different than CPU** (e.g. memory, network traffic, qps). + This includes scaling based on a custom/application metric. +* *[future]* **Autoscale pods base on an aggregate metric.** + Autoscaler, instead of computing average for a target metric across pods, will use a single, external, metric (e.g. qps metric from load balancer). + The metric will be aggregated while the target will remain per-pod + (e.g. when observing 100 qps on load balancer while the target is 20 qps per pod, autoscaler will set the number of replicas to 5). +* *[future]* **Autoscale pods based on multiple metrics.** + If the target numbers of pods for different metrics are different, choose the largest target number of pods. +* *[future]* **Scale the number of pods starting from 0.** + All pods can be turned-off, and then turned-on when there is a demand for them. + When a request to service with no pods arrives, kube-proxy will generate an event for autoscaler + to create a new pod. + Discussed in [#3247](https://github.com/kubernetes/kubernetes/issues/3247). +* *[future]* **When scaling down, make more educated decision which pods to kill.** + E.g.: if two or more pods from the same replication controller are on the same node, kill one of them. + Discussed in [#4301](https://github.com/kubernetes/kubernetes/issues/4301). + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/horizontal-pod-autoscaler.md?pixel)]() + + diff --git a/v1.1/docs/design/identifiers.md b/v1.1/docs/design/identifiers.md new file mode 100644 index 0000000000000..5e54c8398ff19 --- /dev/null +++ b/v1.1/docs/design/identifiers.md @@ -0,0 +1,114 @@ +--- +layout: docwithnav +title: "Identifiers and Names in Kubernetes" +--- + + + + + +# Identifiers and Names in Kubernetes + +A summarization of the goals and recommendations for identifiers in Kubernetes. Described in [GitHub issue #199](http://issue.k8s.io/199). + + +## Definitions + +UID +: A non-empty, opaque, system-generated value guaranteed to be unique in time and space; intended to distinguish between historical occurrences of similar entities. + +Name +: A non-empty string guaranteed to be unique within a given scope at a particular time; used in resource URLs; provided by clients at creation time and encouraged to be human friendly; intended to facilitate creation idempotence and space-uniqueness of singleton objects, distinguish distinct entities, and reference particular entities across operations. + +[rfc1035](http://www.ietf.org/rfc/rfc1035.txt)/[rfc1123](http://www.ietf.org/rfc/rfc1123.txt) label (DNS_LABEL) +: An alphanumeric (a-z, and 0-9) string, with a maximum length of 63 characters, with the '-' character allowed anywhere except the first or last character, suitable for use as a hostname or segment in a domain name + +[rfc1035](http://www.ietf.org/rfc/rfc1035.txt)/[rfc1123](http://www.ietf.org/rfc/rfc1123.txt) subdomain (DNS_SUBDOMAIN) +: One or more lowercase rfc1035/rfc1123 labels separated by '.' with a maximum length of 253 characters + +[rfc4122](http://www.ietf.org/rfc/rfc4122.txt) universally unique identifier (UUID) +: A 128 bit generated value that is extremely unlikely to collide across time and space and requires no central coordination + +[rfc6335](https://tools.ietf.org/rfc/rfc6335.txt) port name (IANA_SVC_NAME) +: An alphanumeric (a-z, and 0-9) string, with a maximum length of 15 characters, with the '-' character allowed anywhere except the first or the last character or adjacent to another '-' character, it must contain at least a (a-z) character + +## Objectives for names and UIDs + +1. Uniquely identify (via a UID) an object across space and time + +2. Uniquely name (via a name) an object across space + +3. Provide human-friendly names in API operations and/or configuration files + +4. Allow idempotent creation of API resources (#148) and enforcement of space-uniqueness of singleton objects + +5. Allow DNS names to be automatically generated for some objects + + +## General design + +1. When an object is created via an API, a Name string (a DNS_SUBDOMAIN) must be specified. Name must be non-empty and unique within the apiserver. This enables idempotent and space-unique creation operations. Parts of the system (e.g. replication controller) may join strings (e.g. a base name and a random suffix) to create a unique Name. For situations where generating a name is impractical, some or all objects may support a param to auto-generate a name. Generating random names will defeat idempotency. + * Examples: "guestbook.user", "backend-x4eb1" + +2. When an object is created via an API, a Namespace string (a DNS_SUBDOMAIN? format TBD via #1114) may be specified. Depending on the API receiver, namespaces might be validated (e.g. apiserver might ensure that the namespace actually exists). If a namespace is not specified, one will be assigned by the API receiver. This assignment policy might vary across API receivers (e.g. apiserver might have a default, kubelet might generate something semi-random). + * Example: "api.k8s.example.com" + +3. Upon acceptance of an object via an API, the object is assigned a UID (a UUID). UID must be non-empty and unique across space and time. + * Example: "01234567-89ab-cdef-0123-456789abcdef" + + +## Case study: Scheduling a pod + +Pods can be placed onto a particular node in a number of ways. This case +study demonstrates how the above design can be applied to satisfy the +objectives. + +### A pod scheduled by a user through the apiserver + +1. A user submits a pod with Namespace="" and Name="guestbook" to the apiserver. + +2. The apiserver validates the input. + 1. A default Namespace is assigned. + 2. The pod name must be space-unique within the Namespace. + 3. Each container within the pod has a name which must be space-unique within the pod. + +3. The pod is accepted. + 1. A new UID is assigned. + +4. The pod is bound to a node. + 1. The kubelet on the node is passed the pod's UID, Namespace, and Name. + +5. Kubelet validates the input. + +6. Kubelet runs the pod. + 1. Each container is started up with enough metadata to distinguish the pod from whence it came. + 2. Each attempt to run a container is assigned a UID (a string) that is unique across time. + * This may correspond to Docker's container ID. + +### A pod placed by a config file on the node + +1. A config file is stored on the node, containing a pod with UID="", Namespace="", and Name="cadvisor". + +2. Kubelet validates the input. + 1. Since UID is not provided, kubelet generates one. + 2. Since Namespace is not provided, kubelet generates one. + 1. The generated namespace should be deterministic and cluster-unique for the source, such as a hash of the hostname and file path. + * E.g. Namespace="file-f4231812554558a718a01ca942782d81" + +3. Kubelet runs the pod. + 1. Each container is started up with enough metadata to distinguish the pod from whence it came. + 2. Each attempt to run a container is assigned a UID (a string) that is unique across time. + 1. This may correspond to Docker's container ID. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/identifiers.md?pixel)]() + + diff --git a/v1.1/docs/design/index.md b/v1.1/docs/design/index.md new file mode 100644 index 0000000000000..3d2378afc9009 --- /dev/null +++ b/v1.1/docs/design/index.md @@ -0,0 +1,39 @@ +--- +layout: docwithnav +title: "Kubernetes Design Overview" +--- + + + + + +# Kubernetes Design Overview + +Kubernetes is a system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications. + +Kubernetes establishes robust declarative primitives for maintaining the desired state requested by the user. We see these primitives as the main value added by Kubernetes. Self-healing mechanisms, such as auto-restarting, re-scheduling, and replicating containers require active controllers, not just imperative orchestration. + +Kubernetes is primarily targeted at applications composed of multiple containers, such as elastic, distributed micro-services. It is also designed to facilitate migration of non-containerized application stacks to Kubernetes. It therefore includes abstractions for grouping containers in both loosely coupled and tightly coupled formations, and provides ways for containers to find and communicate with each other in relatively familiar ways. + +Kubernetes enables users to ask a cluster to run a set of containers. The system automatically chooses hosts to run those containers on. While Kubernetes's scheduler is currently very simple, we expect it to grow in sophistication over time. Scheduling is a policy-rich, topology-aware, workload-specific function that significantly impacts availability, performance, and capacity. The scheduler needs to take into account individual and collective resource requirements, quality of service requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, deadlines, and so on. Workload-specific requirements will be exposed through the API as necessary. + +Kubernetes is intended to run on a number of cloud providers, as well as on physical hosts. + +A single Kubernetes cluster is not intended to span multiple availability zones. Instead, we recommend building a higher-level layer to replicate complete deployments of highly available applications across multiple zones (see [the multi-cluster doc](../admin/multi-cluster.html) and [cluster federation proposal](../proposals/federation.html) for more details). + +Finally, Kubernetes aspires to be an extensible, pluggable, building-block OSS platform and toolkit. Therefore, architecturally, we want Kubernetes to be built as a collection of pluggable components and layers, with the ability to use alternative schedulers, controllers, storage systems, and distribution mechanisms, and we're evolving its current code in that direction. Furthermore, we want others to be able to extend Kubernetes functionality, such as with higher-level PaaS functionality or multi-cluster layers, without modification of core Kubernetes source. Therefore, its API isn't just (or even necessarily mainly) targeted at end users, but at tool and extension developers. Its APIs are intended to serve as the foundation for an open ecosystem of tools, automation systems, and higher-level API layers. Consequently, there are no "internal" inter-component APIs. All APIs are visible and available, including the APIs used by the scheduler, the node controller, the replication-controller manager, Kubelet's API, etc. There's no glass to break -- in order to handle more complex use cases, one can just access the lower-level APIs in a fully transparent, composable manner. + +For more about the Kubernetes architecture, see [architecture](architecture.html). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/README.md?pixel)]() + + diff --git a/v1.1/docs/design/namespaces.md b/v1.1/docs/design/namespaces.md new file mode 100644 index 0000000000000..cad0da5982021 --- /dev/null +++ b/v1.1/docs/design/namespaces.md @@ -0,0 +1,371 @@ +--- +layout: docwithnav +title: "Namespaces" +--- + + + + + +# Namespaces + +## Abstract + +A Namespace is a mechanism to partition resources created by users into +a logically named group. + +## Motivation + +A single cluster should be able to satisfy the needs of multiple user communities. + +Each user community wants to be able to work in isolation from other communities. + +Each user community has its own: + +1. resources (pods, services, replication controllers, etc.) +2. policies (who can or cannot perform actions in their community) +3. constraints (this community is allowed this much quota, etc.) + +A cluster operator may create a Namespace for each unique user community. + +The Namespace provides a unique scope for: + +1. named resources (to avoid basic naming collisions) +2. delegated management authority to trusted users +3. ability to limit community resource consumption + +## Use cases + +1. As a cluster operator, I want to support multiple user communities on a single cluster. +2. As a cluster operator, I want to delegate authority to partitions of the cluster to trusted users + in those communities. +3. As a cluster operator, I want to limit the amount of resources each community can consume in order + to limit the impact to other communities using the cluster. +4. As a cluster user, I want to interact with resources that are pertinent to my user community in + isolation of what other user communities are doing on the cluster. + +## Design + +### Data Model + +A *Namespace* defines a logically named group for multiple *Kind*s of resources. + +{% highlight go %} +{% raw %} +type Namespace struct { + TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + Spec NamespaceSpec `json:"spec,omitempty"` + Status NamespaceStatus `json:"status,omitempty"` +} +{% endraw %} +{% endhighlight %} + +A *Namespace* name is a DNS compatible label. + +A *Namespace* must exist prior to associating content with it. + +A *Namespace* must not be deleted if there is content associated with it. + +To associate a resource with a *Namespace* the following conditions must be satisfied: + +1. The resource's *Kind* must be registered as having *RESTScopeNamespace* with the server +2. The resource's *TypeMeta.Namespace* field must have a value that references an existing *Namespace* + +The *Name* of a resource associated with a *Namespace* is unique to that *Kind* in that *Namespace*. + +It is intended to be used in resource URLs; provided by clients at creation time, and encouraged to be +human friendly; intended to facilitate idempotent creation, space-uniqueness of singleton objects, +distinguish distinct entities, and reference particular entities across operations. + +### Authorization + +A *Namespace* provides an authorization scope for accessing content associated with the *Namespace*. + +See [Authorization plugins](../admin/authorization.html) + +### Limit Resource Consumption + +A *Namespace* provides a scope to limit resource consumption. + +A *LimitRange* defines min/max constraints on the amount of resources a single entity can consume in +a *Namespace*. + +See [Admission control: Limit Range](admission_control_limit_range.html) + +A *ResourceQuota* tracks aggregate usage of resources in the *Namespace* and allows cluster operators +to define *Hard* resource usage limits that a *Namespace* may consume. + +See [Admission control: Resource Quota](admission_control_resource_quota.html) + +### Finalizers + +Upon creation of a *Namespace*, the creator may provide a list of *Finalizer* objects. + +{% highlight go %} +{% raw %} +type FinalizerName string + +// These are internal finalizers to Kubernetes, must be qualified name unless defined here +const ( + FinalizerKubernetes FinalizerName = "kubernetes" +) + +// NamespaceSpec describes the attributes on a Namespace +type NamespaceSpec struct { + // Finalizers is an opaque list of values that must be empty to permanently remove object from storage + Finalizers []FinalizerName +} +{% endraw %} +{% endhighlight %} + +A *FinalizerName* is a qualified name. + +The API Server enforces that a *Namespace* can only be deleted from storage if and only if +it's *Namespace.Spec.Finalizers* is empty. + +A *finalize* operation is the only mechanism to modify the *Namespace.Spec.Finalizers* field post creation. + +Each *Namespace* created has *kubernetes* as an item in its list of initial *Namespace.Spec.Finalizers* +set by default. + +### Phases + +A *Namespace* may exist in the following phases. + +{% highlight go %} +{% raw %} +type NamespacePhase string +const( + NamespaceActive NamespacePhase = "Active" + NamespaceTerminating NamespaceTerminating = "Terminating" +) + +type NamespaceStatus struct { + ... + Phase NamespacePhase +} +{% endraw %} +{% endhighlight %} + +A *Namespace* is in the **Active** phase if it does not have a *ObjectMeta.DeletionTimestamp*. + +A *Namespace* is in the **Terminating** phase if it has a *ObjectMeta.DeletionTimestamp*. + +**Active** + +Upon creation, a *Namespace* goes in the *Active* phase. This means that content may be associated with +a namespace, and all normal interactions with the namespace are allowed to occur in the cluster. + +If a DELETE request occurs for a *Namespace*, the *Namespace.ObjectMeta.DeletionTimestamp* is set +to the current server time. A *namespace controller* observes the change, and sets the *Namespace.Status.Phase* +to *Terminating*. + +**Terminating** + +A *namespace controller* watches for *Namespace* objects that have a *Namespace.ObjectMeta.DeletionTimestamp* +value set in order to know when to initiate graceful termination of the *Namespace* associated content that +are known to the cluster. + +The *namespace controller* enumerates each known resource type in that namespace and deletes it one by one. + +Admission control blocks creation of new resources in that namespace in order to prevent a race-condition +where the controller could believe all of a given resource type had been deleted from the namespace, +when in fact some other rogue client agent had created new objects. Using admission control in this +scenario allows each of registry implementations for the individual objects to not need to take into account Namespace life-cycle. + +Once all objects known to the *namespace controller* have been deleted, the *namespace controller* +executes a *finalize* operation on the namespace that removes the *kubernetes* value from +the *Namespace.Spec.Finalizers* list. + +If the *namespace controller* sees a *Namespace* whose *ObjectMeta.DeletionTimestamp* is set, and +whose *Namespace.Spec.Finalizers* list is empty, it will signal the server to permanently remove +the *Namespace* from storage by sending a final DELETE action to the API server. + +### REST API + +To interact with the Namespace API: + +| Action | HTTP Verb | Path | Description | +| ------ | --------- | ---- | ----------- | +| CREATE | POST | /api/{version}/namespaces | Create a namespace | +| LIST | GET | /api/{version}/namespaces | List all namespaces | +| UPDATE | PUT | /api/{version}/namespaces/{namespace} | Update namespace {namespace} | +| DELETE | DELETE | /api/{version}/namespaces/{namespace} | Delete namespace {namespace} | +| FINALIZE | POST | /api/{version}/namespaces/{namespace}/finalize | Finalize namespace {namespace} | +| WATCH | GET | /api/{version}/watch/namespaces | Watch all namespaces | + +This specification reserves the name *finalize* as a sub-resource to namespace. + +As a consequence, it is invalid to have a *resourceType* managed by a namespace whose kind is *finalize*. + +To interact with content associated with a Namespace: + +| Action | HTTP Verb | Path | Description | +| ---- | ---- | ---- | ---- | +| CREATE | POST | /api/{version}/namespaces/{namespace}/{resourceType}/ | Create instance of {resourceType} in namespace {namespace} | +| GET | GET | /api/{version}/namespaces/{namespace}/{resourceType}/{name} | Get instance of {resourceType} in namespace {namespace} with {name} | +| UPDATE | PUT | /api/{version}/namespaces/{namespace}/{resourceType}/{name} | Update instance of {resourceType} in namespace {namespace} with {name} | +| DELETE | DELETE | /api/{version}/namespaces/{namespace}/{resourceType}/{name} | Delete instance of {resourceType} in namespace {namespace} with {name} | +| LIST | GET | /api/{version}/namespaces/{namespace}/{resourceType} | List instances of {resourceType} in namespace {namespace} | +| WATCH | GET | /api/{version}/watch/namespaces/{namespace}/{resourceType} | Watch for changes to a {resourceType} in namespace {namespace} | +| WATCH | GET | /api/{version}/watch/{resourceType} | Watch for changes to a {resourceType} across all namespaces | +| LIST | GET | /api/{version}/list/{resourceType} | List instances of {resourceType} across all namespaces | + +The API server verifies the *Namespace* on resource creation matches the *{namespace}* on the path. + +The API server will associate a resource with a *Namespace* if not populated by the end-user based on the *Namespace* context +of the incoming request. If the *Namespace* of the resource being created, or updated does not match the *Namespace* on the request, +then the API server will reject the request. + +### Storage + +A namespace provides a unique identifier space and therefore must be in the storage path of a resource. + +In etcd, we want to continue to still support efficient WATCH across namespaces. + +Resources that persist content in etcd will have storage paths as follows: + +/{k8s_storage_prefix}/{resourceType}/{resource.Namespace}/{resource.Name} + +This enables consumers to WATCH /registry/{resourceType} for changes across namespace of a particular {resourceType}. + +### Kubelet + +The kubelet will register pod's it sources from a file or http source with a namespace associated with the +*cluster-id* + +### Example: OpenShift Origin managing a Kubernetes Namespace + +In this example, we demonstrate how the design allows for agents built on-top of +Kubernetes that manage their own set of resource types associated with a *Namespace* +to take part in Namespace termination. + +OpenShift creates a Namespace in Kubernetes + +{% highlight json %} +{% raw %} +{ + "apiVersion":"v1", + "kind": "Namespace", + "metadata": { + "name": "development", + "labels": { + "name": "development" + } + }, + "spec": { + "finalizers": ["openshift.com/origin", "kubernetes"] + }, + "status": { + "phase": "Active" + } +} +{% endraw %} +{% endhighlight %} + +OpenShift then goes and creates a set of resources (pods, services, etc) associated +with the "development" namespace. It also creates its own set of resources in its +own storage associated with the "development" namespace unknown to Kubernetes. + +User deletes the Namespace in Kubernetes, and Namespace now has following state: + +{% highlight json %} +{% raw %} +{ + "apiVersion":"v1", + "kind": "Namespace", + "metadata": { + "name": "development", + "deletionTimestamp": "..." + "labels": { + "name": "development" + } + }, + "spec": { + "finalizers": ["openshift.com/origin", "kubernetes"] + }, + "status": { + "phase": "Terminating" + } +} +{% endraw %} +{% endhighlight %} + +The Kubernetes *namespace controller* observes the namespace has a *deletionTimestamp* +and begins to terminate all of the content in the namespace that it knows about. Upon +success, it executes a *finalize* action that modifies the *Namespace* by +removing *kubernetes* from the list of finalizers: + +{% highlight json %} +{% raw %} +{ + "apiVersion":"v1", + "kind": "Namespace", + "metadata": { + "name": "development", + "deletionTimestamp": "..." + "labels": { + "name": "development" + } + }, + "spec": { + "finalizers": ["openshift.com/origin"] + }, + "status": { + "phase": "Terminating" + } +} +{% endraw %} +{% endhighlight %} + +OpenShift Origin has its own *namespace controller* that is observing cluster state, and +it observes the same namespace had a *deletionTimestamp* assigned to it. It too will go +and purge resources from its own storage that it manages associated with that namespace. +Upon completion, it executes a *finalize* action and removes the reference to "openshift.com/origin" +from the list of finalizers. + +This results in the following state: + +{% highlight json %} +{% raw %} +{ + "apiVersion":"v1", + "kind": "Namespace", + "metadata": { + "name": "development", + "deletionTimestamp": "..." + "labels": { + "name": "development" + } + }, + "spec": { + "finalizers": [] + }, + "status": { + "phase": "Terminating" + } +} +{% endraw %} +{% endhighlight %} + +At this point, the Kubernetes *namespace controller* in its sync loop will see that the namespace +has a deletion timestamp and that its list of finalizers is empty. As a result, it knows all +content associated from that namespace has been purged. It performs a final DELETE action +to remove that Namespace from the storage. + +At this point, all content associated with that Namespace, and the Namespace itself are gone. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/namespaces.md?pixel)]() + + diff --git a/v1.1/docs/design/networking.md b/v1.1/docs/design/networking.md new file mode 100644 index 0000000000000..c74aac1554aa6 --- /dev/null +++ b/v1.1/docs/design/networking.md @@ -0,0 +1,200 @@ +--- +layout: docwithnav +title: "Networking" +--- + + + + + +# Networking + +There are 4 distinct networking problems to solve: + +1. Highly-coupled container-to-container communications +2. Pod-to-Pod communications +3. Pod-to-Service communications +4. External-to-internal communications + +## Model and motivation + +Kubernetes deviates from the default Docker networking model (though as of +Docker 1.8 their network plugins are getting closer). The goal is for each pod +to have an IP in a flat shared networking namespace that has full communication +with other physical computers and containers across the network. IP-per-pod +creates a clean, backward-compatible model where pods can be treated much like +VMs or physical hosts from the perspectives of port allocation, networking, +naming, service discovery, load balancing, application configuration, and +migration. + +Dynamic port allocation, on the other hand, requires supporting both static +ports (e.g., for externally accessible services) and dynamically allocated +ports, requires partitioning centrally allocated and locally acquired dynamic +ports, complicates scheduling (since ports are a scarce resource), is +inconvenient for users, complicates application configuration, is plagued by +port conflicts and reuse and exhaustion, requires non-standard approaches to +naming (e.g. consul or etcd rather than DNS), requires proxies and/or +redirection for programs using standard naming/addressing mechanisms (e.g. web +browsers), requires watching and cache invalidation for address/port changes +for instances in addition to watching group membership changes, and obstructs +container/pod migration (e.g. using CRIU). NAT introduces additional complexity +by fragmenting the addressing space, which breaks self-registration mechanisms, +among other problems. + +## Container to container + +All containers within a pod behave as if they are on the same host with regard +to networking. They can all reach each other’s ports on localhost. This offers +simplicity (static ports know a priori), security (ports bound to localhost +are visible within the pod but never outside it), and performance. This also +reduces friction for applications moving from the world of uncontainerized apps +on physical or virtual hosts. People running application stacks together on +the same host have already figured out how to make ports not conflict and have +arranged for clients to find them. + +The approach does reduce isolation between containers within a pod — +ports could conflict, and there can be no container-private ports, but these +seem to be relatively minor issues with plausible future workarounds. Besides, +the premise of pods is that containers within a pod share some resources +(volumes, cpu, ram, etc.) and therefore expect and tolerate reduced isolation. +Additionally, the user can control what containers belong to the same pod +whereas, in general, they don't control what pods land together on a host. + +## Pod to pod + +Because every pod gets a "real" (not machine-private) IP address, pods can +communicate without proxies or translations. The pod can use well-known port +numbers and can avoid the use of higher-level service discovery systems like +DNS-SD, Consul, or Etcd. + +When any container calls ioctl(SIOCGIFADDR) (get the address of an interface), +it sees the same IP that any peer container would see them coming from — +each pod has its own IP address that other pods can know. By making IP addresses +and ports the same both inside and outside the pods, we create a NAT-less, flat +address space. Running "ip addr show" should work as expected. This would enable +all existing naming/discovery mechanisms to work out of the box, including +self-registration mechanisms and applications that distribute IP addresses. We +should be optimizing for inter-pod network communication. Within a pod, +containers are more likely to use communication through volumes (e.g., tmpfs) or +IPC. + +This is different from the standard Docker model. In that mode, each container +gets an IP in the 172-dot space and would only see that 172-dot address from +SIOCGIFADDR. If these containers connect to another container the peer would see +the connect coming from a different IP than the container itself knows. In short +— you can never self-register anything from a container, because a +container can not be reached on its private IP. + +An alternative we considered was an additional layer of addressing: pod-centric +IP per container. Each container would have its own local IP address, visible +only within that pod. This would perhaps make it easier for containerized +applications to move from physical/virtual hosts to pods, but would be more +complex to implement (e.g., requiring a bridge per pod, split-horizon/VP DNS) +and to reason about, due to the additional layer of address translation, and +would break self-registration and IP distribution mechanisms. + +Like Docker, ports can still be published to the host node's interface(s), but +the need for this is radically diminished. + +## Implementation + +For the Google Compute Engine cluster configuration scripts, we use [advanced +routing rules](https://developers.google.com/compute/docs/networking#routing) +and ip-forwarding-enabled VMs so that each VM has an extra 256 IP addresses that +get routed to it. This is in addition to the 'main' IP address assigned to the +VM that is NAT-ed for Internet access. The container bridge (called `cbr0` to +differentiate it from `docker0`) is set up outside of Docker proper. + +Example of GCE's advanced routing rules: + +{% highlight sh %} +{% raw %} +gcloud compute routes add "${MINION_NAMES[$i]}" \ + --project "${PROJECT}" \ + --destination-range "${MINION_IP_RANGES[$i]}" \ + --network "${NETWORK}" \ + --next-hop-instance "${MINION_NAMES[$i]}" \ + --next-hop-instance-zone "${ZONE}" & +{% endraw %} +{% endhighlight %} + +GCE itself does not know anything about these IPs, though. This means that when +a pod tries to egress beyond GCE's project the packets must be SNAT'ed +(masqueraded) to the VM's IP, which GCE recognizes and allows. + +### Other implementations + +With the primary aim of providing IP-per-pod-model, other implementations exist +to serve the purpose outside of GCE. + - [OpenVSwitch with GRE/VxLAN](../admin/ovs-networking.html) + - [Flannel](https://github.com/coreos/flannel#flannel) + - [L2 networks](http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/) + ("With Linux Bridge devices" section) + - [Weave](https://github.com/zettio/weave) is yet another way to build an + overlay network, primarily aiming at Docker integration. + - [Calico](https://github.com/Metaswitch/calico) uses BGP to enable real + container IPs. + +## Pod to service + +The [service](../user-guide/services.html) abstraction provides a way to group pods under a +common access policy (e.g. load-balanced). The implementation of this creates a +virtual IP which clients can access and which is transparently proxied to the +pods in a Service. Each node runs a kube-proxy process which programs +`iptables` rules to trap access to service IPs and redirect them to the correct +backends. This provides a highly-available load-balancing solution with low +performance overhead by balancing client traffic from a node on that same node. + +## External to internal + +So far the discussion has been about how to access a pod or service from within +the cluster. Accessing a pod from outside the cluster is a bit more tricky. We +want to offer highly-available, high-performance load balancing to target +Kubernetes Services. Most public cloud providers are simply not flexible enough +yet. + +The way this is generally implemented is to set up external load balancers (e.g. +GCE's ForwardingRules or AWS's ELB) which target all nodes in a cluster. When +traffic arrives at a node it is recognized as being part of a particular Service +and routed to an appropriate backend Pod. This does mean that some traffic will +get double-bounced on the network. Once cloud providers have better offerings +we can take advantage of those. + +## Challenges and future work + +### Docker API + +Right now, docker inspect doesn't show the networking configuration of the +containers, since they derive it from another container. That information should +be exposed somehow. + +### External IP assignment + +We want to be able to assign IP addresses externally from Docker +[#6743](https://github.com/dotcloud/docker/issues/6743) so that we don't need +to statically allocate fixed-size IP ranges to each node, so that IP addresses +can be made stable across pod infra container restarts +([#2801](https://github.com/dotcloud/docker/issues/2801)), and to facilitate +pod migration. Right now, if the pod infra container dies, all the user +containers must be stopped and restarted because the netns of the pod infra +container will change on restart, and any subsequent user container restart +will join that new netns, thereby not being able to see its peers. +Additionally, a change in IP address would encounter DNS caching/TTL problems. +External IP assignment would also simplify DNS support (see below). + +### IPv6 + +IPv6 would be a nice option, also, but we can't depend on it yet. Docker support is in progress: [Docker issue #2974](https://github.com/dotcloud/docker/issues/2974), [Docker issue #6923](https://github.com/dotcloud/docker/issues/6923), [Docker issue #6975](https://github.com/dotcloud/docker/issues/6975). Additionally, direct ipv6 assignment to instances doesn't appear to be supported by major cloud providers (e.g., AWS EC2, GCE) yet. We'd happily take pull requests from people running Kubernetes on bare metal, though. :-) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/networking.md?pixel)]() + + diff --git a/v1.1/docs/design/persistent-storage.md b/v1.1/docs/design/persistent-storage.md new file mode 100644 index 0000000000000..7d5cbbd7fe761 --- /dev/null +++ b/v1.1/docs/design/persistent-storage.md @@ -0,0 +1,240 @@ +--- +layout: docwithnav +title: "Persistent Storage" +--- + + + + + +# Persistent Storage + +This document proposes a model for managing persistent, cluster-scoped storage for applications requiring long lived data. + +### tl;dr + +Two new API kinds: + +A `PersistentVolume` (PV) is a storage resource provisioned by an administrator. It is analogous to a node. See [Persistent Volume Guide](../user-guide/persistent-volumes/) for how to use it. + +A `PersistentVolumeClaim` (PVC) is a user's request for a persistent volume to use in a pod. It is analogous to a pod. + +One new system component: + +`PersistentVolumeClaimBinder` is a singleton running in master that watches all PersistentVolumeClaims in the system and binds them to the closest matching available PersistentVolume. The volume manager watches the API for newly created volumes to manage. + +One new volume: + +`PersistentVolumeClaimVolumeSource` references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A `PersistentVolumeClaimVolumeSource` is, essentially, a wrapper around another type of volume that is owned by someone else (the system). + +Kubernetes makes no guarantees at runtime that the underlying storage exists or is available. High availability is left to the storage provider. + +### Goals + +* Allow administrators to describe available storage +* Allow pod authors to discover and request persistent volumes to use with pods +* Enforce security through access control lists and securing storage to the same namespace as the pod volume +* Enforce quotas through admission control +* Enforce scheduler rules by resource counting +* Ensure developers can rely on storage being available without being closely bound to a particular disk, server, network, or storage device. + + +#### Describe available storage + +Cluster administrators use the API to manage *PersistentVolumes*. A custom store `NewPersistentVolumeOrderedIndex` will index volumes by access modes and sort by storage capacity. The `PersistentVolumeClaimBinder` watches for new claims for storage and binds them to an available volume by matching the volume's characteristics (AccessModes and storage size) to the user's request. + +PVs are system objects and, thus, have no namespace. + +Many means of dynamic provisioning will be eventually be implemented for various storage types. + + +##### PersistentVolume API + +| Action | HTTP Verb | Path | Description | +| ---- | ---- | ---- | ---- | +| CREATE | POST | /api/{version}/persistentvolumes/ | Create instance of PersistentVolume | +| GET | GET | /api/{version}persistentvolumes/{name} | Get instance of PersistentVolume with {name} | +| UPDATE | PUT | /api/{version}/persistentvolumes/{name} | Update instance of PersistentVolume with {name} | +| DELETE | DELETE | /api/{version}/persistentvolumes/{name} | Delete instance of PersistentVolume with {name} | +| LIST | GET | /api/{version}/persistentvolumes | List instances of PersistentVolume | +| WATCH | GET | /api/{version}/watch/persistentvolumes | Watch for changes to a PersistentVolume | + + +#### Request Storage + +Kubernetes users request persistent storage for their pod by creating a ```PersistentVolumeClaim```. Their request for storage is described by their requirements for resources and mount capabilities. + +Requests for volumes are bound to available volumes by the volume manager, if a suitable match is found. Requests for resources can go unfulfilled. + +Users attach their claim to their pod using a new ```PersistentVolumeClaimVolumeSource``` volume source. + + +##### PersistentVolumeClaim API + + +| Action | HTTP Verb | Path | Description | +| ---- | ---- | ---- | ---- | +| CREATE | POST | /api/{version}/namespaces/{ns}/persistentvolumeclaims/ | Create instance of PersistentVolumeClaim in namespace {ns} | +| GET | GET | /api/{version}/namespaces/{ns}/persistentvolumeclaims/{name} | Get instance of PersistentVolumeClaim in namespace {ns} with {name} | +| UPDATE | PUT | /api/{version}/namespaces/{ns}/persistentvolumeclaims/{name} | Update instance of PersistentVolumeClaim in namespace {ns} with {name} | +| DELETE | DELETE | /api/{version}/namespaces/{ns}/persistentvolumeclaims/{name} | Delete instance of PersistentVolumeClaim in namespace {ns} with {name} | +| LIST | GET | /api/{version}/namespaces/{ns}/persistentvolumeclaims | List instances of PersistentVolumeClaim in namespace {ns} | +| WATCH | GET | /api/{version}/watch/namespaces/{ns}/persistentvolumeclaims | Watch for changes to PersistentVolumeClaim in namespace {ns} | + + + +#### Scheduling constraints + +Scheduling constraints are to be handled similar to pod resource constraints. Pods will need to be annotated or decorated with the number of resources it requires on a node. Similarly, a node will need to list how many it has used or available. + +TBD + + +#### Events + +The implementation of persistent storage will not require events to communicate to the user the state of their claim. The CLI for bound claims contains a reference to the backing persistent volume. This is always present in the API and CLI, making an event to communicate the same unnecessary. + +Events that communicate the state of a mounted volume are left to the volume plugins. + + +### Example + +#### Admin provisions storage + +An administrator provisions storage by posting PVs to the API. Various way to automate this task can be scripted. Dynamic provisioning is a future feature that can maintain levels of PVs. + +{% highlight yaml %} +{% raw %} +POST: + +kind: PersistentVolume +apiVersion: v1 +metadata: + name: pv0001 +spec: + capacity: + storage: 10 + persistentDisk: + pdName: "abc123" + fsType: "ext4" +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +$ kubectl get pv + +NAME LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON +pv0001 map[] 10737418240 RWO Pending +{% endraw %} +{% endhighlight %} + +#### Users request storage + +A user requests storage by posting a PVC to the API. Their request contains the AccessModes they wish their volume to have and the minimum size needed. + +The user must be within a namespace to create PVCs. + +{% highlight yaml %} +{% raw %} +POST: + +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: myclaim-1 +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 3 +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +$ kubectl get pvc + +NAME LABELS STATUS VOLUME +myclaim-1 map[] pending +{% endraw %} +{% endhighlight %} + + +#### Matching and binding + + The ```PersistentVolumeClaimBinder``` attempts to find an available volume that most closely matches the user's request. If one exists, they are bound by putting a reference on the PV to the PVC. Requests can go unfulfilled if a suitable match is not found. + +{% highlight console %} +{% raw %} +$ kubectl get pv + +NAME LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON +pv0001 map[] 10737418240 RWO Bound myclaim-1 / f4b3d283-c0ef-11e4-8be4-80e6500a981e + + +kubectl get pvc + +NAME LABELS STATUS VOLUME +myclaim-1 map[] Bound b16e91d6-c0ef-11e4-8be4-80e6500a981e +{% endraw %} +{% endhighlight %} + +#### Claim usage + +The claim holder can use their claim as a volume. The ```PersistentVolumeClaimVolumeSource``` knows to fetch the PV backing the claim and mount its volume for a pod. + +The claim holder owns the claim and its data for as long as the claim exists. The pod using the claim can be deleted, but the claim remains in the user's namespace. It can be used again and again by many pods. + +{% highlight yaml %} +{% raw %} +POST: + +kind: Pod +apiVersion: v1 +metadata: + name: mypod +spec: + containers: + - image: nginx + name: myfrontend + volumeMounts: + - mountPath: "/var/www/html" + name: mypd + volumes: + - name: mypd + source: + persistentVolumeClaim: + accessMode: ReadWriteOnce + claimRef: + name: myclaim-1 +{% endraw %} +{% endhighlight %} + +#### Releasing a claim and Recycling a volume + +When a claim holder is finished with their data, they can delete their claim. + +{% highlight console %} +{% raw %} +$ kubectl delete pvc myclaim-1 +{% endraw %} +{% endhighlight %} + +The ```PersistentVolumeClaimBinder``` will reconcile this by removing the claim reference from the PV and change the PVs status to 'Released'. + +Admins can script the recycling of released volumes. Future dynamic provisioners will understand how a volume should be recycled. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/persistent-storage.md?pixel)]() + + diff --git a/v1.1/docs/design/principles.md b/v1.1/docs/design/principles.md new file mode 100644 index 0000000000000..4229c51b0296a --- /dev/null +++ b/v1.1/docs/design/principles.md @@ -0,0 +1,77 @@ +--- +layout: docwithnav +title: "Design Principles" +--- + + + + + +# Design Principles + +Principles to follow when extending Kubernetes. + +## API + +See also the [API conventions](../devel/api-conventions.html). + +* All APIs should be declarative. +* API objects should be complementary and composable, not opaque wrappers. +* The control plane should be transparent -- there are no hidden internal APIs. +* The cost of API operations should be proportional to the number of objects intentionally operated upon. Therefore, common filtered lookups must be indexed. Beware of patterns of multiple API calls that would incur quadratic behavior. +* Object status must be 100% reconstructable by observation. Any history kept must be just an optimization and not required for correct operation. +* Cluster-wide invariants are difficult to enforce correctly. Try not to add them. If you must have them, don't enforce them atomically in master components, that is contention-prone and doesn't provide a recovery path in the case of a bug allowing the invariant to be violated. Instead, provide a series of checks to reduce the probability of a violation, and make every component involved able to recover from an invariant violation. +* Low-level APIs should be designed for control by higher-level systems. Higher-level APIs should be intent-oriented (think SLOs) rather than implementation-oriented (think control knobs). + +## Control logic + +* Functionality must be *level-based*, meaning the system must operate correctly given the desired state and the current/observed state, regardless of how many intermediate state updates may have been missed. Edge-triggered behavior must be just an optimization. +* Assume an open world: continually verify assumptions and gracefully adapt to external events and/or actors. Example: we allow users to kill pods under control of a replication controller; it just replaces them. +* Do not define comprehensive state machines for objects with behaviors associated with state transitions and/or "assumed" states that cannot be ascertained by observation. +* Don't assume a component's decisions will not be overridden or rejected, nor for the component to always understand why. For example, etcd may reject writes. Kubelet may reject pods. The scheduler may not be able to schedule pods. Retry, but back off and/or make alternative decisions. +* Components should be self-healing. For example, if you must keep some state (e.g., cache) the content needs to be periodically refreshed, so that if an item does get erroneously stored or a deletion event is missed etc, it will be soon fixed, ideally on timescales that are shorter than what will attract attention from humans. +* Component behavior should degrade gracefully. Prioritize actions so that the most important activities can continue to function even when overloaded and/or in states of partial failure. + +## Architecture + +* Only the apiserver should communicate with etcd/store, and not other components (scheduler, kubelet, etc.). +* Compromising a single node shouldn't compromise the cluster. +* Components should continue to do what they were last told in the absence of new instructions (e.g., due to network partition or component outage). +* All components should keep all relevant state in memory all the time. The apiserver should write through to etcd/store, other components should write through to the apiserver, and they should watch for updates made by other clients. +* Watch is preferred over polling. + +## Extensibility + +TODO: pluggability + +## Bootstrapping + +* [Self-hosting](http://issue.k8s.io/246) of all components is a goal. +* Minimize the number of dependencies, particularly those required for steady-state operation. +* Stratify the dependencies that remain via principled layering. +* Break any circular dependencies by converting hard dependencies to soft dependencies. + * Also accept that data from other components from another source, such as local files, which can then be manually populated at bootstrap time and then continuously updated once those other components are available. + * State should be rediscoverable and/or reconstructable. + * Make it easy to run temporary, bootstrap instances of all components in order to create the runtime state needed to run the components in the steady state; use a lock (master election for distributed components, file lock for local components like Kubelet) to coordinate handoff. We call this technique "pivoting". + * Have a solution to restart dead components. For distributed components, replication works well. For local components such as Kubelet, a process manager or even a simple shell loop works. + +## Availability + +TODO + +## General principles + +* [Eric Raymond's 17 UNIX rules](https://en.wikipedia.org/wiki/Unix_philosophy#Eric_Raymond.E2.80.99s_17_Unix_Rules) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/principles.md?pixel)]() + + diff --git a/v1.1/docs/design/resources.md b/v1.1/docs/design/resources.md new file mode 100644 index 0000000000000..e6843e91c8a0a --- /dev/null +++ b/v1.1/docs/design/resources.md @@ -0,0 +1,261 @@ +--- +layout: docwithnav +title: "The Kubernetes resource model" +--- + + + + +**Note: this is a design doc, which describes features that have not been completely implemented. +User documentation of the current state is [here](../user-guide/compute-resources.html). The tracking issue for +implementation of this model is +[#168](http://issue.k8s.io/168). Currently, both limits and requests of memory and +cpu on containers (not pods) are supported. "memory" is in bytes and "cpu" is in +milli-cores.** + +# The Kubernetes resource model + +To do good pod placement, Kubernetes needs to know how big pods are, as well as the sizes of the nodes onto which they are being placed. The definition of "how big" is given by the Kubernetes resource model — the subject of this document. + +The resource model aims to be: +* simple, for common cases; +* extensible, to accommodate future growth; +* regular, with few special cases; and +* precise, to avoid misunderstandings and promote pod portability. + +## The resource model + +A Kubernetes _resource_ is something that can be requested by, allocated to, or consumed by a pod or container. Examples include memory (RAM), CPU, disk-time, and network bandwidth. + +Once resources on a node have been allocated to one pod, they should not be allocated to another until that pod is removed or exits. This means that Kubernetes schedulers should ensure that the sum of the resources allocated (requested and granted) to its pods never exceeds the usable capacity of the node. Testing whether a pod will fit on a node is called _feasibility checking_. + +Note that the resource model currently prohibits over-committing resources; we will want to relax that restriction later. + +### Resource types + +All resources have a _type_ that is identified by their _typename_ (a string, e.g., "memory"). Several resource types are predefined by Kubernetes (a full list is below), although only two will be supported at first: CPU and memory. Users and system administrators can define their own resource types if they wish (e.g., Hadoop slots). + +A fully-qualified resource typename is constructed from a DNS-style _subdomain_, followed by a slash `/`, followed by a name. +* The subdomain must conform to [RFC 1123](http://www.ietf.org/rfc/rfc1123.txt) (e.g., `kubernetes.io`, `example.com`). +* The name must be not more than 63 characters, consisting of upper- or lower-case alphanumeric characters, with the `-`, `_`, and `.` characters allowed anywhere except the first or last character. +* As a shorthand, any resource typename that does not start with a subdomain and a slash will automatically be prefixed with the built-in Kubernetes _namespace_, `kubernetes.io/` in order to fully-qualify it. This namespace is reserved for code in the open source Kubernetes repository; as a result, all user typenames MUST be fully qualified, and cannot be created in this namespace. + +Some example typenames include `memory` (which will be fully-qualified as `kubernetes.io/memory`), and `example.com/Shiny_New-Resource.Type`. + +For future reference, note that some resources, such as CPU and network bandwidth, are _compressible_, which means that their usage can potentially be throttled in a relatively benign manner. All other resources are _incompressible_, which means that any attempt to throttle them is likely to cause grief. This distinction will be important if a Kubernetes implementation supports over-committing of resources. + +### Resource quantities + +Initially, all Kubernetes resource types are _quantitative_, and have an associated _unit_ for quantities of the associated resource (e.g., bytes for memory, bytes per seconds for bandwidth, instances for software licences). The units will always be a resource type's natural base units (e.g., bytes, not MB), to avoid confusion between binary and decimal multipliers and the underlying unit multiplier (e.g., is memory measured in MiB, MB, or GB?). + +Resource quantities can be added and subtracted: for example, a node has a fixed quantity of each resource type that can be allocated to pods/containers; once such an allocation has been made, the allocated resources cannot be made available to other pods/containers without over-committing the resources. + +To make life easier for people, quantities can be represented externally as unadorned integers, or as fixed-point integers with one of these SI suffices (E, P, T, G, M, K, m) or their power-of-two equivalents (Ei, Pi, Ti, Gi, Mi, Ki). For example, the following represent roughly the same value: 128974848, "129e6", "129M" , "123Mi". Small quantities can be represented directly as decimals (e.g., 0.3), or using milli-units (e.g., "300m"). + * "Externally" means in user interfaces, reports, graphs, and in JSON or YAML resource specifications that might be generated or read by people. + * Case is significant: "m" and "M" are not the same, so "k" is not a valid SI suffix. There are no power-of-two equivalents for SI suffixes that represent multipliers less than 1. + * These conventions only apply to resource quantities, not arbitrary values. + +Internally (i.e., everywhere else), Kubernetes will represent resource quantities as integers so it can avoid problems with rounding errors, and will not use strings to represent numeric values. To achieve this, quantities that naturally have fractional parts (e.g., CPU seconds/second) will be scaled to integral numbers of milli-units (e.g., milli-CPUs) as soon as they are read in. Internal APIs, data structures, and protobufs will use these scaled integer units. Raw measurement data such as usage may still need to be tracked and calculated using floating point values, but internally they should be rescaled to avoid some values being in milli-units and some not. + * Note that reading in a resource quantity and writing it out again may change the way its values are represented, and truncate precision (e.g., 1.0001 may become 1.000), so comparison and difference operations (e.g., by an updater) must be done on the internal representations. + * Avoiding milli-units in external representations has advantages for people who will use Kubernetes, but runs the risk of developers forgetting to rescale or accidentally using floating-point representations. That seems like the right choice. We will try to reduce the risk by providing libraries that automatically do the quantization for JSON/YAML inputs. + +### Resource specifications + +Both users and a number of system components, such as schedulers, (horizontal) auto-scalers, (vertical) auto-sizers, load balancers, and worker-pool managers need to reason about resource requirements of workloads, resource capacities of nodes, and resource usage. Kubernetes divides specifications of *desired state*, aka the Spec, and representations of *current state*, aka the Status. Resource requirements and total node capacity fall into the specification category, while resource usage, characterizations derived from usage (e.g., maximum usage, histograms), and other resource demand signals (e.g., CPU load) clearly fall into the status category and are discussed in the Appendix for now. + +Resource requirements for a container or pod should have the following form: + +{% highlight yaml %} +{% raw %} +resourceRequirementSpec: [ + request: [ cpu: 2.5, memory: "40Mi" ], + limit: [ cpu: 4.0, memory: "99Mi" ], +] +{% endraw %} +{% endhighlight %} + +Where: +* _request_ [optional]: the amount of resources being requested, or that were requested and have been allocated. Scheduler algorithms will use these quantities to test feasibility (whether a pod will fit onto a node). If a container (or pod) tries to use more resources than its _request_, any associated SLOs are voided — e.g., the program it is running may be throttled (compressible resource types), or the attempt may be denied. If _request_ is omitted for a container, it defaults to _limit_ if that is explicitly specified, otherwise to an implementation-defined value; this will always be 0 for a user-defined resource type. If _request_ is omitted for a pod, it defaults to the sum of the (explicit or implicit) _request_ values for the containers it encloses. + +* _limit_ [optional]: an upper bound or cap on the maximum amount of resources that will be made available to a container or pod; if a container or pod uses more resources than its _limit_, it may be terminated. The _limit_ defaults to "unbounded"; in practice, this probably means the capacity of an enclosing container, pod, or node, but may result in non-deterministic behavior, especially for memory. + +Total capacity for a node should have a similar structure: + +{% highlight yaml %} +{% raw %} +resourceCapacitySpec: [ + total: [ cpu: 12, memory: "128Gi" ] +] +{% endraw %} +{% endhighlight %} + +Where: +* _total_: the total allocatable resources of a node. Initially, the resources at a given scope will bound the resources of the sum of inner scopes. + +#### Notes + + * It is an error to specify the same resource type more than once in each list. + + * It is an error for the _request_ or _limit_ values for a pod to be less than the sum of the (explicit or defaulted) values for the containers it encloses. (We may relax this later.) + + * If multiple pods are running on the same node and attempting to use more resources than they have requested, the result is implementation-defined. For example: unallocated or unused resources might be spread equally across claimants, or the assignment might be weighted by the size of the original request, or as a function of limits, or priority, or the phase of the moon, perhaps modulated by the direction of the tide. Thus, although it's not mandatory to provide a _request_, it's probably a good idea. (Note that the _request_ could be filled in by an automated system that is observing actual usage and/or historical data.) + + * Internally, the Kubernetes master can decide the defaulting behavior and the kubelet implementation may expected an absolute specification. For example, if the master decided that "the default is unbounded" it would pass 2^64 to the kubelet. + + +## Kubernetes-defined resource types + +The following resource types are predefined ("reserved") by Kubernetes in the `kubernetes.io` namespace, and so cannot be used for user-defined resources. Note that the syntax of all resource types in the resource spec is deliberately similar, but some resource types (e.g., CPU) may receive significantly more support than simply tracking quantities in the schedulers and/or the Kubelet. + +### Processor cycles + + * Name: `cpu` (or `kubernetes.io/cpu`) + * Units: Kubernetes Compute Unit seconds/second (i.e., CPU cores normalized to a canonical "Kubernetes CPU") + * Internal representation: milli-KCUs + * Compressible? yes + * Qualities: this is a placeholder for the kind of thing that may be supported in the future — see [#147](http://issue.k8s.io/147) + * [future] `schedulingLatency`: as per lmctfy + * [future] `cpuConversionFactor`: property of a node: the speed of a CPU core on the node's processor divided by the speed of the canonical Kubernetes CPU (a floating point value; default = 1.0). + +To reduce performance portability problems for pods, and to avoid worse-case provisioning behavior, the units of CPU will be normalized to a canonical "Kubernetes Compute Unit" (KCU, pronounced ˈko͝oko͞o), which will roughly be equivalent to a single CPU hyperthreaded core for some recent x86 processor. The normalization may be implementation-defined, although some reasonable defaults will be provided in the open-source Kubernetes code. + +Note that requesting 2 KCU won't guarantee that precisely 2 physical cores will be allocated — control of aspects like this will be handled by resource _qualities_ (a future feature). + + +### Memory + + * Name: `memory` (or `kubernetes.io/memory`) + * Units: bytes + * Compressible? no (at least initially) + +The precise meaning of what "memory" means is implementation dependent, but the basic idea is to rely on the underlying `memcg` mechanisms, support, and definitions. + +Note that most people will want to use power-of-two suffixes (Mi, Gi) for memory quantities +rather than decimal ones: "64MiB" rather than "64MB". + + +## Resource metadata + +A resource type may have an associated read-only ResourceType structure, that contains metadata about the type. For example: + +{% highlight yaml %} +{% raw %} +resourceTypes: [ + "kubernetes.io/memory": [ + isCompressible: false, ... + ] + "kubernetes.io/cpu": [ + isCompressible: true, + internalScaleExponent: 3, ... + ] + "kubernetes.io/disk-space": [ ... ] +] +{% endraw %} +{% endhighlight %} + +Kubernetes will provide ResourceType metadata for its predefined types. If no resource metadata can be found for a resource type, Kubernetes will assume that it is a quantified, incompressible resource that is not specified in milli-units, and has no default value. + +The defined properties are as follows: + +| field name | type | contents | +| ---------- | ---- | -------- | +| name | string, required | the typename, as a fully-qualified string (e.g., `kubernetes.io/cpu`) | +| internalScaleExponent | int, default=0 | external values are multiplied by 10 to this power for internal storage (e.g., 3 for milli-units) | +| units | string, required | format: `unit* [per unit+]` (e.g., `second`, `byte per second`). An empty unit field means "dimensionless". | +| isCompressible | bool, default=false | true if the resource type is compressible | +| defaultRequest | string, default=none | in the same format as a user-supplied value | +| _[future]_ quantization | number, default=1 | smallest granularity of allocation: requests may be rounded up to a multiple of this unit; implementation-defined unit (e.g., the page size for RAM). | + + +# Appendix: future extensions + +The following are planned future extensions to the resource model, included here to encourage comments. + +## Usage data + +Because resource usage and related metrics change continuously, need to be tracked over time (i.e., historically), can be characterized in a variety of ways, and are fairly voluminous, we will not include usage in core API objects, such as [Pods](../user-guide/pods.html) and Nodes, but will provide separate APIs for accessing and managing that data. See the Appendix for possible representations of usage data, but the representation we'll use is TBD. + +Singleton values for observed and predicted future usage will rapidly prove inadequate, so we will support the following structure for extended usage information: + +{% highlight yaml %} +{% raw %} +resourceStatus: [ + usage: [ cpu: , memory: ], + maxusage: [ cpu: , memory: ], + predicted: [ cpu: , memory: ], +] +{% endraw %} +{% endhighlight %} + +where a `` or `` structure looks like this: + +{% highlight yaml %} +{% raw %} +{ + mean: # arithmetic mean + max: # minimum value + min: # maximum value + count: # number of data points + percentiles: [ # map from %iles to values + "10": <10th-percentile-value>, + "50": , + "99": <99th-percentile-value>, + "99.9": <99.9th-percentile-value>, + ... + ] +} +{% endraw %} +{% endhighlight %} + +All parts of this structure are optional, although we strongly encourage including quantities for 50, 90, 95, 99, 99.5, and 99.9 percentiles. _[In practice, it will be important to include additional info such as the length of the time window over which the averages are calculated, the confidence level, and information-quality metrics such as the number of dropped or discarded data points.]_ +and predicted + +## Future resource types + +### _[future] Network bandwidth_ + + * Name: "network-bandwidth" (or `kubernetes.io/network-bandwidth`) + * Units: bytes per second + * Compressible? yes + +### _[future] Network operations_ + + * Name: "network-iops" (or `kubernetes.io/network-iops`) + * Units: operations (messages) per second + * Compressible? yes + +### _[future] Storage space_ + + * Name: "storage-space" (or `kubernetes.io/storage-space`) + * Units: bytes + * Compressible? no + +The amount of secondary storage space available to a container. The main target is local disk drives and SSDs, although this could also be used to qualify remotely-mounted volumes. Specifying whether a resource is a raw disk, an SSD, a disk array, or a file system fronting any of these, is left for future work. + +### _[future] Storage time_ + + * Name: storage-time (or `kubernetes.io/storage-time`) + * Units: seconds per second of disk time + * Internal representation: milli-units + * Compressible? yes + +This is the amount of time a container spends accessing disk, including actuator and transfer time. A standard disk drive provides 1.0 diskTime seconds per second. + +### _[future] Storage operations_ + + * Name: "storage-iops" (or `kubernetes.io/storage-iops`) + * Units: operations per second + * Compressible? yes + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/resources.md?pixel)]() + + diff --git a/v1.1/docs/design/secrets.md b/v1.1/docs/design/secrets.md new file mode 100644 index 0000000000000..be8773aab4b73 --- /dev/null +++ b/v1.1/docs/design/secrets.md @@ -0,0 +1,611 @@ +--- +layout: docwithnav +title: "Abstract" +--- + + + + + +## Abstract + +A proposal for the distribution of [secrets](../user-guide/secrets.html) (passwords, keys, etc) to the Kubelet and to +containers inside Kubernetes using a custom [volume](../user-guide/volumes.html#secrets) type. See the [secrets example](../user-guide/secrets/) for more information. + +## Motivation + +Secrets are needed in containers to access internal resources like the Kubernetes master or +external resources such as git repositories, databases, etc. Users may also want behaviors in the +kubelet that depend on secret data (credentials for image pull from a docker registry) associated +with pods. + +Goals of this design: + +1. Describe a secret resource +2. Define the various challenges attendant to managing secrets on the node +3. Define a mechanism for consuming secrets in containers without modification + +## Constraints and Assumptions + +* This design does not prescribe a method for storing secrets; storage of secrets should be + pluggable to accommodate different use-cases +* Encryption of secret data and node security are orthogonal concerns +* It is assumed that node and master are secure and that compromising their security could also + compromise secrets: + * If a node is compromised, the only secrets that could potentially be exposed should be the + secrets belonging to containers scheduled onto it + * If the master is compromised, all secrets in the cluster may be exposed +* Secret rotation is an orthogonal concern, but it should be facilitated by this proposal +* A user who can consume a secret in a container can know the value of the secret; secrets must + be provisioned judiciously + +## Use Cases + +1. As a user, I want to store secret artifacts for my applications and consume them securely in + containers, so that I can keep the configuration for my applications separate from the images + that use them: + 1. As a cluster operator, I want to allow a pod to access the Kubernetes master using a custom + `.kubeconfig` file, so that I can securely reach the master + 2. As a cluster operator, I want to allow a pod to access a Docker registry using credentials + from a `.dockercfg` file, so that containers can push images + 3. As a cluster operator, I want to allow a pod to access a git repository using SSH keys, + so that I can push to and fetch from the repository +2. As a user, I want to allow containers to consume supplemental information about services such + as username and password which should be kept secret, so that I can share secrets about a + service amongst the containers in my application securely +3. As a user, I want to associate a pod with a `ServiceAccount` that consumes a secret and have + the kubelet implement some reserved behaviors based on the types of secrets the service account + consumes: + 1. Use credentials for a docker registry to pull the pod's docker image + 2. Present Kubernetes auth token to the pod or transparently decorate traffic between the pod + and master service +4. As a user, I want to be able to indicate that a secret expires and for that secret's value to + be rotated once it expires, so that the system can help me follow good practices + +### Use-Case: Configuration artifacts + +Many configuration files contain secrets intermixed with other configuration information. For +example, a user's application may contain a properties file than contains database credentials, +SaaS API tokens, etc. Users should be able to consume configuration artifacts in their containers +and be able to control the path on the container's filesystems where the artifact will be +presented. + +### Use-Case: Metadata about services + +Most pieces of information about how to use a service are secrets. For example, a service that +provides a MySQL database needs to provide the username, password, and database name to consumers +so that they can authenticate and use the correct database. Containers in pods consuming the MySQL +service would also consume the secrets associated with the MySQL service. + +### Use-Case: Secrets associated with service accounts + +[Service Accounts](service_accounts.html) are proposed as a +mechanism to decouple capabilities and security contexts from individual human users. A +`ServiceAccount` contains references to some number of secrets. A `Pod` can specify that it is +associated with a `ServiceAccount`. Secrets should have a `Type` field to allow the Kubelet and +other system components to take action based on the secret's type. + +#### Example: service account consumes auth token secret + +As an example, the service account proposal discusses service accounts consuming secrets which +contain Kubernetes auth tokens. When a Kubelet starts a pod associated with a service account +which consumes this type of secret, the Kubelet may take a number of actions: + +1. Expose the secret in a `.kubernetes_auth` file in a well-known location in the container's + file system +2. Configure that node's `kube-proxy` to decorate HTTP requests from that pod to the + `kubernetes-master` service with the auth token, e. g. by adding a header to the request + (see the [LOAS Daemon](http://issue.k8s.io/2209) proposal) + +#### Example: service account consumes docker registry credentials + +Another example use case is where a pod is associated with a secret containing docker registry +credentials. The Kubelet could use these credentials for the docker pull to retrieve the image. + +### Use-Case: Secret expiry and rotation + +Rotation is considered a good practice for many types of secret data. It should be possible to +express that a secret has an expiry date; this would make it possible to implement a system +component that could regenerate expired secrets. As an example, consider a component that rotates +expired secrets. The rotator could periodically regenerate the values for expired secrets of +common types and update their expiry dates. + +## Deferral: Consuming secrets as environment variables + +Some images will expect to receive configuration items as environment variables instead of files. +We should consider what the best way to allow this is; there are a few different options: + +1. Force the user to adapt files into environment variables. Users can store secrets that need to + be presented as environment variables in a format that is easy to consume from a shell: + + $ cat /etc/secrets/my-secret.txt + export MY_SECRET_ENV=MY_SECRET_VALUE + + The user could `source` the file at `/etc/secrets/my-secret` prior to executing the command for + the image either inline in the command or in an init script, + +2. Give secrets an attribute that allows users to express the intent that the platform should + generate the above syntax in the file used to present a secret. The user could consume these + files in the same manner as the above option. + +3. Give secrets attributes that allow the user to express that the secret should be presented to + the container as an environment variable. The container's environment would contain the + desired values and the software in the container could use them without accommodation the + command or setup script. + +For our initial work, we will treat all secrets as files to narrow the problem space. There will +be a future proposal that handles exposing secrets as environment variables. + +## Flow analysis of secret data with respect to the API server + +There are two fundamentally different use-cases for access to secrets: + +1. CRUD operations on secrets by their owners +2. Read-only access to the secrets needed for a particular node by the kubelet + +### Use-Case: CRUD operations by owners + +In use cases for CRUD operations, the user experience for secrets should be no different than for +other API resources. + +#### Data store backing the REST API + +The data store backing the REST API should be pluggable because different cluster operators will +have different preferences for the central store of secret data. Some possibilities for storage: + +1. An etcd collection alongside the storage for other API resources +2. A collocated [HSM](http://en.wikipedia.org/wiki/Hardware_security_module) +3. A secrets server like [Vault](https://www.vaultproject.io/) or [Keywhiz](https://square.github.io/keywhiz/) +4. An external datastore such as an external etcd, RDBMS, etc. + +#### Size limit for secrets + +There should be a size limit for secrets in order to: + +1. Prevent DOS attacks against the API server +2. Allow kubelet implementations that prevent secret data from touching the node's filesystem + +The size limit should satisfy the following conditions: + +1. Large enough to store common artifact types (encryption keypairs, certificates, small + configuration files) +2. Small enough to avoid large impact on node resource consumption (storage, RAM for tmpfs, etc) + +To begin discussion, we propose an initial value for this size limit of **1MB**. + +#### Other limitations on secrets + +Defining a policy for limitations on how a secret may be referenced by another API resource and how +constraints should be applied throughout the cluster is tricky due to the number of variables +involved: + +1. Should there be a maximum number of secrets a pod can reference via a volume? +2. Should there be a maximum number of secrets a service account can reference? +3. Should there be a total maximum number of secrets a pod can reference via its own spec and its + associated service account? +4. Should there be a total size limit on the amount of secret data consumed by a pod? +5. How will cluster operators want to be able to configure these limits? +6. How will these limits impact API server validations? +7. How will these limits affect scheduling? + +For now, we will not implement validations around these limits. Cluster operators will decide how +much node storage is allocated to secrets. It will be the operator's responsibility to ensure that +the allocated storage is sufficient for the workload scheduled onto a node. + +For now, kubelets will only attach secrets to api-sourced pods, and not file- or http-sourced +ones. Doing so would: + - confuse the secrets admission controller in the case of mirror pods. + - create an apiserver-liveness dependency -- avoiding this dependency is a main reason to use non-api-source pods. + +### Use-Case: Kubelet read of secrets for node + +The use-case where the kubelet reads secrets has several additional requirements: + +1. Kubelets should only be able to receive secret data which is required by pods scheduled onto + the kubelet's node +2. Kubelets should have read-only access to secret data +3. Secret data should not be transmitted over the wire insecurely +4. Kubelets must ensure pods do not have access to each other's secrets + +#### Read of secret data by the Kubelet + +The Kubelet should only be allowed to read secrets which are consumed by pods scheduled onto that +Kubelet's node and their associated service accounts. Authorization of the Kubelet to read this +data would be delegated to an authorization plugin and associated policy rule. + +#### Secret data on the node: data at rest + +Consideration must be given to whether secret data should be allowed to be at rest on the node: + +1. If secret data is not allowed to be at rest, the size of secret data becomes another draw on + the node's RAM - should it affect scheduling? +2. If secret data is allowed to be at rest, should it be encrypted? + 1. If so, how should be this be done? + 2. If not, what threats exist? What types of secret are appropriate to store this way? + +For the sake of limiting complexity, we propose that initially secret data should not be allowed +to be at rest on a node; secret data should be stored on a node-level tmpfs filesystem. This +filesystem can be subdivided into directories for use by the kubelet and by the volume plugin. + +#### Secret data on the node: resource consumption + +The Kubelet will be responsible for creating the per-node tmpfs file system for secret storage. +It is hard to make a prescriptive declaration about how much storage is appropriate to reserve for +secrets because different installations will vary widely in available resources, desired pod to +node density, overcommit policy, and other operation dimensions. That being the case, we propose +for simplicity that the amount of secret storage be controlled by a new parameter to the kubelet +with a default value of **64MB**. It is the cluster operator's responsibility to handle choosing +the right storage size for their installation and configuring their Kubelets correctly. + +Configuring each Kubelet is not the ideal story for operator experience; it is more intuitive that +the cluster-wide storage size be readable from a central configuration store like the one proposed +in [#1553](http://issue.k8s.io/1553). When such a store +exists, the Kubelet could be modified to read this configuration item from the store. + +When the Kubelet is modified to advertise node resources (as proposed in +[#4441](http://issue.k8s.io/4441)), the capacity calculation +for available memory should factor in the potential size of the node-level tmpfs in order to avoid +memory overcommit on the node. + +#### Secret data on the node: isolation + +Every pod will have a [security context](security_context.html). +Secret data on the node should be isolated according to the security context of the container. The +Kubelet volume plugin API will be changed so that a volume plugin receives the security context of +a volume along with the volume spec. This will allow volume plugins to implement setting the +security context of volumes they manage. + +## Community work + +Several proposals / upstream patches are notable as background for this proposal: + +1. [Docker vault proposal](https://github.com/docker/docker/issues/10310) +2. [Specification for image/container standardization based on volumes](https://github.com/docker/docker/issues/9277) +3. [Kubernetes service account proposal](service_accounts.html) +4. [Secrets proposal for docker (1)](https://github.com/docker/docker/pull/6075) +5. [Secrets proposal for docker (2)](https://github.com/docker/docker/pull/6697) + +## Proposed Design + +We propose a new `Secret` resource which is mounted into containers with a new volume type. Secret +volumes will be handled by a volume plugin that does the actual work of fetching the secret and +storing it. Secrets contain multiple pieces of data that are presented as different files within +the secret volume (example: SSH key pair). + +In order to remove the burden from the end user in specifying every file that a secret consists of, +it should be possible to mount all files provided by a secret with a single `VolumeMount` entry +in the container specification. + +### Secret API Resource + +A new resource for secrets will be added to the API: + +{% highlight go %} +{% raw %} +type Secret struct { + TypeMeta + ObjectMeta + + // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN. + // The serialized form of the secret data is a base64 encoded string, + // representing the arbitrary (possibly non-string) data value here. + Data map[string][]byte `json:"data,omitempty"` + + // Used to facilitate programmatic handling of secret data. + Type SecretType `json:"type,omitempty"` +} + +type SecretType string + +const ( + SecretTypeOpaque SecretType = "Opaque" // Opaque (arbitrary data; default) + SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token" // Kubernetes auth token + SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg" // Docker registry auth + // FUTURE: other type values +) + +const MaxSecretSize = 1 * 1024 * 1024 +{% endraw %} +{% endhighlight %} + +A Secret can declare a type in order to provide type information to system components that work +with secrets. The default type is `opaque`, which represents arbitrary user-owned data. + +Secrets are validated against `MaxSecretSize`. The keys in the `Data` field must be valid DNS +subdomains. + +A new REST API and registry interface will be added to accompany the `Secret` resource. The +default implementation of the registry will store `Secret` information in etcd. Future registry +implementations could store the `TypeMeta` and `ObjectMeta` fields in etcd and store the secret +data in another data store entirely, or store the whole object in another data store. + +#### Other validations related to secrets + +Initially there will be no validations for the number of secrets a pod references, or the number of +secrets that can be associated with a service account. These may be added in the future as the +finer points of secrets and resource allocation are fleshed out. + +### Secret Volume Source + +A new `SecretSource` type of volume source will be added to the `VolumeSource` struct in the +API: + +{% highlight go %} +{% raw %} +type VolumeSource struct { + // Other fields omitted + + // SecretSource represents a secret that should be presented in a volume + SecretSource *SecretSource `json:"secret"` +} + +type SecretSource struct { + Target ObjectReference +} +{% endraw %} +{% endhighlight %} + +Secret volume sources are validated to ensure that the specified object reference actually points +to an object of type `Secret`. + +In the future, the `SecretSource` will be extended to allow: + +1. Fine-grained control over which pieces of secret data are exposed in the volume +2. The paths and filenames for how secret data are exposed + +### Secret Volume Plugin + +A new Kubelet volume plugin will be added to handle volumes with a secret source. This plugin will +require access to the API server to retrieve secret data and therefore the volume `Host` interface +will have to change to expose a client interface: + +{% highlight go %} +{% raw %} +type Host interface { + // Other methods omitted + + // GetKubeClient returns a client interface + GetKubeClient() client.Interface +} +{% endraw %} +{% endhighlight %} + +The secret volume plugin will be responsible for: + +1. Returning a `volume.Builder` implementation from `NewBuilder` that: + 1. Retrieves the secret data for the volume from the API server + 2. Places the secret data onto the container's filesystem + 3. Sets the correct security attributes for the volume based on the pod's `SecurityContext` +2. Returning a `volume.Cleaner` implementation from `NewClear` that cleans the volume from the + container's filesystem + +### Kubelet: Node-level secret storage + +The Kubelet must be modified to accept a new parameter for the secret storage size and to create +a tmpfs file system of that size to store secret data. Rough accounting of specific changes: + +1. The Kubelet should have a new field added called `secretStorageSize`; units are megabytes +2. `NewMainKubelet` should accept a value for secret storage size +3. The Kubelet server should have a new flag added for secret storage size +4. The Kubelet's `setupDataDirs` method should be changed to create the secret storage + +### Kubelet: New behaviors for secrets associated with service accounts + +For use-cases where the Kubelet's behavior is affected by the secrets associated with a pod's +`ServiceAccount`, the Kubelet will need to be changed. For example, if secrets of type +`docker-reg-auth` affect how the pod's images are pulled, the Kubelet will need to be changed +to accommodate this. Subsequent proposals can address this on a type-by-type basis. + +## Examples + +For clarity, let's examine some detailed examples of some common use-cases in terms of the +suggested changes. All of these examples are assumed to be created in a namespace called +`example`. + +### Use-Case: Pod with ssh keys + +To create a pod that uses an ssh key stored as a secret, we first need to create a secret: + +{% highlight json %} +{% raw %} +{ + "kind": "Secret", + "apiVersion": "v1", + "metadata": { + "name": "ssh-key-secret" + }, + "data": { + "id-rsa": "dmFsdWUtMg0KDQo=", + "id-rsa.pub": "dmFsdWUtMQ0K" + } +} +{% endraw %} +{% endhighlight %} + +**Note:** The serialized JSON and YAML values of secret data are encoded as +base64 strings. Newlines are not valid within these strings and must be +omitted. + +Now we can create a pod which references the secret with the ssh key and consumes it in a volume: + +{% highlight json %} +{% raw %} +{ + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "secret-test-pod", + "labels": { + "name": "secret-test" + } + }, + "spec": { + "volumes": [ + { + "name": "secret-volume", + "secret": { + "secretName": "ssh-key-secret" + } + } + ], + "containers": [ + { + "name": "ssh-test-container", + "image": "mySshImage", + "volumeMounts": [ + { + "name": "secret-volume", + "readOnly": true, + "mountPath": "/etc/secret-volume" + } + ] + } + ] + } +} +{% endraw %} +{% endhighlight %} + +When the container's command runs, the pieces of the key will be available in: + + /etc/secret-volume/id-rsa.pub + /etc/secret-volume/id-rsa + +The container is then free to use the secret data to establish an ssh connection. + +### Use-Case: Pods with pod / test credentials + +This example illustrates a pod which consumes a secret containing prod +credentials and another pod which consumes a secret with test environment +credentials. + +The secrets: + +{% highlight json %} +{% raw %} +{ + "apiVersion": "v1", + "kind": "List", + "items": + [{ + "kind": "Secret", + "apiVersion": "v1", + "metadata": { + "name": "prod-db-secret" + }, + "data": { + "password": "dmFsdWUtMg0KDQo=", + "username": "dmFsdWUtMQ0K" + } + }, + { + "kind": "Secret", + "apiVersion": "v1", + "metadata": { + "name": "test-db-secret" + }, + "data": { + "password": "dmFsdWUtMg0KDQo=", + "username": "dmFsdWUtMQ0K" + } + }] +} +{% endraw %} +{% endhighlight %} + +The pods: + +{% highlight json %} +{% raw %} +{ + "apiVersion": "v1", + "kind": "List", + "items": + [{ + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "prod-db-client-pod", + "labels": { + "name": "prod-db-client" + } + }, + "spec": { + "volumes": [ + { + "name": "secret-volume", + "secret": { + "secretName": "prod-db-secret" + } + } + ], + "containers": [ + { + "name": "db-client-container", + "image": "myClientImage", + "volumeMounts": [ + { + "name": "secret-volume", + "readOnly": true, + "mountPath": "/etc/secret-volume" + } + ] + } + ] + } + }, + { + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "test-db-client-pod", + "labels": { + "name": "test-db-client" + } + }, + "spec": { + "volumes": [ + { + "name": "secret-volume", + "secret": { + "secretName": "test-db-secret" + } + } + ], + "containers": [ + { + "name": "db-client-container", + "image": "myClientImage", + "volumeMounts": [ + { + "name": "secret-volume", + "readOnly": true, + "mountPath": "/etc/secret-volume" + } + ] + } + ] + } + }] +} +{% endraw %} +{% endhighlight %} + +The specs for the two pods differ only in the value of the object referred to by the secret volume +source. Both containers will have the following files present on their filesystems: + + /etc/secret-volume/username + /etc/secret-volume/password + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/secrets.md?pixel)]() + + diff --git a/v1.1/docs/design/security.md b/v1.1/docs/design/security.md new file mode 100644 index 0000000000000..57b57e53cfe49 --- /dev/null +++ b/v1.1/docs/design/security.md @@ -0,0 +1,139 @@ +--- +layout: docwithnav +title: "Security in Kubernetes" +--- + + + + + +# Security in Kubernetes + +Kubernetes should define a reasonable set of security best practices that allows processes to be isolated from each other, from the cluster infrastructure, and which preserves important boundaries between those who manage the cluster, and those who use the cluster. + +While Kubernetes today is not primarily a multi-tenant system, the long term evolution of Kubernetes will increasingly rely on proper boundaries between users and administrators. The code running on the cluster must be appropriately isolated and secured to prevent malicious parties from affecting the entire cluster. + + +## High Level Goals + +1. Ensure a clear isolation between the container and the underlying host it runs on +2. Limit the ability of the container to negatively impact the infrastructure or other containers +3. [Principle of Least Privilege](http://en.wikipedia.org/wiki/Principle_of_least_privilege) - ensure components are only authorized to perform the actions they need, and limit the scope of a compromise by limiting the capabilities of individual components +4. Reduce the number of systems that have to be hardened and secured by defining clear boundaries between components +5. Allow users of the system to be cleanly separated from administrators +6. Allow administrative functions to be delegated to users where necessary +7. Allow applications to be run on the cluster that have "secret" data (keys, certs, passwords) which is properly abstracted from "public" data. + + +## Use cases + +### Roles + +We define "user" as a unique identity accessing the Kubernetes API server, which may be a human or an automated process. Human users fall into the following categories: + +1. k8s admin - administers a Kubernetes cluster and has access to the underlying components of the system +2. k8s project administrator - administrates the security of a small subset of the cluster +3. k8s developer - launches pods on a Kubernetes cluster and consumes cluster resources + +Automated process users fall into the following categories: + +1. k8s container user - a user that processes running inside a container (on the cluster) can use to access other cluster resources independent of the human users attached to a project +2. k8s infrastructure user - the user that Kubernetes infrastructure components use to perform cluster functions with clearly defined roles + + +### Description of roles + +* Developers: + * write pod specs. + * making some of their own images, and using some "community" docker images + * know which pods need to talk to which other pods + * decide which pods should share files with other pods, and which should not. + * reason about application level security, such as containing the effects of a local-file-read exploit in a webserver pod. + * do not often reason about operating system or organizational security. + * are not necessarily comfortable reasoning about the security properties of a system at the level of detail of Linux Capabilities, SELinux, AppArmor, etc. + +* Project Admins: + * allocate identity and roles within a namespace + * reason about organizational security within a namespace + * don't give a developer permissions that are not needed for role. + * protect files on shared storage from unnecessary cross-team access + * are less focused about application security + +* Administrators: + * are less focused on application security. Focused on operating system security. + * protect the node from bad actors in containers, and properly-configured innocent containers from bad actors in other containers. + * comfortable reasoning about the security properties of a system at the level of detail of Linux Capabilities, SELinux, AppArmor, etc. + * decides who can use which Linux Capabilities, run privileged containers, use hostPath, etc. + * e.g. a team that manages Ceph or a mysql server might be trusted to have raw access to storage devices in some organizations, but teams that develop the applications at higher layers would not. + + +## Proposed Design + +A pod runs in a *security context* under a *service account* that is defined by an administrator or project administrator, and the *secrets* a pod has access to is limited by that *service account*. + + +1. The API should authenticate and authorize user actions [authn and authz](access.html) +2. All infrastructure components (kubelets, kube-proxies, controllers, scheduler) should have an infrastructure user that they can authenticate with and be authorized to perform only the functions they require against the API. +3. Most infrastructure components should use the API as a way of exchanging data and changing the system, and only the API should have access to the underlying data store (etcd) +4. When containers run on the cluster and need to talk to other containers or the API server, they should be identified and authorized clearly as an autonomous process via a [service account](service_accounts.html) + 1. If the user who started a long-lived process is removed from access to the cluster, the process should be able to continue without interruption + 2. If the user who started processes are removed from the cluster, administrators may wish to terminate their processes in bulk + 3. When containers run with a service account, the user that created / triggered the service account behavior must be associated with the container's action +5. When container processes run on the cluster, they should run in a [security context](security_context.html) that isolates those processes via Linux user security, user namespaces, and permissions. + 1. Administrators should be able to configure the cluster to automatically confine all container processes as a non-root, randomly assigned UID + 2. Administrators should be able to ensure that container processes within the same namespace are all assigned the same unix user UID + 3. Administrators should be able to limit which developers and project administrators have access to higher privilege actions + 4. Project administrators should be able to run pods within a namespace under different security contexts, and developers must be able to specify which of the available security contexts they may use + 5. Developers should be able to run their own images or images from the community and expect those images to run correctly + 6. Developers may need to ensure their images work within higher security requirements specified by administrators + 7. When available, Linux kernel user namespaces can be used to ensure 5.2 and 5.4 are met. + 8. When application developers want to share filesystem data via distributed filesystems, the Unix user ids on those filesystems must be consistent across different container processes +6. Developers should be able to define [secrets](secrets.html) that are automatically added to the containers when pods are run + 1. Secrets are files injected into the container whose values should not be displayed within a pod. Examples: + 1. An SSH private key for git cloning remote data + 2. A client certificate for accessing a remote system + 3. A private key and certificate for a web server + 4. A .kubeconfig file with embedded cert / token data for accessing the Kubernetes master + 5. A .dockercfg file for pulling images from a protected registry + 2. Developers should be able to define the pod spec so that a secret lands in a specific location + 3. Project administrators should be able to limit developers within a namespace from viewing or modifying secrets (anyone who can launch an arbitrary pod can view secrets) + 4. Secrets are generally not copied from one namespace to another when a developer's application definitions are copied + + +### Related design discussion + +* [Authorization and authentication](access.html) +* [Secret distribution via files](http://pr.k8s.io/2030) +* [Docker secrets](https://github.com/docker/docker/pull/6697) +* [Docker vault](https://github.com/docker/docker/issues/10310) +* [Service Accounts:](service_accounts.html) +* [Secret volumes](http://pr.k8s.io/4126) + +## Specific Design Points + +### TODO: authorization, authentication + +### Isolate the data store from the nodes and supporting infrastructure + +Access to the central data store (etcd) in Kubernetes allows an attacker to run arbitrary containers on hosts, to gain access to any protected information stored in either volumes or in pods (such as access tokens or shared secrets provided as environment variables), to intercept and redirect traffic from running services by inserting middlemen, or to simply delete the entire history of the custer. + +As a general principle, access to the central data store should be restricted to the components that need full control over the system and which can apply appropriate authorization and authentication of change requests. In the future, etcd may offer granular access control, but that granularity will require an administrator to understand the schema of the data to properly apply security. An administrator must be able to properly secure Kubernetes at a policy level, rather than at an implementation level, and schema changes over time should not risk unintended security leaks. + +Both the Kubelet and Kube Proxy need information related to their specific roles - for the Kubelet, the set of pods it should be running, and for the Proxy, the set of services and endpoints to load balance. The Kubelet also needs to provide information about running pods and historical termination data. The access pattern for both Kubelet and Proxy to load their configuration is an efficient "wait for changes" request over HTTP. It should be possible to limit the Kubelet and Proxy to only access the information they need to perform their roles and no more. + +The controller manager for Replication Controllers and other future controllers act on behalf of a user via delegation to perform automated maintenance on Kubernetes resources. Their ability to access or modify resource state should be strictly limited to their intended duties and they should be prevented from accessing information not pertinent to their role. For example, a replication controller needs only to create a copy of a known pod configuration, to determine the running state of an existing pod, or to delete an existing pod that it created - it does not need to know the contents or current state of a pod, nor have access to any data in the pods attached volumes. + +The Kubernetes pod scheduler is responsible for reading data from the pod to fit it onto a node in the cluster. At a minimum, it needs access to view the ID of a pod (to craft the binding), its current state, any resource information necessary to identify placement, and other data relevant to concerns like anti-affinity, zone or region preference, or custom logic. It does not need the ability to modify pods or see other resources, only to create bindings. It should not need the ability to delete bindings unless the scheduler takes control of relocating components on failed hosts (which could be implemented by a separate component that can delete bindings but not create them). The scheduler may need read access to user or project-container information to determine preferential location (underspecified at this time). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/security.md?pixel)]() + + diff --git a/v1.1/docs/design/security_context.md b/v1.1/docs/design/security_context.md new file mode 100644 index 0000000000000..8c9359809c4c5 --- /dev/null +++ b/v1.1/docs/design/security_context.md @@ -0,0 +1,188 @@ +--- +layout: docwithnav +title: "Security Contexts" +--- + + + + + +# Security Contexts + +## Abstract + +A security context is a set of constraints that are applied to a container in order to achieve the following goals (from [security design](security.html)): + +1. Ensure a clear isolation between container and the underlying host it runs on +2. Limit the ability of the container to negatively impact the infrastructure or other containers + +## Background + +The problem of securing containers in Kubernetes has come up [before](http://issue.k8s.io/398) and the potential problems with container security are [well known](http://opensource.com/business/14/7/docker-security-selinux). Although it is not possible to completely isolate Docker containers from their hosts, new features like [user namespaces](https://github.com/docker/libcontainer/pull/304) make it possible to greatly reduce the attack surface. + +## Motivation + +### Container isolation + +In order to improve container isolation from host and other containers running on the host, containers should only be +granted the access they need to perform their work. To this end it should be possible to take advantage of Docker +features such as the ability to [add or remove capabilities](https://docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration) and [assign MCS labels](https://docs.docker.com/reference/run/#security-configuration) +to the container process. + +Support for user namespaces has recently been [merged](https://github.com/docker/libcontainer/pull/304) into Docker's libcontainer project and should soon surface in Docker itself. It will make it possible to assign a range of unprivileged uids and gids from the host to each container, improving the isolation between host and container and between containers. + +### External integration with shared storage + +In order to support external integration with shared storage, processes running in a Kubernetes cluster +should be able to be uniquely identified by their Unix UID, such that a chain of ownership can be established. +Processes in pods will need to have consistent UID/GID/SELinux category labels in order to access shared disks. + +## Constraints and Assumptions + +* It is out of the scope of this document to prescribe a specific set + of constraints to isolate containers from their host. Different use cases need different + settings. +* The concept of a security context should not be tied to a particular security mechanism or platform + (ie. SELinux, AppArmor) +* Applying a different security context to a scope (namespace or pod) requires a solution such as the one proposed for + [service accounts](service_accounts.html). + +## Use Cases + +In order of increasing complexity, following are example use cases that would +be addressed with security contexts: + +1. Kubernetes is used to run a single cloud application. In order to protect + nodes from containers: + * All containers run as a single non-root user + * Privileged containers are disabled + * All containers run with a particular MCS label + * Kernel capabilities like CHOWN and MKNOD are removed from containers + +2. Just like case #1, except that I have more than one application running on + the Kubernetes cluster. + * Each application is run in its own namespace to avoid name collisions + * For each application a different uid and MCS label is used + +3. Kubernetes is used as the base for a PAAS with + multiple projects, each project represented by a namespace. + * Each namespace is associated with a range of uids/gids on the node that + are mapped to uids/gids on containers using linux user namespaces. + * Certain pods in each namespace have special privileges to perform system + actions such as talking back to the server for deployment, run docker + builds, etc. + * External NFS storage is assigned to each namespace and permissions set + using the range of uids/gids assigned to that namespace. + +## Proposed Design + +### Overview + +A *security context* consists of a set of constraints that determine how a container +is secured before getting created and run. A security context resides on the container and represents the runtime parameters that will +be used to create and run the container via container APIs. A *security context provider* is passed to the Kubelet so it can have a chance +to mutate Docker API calls in order to apply the security context. + +It is recommended that this design be implemented in two phases: + +1. Implement the security context provider extension point in the Kubelet + so that a default security context can be applied on container run and creation. +2. Implement a security context structure that is part of a service account. The + default context provider can then be used to apply a security context based + on the service account associated with the pod. + +### Security Context Provider + +The Kubelet will have an interface that points to a `SecurityContextProvider`. The `SecurityContextProvider` is invoked before creating and running a given container: + +{% highlight go %} +{% raw %} +type SecurityContextProvider interface { + // ModifyContainerConfig is called before the Docker createContainer call. + // The security context provider can make changes to the Config with which + // the container is created. + // An error is returned if it's not possible to secure the container as + // requested with a security context. + ModifyContainerConfig(pod *api.Pod, container *api.Container, config *docker.Config) + + // ModifyHostConfig is called before the Docker runContainer call. + // The security context provider can make changes to the HostConfig, affecting + // security options, whether the container is privileged, volume binds, etc. + // An error is returned if it's not possible to secure the container as requested + // with a security context. + ModifyHostConfig(pod *api.Pod, container *api.Container, hostConfig *docker.HostConfig) +} +{% endraw %} +{% endhighlight %} + +If the value of the SecurityContextProvider field on the Kubelet is nil, the kubelet will create and run the container as it does today. + +### Security Context + +A security context resides on the container and represents the runtime parameters that will +be used to create and run the container via container APIs. Following is an example of an initial implementation: + +{% highlight go %} +{% raw %} +type Container struct { + ... other fields omitted ... + // Optional: SecurityContext defines the security options the pod should be run with + SecurityContext *SecurityContext +} + +// SecurityContext holds security configuration that will be applied to a container. SecurityContext +// contains duplication of some existing fields from the Container resource. These duplicate fields +// will be populated based on the Container configuration if they are not set. Defining them on +// both the Container AND the SecurityContext will result in an error. +type SecurityContext struct { + // Capabilities are the capabilities to add/drop when running the container + Capabilities *Capabilities + + // Run the container in privileged mode + Privileged *bool + + // SELinuxOptions are the labels to be applied to the container + // and volumes + SELinuxOptions *SELinuxOptions + + // RunAsUser is the UID to run the entrypoint of the container process. + RunAsUser *int64 +} + +// SELinuxOptions are the labels to be applied to the container. +type SELinuxOptions struct { + // SELinux user label + User string + + // SELinux role label + Role string + + // SELinux type label + Type string + + // SELinux level label. + Level string +} +{% endraw %} +{% endhighlight %} + +### Admission + +It is up to an admission plugin to determine if the security context is acceptable or not. At the +time of writing, the admission control plugin for security contexts will only allow a context that +has defined capabilities or privileged. Contexts that attempt to define a UID or SELinux options +will be denied by default. In the future the admission plugin will base this decision upon +configurable policies that reside within the [service account](http://pr.k8s.io/2297). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/security_context.md?pixel)]() + + diff --git a/v1.1/docs/design/service_accounts.md b/v1.1/docs/design/service_accounts.md new file mode 100644 index 0000000000000..e72cc680ee086 --- /dev/null +++ b/v1.1/docs/design/service_accounts.md @@ -0,0 +1,191 @@ +--- +layout: docwithnav +title: "Service Accounts" +--- + + + + + +# Service Accounts + +## Motivation + +Processes in Pods may need to call the Kubernetes API. For example: + - scheduler + - replication controller + - node controller + - a map-reduce type framework which has a controller that then tries to make a dynamically determined number of workers and watch them + - continuous build and push system + - monitoring system + +They also may interact with services other than the Kubernetes API, such as: + - an image repository, such as docker -- both when the images are pulled to start the containers, and for writing + images in the case of pods that generate images. + - accessing other cloud services, such as blob storage, in the context of a large, integrated, cloud offering (hosted + or private). + - accessing files in an NFS volume attached to the pod + +## Design Overview + +A service account binds together several things: + - a *name*, understood by users, and perhaps by peripheral systems, for an identity + - a *principal* that can be authenticated and [authorized](../admin/authorization.html) + - a [security context](security_context.html), which defines the Linux Capabilities, User IDs, Groups IDs, and other + capabilities and controls on interaction with the file system and OS. + - a set of [secrets](secrets.html), which a container may use to + access various networked resources. + +## Design Discussion + +A new object Kind is added: + +{% highlight go %} +{% raw %} +type ServiceAccount struct { + TypeMeta `json:",inline" yaml:",inline"` + ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty"` + + username string + securityContext ObjectReference // (reference to a securityContext object) + secrets []ObjectReference // (references to secret objects +} +{% endraw %} +{% endhighlight %} + +The name ServiceAccount is chosen because it is widely used already (e.g. by Kerberos and LDAP) +to refer to this type of account. Note that it has no relation to Kubernetes Service objects. + +The ServiceAccount object does not include any information that could not be defined separately: + - username can be defined however users are defined. + - securityContext and secrets are only referenced and are created using the REST API. + +The purpose of the serviceAccount object is twofold: + - to bind usernames to securityContexts and secrets, so that the username can be used to refer succinctly + in contexts where explicitly naming securityContexts and secrets would be inconvenient + - to provide an interface to simplify allocation of new securityContexts and secrets. +These features are explained later. + +### Names + +From the standpoint of the Kubernetes API, a `user` is any principal which can authenticate to Kubernetes API. +This includes a human running `kubectl` on her desktop and a container in a Pod on a Node making API calls. + +There is already a notion of a username in Kubernetes, which is populated into a request context after authentication. +However, there is no API object representing a user. While this may evolve, it is expected that in mature installations, +the canonical storage of user identifiers will be handled by a system external to Kubernetes. + +Kubernetes does not dictate how to divide up the space of user identifier strings. User names can be +simple Unix-style short usernames, (e.g. `alice`), or may be qualified to allow for federated identity ( +`alice@example.com` vs `alice@example.org`.) Naming convention may distinguish service accounts from user +accounts (e.g. `alice@example.com` vs `build-service-account-a3b7f0@foo-namespace.service-accounts.example.com`), +but Kubernetes does not require this. + +Kubernetes also does not require that there be a distinction between human and Pod users. It will be possible +to setup a cluster where Alice the human talks to the Kubernetes API as username `alice` and starts pods that +also talk to the API as user `alice` and write files to NFS as user `alice`. But, this is not recommended. + +Instead, it is recommended that Pods and Humans have distinct identities, and reference implementations will +make this distinction. + +The distinction is useful for a number of reasons: + - the requirements for humans and automated processes are different: + - Humans need a wide range of capabilities to do their daily activities. Automated processes often have more narrowly-defined activities. + - Humans may better tolerate the exceptional conditions created by expiration of a token. Remembering to handle + this in a program is more annoying. So, either long-lasting credentials or automated rotation of credentials is + needed. + - A Human typically keeps credentials on a machine that is not part of the cluster and so not subject to automatic + management. A VM with a role/service-account can have its credentials automatically managed. + - the identity of a Pod cannot in general be mapped to a single human. + - If policy allows, it may be created by one human, and then updated by another, and another, until its behavior cannot be attributed to a single human. + +**TODO**: consider getting rid of separate serviceAccount object and just rolling its parts into the SecurityContext or +Pod Object. + +The `secrets` field is a list of references to /secret objects that an process started as that service account should +have access to be able to assert that role. + +The secrets are not inline with the serviceAccount object. This way, most or all users can have permission to `GET /serviceAccounts` so they can remind themselves +what serviceAccounts are available for use. + +Nothing will prevent creation of a serviceAccount with two secrets of type `SecretTypeKubernetesAuth`, or secrets of two +different types. Kubelet and client libraries will have some behavior, TBD, to handle the case of multiple secrets of a +given type (pick first or provide all and try each in order, etc). + +When a serviceAccount and a matching secret exist, then a `User.Info` for the serviceAccount and a `BearerToken` from the secret +are added to the map of tokens used by the authentication process in the apiserver, and similarly for other types. (We +might have some types that do not do anything on apiserver but just get pushed to the kubelet.) + +### Pods + +The `PodSpec` is extended to have a `Pods.Spec.ServiceAccountUsername` field. If this is unset, then a +default value is chosen. If it is set, then the corresponding value of `Pods.Spec.SecurityContext` is set by the +Service Account Finalizer (see below). + +TBD: how policy limits which users can make pods with which service accounts. + +### Authorization + +Kubernetes API Authorization Policies refer to users. Pods created with a `Pods.Spec.ServiceAccountUsername` typically +get a `Secret` which allows them to authenticate to the Kubernetes APIserver as a particular user. So any +policy that is desired can be applied to them. + +A higher level workflow is needed to coordinate creation of serviceAccounts, secrets and relevant policy objects. +Users are free to extend Kubernetes to put this business logic wherever is convenient for them, though the +Service Account Finalizer is one place where this can happen (see below). + +### Kubelet + +The kubelet will treat as "not ready to run" (needing a finalizer to act on it) any Pod which has an empty +SecurityContext. + +The kubelet will set a default, restrictive, security context for any pods created from non-Apiserver config +sources (http, file). + +Kubelet watches apiserver for secrets which are needed by pods bound to it. + +**TODO**: how to only let kubelet see secrets it needs to know. + +### The service account finalizer + +There are several ways to use Pods with SecurityContexts and Secrets. + +One way is to explicitly specify the securityContext and all secrets of a Pod when the pod is initially created, +like this: + +**TODO**: example of pod with explicit refs. + +Another way is with the *Service Account Finalizer*, a plugin process which is optional, and which handles +business logic around service accounts. + +The Service Account Finalizer watches Pods, Namespaces, and ServiceAccount definitions. + +First, if it finds pods which have a `Pod.Spec.ServiceAccountUsername` but no `Pod.Spec.SecurityContext` set, +then it copies in the referenced securityContext and secrets references for the corresponding `serviceAccount`. + +Second, if ServiceAccount definitions change, it may take some actions. +**TODO**: decide what actions it takes when a serviceAccount definition changes. Does it stop pods, or just +allow someone to list ones that are out of spec? In general, people may want to customize this? + +Third, if a new namespace is created, it may create a new serviceAccount for that namespace. This may include +a new username (e.g. `NAMESPACE-default-service-account@serviceaccounts.$CLUSTERID.kubernetes.io`), a new +securityContext, a newly generated secret to authenticate that serviceAccount to the Kubernetes API, and default +policies for that service account. +**TODO**: more concrete example. What are typical default permissions for default service account (e.g. readonly access +to services in the same namespace and read-write access to events in that namespace?) + +Finally, it may provide an interface to automate creation of new serviceAccounts. In that case, the user may want +to GET serviceAccounts to see what has been created. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/service_accounts.md?pixel)]() + + diff --git a/v1.1/docs/design/simple-rolling-update.md b/v1.1/docs/design/simple-rolling-update.md new file mode 100644 index 0000000000000..0d0bcdfa955d7 --- /dev/null +++ b/v1.1/docs/design/simple-rolling-update.md @@ -0,0 +1,123 @@ +--- +layout: docwithnav +title: "Simple rolling update" +--- + + + + + +## Simple rolling update + +This is a lightweight design document for simple [rolling update](../user-guide/kubectl/kubectl_rolling-update.html) in `kubectl`. + +Complete execution flow can be found [here](#execution-details). See the [example of rolling update](../user-guide/update-demo/) for more information. + +### Lightweight rollout + +Assume that we have a current replication controller named `foo` and it is running image `image:v1` + +`kubectl rolling-update foo [foo-v2] --image=myimage:v2` + +If the user doesn't specify a name for the 'next' replication controller, then the 'next' replication controller is renamed to +the name of the original replication controller. + +Obviously there is a race here, where if you kill the client between delete foo, and creating the new version of 'foo' you might be surprised about what is there, but I think that's ok. +See [Recovery](#recovery) below + +If the user does specify a name for the 'next' replication controller, then the 'next' replication controller is retained with its existing name, +and the old 'foo' replication controller is deleted. For the purposes of the rollout, we add a unique-ifying label `kubernetes.io/deployment` to both the `foo` and `foo-next` replication controllers. +The value of that label is the hash of the complete JSON representation of the`foo-next` or`foo` replication controller. The name of this label can be overridden by the user with the `--deployment-label-key` flag. + +#### Recovery + +If a rollout fails or is terminated in the middle, it is important that the user be able to resume the roll out. +To facilitate recovery in the case of a crash of the updating process itself, we add the following annotations to each replication controller in the `kubernetes.io/` annotation namespace: + * `desired-replicas` The desired number of replicas for this replication controller (either N or zero) + * `update-partner` A pointer to the replication controller resource that is the other half of this update (syntax `` the namespace is assumed to be identical to the namespace of this replication controller.) + +Recovery is achieved by issuing the same command again: + +{% highlight sh %} +{% raw %} +kubectl rolling-update foo [foo-v2] --image=myimage:v2 +{% endraw %} +{% endhighlight %} + +Whenever the rolling update command executes, the kubectl client looks for replication controllers called `foo` and `foo-next`, if they exist, an attempt is +made to roll `foo` to `foo-next`. If `foo-next` does not exist, then it is created, and the rollout is a new rollout. If `foo` doesn't exist, then +it is assumed that the rollout is nearly completed, and `foo-next` is renamed to `foo`. Details of the execution flow are given below. + + +### Aborting a rollout + +Abort is assumed to want to reverse a rollout in progress. + +`kubectl rolling-update foo [foo-v2] --rollback` + +This is really just semantic sugar for: + +`kubectl rolling-update foo-v2 foo` + +With the added detail that it moves the `desired-replicas` annotation from `foo-v2` to `foo` + + +### Execution Details + +For the purposes of this example, assume that we are rolling from `foo` to `foo-next` where the only change is an image update from `v1` to `v2` + +If the user doesn't specify a `foo-next` name, then it is either discovered from the `update-partner` annotation on `foo`. If that annotation doesn't exist, +then `foo-next` is synthesized using the pattern `-` + +#### Initialization + + * If `foo` and `foo-next` do not exist: + * Exit, and indicate an error to the user, that the specified controller doesn't exist. + * If `foo` exists, but `foo-next` does not: + * Create `foo-next` populate it with the `v2` image, set `desired-replicas` to `foo.Spec.Replicas` + * Goto Rollout + * If `foo-next` exists, but `foo` does not: + * Assume that we are in the rename phase. + * Goto Rename + * If both `foo` and `foo-next` exist: + * Assume that we are in a partial rollout + * If `foo-next` is missing the `desired-replicas` annotation + * Populate the `desired-replicas` annotation to `foo-next` using the current size of `foo` + * Goto Rollout + +#### Rollout + + * While size of `foo-next` < `desired-replicas` annotation on `foo-next` + * increase size of `foo-next` + * if size of `foo` > 0 + decrease size of `foo` + * Goto Rename + +#### Rename + + * delete `foo` + * create `foo` that is identical to `foo-next` + * delete `foo-next` + +#### Abort + + * If `foo-next` doesn't exist + * Exit and indicate to the user that they may want to simply do a new rollout with the old version + * If `foo` doesn't exist + * Exit and indicate not found to the user + * Otherwise, `foo-next` and `foo` both exist + * Set `desired-replicas` annotation on `foo` to match the annotation on `foo-next` + * Goto Rollout with `foo` and `foo-next` trading places. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/simple-rolling-update.md?pixel)]() + + diff --git a/v1.1/docs/design/versioning.md b/v1.1/docs/design/versioning.md new file mode 100644 index 0000000000000..ab8c0196546e7 --- /dev/null +++ b/v1.1/docs/design/versioning.md @@ -0,0 +1,74 @@ +--- +layout: docwithnav +title: "Kubernetes API and Release Versioning" +--- + + + + + +# Kubernetes API and Release Versioning + +Legend: + +* **Kube <major>.<minor>.<patch>** refers to the version of Kubernetes that is released. This versions all components: apiserver, kubelet, kubectl, etc. +* **API vX[betaY]** refers to the version of the HTTP API. + +## Release Timeline + +### Minor version scheme and timeline + +* Kube 1.0.0, 1.0.1 -- DONE! +* Kube 1.0.X (X>1): Standard operating procedure. We patch the release-1.0 branch as needed and increment the patch number. +* Kube 1.1.0-alpha.X: Released roughly every two weeks by cutting from HEAD. No cherrypick releases. If there is a critical bugfix, a new release from HEAD can be created ahead of schedule. +* Kube 1.1.0-beta: When HEAD is feature-complete, we will cut the release-1.1.0 branch 2 weeks prior to the desired 1.1.0 date and only merge PRs essential to 1.1. This cut will be marked as 1.1.0-beta, and HEAD will be revved to 1.2.0-alpha.0. +* Kube 1.1.0: Final release, cut from the release-1.1.0 branch cut two weeks prior. Should occur between 3 and 4 months after 1.0. 1.1.1-beta will be tagged at the same time on the same branch. + +### Major version timeline + +There is no mandated timeline for major versions. They only occur when we need to start the clock on deprecating features. A given major version should be the latest major version for at least one year from its original release date. + +## Release versions as related to API versions + +Here is an example major release cycle: + +* **Kube 1.0 should have API v1 without v1beta\* API versions** + * The last version of Kube before 1.0 (e.g. 0.14 or whatever it is) will have the stable v1 API. This enables you to migrate all your objects off of the beta API versions of the API and allows us to remove those beta API versions in Kube 1.0 with no effect. There will be tooling to help you detect and migrate any v1beta\* data versions or calls to v1 before you do the upgrade. +* **Kube 1.x may have API v2beta*** + * The first incarnation of a new (backwards-incompatible) API in HEAD is v2beta1. By default this will be unregistered in apiserver, so it can change freely. Once it is available by default in apiserver (which may not happen for several minor releases), it cannot change ever again because we serialize objects in versioned form, and we always need to be able to deserialize any objects that are saved in etcd, even between alpha versions. If further changes to v2beta1 need to be made, v2beta2 is created, and so on, in subsequent 1.x versions. +* **Kube 1.y (where y is the last version of the 1.x series) must have final API v2** + * Before Kube 2.0 is cut, API v2 must be released in 1.x. This enables two things: (1) users can upgrade to API v2 when running Kube 1.x and then switch over to Kube 2.x transparently, and (2) in the Kube 2.0 release itself we can cleanup and remove all API v2beta\* versions because no one should have v2beta\* objects left in their database. As mentioned above, tooling will exist to make sure there are no calls or references to a given API version anywhere inside someone's kube installation before someone upgrades. + * Kube 2.0 must include the v1 API, but Kube 3.0 must include the v2 API only. It *may* include the v1 API as well if the burden is not high - this will be determined on a per-major-version basis. + +## Rationale for API v2 being complete before v2.0's release + +It may seem a bit strange to complete the v2 API before v2.0 is released, but *adding* a v2 API is not a breaking change. *Removing* the v2beta\* APIs *is* a breaking change, which is what necessitates the major version bump. There are other ways to do this, but having the major release be the fresh start of that release's API without the baggage of its beta versions seems most intuitive out of the available options. + +# Patches + +Patch releases are intended for critical bug fixes to the latest minor version, such as addressing security vulnerabilities, fixes to problems affecting a large number of users, severe problems with no workaround, and blockers for products based on Kubernetes. + +They should not contain miscellaneous feature additions or improvements, and especially no incompatibilities should be introduced between patch versions of the same minor version (or even major version). + +Dependencies, such as Docker or Etcd, should also not be changed unless absolutely necessary, and also just to fix critical bugs (so, at most patch version changes, not new major nor minor versions). + +# Upgrades + +* Users can upgrade from any Kube 1.x release to any other Kube 1.x release as a rolling upgrade across their cluster. (Rolling upgrade means being able to upgrade the master first, then one node at a time. See #4855 for details.) +* No hard breaking changes over version boundaries. + * For example, if a user is at Kube 1.x, we may require them to upgrade to Kube 1.x+y before upgrading to Kube 2.x. In others words, an upgrade across major versions (e.g. Kube 1.x to Kube 2.x) should effectively be a no-op and as graceful as an upgrade from Kube 1.x to Kube 1.x+1. But you can require someone to go from 1.x to 1.x+y before they go to 2.x. + +There is a separate question of how to track the capabilities of a kubelet to facilitate rolling upgrades. That is not addressed here. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/design/versioning.md?pixel)]() + + diff --git a/v1.1/docs/devel/README.md b/v1.1/docs/devel/README.md new file mode 100644 index 0000000000000..b1118589dcdfc --- /dev/null +++ b/v1.1/docs/devel/README.md @@ -0,0 +1,96 @@ +--- +layout: docwithnav +title: "Kubernetes Developer Guide" +--- + + + + + +# Kubernetes Developer Guide + +The developer guide is for anyone wanting to either write code which directly accesses the +Kubernetes API, or to contribute directly to the Kubernetes project. +It assumes some familiarity with concepts in the [User Guide](../user-guide/README.html) and the [Cluster Admin +Guide](../admin/README.html). + + +## The process of developing and contributing code to the Kubernetes project + +* **On Collaborative Development** ([collab.md](collab.html)): Info on pull requests and code reviews. + +* **GitHub Issues** ([issues.md](issues.html)): How incoming issues are reviewed and prioritized. + +* **Pull Request Process** ([pull-requests.md](pull-requests.html)): When and why pull requests are closed. + +* **Faster PR reviews** ([faster_reviews.md](faster_reviews.html)): How to get faster PR reviews. + +* **Getting Recent Builds** ([getting-builds.md](getting-builds.html)): How to get recent builds including the latest builds that pass CI. + +* **Automated Tools** ([automation.md](automation.html)): Descriptions of the automation that is running on our github repository. + + +## Setting up your dev environment, coding, and debugging + +* **Development Guide** ([development.md](development.html)): Setting up your development environment. + +* **Hunting flaky tests** ([flaky-tests.md](flaky-tests.html)): We have a goal of 99.9% flake free tests. + Here's how to run your tests many times. + +* **Logging Conventions** ([logging.md](logging.html)]: Glog levels. + +* **Profiling Kubernetes** ([profiling.md](profiling.html)): How to plug in go pprof profiler to Kubernetes. + +* **Instrumenting Kubernetes with a new metric** + ([instrumentation.md](instrumentation.html)): How to add a new metrics to the + Kubernetes code base. + +* **Coding Conventions** ([coding-conventions.md](coding-conventions.html)): + Coding style advice for contributors. + + +## Developing against the Kubernetes API + +* API objects are explained at [http://kubernetes.io/third_party/swagger-ui/](http://kubernetes.io/third_party/swagger-ui/). + +* **Annotations** ([docs/user-guide/annotations.md](../user-guide/annotations.html)): are for attaching arbitrary non-identifying metadata to objects. + Programs that automate Kubernetes objects may use annotations to store small amounts of their state. + +* **API Conventions** ([api-conventions.md](api-conventions.html)): + Defining the verbs and resources used in the Kubernetes API. + +* **API Client Libraries** ([client-libraries.md](client-libraries.html)): + A list of existing client libraries, both supported and user-contributed. + + +## Writing plugins + +* **Authentication Plugins** ([docs/admin/authentication.md](../admin/authentication.html)): + The current and planned states of authentication tokens. + +* **Authorization Plugins** ([docs/admin/authorization.md](../admin/authorization.html)): + Authorization applies to all HTTP requests on the main apiserver port. + This doc explains the available authorization implementations. + +* **Admission Control Plugins** ([admission_control](../design/admission_control.html)) + + +## Building releases + +* **Making release notes** ([making-release-notes.md](making-release-notes.html)): Generating release nodes for a new release. + +* **Releasing Kubernetes** ([releasing.md](releasing.html)): How to create a Kubernetes release (as in version) + and how the version information gets embedded into the built binaries. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/README.md?pixel)]() + + diff --git a/v1.1/docs/devel/api-conventions.md b/v1.1/docs/devel/api-conventions.md new file mode 100644 index 0000000000000..0c8500ce967ec --- /dev/null +++ b/v1.1/docs/devel/api-conventions.md @@ -0,0 +1,733 @@ +--- +layout: docwithnav +title: "API Conventions" +--- + + + + +API Conventions +=============== + +Updated: 9/20/2015 + +*This document is oriented at users who want a deeper understanding of the Kubernetes +API structure, and developers wanting to extend the Kubernetes API. An introduction to +using resources with kubectl can be found in [Working with resources](../user-guide/working-with-resources.html).* + +**Table of Contents** + + + - [Types (Kinds)](#types-kinds) + - [Resources](#resources) + - [Objects](#objects) + - [Metadata](#metadata) + - [Spec and Status](#spec-and-status) + - [Typical status properties](#typical-status-properties) + - [References to related objects](#references-to-related-objects) + - [Lists of named subobjects preferred over maps](#lists-of-named-subobjects-preferred-over-maps) + - [Constants](#constants) + - [Lists and Simple kinds](#lists-and-simple-kinds) + - [Differing Representations](#differing-representations) + - [Verbs on Resources](#verbs-on-resources) + - [PATCH operations](#patch-operations) + - [Strategic Merge Patch](#strategic-merge-patch) + - [List Operations](#list-operations) + - [Map Operations](#map-operations) + - [Idempotency](#idempotency) + - [Defaulting](#defaulting) + - [Late Initialization](#late-initialization) + - [Concurrency Control and Consistency](#concurrency-control-and-consistency) + - [Serialization Format](#serialization-format) + - [Units](#units) + - [Selecting Fields](#selecting-fields) + - [Object references](#object-references) + - [HTTP Status codes](#http-status-codes) + - [Success codes](#success-codes) + - [Error codes](#error-codes) + - [Response Status Kind](#response-status-kind) + - [Events](#events) + - [Naming conventions](#naming-conventions) + - [Label, selector, and annotation conventions](#label-selector-and-annotation-conventions) + + + +The conventions of the [Kubernetes API](../api.html) (and related APIs in the ecosystem) are intended to ease client development and ensure that configuration mechanisms can be implemented that work across a diverse set of use cases consistently. + +The general style of the Kubernetes API is RESTful - clients create, update, delete, or retrieve a description of an object via the standard HTTP verbs (POST, PUT, DELETE, and GET) - and those APIs preferentially accept and return JSON. Kubernetes also exposes additional endpoints for non-standard verbs and allows alternative content types. All of the JSON accepted and returned by the server has a schema, identified by the "kind" and "apiVersion" fields. Where relevant HTTP header fields exist, they should mirror the content of JSON fields, but the information should not be represented only in the HTTP header. + +The following terms are defined: + +* **Kind** the name of a particular object schema (e.g. the "Cat" and "Dog" kinds would have different attributes and properties) +* **Resource** a representation of a system entity, sent or retrieved as JSON via HTTP to the server. Resources are exposed via: + * Collections - a list of resources of the same type, which may be queryable + * Elements - an individual resource, addressable via a URL + +Each resource typically accepts and returns data of a single kind. A kind may be accepted or returned by multiple resources that reflect specific use cases. For instance, the kind "Pod" is exposed as a "pods" resource that allows end users to create, update, and delete pods, while a separate "pod status" resource (that acts on "Pod" kind) allows automated processes to update a subset of the fields in that resource. + +Resource collections should be all lowercase and plural, whereas kinds are CamelCase and singular. + + +## Types (Kinds) + +Kinds are grouped into three categories: + +1. **Objects** represent a persistent entity in the system. + + Creating an API object is a record of intent - once created, the system will work to ensure that resource exists. All API objects have common metadata. + + An object may have multiple resources that clients can use to perform specific actions that create, update, delete, or get. + + Examples: `Pod`, `ReplicationController`, `Service`, `Namespace`, `Node`. + +2. **Lists** are collections of **resources** of one (usually) or more (occasionally) kinds. + + Lists have a limited set of common metadata. All lists use the "items" field to contain the array of objects they return. + + Most objects defined in the system should have an endpoint that returns the full set of resources, as well as zero or more endpoints that return subsets of the full list. Some objects may be singletons (the current user, the system defaults) and may not have lists. + + In addition, all lists that return objects with labels should support label filtering (see [docs/user-guide/labels.md](../user-guide/labels.html), and most lists should support filtering by fields. + + Examples: PodLists, ServiceLists, NodeLists + + TODO: Describe field filtering below or in a separate doc. + +3. **Simple** kinds are used for specific actions on objects and for non-persistent entities. + + Given their limited scope, they have the same set of limited common metadata as lists. + + For instance, the "Status" kind is returned when errors occur and is not persisted in the system. + + Many simple resources are "subresources", which are rooted at API paths of specific resources. When resources wish to expose alternative actions or views that are closely coupled to a single resource, they should do so using new sub-resources. Common subresources include: + + * `/binding`: Used to bind a resource representing a user request (e.g., Pod, PersistentVolumeClaim) to a cluster infrastructure resource (e.g., Node, PersistentVolume). + * `/status`: Used to write just the status portion of a resource. For example, the `/pods` endpoint only allows updates to `metadata` and `spec`, since those reflect end-user intent. An automated process should be able to modify status for users to see by sending an updated Pod kind to the server to the "/pods/<name>/status" endpoint - the alternate endpoint allows different rules to be applied to the update, and access to be appropriately restricted. + * `/scale`: Used to read and write the count of a resource in a manner that is independent of the specific resource schema. + + Two additional subresources, `proxy` and `portforward`, provide access to cluster resources as described in [docs/user-guide/accessing-the-cluster.md](../user-guide/accessing-the-cluster.html). + +The standard REST verbs (defined below) MUST return singular JSON objects. Some API endpoints may deviate from the strict REST pattern and return resources that are not singular JSON objects, such as streams of JSON objects or unstructured text log data. + +The term "kind" is reserved for these "top-level" API types. The term "type" should be used for distinguishing sub-categories within objects or subobjects. + +### Resources + +All JSON objects returned by an API MUST have the following fields: + +* kind: a string that identifies the schema this object should have +* apiVersion: a string that identifies the version of the schema the object should have + +These fields are required for proper decoding of the object. They may be populated by the server by default from the specified URL path, but the client likely needs to know the values in order to construct the URL path. + +### Objects + +#### Metadata + +Every object kind MUST have the following metadata in a nested object field called "metadata": + +* namespace: a namespace is a DNS compatible subdomain that objects are subdivided into. The default namespace is 'default'. See [docs/user-guide/namespaces.md](../user-guide/namespaces.html) for more. +* name: a string that uniquely identifies this object within the current namespace (see [docs/user-guide/identifiers.md](../user-guide/identifiers.html)). This value is used in the path when retrieving an individual object. +* uid: a unique in time and space value (typically an RFC 4122 generated identifier, see [docs/user-guide/identifiers.md](../user-guide/identifiers.html)) used to distinguish between objects with the same name that have been deleted and recreated + +Every object SHOULD have the following metadata in a nested object field called "metadata": + +* resourceVersion: a string that identifies the internal version of this object that can be used by clients to determine when objects have changed. This value MUST be treated as opaque by clients and passed unmodified back to the server. Clients should not assume that the resource version has meaning across namespaces, different kinds of resources, or different servers. (see [concurrency control](#concurrency-control-and-consistency), below, for more details) +* generation: a sequence number representing a specific generation of the desired state. Set by the system and monotonically increasing, per-resource. May be compared, such as for RAW and WAW consistency. +* creationTimestamp: a string representing an RFC 3339 date of the date and time an object was created +* deletionTimestamp: a string representing an RFC 3339 date of the date and time after which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource will be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. +* labels: a map of string keys and values that can be used to organize and categorize objects (see [docs/user-guide/labels.md](../user-guide/labels.html)) +* annotations: a map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about this object (see [docs/user-guide/annotations.md](../user-guide/annotations.html)) + +Labels are intended for organizational purposes by end users (select the pods that match this label query). Annotations enable third-party automation and tooling to decorate objects with additional metadata for their own use. + +#### Spec and Status + +By convention, the Kubernetes API makes a distinction between the specification of the desired state of an object (a nested object field called "spec") and the status of the object at the current time (a nested object field called "status"). The specification is a complete description of the desired state, including configuration settings provided by the user, [default values](#defaulting) expanded by the system, and properties initialized or otherwise changed after creation by other ecosystem components (e.g., schedulers, auto-scalers), and is persisted in stable storage with the API object. If the specification is deleted, the object will be purged from the system. The status summarizes the current state of the object in the system, and is usually persisted with the object by an automated processes but may be generated on the fly. At some cost and perhaps some temporary degradation in behavior, the status could be reconstructed by observation if it were lost. + +When a new version of an object is POSTed or PUT, the "spec" is updated and available immediately. Over time the system will work to bring the "status" into line with the "spec". The system will drive toward the most recent "spec" regardless of previous versions of that stanza. In other words, if a value is changed from 2 to 5 in one PUT and then back down to 3 in another PUT the system is not required to 'touch base' at 5 before changing the "status" to 3. In other words, the system's behavior is *level-based* rather than *edge-based*. This enables robust behavior in the presence of missed intermediate state changes. + +The Kubernetes API also serves as the foundation for the declarative configuration schema for the system. In order to facilitate level-based operation and expression of declarative configuration, fields in the specification should have declarative rather than imperative names and semantics -- they represent the desired state, not actions intended to yield the desired state. + +The PUT and POST verbs on objects will ignore the "status" values. A `/status` subresource is provided to enable system components to update statuses of resources they manage. + +Otherwise, PUT expects the whole object to be specified. Therefore, if a field is omitted it is assumed that the client wants to clear that field's value. The PUT verb does not accept partial updates. Modification of just part of an object may be achieved by GETting the resource, modifying part of the spec, labels, or annotations, and then PUTting it back. See [concurrency control](#concurrency-control-and-consistency), below, regarding read-modify-write consistency when using this pattern. Some objects may expose alternative resource representations that allow mutation of the status, or performing custom actions on the object. + +All objects that represent a physical resource whose state may vary from the user's desired intent SHOULD have a "spec" and a "status". Objects whose state cannot vary from the user's desired intent MAY have only "spec", and MAY rename "spec" to a more appropriate name. + +Objects that contain both spec and status should not contain additional top-level fields other than the standard metadata fields. + +##### Typical status properties + +**Conditions** represent the latest available observations of an object's current state. Objects may report multiple conditions, and new types of conditions may be added in the future. Therefore, conditions are represented using a list/slice, where all have similar structure. + +The `FooCondition` type for some resource type `Foo` may include a subset of the following fields, but must contain at least `type` and `status` fields: + +{% highlight go %} +{% raw %} + Type FooConditionType `json:"type" description:"type of Foo condition"` + Status ConditionStatus `json:"status" description:"status of the condition, one of True, False, Unknown"` + LastHeartbeatTime unversioned.Time `json:"lastHeartbeatTime,omitempty" description:"last time we got an update on a given condition"` + LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty" description:"last time the condition transit from one status to another"` + Reason string `json:"reason,omitempty" description:"one-word CamelCase reason for the condition's last transition"` + Message string `json:"message,omitempty" description:"human-readable message indicating details about last transition"` +{% endraw %} +{% endhighlight %} + +Additional fields may be added in the future. + +Conditions should be added to explicitly convey properties that users and components care about rather than requiring those properties to be inferred from other observations. + +Condition status values may be `True`, `False`, or `Unknown`. The absence of a condition should be interpreted the same as `Unknown`. + +In general, condition values may change back and forth, but some condition transitions may be monotonic, depending on the resource and condition type. However, conditions are observations and not, themselves, state machines, nor do we define comprehensive state machines for objects, nor behaviors associated with state transitions. The system is level-based rather than edge-triggered, and should assume an Open World. + +A typical oscillating condition type is `Ready`, which indicates the object was believed to be fully operational at the time it was last probed. A possible monotonic condition could be `Succeeded`. A `False` status for `Succeeded` would imply failure. An object that was still active would not have a `Succeeded` condition, or its status would be `Unknown`. + +Some resources in the v1 API contain fields called **`phase`**, and associated `message`, `reason`, and other status fields. The pattern of using `phase` is deprecated. Newer API types should use conditions instead. Phase was essentially a state-machine enumeration field, that contradicted [system-design principles](../design/principles.html#control-logic) and hampered evolution, since [adding new enum values breaks backward compatibility](api_changes.html). Rather than encouraging clients to infer implicit properties from phases, we intend to explicitly expose the conditions that clients need to monitor. Conditions also have the benefit that it is possible to create some conditions with uniform meaning across all resource types, while still exposing others that are unique to specific resource types. See [#7856](http://issues.k8s.io/7856) for more details and discussion. + +In condition types, and everywhere else they appear in the API, **`Reason`** is intended to be a one-word, CamelCase representation of the category of cause of the current status, and **`Message`** is intended to be a human-readable phrase or sentence, which may contain specific details of the individual occurrence. `Reason` is intended to be used in concise output, such as one-line `kubectl get` output, and in summarizing occurrences of causes, whereas `Message` is intended to be presented to users in detailed status explanations, such as `kubectl describe` output. + +Historical information status (e.g., last transition time, failure counts) is only provided with reasonable effort, and is not guaranteed to not be lost. + +Status information that may be large (especially proportional in size to collections of other resources, such as lists of references to other objects -- see below) and/or rapidly changing, such as [resource usage](../design/resources.html#usage-data), should be put into separate objects, with possibly a reference from the original object. This helps to ensure that GETs and watch remain reasonably efficient for the majority of clients, which may not need that data. + +Some resources report the `observedGeneration`, which is the `generation` most recently observed by the component responsible for acting upon changes to the desired state of the resource. This can be used, for instance, to ensure that the reported status reflects the most recent desired status. + +#### References to related objects + +References to loosely coupled sets of objects, such as [pods](../user-guide/pods.html) overseen by a [replication controller](../user-guide/replication-controller.html), are usually best referred to using a [label selector](../user-guide/labels.html). In order to ensure that GETs of individual objects remain bounded in time and space, these sets may be queried via separate API queries, but will not be expanded in the referring object's status. + +References to specific objects, especially specific resource versions and/or specific fields of those objects, are specified using the `ObjectReference` type (or other types representing strict subsets of it). Unlike partial URLs, the ObjectReference type facilitates flexible defaulting of fields from the referring object or other contextual information. + +References in the status of the referee to the referrer may be permitted, when the references are one-to-one and do not need to be frequently updated, particularly in an edge-based manner. + +#### Lists of named subobjects preferred over maps + +Discussed in [#2004](http://issue.k8s.io/2004) and elsewhere. There are no maps of subobjects in any API objects. Instead, the convention is to use a list of subobjects containing name fields. + +For example: + +{% highlight yaml %} +{% raw %} +ports: + - name: www + containerPort: 80 +{% endraw %} +{% endhighlight %} + +vs. + +{% highlight yaml %} +{% raw %} +ports: + www: + containerPort: 80 +{% endraw %} +{% endhighlight %} + +This rule maintains the invariant that all JSON/YAML keys are fields in API objects. The only exceptions are pure maps in the API (currently, labels, selectors, annotations, data), as opposed to sets of subobjects. + +#### Constants + +Some fields will have a list of allowed values (enumerations). These values will be strings, and they will be in CamelCase, with an initial uppercase letter. Examples: "ClusterFirst", "Pending", "ClientIP". + +### Lists and Simple kinds + +Every list or simple kind SHOULD have the following metadata in a nested object field called "metadata": + +* resourceVersion: a string that identifies the common version of the objects returned by in a list. This value MUST be treated as opaque by clients and passed unmodified back to the server. A resource version is only valid within a single namespace on a single kind of resource. + +Every simple kind returned by the server, and any simple kind sent to the server that must support idempotency or optimistic concurrency should return this value.Since simple resources are often used as input alternate actions that modify objects, the resource version of the simple resource should correspond to the resource version of the object. + + +## Differing Representations + +An API may represent a single entity in different ways for different clients, or transform an object after certain transitions in the system occur. In these cases, one request object may have two representations available as different resources, or different kinds. + +An example is a Service, which represents the intent of the user to group a set of pods with common behavior on common ports. When Kubernetes detects a pod matches the service selector, the IP address and port of the pod are added to an Endpoints resource for that Service. The Endpoints resource exists only if the Service exists, but exposes only the IPs and ports of the selected pods. The full service is represented by two distinct resources - under the original Service resource the user created, as well as in the Endpoints resource. + +As another example, a "pod status" resource may accept a PUT with the "pod" kind, with different rules about what fields may be changed. + +Future versions of Kubernetes may allow alternative encodings of objects beyond JSON. + + +## Verbs on Resources + +API resources should use the traditional REST pattern: + +* GET /<resourceNamePlural> - Retrieve a list of type <resourceName>, e.g. GET /pods returns a list of Pods. +* POST /<resourceNamePlural> - Create a new resource from the JSON object provided by the client. +* GET /<resourceNamePlural>/<name> - Retrieves a single resource with the given name, e.g. GET /pods/first returns a Pod named 'first'. Should be constant time, and the resource should be bounded in size. +* DELETE /<resourceNamePlural>/<name> - Delete the single resource with the given name. DeleteOptions may specify gracePeriodSeconds, the optional duration in seconds before the object should be deleted. Individual kinds may declare fields which provide a default grace period, and different kinds may have differing kind-wide default grace periods. A user provided grace period overrides a default grace period, including the zero grace period ("now"). +* PUT /<resourceNamePlural>/<name> - Update or create the resource with the given name with the JSON object provided by the client. +* PATCH /<resourceNamePlural>/<name> - Selectively modify the specified fields of the resource. See more information [below](#patch). +* GET /<resourceNamePlural>&watch=true - Receive a stream of JSON objects corresponding to changes made to any resource of the given kind over time. + +### PATCH operations + +The API supports three different PATCH operations, determined by their corresponding Content-Type header: + +* JSON Patch, `Content-Type: application/json-patch+json` + * As defined in [RFC6902](https://tools.ietf.org/html/rfc6902), a JSON Patch is a sequence of operations that are executed on the resource, e.g. `{"op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ]}`. For more details on how to use JSON Patch, see the RFC. +* Merge Patch, `Content-Type: application/merge-patch+json` + * As defined in [RFC7386](https://tools.ietf.org/html/rfc7386), a Merge Patch is essentially a partial representation of the resource. The submitted JSON is "merged" with the current resource to create a new one, then the new one is saved. For more details on how to use Merge Patch, see the RFC. +* Strategic Merge Patch, `Content-Type: application/strategic-merge-patch+json` + * Strategic Merge Patch is a custom implementation of Merge Patch. For a detailed explanation of how it works and why it needed to be introduced, see below. + +#### Strategic Merge Patch + +In the standard JSON merge patch, JSON objects are always merged but lists are always replaced. Often that isn't what we want. Let's say we start with the following Pod: + +{% highlight yaml %} +{% raw %} +spec: + containers: + - name: nginx + image: nginx-1.0 +{% endraw %} +{% endhighlight %} + +...and we POST that to the server (as JSON). Then let's say we want to *add* a container to this Pod. + +{% highlight yaml %} +{% raw %} +PATCH /api/v1/namespaces/default/pods/pod-name +spec: + containers: + - name: log-tailer + image: log-tailer-1.0 +{% endraw %} +{% endhighlight %} + +If we were to use standard Merge Patch, the entire container list would be replaced with the single log-tailer container. However, our intent is for the container lists to merge together based on the `name` field. + +To solve this problem, Strategic Merge Patch uses metadata attached to the API objects to determine what lists should be merged and which ones should not. Currently the metadata is available as struct tags on the API objects themselves, but will become available to clients as Swagger annotations in the future. In the above example, the `patchStrategy` metadata for the `containers` field would be `merge` and the `patchMergeKey` would be `name`. + +Note: If the patch results in merging two lists of scalars, the scalars are first deduplicated and then merged. + +Strategic Merge Patch also supports special operations as listed below. + +### List Operations + +To override the container list to be strictly replaced, regardless of the default: + +{% highlight yaml %} +{% raw %} +containers: + - name: nginx + image: nginx-1.0 + - $patch: replace # any further $patch operations nested in this list will be ignored +{% endraw %} +{% endhighlight %} + +To delete an element of a list that should be merged: + +{% highlight yaml %} +{% raw %} +containers: + - name: nginx + image: nginx-1.0 + - $patch: delete + name: log-tailer # merge key and value goes here +{% endraw %} +{% endhighlight %} + +### Map Operations + +To indicate that a map should not be merged and instead should be taken literally: + +{% highlight yaml %} +{% raw %} +$patch: replace # recursive and applies to all fields of the map it's in +containers: +- name: nginx + image: nginx-1.0 +{% endraw %} +{% endhighlight %} + +To delete a field of a map: + +{% highlight yaml %} +{% raw %} +name: nginx +image: nginx-1.0 +labels: + live: null # set the value of the map key to null +{% endraw %} +{% endhighlight %} + + +## Idempotency + +All compatible Kubernetes APIs MUST support "name idempotency" and respond with an HTTP status code 409 when a request is made to POST an object that has the same name as an existing object in the system. See [docs/user-guide/identifiers.md](../user-guide/identifiers.html) for details. + +Names generated by the system may be requested using `metadata.generateName`. GenerateName indicates that the name should be made unique by the server prior to persisting it. A non-empty value for the field indicates the name will be made unique (and the name returned to the client will be different than the name passed). The value of this field will be combined with a unique suffix on the server if the Name field has not been provided. The provided value must be valid within the rules for Name, and may be truncated by the length of the suffix required to make the value unique on the server. If this field is specified, and Name is not present, the server will NOT return a 409 if the generated name exists - instead, it will either return 201 Created or 504 with Reason `ServerTimeout` indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). + +## Defaulting + +Default resource values are API version-specific, and they are applied during +the conversion from API-versioned declarative configuration to internal objects +representing the desired state (`Spec`) of the resource. Subsequent GETs of the +resource will include the default values explicitly. + +Incorporating the default values into the `Spec` ensures that `Spec` depicts the +full desired state so that it is easier for the system to determine how to +achieve the state, and for the user to know what to anticipate. + +API version-specific default values are set by the API server. + +## Late Initialization + +Late initialization is when resource fields are set by a system controller +after an object is created/updated. + +For example, the scheduler sets the `pod.spec.nodeName` field after the pod is created. + +Late-initializers should only make the following types of modifications: + - Setting previously unset fields + - Adding keys to maps + - Adding values to arrays which have mergeable semantics (`patchStrategy:"merge"` attribute in + the type definition). + +These conventions: + 1. allow a user (with sufficient privilege) to override any system-default behaviors by setting + the fields that would otherwise have been defaulted. + 1. enables updates from users to be merged with changes made during late initialization, using + strategic merge patch, as opposed to clobbering the change. + 1. allow the component which does the late-initialization to use strategic merge patch, which + facilitates composition and concurrency of such components. + +Although the apiserver Admission Control stage acts prior to object creation, +Admission Control plugins should follow the Late Initialization conventions +too, to allow their implementation to be later moved to a 'controller', or to client libraries. + +## Concurrency Control and Consistency + +Kubernetes leverages the concept of *resource versions* to achieve optimistic concurrency. All Kubernetes resources have a "resourceVersion" field as part of their metadata. This resourceVersion is a string that identifies the internal version of an object that can be used by clients to determine when objects have changed. When a record is about to be updated, it's version is checked against a pre-saved value, and if it doesn't match, the update fails with a StatusConflict (HTTP status code 409). + +The resourceVersion is changed by the server every time an object is modified. If resourceVersion is included with the PUT operation the system will verify that there have not been other successful mutations to the resource during a read/modify/write cycle, by verifying that the current value of resourceVersion matches the specified value. + +The resourceVersion is currently backed by [etcd's modifiedIndex](https://coreos.com/docs/distributed-configuration/etcd-api/). However, it's important to note that the application should *not* rely on the implementation details of the versioning system maintained by Kubernetes. We may change the implementation of resourceVersion in the future, such as to change it to a timestamp or per-object counter. + +The only way for a client to know the expected value of resourceVersion is to have received it from the server in response to a prior operation, typically a GET. This value MUST be treated as opaque by clients and passed unmodified back to the server. Clients should not assume that the resource version has meaning across namespaces, different kinds of resources, or different servers. Currently, the value of resourceVersion is set to match etcd's sequencer. You could think of it as a logical clock the API server can use to order requests. However, we expect the implementation of resourceVersion to change in the future, such as in the case we shard the state by kind and/or namespace, or port to another storage system. + +In the case of a conflict, the correct client action at this point is to GET the resource again, apply the changes afresh, and try submitting again. This mechanism can be used to prevent races like the following: + +``` +{% raw %} +Client #1 Client #2 +GET Foo GET Foo +Set Foo.Bar = "one" Set Foo.Baz = "two" +PUT Foo PUT Foo +{% endraw %} +``` + +When these sequences occur in parallel, either the change to Foo.Bar or the change to Foo.Baz can be lost. + +On the other hand, when specifying the resourceVersion, one of the PUTs will fail, since whichever write succeeds changes the resourceVersion for Foo. + +resourceVersion may be used as a precondition for other operations (e.g., GET, DELETE) in the future, such as for read-after-write consistency in the presence of caching. + +"Watch" operations specify resourceVersion using a query parameter. It is used to specify the point at which to begin watching the specified resources. This may be used to ensure that no mutations are missed between a GET of a resource (or list of resources) and a subsequent Watch, even if the current version of the resource is more recent. This is currently the main reason that list operations (GET on a collection) return resourceVersion. + + +## Serialization Format + +APIs may return alternative representations of any resource in response to an Accept header or under alternative endpoints, but the default serialization for input and output of API responses MUST be JSON. + +All dates should be serialized as RFC3339 strings. + +## Units + +Units must either be explicit in the field name (e.g., `timeoutSeconds`), or must be specified as part of the value (e.g., `resource.Quantity`). Which approach is preferred is TBD, though currently we use the `fooSeconds` convention for durations. + + +## Selecting Fields + +Some APIs may need to identify which field in a JSON object is invalid, or to reference a value to extract from a separate resource. The current recommendation is to use standard JavaScript syntax for accessing that field, assuming the JSON object was transformed into a JavaScript object, without the leading dot, such as `metadata.name`. + +Examples: + +* Find the field "current" in the object "state" in the second item in the array "fields": `fields[1].state.current` + +## Object references + +Object references should either be called `fooName` if referring to an object of kind `Foo` by just the name (within the current namespace, if a namespaced resource), or should be called `fooRef`, and should contain a subset of the fields of the `ObjectReference` type. + + +TODO: Plugins, extensions, nested kinds, headers + + +## HTTP Status codes + +The server will respond with HTTP status codes that match the HTTP spec. See the section below for a breakdown of the types of status codes the server will send. + +The following HTTP status codes may be returned by the API. + +#### Success codes + +* `200 StatusOK` + * Indicates that the request completed successfully. +* `201 StatusCreated` + * Indicates that the request to create kind completed successfully. +* `204 StatusNoContent` + * Indicates that the request completed successfully, and the response contains no body. + * Returned in response to HTTP OPTIONS requests. + +#### Error codes + +* `307 StatusTemporaryRedirect` + * Indicates that the address for the requested resource has changed. + * Suggested client recovery behavior + * Follow the redirect. +* `400 StatusBadRequest` + * Indicates the requested is invalid. + * Suggested client recovery behavior: + * Do not retry. Fix the request. +* `401 StatusUnauthorized` + * Indicates that the server can be reached and understood the request, but refuses to take any further action, because the client must provide authorization. If the client has provided authorization, the server is indicating the provided authorization is unsuitable or invalid. + * Suggested client recovery behavior + * If the user has not supplied authorization information, prompt them for the appropriate credentials + * If the user has supplied authorization information, inform them their credentials were rejected and optionally prompt them again. +* `403 StatusForbidden` + * Indicates that the server can be reached and understood the request, but refuses to take any further action, because it is configured to deny access for some reason to the requested resource by the client. + * Suggested client recovery behavior + * Do not retry. Fix the request. +* `404 StatusNotFound` + * Indicates that the requested resource does not exist. + * Suggested client recovery behavior + * Do not retry. Fix the request. +* `405 StatusMethodNotAllowed` + * Indicates that the action the client attempted to perform on the resource was not supported by the code. + * Suggested client recovery behavior + * Do not retry. Fix the request. +* `409 StatusConflict` + * Indicates that either the resource the client attempted to create already exists or the requested update operation cannot be completed due to a conflict. + * Suggested client recovery behavior + * * If creating a new resource + * * Either change the identifier and try again, or GET and compare the fields in the pre-existing object and issue a PUT/update to modify the existing object. + * * If updating an existing resource: + * See `Conflict` from the `status` response section below on how to retrieve more information about the nature of the conflict. + * GET and compare the fields in the pre-existing object, merge changes (if still valid according to preconditions), and retry with the updated request (including `ResourceVersion`). +* `422 StatusUnprocessableEntity` + * Indicates that the requested create or update operation cannot be completed due to invalid data provided as part of the request. + * Suggested client recovery behavior + * Do not retry. Fix the request. +* `429 StatusTooManyRequests` + * Indicates that the either the client rate limit has been exceeded or the server has received more requests then it can process. + * Suggested client recovery behavior: + * Read the `Retry-After` HTTP header from the response, and wait at least that long before retrying. +* `500 StatusInternalServerError` + * Indicates that the server can be reached and understood the request, but either an unexpected internal error occurred and the outcome of the call is unknown, or the server cannot complete the action in a reasonable time (this maybe due to temporary server load or a transient communication issue with another server). + * Suggested client recovery behavior: + * Retry with exponential backoff. +* `503 StatusServiceUnavailable` + * Indicates that required service is unavailable. + * Suggested client recovery behavior: + * Retry with exponential backoff. +* `504 StatusServerTimeout` + * Indicates that the request could not be completed within the given time. Clients can get this response ONLY when they specified a timeout param in the request. + * Suggested client recovery behavior: + * Increase the value of the timeout param and retry with exponential backoff + +## Response Status Kind + +Kubernetes will always return the `Status` kind from any API endpoint when an error occurs. +Clients SHOULD handle these types of objects when appropriate. + +A `Status` kind will be returned by the API in two cases: + * When an operation is not successful (i.e. when the server would return a non 2xx HTTP status code). + * When a HTTP `DELETE` call is successful. + +The status object is encoded as JSON and provided as the body of the response. The status object contains fields for humans and machine consumers of the API to get more detailed information for the cause of the failure. The information in the status object supplements, but does not override, the HTTP status code's meaning. When fields in the status object have the same meaning as generally defined HTTP headers and that header is returned with the response, the header should be considered as having higher priority. + +**Example:** + +{% highlight console %} +{% raw %} +$ curl -v -k -H "Authorization: Bearer WhCDvq4VPpYhrcfmF6ei7V9qlbqTubUc" https://10.240.122.184:443/api/v1/namespaces/default/pods/grafana + +> GET /api/v1/namespaces/default/pods/grafana HTTP/1.1 +> User-Agent: curl/7.26.0 +> Host: 10.240.122.184 +> Accept: */* +> Authorization: Bearer WhCDvq4VPpYhrcfmF6ei7V9qlbqTubUc +> + +< HTTP/1.1 404 Not Found +< Content-Type: application/json +< Date: Wed, 20 May 2015 18:10:42 GMT +< Content-Length: 232 +< +{ + "kind": "Status", + "apiVersion": "v1", + "metadata": {}, + "status": "Failure", + "message": "pods \"grafana\" not found", + "reason": "NotFound", + "details": { + "name": "grafana", + "kind": "pods" + }, + "code": 404 +} +{% endraw %} +{% endhighlight %} + +`status` field contains one of two possible values: +* `Success` +* `Failure` + +`message` may contain human-readable description of the error + +`reason` may contain a machine-readable, one-word, CamelCase description of why this operation is in the `Failure` status. If this value is empty there is no information available. The `reason` clarifies an HTTP status code but does not override it. + +`details` may contain extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. + +Possible values for the `reason` and `details` fields: +* `BadRequest` + * Indicates that the request itself was invalid, because the request doesn't make any sense, for example deleting a read-only object. + * This is different than `status reason` `Invalid` above which indicates that the API call could possibly succeed, but the data was invalid. + * API calls that return BadRequest can never succeed. + * Http status code: `400 StatusBadRequest` +* `Unauthorized` + * Indicates that the server can be reached and understood the request, but refuses to take any further action without the client providing appropriate authorization. If the client has provided authorization, this error indicates the provided credentials are insufficient or invalid. + * Details (optional): + * `kind string` + * The kind attribute of the unauthorized resource (on some operations may differ from the requested resource). + * `name string` + * The identifier of the unauthorized resource. + * HTTP status code: `401 StatusUnauthorized` +* `Forbidden` + * Indicates that the server can be reached and understood the request, but refuses to take any further action, because it is configured to deny access for some reason to the requested resource by the client. + * Details (optional): + * `kind string` + * The kind attribute of the forbidden resource (on some operations may differ from the requested resource). + * `name string` + * The identifier of the forbidden resource. + * HTTP status code: `403 StatusForbidden` +* `NotFound` + * Indicates that one or more resources required for this operation could not be found. + * Details (optional): + * `kind string` + * The kind attribute of the missing resource (on some operations may differ from the requested resource). + * `name string` + * The identifier of the missing resource. + * HTTP status code: `404 StatusNotFound` +* `AlreadyExists` + * Indicates that the resource you are creating already exists. + * Details (optional): + * `kind string` + * The kind attribute of the conflicting resource. + * `name string` + * The identifier of the conflicting resource. + * HTTP status code: `409 StatusConflict` +* `Conflict` + * Indicates that the requested update operation cannot be completed due to a conflict. The client may need to alter the request. Each resource may define custom details that indicate the nature of the conflict. + * HTTP status code: `409 StatusConflict` +* `Invalid` + * Indicates that the requested create or update operation cannot be completed due to invalid data provided as part of the request. + * Details (optional): + * `kind string` + * the kind attribute of the invalid resource + * `name string` + * the identifier of the invalid resource + * `causes` + * One or more `StatusCause` entries indicating the data in the provided resource that was invalid. The `reason`, `message`, and `field` attributes will be set. + * HTTP status code: `422 StatusUnprocessableEntity` +* `Timeout` + * Indicates that the request could not be completed within the given time. Clients may receive this response if the server has decided to rate limit the client, or if the server is overloaded and cannot process the request at this time. + * Http status code: `429 TooManyRequests` + * The server should set the `Retry-After` HTTP header and return `retryAfterSeconds` in the details field of the object. A value of `0` is the default. +* `ServerTimeout` + * Indicates that the server can be reached and understood the request, but cannot complete the action in a reasonable time. This maybe due to temporary server load or a transient communication issue with another server. + * Details (optional): + * `kind string` + * The kind attribute of the resource being acted on. + * `name string` + * The operation that is being attempted. + * The server should set the `Retry-After` HTTP header and return `retryAfterSeconds` in the details field of the object. A value of `0` is the default. + * Http status code: `504 StatusServerTimeout` +* `MethodNotAllowed` + * Indicates that the action the client attempted to perform on the resource was not supported by the code. + * For instance, attempting to delete a resource that can only be created. + * API calls that return MethodNotAllowed can never succeed. + * Http status code: `405 StatusMethodNotAllowed` +* `InternalError` + * Indicates that an internal error occurred, it is unexpected and the outcome of the call is unknown. + * Details (optional): + * `causes` + * The original error. + * Http status code: `500 StatusInternalServerError` + +`code` may contain the suggested HTTP return code for this status. + + +## Events + +Events are complementary to status information, since they can provide some historical information about status and occurrences in addition to current or previous status. Generate events for situations users or administrators should be alerted about. + +Choose a unique, specific, short, CamelCase reason for each event category. For example, `FreeDiskSpaceInvalid` is a good event reason because it is likely to refer to just one situation, but `Started` is not a good reason because it doesn't sufficiently indicate what started, even when combined with other event fields. + +`Error creating foo` or `Error creating foo %s` would be appropriate for an event message, with the latter being preferable, since it is more informational. + +Accumulate repeated events in the client, especially for frequent events, to reduce data volume, load on the system, and noise exposed to users. + +## Naming conventions + +* Go field names must be CamelCase. JSON field names must be camelCase. Other than capitalization of the initial letter, the two should almost always match. No underscores nor dashes in either. +* Field and resource names should be declarative, not imperative (DoSomething, SomethingDoer, DoneBy, DoneAt). +* `Minion` has been deprecated in favor of `Node`. Use `Node` where referring to the node resource in the context of the cluster. Use `Host` where referring to properties of the individual physical/virtual system, such as `hostname`, `hostPath`, `hostNetwork`, etc. +* `FooController` is a deprecated kind naming convention. Name the kind after the thing being controlled instead (e.g., `Job` rather than `JobController`). +* The name of a field that specifies the time at which `something` occurs should be called `somethingTime`. Do not use `stamp` (e.g., `creationTimestamp`). +* We use the `fooSeconds` convention for durations, as discussed in the [units subsection](#units). + * `fooPeriodSeconds` is preferred for periodic intervals and other waiting periods (e.g., over `fooIntervalSeconds`). + * `fooTimeoutSeconds` is preferred for inactivity/unresponsiveness deadlines. + * `fooDeadlineSeconds` is preferred for activity completion deadlines. +* Do not use abbreviations in the API, except where they are extremely commonly used, such as "id", "args", or "stdin". +* Acronyms should similarly only be used when extremely commonly known. All letters in the acronym should have the same case, using the appropriate case for the situation. For example, at the beginning of a field name, the acronym should be all lowercase, such as "httpGet". Where used as a constant, all letters should be uppercase, such as "TCP" or "UDP". +* The name of a field referring to another resource of kind `Foo` by name should be called `fooName`. The name of a field referring to another resource of kind `Foo` by ObjectReference (or subset thereof) should be called `fooRef`. +* More generally, include the units and/or type in the field name if they could be ambiguous and they are not specified by the value or value type. + +## Label, selector, and annotation conventions + +Labels are the domain of users. They are intended to facilitate organization and management of API resources using attributes that are meaningful to users, as opposed to meaningful to the system. Think of them as user-created mp3 or email inbox labels, as opposed to the directory structure used by a program to store its data. The former is enables the user to apply an arbitrary ontology, whereas the latter is implementation-centric and inflexible. Users will use labels to select resources to operate on, display label values in CLI/UI columns, etc. Users should always retain full power and flexibility over the label schemas they apply to labels in their namespaces. + +However, we should support conveniences for common cases by default. For example, what we now do in ReplicationController is automatically set the RC's selector and labels to the labels in the pod template by default, if they are not already set. That ensures that the selector will match the template, and that the RC can be managed using the same labels as the pods it creates. Note that once we generalize selectors, it won't necessarily be possible to unambiguously generate labels that match an arbitrary selector. + +If the user wants to apply additional labels to the pods that it doesn't select upon, such as to facilitate adoption of pods or in the expectation that some label values will change, they can set the selector to a subset of the pod labels. Similarly, the RC's labels could be initialized to a subset of the pod template's labels, or could include additional/different labels. + +For disciplined users managing resources within their own namespaces, it's not that hard to consistently apply schemas that ensure uniqueness. One just needs to ensure that at least one value of some label key in common differs compared to all other comparable resources. We could/should provide a verification tool to check that. However, development of conventions similar to the examples in [Labels](../user-guide/labels.html) make uniqueness straightforward. Furthermore, relatively narrowly used namespaces (e.g., per environment, per application) can be used to reduce the set of resources that could potentially cause overlap. + +In cases where users could be running misc. examples with inconsistent schemas, or where tooling or components need to programmatically generate new objects to be selected, there needs to be a straightforward way to generate unique label sets. A simple way to ensure uniqueness of the set is to ensure uniqueness of a single label value, such as by using a resource name, uid, resource hash, or generation number. + +Problems with uids and hashes, however, include that they have no semantic meaning to the user, are not memorable nor readily recognizable, and are not predictable. Lack of predictability obstructs use cases such as creation of a replication controller from a pod, such as people want to do when exploring the system, bootstrapping a self-hosted cluster, or deletion and re-creation of a new RC that adopts the pods of the previous one, such as to rename it. Generation numbers are more predictable and much clearer, assuming there is a logical sequence. Fortunately, for deployments that's the case. For jobs, use of creation timestamps is common internally. Users should always be able to turn off auto-generation, in order to permit some of the scenarios described above. Note that auto-generated labels will also become one more field that needs to be stripped out when cloning a resource, within a namespace, in a new namespace, in a new cluster, etc., and will need to be ignored around when updating a resource via patch or read-modify-write sequence. + +Inclusion of a system prefix in a label key is fairly hostile to UX. A prefix is only necessary in the case that the user cannot choose the label key, in order to avoid collisions with user-defined labels. However, I firmly believe that the user should always be allowed to select the label keys to use on their resources, so it should always be possible to override default label keys. + +Therefore, resources supporting auto-generation of unique labels should have a `uniqueLabelKey` field, so that the user could specify the key if they wanted to, but if unspecified, it could be set by default, such as to the resource type, like job, deployment, or replicationController. The value would need to be at least spatially unique, and perhaps temporally unique in the case of job. + +Annotations have very different intended usage from labels. We expect them to be primarily generated and consumed by tooling and system extensions. I'm inclined to generalize annotations to permit them to directly store arbitrary json. Rigid names and name prefixes make sense, since they are analogous to API fields. + +In fact, in-development API fields, including those used to represent fields of newer alpha/beta API versions in the older stable storage version, may be represented as annotations with the form `something.alpha.kubernetes.io/name` or `something.beta.kubernetes.io/name` (depending on our confidence in it). For example `net.alpha.kubernetes.io/policy` might represent an experimental network policy field. + +Other advice regarding use of labels, annotations, and other generic map keys by Kubernetes components and tools: + - Key names should be all lowercase, with words separated by dashes, such as `desired-replicas` + - Prefix the key with `kubernetes.io/` or `foo.kubernetes.io/`, preferably the latter if the label/annotation is specific to `foo` + - For instance, prefer `service-account.kubernetes.io/name` over `kubernetes.io/service-account.name` + - Use annotations to store API extensions that the controller responsible for the resource doesn't need to know about, experimental fields that aren't intended to be generally used API fields, etc. Beware that annotations aren't automatically handled by the API conversion machinery. + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/api-conventions.md?pixel)]() + + diff --git a/v1.1/docs/devel/api_changes.md b/v1.1/docs/devel/api_changes.md new file mode 100644 index 0000000000000..386ae91e65855 --- /dev/null +++ b/v1.1/docs/devel/api_changes.md @@ -0,0 +1,628 @@ +--- +layout: docwithnav +title: "So you want to change the API?" +--- + + + + + +# So you want to change the API? + +Before attempting a change to the API, you should familiarize yourself +with a number of existing API types and with the [API +conventions](api-conventions.html). If creating a new API +type/resource, we also recommend that you first send a PR containing +just a proposal for the new API types, and that you initially target +the extensions API (pkg/apis/extensions). + +The Kubernetes API has two major components - the internal structures and +the versioned APIs. The versioned APIs are intended to be stable, while the +internal structures are implemented to best reflect the needs of the Kubernetes +code itself. + +What this means for API changes is that you have to be somewhat thoughtful in +how you approach changes, and that you have to touch a number of pieces to make +a complete change. This document aims to guide you through the process, though +not all API changes will need all of these steps. + +## Operational overview + +It is important to have a high level understanding of the API system used in +Kubernetes in order to navigate the rest of this document. + +As mentioned above, the internal representation of an API object is decoupled +from any one API version. This provides a lot of freedom to evolve the code, +but it requires robust infrastructure to convert between representations. There +are multiple steps in processing an API operation - even something as simple as +a GET involves a great deal of machinery. + +The conversion process is logically a "star" with the internal form at the +center. Every versioned API can be converted to the internal form (and +vice-versa), but versioned APIs do not convert to other versioned APIs directly. +This sounds like a heavy process, but in reality we do not intend to keep more +than a small number of versions alive at once. While all of the Kubernetes code +operates on the internal structures, they are always converted to a versioned +form before being written to storage (disk or etcd) or being sent over a wire. +Clients should consume and operate on the versioned APIs exclusively. + +To demonstrate the general process, here is a (hypothetical) example: + + 1. A user POSTs a `Pod` object to `/api/v7beta1/...` + 2. The JSON is unmarshalled into a `v7beta1.Pod` structure + 3. Default values are applied to the `v7beta1.Pod` + 4. The `v7beta1.Pod` is converted to an `api.Pod` structure + 5. The `api.Pod` is validated, and any errors are returned to the user + 6. The `api.Pod` is converted to a `v6.Pod` (because v6 is the latest stable + version) + 7. The `v6.Pod` is marshalled into JSON and written to etcd + +Now that we have the `Pod` object stored, a user can GET that object in any +supported api version. For example: + + 1. A user GETs the `Pod` from `/api/v5/...` + 2. The JSON is read from etcd and unmarshalled into a `v6.Pod` structure + 3. Default values are applied to the `v6.Pod` + 4. The `v6.Pod` is converted to an `api.Pod` structure + 5. The `api.Pod` is converted to a `v5.Pod` structure + 6. The `v5.Pod` is marshalled into JSON and sent to the user + +The implication of this process is that API changes must be done carefully and +backward-compatibly. + +## On compatibility + +Before talking about how to make API changes, it is worthwhile to clarify what +we mean by API compatibility. An API change is considered backward-compatible +if it: + * adds new functionality that is not required for correct behavior (e.g., + does not add a new required field) + * does not change existing semantics, including: + * default values and behavior + * interpretation of existing API types, fields, and values + * which fields are required and which are not + +Put another way: + +1. Any API call (e.g. a structure POSTed to a REST endpoint) that worked before + your change must work the same after your change. +2. Any API call that uses your change must not cause problems (e.g. crash or + degrade behavior) when issued against servers that do not include your change. +3. It must be possible to round-trip your change (convert to different API + versions and back) with no loss of information. +4. Existing clients need not be aware of your change in order for them to continue + to function as they did previously, even when your change is utilized + +If your change does not meet these criteria, it is not considered strictly +compatible. + +Let's consider some examples. In a hypothetical API (assume we're at version +v6), the `Frobber` struct looks something like this: + +{% highlight go %} +{% raw %} +// API v6. +type Frobber struct { + Height int `json:"height"` + Param string `json:"param"` +} +{% endraw %} +{% endhighlight %} + +You want to add a new `Width` field. It is generally safe to add new fields +without changing the API version, so you can simply change it to: + +{% highlight go %} +{% raw %} +// Still API v6. +type Frobber struct { + Height int `json:"height"` + Width int `json:"width"` + Param string `json:"param"` +} +{% endraw %} +{% endhighlight %} + +The onus is on you to define a sane default value for `Width` such that rule #1 +above is true - API calls and stored objects that used to work must continue to +work. + +For your next change you want to allow multiple `Param` values. You can not +simply change `Param string` to `Params []string` (without creating a whole new +API version) - that fails rules #1 and #2. You can instead do something like: + +{% highlight go %} +{% raw %} +// Still API v6, but kind of clumsy. +type Frobber struct { + Height int `json:"height"` + Width int `json:"width"` + Param string `json:"param"` // the first param + ExtraParams []string `json:"params"` // additional params +} +{% endraw %} +{% endhighlight %} + +Now you can satisfy the rules: API calls that provide the old style `Param` +will still work, while servers that don't understand `ExtraParams` can ignore +it. This is somewhat unsatisfying as an API, but it is strictly compatible. + +Part of the reason for versioning APIs and for using internal structs that are +distinct from any one version is to handle growth like this. The internal +representation can be implemented as: + +{% highlight go %} +{% raw %} +// Internal, soon to be v7beta1. +type Frobber struct { + Height int + Width int + Params []string +} +{% endraw %} +{% endhighlight %} + +The code that converts to/from versioned APIs can decode this into the somewhat +uglier (but compatible!) structures. Eventually, a new API version, let's call +it v7beta1, will be forked and it can use the clean internal structure. + +We've seen how to satisfy rules #1 and #2. Rule #3 means that you can not +extend one versioned API without also extending the others. For example, an +API call might POST an object in API v7beta1 format, which uses the cleaner +`Params` field, but the API server might store that object in trusty old v6 +form (since v7beta1 is "beta"). When the user reads the object back in the +v7beta1 API it would be unacceptable to have lost all but `Params[0]`. This +means that, even though it is ugly, a compatible change must be made to the v6 +API. + +However, this is very challenging to do correctly. It often requires +multiple representations of the same information in the same API resource, which +need to be kept in sync in the event that either is changed. For example, +let's say you decide to rename a field within the same API version. In this case, +you add units to `height` and `width`. You implement this by adding duplicate +fields: + +{% highlight go %} +{% raw %} +type Frobber struct { + Height *int `json:"height"` + Width *int `json:"width"` + HeightInInches *int `json:"heightInInches"` + WidthInInches *int `json:"widthInInches"` +} +{% endraw %} +{% endhighlight %} + +You convert all of the fields to pointers in order to distinguish between unset and +set to 0, and then set each corresponding field from the other in the defaulting +pass (e.g., `heightInInches` from `height`, and vice versa), which runs just prior +to conversion. That works fine when the user creates a resource from a hand-written +configuration -- clients can write either field and read either field, but what about +creation or update from the output of GET, or update via PATCH (see +[In-place updates](../user-guide/managing-deployments.html#in-place-updates-of-resources))? +In this case, the two fields will conflict, because only one field would be updated +in the case of an old client that was only aware of the old field (e.g., `height`). + +Say the client creates: + +{% highlight json %} +{% raw %} +{ + "height": 10, + "width": 5 +} +{% endraw %} +{% endhighlight %} + +and GETs: + +{% highlight json %} +{% raw %} +{ + "height": 10, + "heightInInches": 10, + "width": 5, + "widthInInches": 5 +} +{% endraw %} +{% endhighlight %} + +then PUTs back: + +{% highlight json %} +{% raw %} +{ + "height": 13, + "heightInInches": 10, + "width": 5, + "widthInInches": 5 +} +{% endraw %} +{% endhighlight %} + +The update should not fail, because it would have worked before `heightInInches` was added. + +Therefore, when there are duplicate fields, the old field MUST take precedence +over the new, and the new field should be set to match by the server upon write. +A new client would be aware of the old field as well as the new, and so can ensure +that the old field is either unset or is set consistently with the new field. However, +older clients would be unaware of the new field. Please avoid introducing duplicate +fields due to the complexity they incur in the API. + +A new representation, even in a new API version, that is more expressive than an old one +breaks backward compatibility, since clients that only understood the old representation +would not be aware of the new representation nor its semantics. Examples of +proposals that have run into this challenge include [generalized label +selectors](http://issues.k8s.io/341) and [pod-level security +context](http://prs.k8s.io/12823). + +As another interesting example, enumerated values cause similar challenges. +Adding a new value to an enumerated set is *not* a compatible change. Clients +which assume they know how to handle all possible values of a given field will +not be able to handle the new values. However, removing value from an +enumerated set *can* be a compatible change, if handled properly (treat the +removed value as deprecated but allowed). This is actually a special case of +a new representation, discussed above. + +## Incompatible API changes + +There are times when this might be OK, but mostly we want changes that +meet this definition. If you think you need to break compatibility, +you should talk to the Kubernetes team first. + +Breaking compatibility of a beta or stable API version, such as v1, is unacceptable. +Compatibility for experimental or alpha APIs is not strictly required, but +breaking compatibility should not be done lightly, as it disrupts all users of the +feature. Experimental APIs may be removed. Alpha and beta API versions may be deprecated +and eventually removed wholesale, as described in the [versioning document](../design/versioning.html). +Document incompatible changes across API versions under the [conversion tips](../api.html). + +If your change is going to be backward incompatible or might be a breaking change for API +consumers, please send an announcement to `kubernetes-dev@googlegroups.com` before +the change gets in. If you are unsure, ask. Also make sure that the change gets documented in +the release notes for the next release by labeling the PR with the "release-note" github label. + +If you found that your change accidentally broke clients, it should be reverted. + +In short, the expected API evolution is as follows: +* `extensions/v1alpha1` -> +* `newapigroup/v1alpha1` -> ... -> `newapigroup/v1alphaN` -> +* `newapigroup/v1beta1` -> ... -> `newapigroup/v1betaN` -> +* `newapigroup/v1` -> +* `newapigroup/v2alpha1` -> ... + +While in extensions we have no obligation to move forward with the API at all and may delete or break it at any time. + +While in alpha we expect to move forward with it, but may break it. + +Once in beta we will preserve forward compatibility, but may introduce new versions and delete old ones. + +v1 must be backward-compatible for an extended length of time. + +## Changing versioned APIs + +For most changes, you will probably find it easiest to change the versioned +APIs first. This forces you to think about how to make your change in a +compatible way. Rather than doing each step in every version, it's usually +easier to do each versioned API one at a time, or to do all of one version +before starting "all the rest". + +### Edit types.go + +The struct definitions for each API are in `pkg/api//types.go`. Edit +those files to reflect the change you want to make. Note that all types and non-inline +fields in versioned APIs must be preceded by descriptive comments - these are used to generate +documentation. + +Optional fields should have the `,omitempty` json tag; fields are interpreted as being +required otherwise. + +### Edit defaults.go + +If your change includes new fields for which you will need default values, you +need to add cases to `pkg/api//defaults.go`. Of course, since you +have added code, you have to add a test: `pkg/api//defaults_test.go`. + +Do use pointers to scalars when you need to distinguish between an unset value +and an automatic zero value. For example, +`PodSpec.TerminationGracePeriodSeconds` is defined as `*int64` the go type +definition. A zero value means 0 seconds, and a nil value asks the system to +pick a default. + +Don't forget to run the tests! + +### Edit conversion.go + +Given that you have not yet changed the internal structs, this might feel +premature, and that's because it is. You don't yet have anything to convert to +or from. We will revisit this in the "internal" section. If you're doing this +all in a different order (i.e. you started with the internal structs), then you +should jump to that topic below. In the very rare case that you are making an +incompatible change you might or might not want to do this now, but you will +have to do more later. The files you want are +`pkg/api//conversion.go` and `pkg/api//conversion_test.go`. + +Note that the conversion machinery doesn't generically handle conversion of values, +such as various kinds of field references and API constants. [The client +library](https://releases.k8s.io/release-1.1/pkg/client/unversioned/request.go) has custom conversion code for +field references. You also need to add a call to api.Scheme.AddFieldLabelConversionFunc +with a mapping function that understands supported translations. + +## Changing the internal structures + +Now it is time to change the internal structs so your versioned changes can be +used. + +### Edit types.go + +Similar to the versioned APIs, the definitions for the internal structs are in +`pkg/api/types.go`. Edit those files to reflect the change you want to make. +Keep in mind that the internal structs must be able to express *all* of the +versioned APIs. + +## Edit validation.go + +Most changes made to the internal structs need some form of input validation. +Validation is currently done on internal objects in +`pkg/api/validation/validation.go`. This validation is the one of the first +opportunities we have to make a great user experience - good error messages and +thorough validation help ensure that users are giving you what you expect and, +when they don't, that they know why and how to fix it. Think hard about the +contents of `string` fields, the bounds of `int` fields and the +requiredness/optionalness of fields. + +Of course, code needs tests - `pkg/api/validation/validation_test.go`. + +## Edit version conversions + +At this point you have both the versioned API changes and the internal +structure changes done. If there are any notable differences - field names, +types, structural change in particular - you must add some logic to convert +versioned APIs to and from the internal representation. If you see errors from +the `serialization_test`, it may indicate the need for explicit conversions. + +Performance of conversions very heavily influence performance of apiserver. +Thus, we are auto-generating conversion functions that are much more efficient +than the generic ones (which are based on reflections and thus are highly +inefficient). + +The conversion code resides with each versioned API. There are two files: + - `pkg/api//conversion.go` containing manually written conversion + functions + - `pkg/api//conversion_generated.go` containing auto-generated + conversion functions + - `pkg/apis/extensions//conversion.go` containing manually written + conversion functions + - `pkg/apis/extensions//conversion_generated.go` containing + auto-generated conversion functions + +Since auto-generated conversion functions are using manually written ones, +those manually written should be named with a defined convention, i.e. a function +converting type X in pkg a to type Y in pkg b, should be named: +`convert_a_X_To_b_Y`. + +Also note that you can (and for efficiency reasons should) use auto-generated +conversion functions when writing your conversion functions. + +Once all the necessary manually written conversions are added, you need to +regenerate auto-generated ones. To regenerate them: + - run + +{% highlight sh %} +{% raw %} +hack/update-generated-conversions.sh +{% endraw %} +{% endhighlight %} + +If running the above script is impossible due to compile errors, the easiest +workaround is to comment out the code causing errors and let the script to +regenerate it. If the auto-generated conversion methods are not used by the +manually-written ones, it's fine to just remove the whole file and let the +generator to create it from scratch. + +Unsurprisingly, adding manually written conversion also requires you to add tests to +`pkg/api//conversion_test.go`. + +## Edit deep copy files + +At this point you have both the versioned API changes and the internal +structure changes done. You now need to generate code to handle deep copy +of your versioned api objects. + +The deep copy code resides with each versioned API: + - `pkg/api//deep_copy_generated.go` containing auto-generated copy functions + - `pkg/apis/extensions//deep_copy_generated.go` containing auto-generated copy functions + +To regenerate them: + - run + +{% highlight sh %} +{% raw %} +hack/update-generated-deep-copies.sh +{% endraw %} +{% endhighlight %} + +## Edit json (un)marshaling code + +We are auto-generating code for marshaling and unmarshaling json representation +of api objects - this is to improve the overall system performance. + +The auto-generated code resides with each versioned API: + - `pkg/api//types.generated.go` + - `pkg/apis/extensions//types.generated.go` + +To regenerate them: + - run + +{% highlight sh %} +{% raw %} +hack/update-codecgen.sh +{% endraw %} +{% endhighlight %} + +## Making a new API Group + +This section is under construction, as we make the tooling completely generic. + +At the moment, you'll have to make a new directory under pkg/apis/; copy the +directory structure from pkg/apis/extensions. Add the new group/version to all +of the hack/{verify,update}-generated-{deep-copy,conversions,swagger}.sh files +in the appropriate places--it should just require adding your new group/version +to a bash array. You will also need to make sure your new types are imported by +the generation commands (cmd/gendeepcopy/ & cmd/genconversion). These +instructions may not be complete and will be updated as we gain experience. + +Adding API groups outside of the pkg/apis/ directory is not currently supported, +but is clearly desirable. The deep copy & conversion generators need to work by +parsing go files instead of by reflection; then they will be easy to point at +arbitrary directories: see issue [#13775](http://issue.k8s.io/13775). + +## Update the fuzzer + +Part of our testing regimen for APIs is to "fuzz" (fill with random values) API +objects and then convert them to and from the different API versions. This is +a great way of exposing places where you lost information or made bad +assumptions. If you have added any fields which need very careful formatting +(the test does not run validation) or if you have made assumptions such as +"this slice will always have at least 1 element", you may get an error or even +a panic from the `serialization_test`. If so, look at the diff it produces (or +the backtrace in case of a panic) and figure out what you forgot. Encode that +into the fuzzer's custom fuzz functions. Hint: if you added defaults for a field, +that field will need to have a custom fuzz function that ensures that the field is +fuzzed to a non-empty value. + +The fuzzer can be found in `pkg/api/testing/fuzzer.go`. + +## Update the semantic comparisons + +VERY VERY rarely is this needed, but when it hits, it hurts. In some rare +cases we end up with objects (e.g. resource quantities) that have morally +equivalent values with different bitwise representations (e.g. value 10 with a +base-2 formatter is the same as value 0 with a base-10 formatter). The only way +Go knows how to do deep-equality is through field-by-field bitwise comparisons. +This is a problem for us. + +The first thing you should do is try not to do that. If you really can't avoid +this, I'd like to introduce you to our semantic DeepEqual routine. It supports +custom overrides for specific types - you can find that in `pkg/api/helpers.go`. + +There's one other time when you might have to touch this: unexported fields. +You see, while Go's `reflect` package is allowed to touch unexported fields, us +mere mortals are not - this includes semantic DeepEqual. Fortunately, most of +our API objects are "dumb structs" all the way down - all fields are exported +(start with a capital letter) and there are no unexported fields. But sometimes +you want to include an object in our API that does have unexported fields +somewhere in it (for example, `time.Time` has unexported fields). If this hits +you, you may have to touch the semantic DeepEqual customization functions. + +## Implement your change + +Now you have the API all changed - go implement whatever it is that you're +doing! + +## Write end-to-end tests + +Check out the [E2E docs](e2e-tests.html) for detailed information about how to write end-to-end +tests for your feature. + +## Examples and docs + +At last, your change is done, all unit tests pass, e2e passes, you're done, +right? Actually, no. You just changed the API. If you are touching an +existing facet of the API, you have to try *really* hard to make sure that +*all* the examples and docs are updated. There's no easy way to do this, due +in part to JSON and YAML silently dropping unknown fields. You're clever - +you'll figure it out. Put `grep` or `ack` to good use. + +If you added functionality, you should consider documenting it and/or writing +an example to illustrate your change. + +Make sure you update the swagger API spec by running: + +{% highlight sh %} +{% raw %} +hack/update-swagger-spec.sh +{% endraw %} +{% endhighlight %} + +The API spec changes should be in a commit separate from your other changes. + +## Adding new REST objects + +TODO(smarterclayton): write this. + +## Alpha, Beta, and Stable Versions + +New feature development proceeds through a series of stages of increasing maturity: + +- Development level + - Object Versioning: no convention + - Availability: not commited to main kubernetes repo, and thus not available in offical releases + - Audience: other developers closely collaborating on a feature or proof-of-concept + - Upgradeability, Reliability, Completeness, and Support: no requirements or guarantees +- Alpha level + - Object Versioning: API version name contains `alpha` (e.g. `v1alpha1`) + - Availability: committed to main kubernetes repo; appears in an official release; feature is + disabled by default, but may be enabled by flag + - Audience: developers and expert users interested in giving early feedback on features + - Completeness: some API operations, CLI commands, or UI support may not be implemented; the API + need not have had an *API review* (an intensive and targeted review of the API, on top of a normal + code review) + - Upgradeability: the object schema and semantics may change in a later software release, without + any provision for preserving objects in an existing cluster; + removing the upgradability concern allows developers to make rapid progress; in particular, + API versions can increment faster than the minor release cadence and the developer need not + maintain multiple versions; developers should still increment the API version when object schema + or semantics change in an [incompatible way](#on-compatibility) + - Cluster Reliability: because the feature is relatively new, and may lack complete end-to-end + tests, enabling the feature via a flag might expose bugs with destabilize the cluster (e.g. a + bug in a control loop might rapidly create excessive numbers of object, exhausting API storage). + - Support: there is *no commitment* from the project to complete the feature; the feature may be + dropped entirely in a later software release + - Recommended Use Cases: only in short-lived testing clusters, due to complexity of upgradeability + and lack of long-term support and lack of upgradability. +- Beta level: + - Object Versioning: API version name contains `beta` (e.g. `v2beta3`) + - Availability: in official Kubernetes releases, and enabled by default + - Audience: users interested in providing feedback on features + - Completeness: all API operations, CLI commands, and UI support should be implemented; end-to-end + tests complete; the API has had a thorough API review and is thought to be complete, though use + during beta may frequently turn up API issues not thought of during review + - Upgradeability: the object schema and semantics may change in a later software release; when + this happens, an upgrade path will be documentedr; in some cases, objects will be automatically + converted to the new version; in other cases, a manual upgrade may be necessary; a manual + upgrade may require downtime for anything relying on the new feature, and may require + manual conversion of objects to the new version; when manual conversion is necessary, the + project will provide documentation on the process (for an example, see [v1 conversion + tips](../api.html)) + - Cluster Reliability: since the feature has e2e tests, enabling the feature via a flag should not + create new bugs in unrelated features; because the feature is new, it may have minor bugs + - Support: the project commits to complete the feature, in some form, in a subsequent Stable + version; typically this will happen within 3 months, but sometimes longer; releases should + simultaneously support two consecutive versions (e.g. `v1beta1` and `v1beta2`; or `v1beta2` and + `v1`) for at least one minor release cycle (typically 3 months) so that users have enough time + to upgrade and migrate objects + - Recommended Use Cases: in short-lived testing clusters; in production clusters as part of a + short-lived evaluation of the feature in order to provide feedback +- Stable level: + - Object Versioning: API version `vX` where `X` is an integer (e.g. `v1`) + - Availability: in official Kubernetes releases, and enabled by default + - Audience: all users + - Completeness: same as beta + - Upgradeability: only [strictly compatible](#on-compatibility) changes allowed in subsequent + software releases + - Cluster Reliability: high + - Support: API version will continue to be present for many subsequent software releases; + - Recommended Use Cases: any + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/api_changes.md?pixel)]() + + diff --git a/v1.1/docs/devel/automation.md b/v1.1/docs/devel/automation.md new file mode 100644 index 0000000000000..7f0a5a5b1acc5 --- /dev/null +++ b/v1.1/docs/devel/automation.md @@ -0,0 +1,124 @@ +--- +layout: docwithnav +title: "Kubernetes Development Automation" +--- + + + + + +# Kubernetes Development Automation + +## Overview + +Kubernetes uses a variety of automated tools in an attempt to relieve developers of repeptitive, low +brain power work. This document attempts to describe these processes. + + +## Submit Queue + +In an effort to + * reduce load on core developers + * maintain e2e stability + * load test githubs label feature + +We have added an automated [submit-queue](https://github.com/kubernetes/contrib/tree/master/submit-queue) +for kubernetes. + +The submit-queue does the following: + +{% highlight go %} +{% raw %} +for _, pr := range readyToMergePRs() { + if testsAreStable() { + mergePR(pr) + } +} +{% endraw %} +{% endhighlight %} + +The status of the submit-queue is [online.](http://submit-queue.k8s.io/) + +### Ready to merge status + +A PR is considered "ready for merging" if it matches the following: + * it has the `lgtm` label, and that `lgtm` is newer than the latest commit + * it has passed the cla pre-submit and has the `cla:yes` label + * it has passed the travis and shippable pre-submit tests + * one (or all) of + * its author is in kubernetes/contrib/submit-queue/whitelist.txt + * its author is in contributors.txt via the github API. + * the PR has the `ok-to-merge` label + * One (or both of) + * it has passed the Jenkins e2e test + * it has the `e2e-not-required` label + +Note that the combined whitelist/committer list is available at [submit-queue.k8s.io](http://submit-queue.k8s.io) + +### Merge process + +Merges _only_ occur when the `critical builds` (Jenkins e2e for gce, gke, scalability, upgrade) are passing. +We're open to including more builds here, let us know... + +Merges are serialized, so only a single PR is merged at a time, to ensure against races. + +If the PR has the `e2e-not-required` label, it is simply merged. +If the PR does not have this label, e2e tests are re-run, if these new tests pass, the PR is merged. + +If e2e flakes or is currently buggy, the PR will not be merged, but it will be re-run on the following +pass. + +## Github Munger + +We also run a [github "munger"](https://github.com/kubernetes/contrib/tree/master/mungegithub) + +This runs repeatedly over github pulls and issues and runs modular "mungers" similar to "mungedocs" + +Currently this runs: + * blunderbuss - Tries to automatically find an owner for a PR without an owner, uses mapping file here: + https://github.com/kubernetes/contrib/blob/master/mungegithub/blunderbuss.yml + * needs-rebase - Adds `needs-rebase` to PRs that aren't currently mergeable, and removes it from those that are. + * size - Adds `size/xs` - `size/xxl` labels to PRs + * ok-to-test - Adds the `ok-to-test` message to PRs that have an `lgtm` but the e2e-builder would otherwise not test due to whitelist + * ping-ci - Attempts to ping the ci systems (Travis/Shippable) if they are missing from a PR. + * lgtm-after-commit - Removes the `lgtm` label from PRs where there are commits that are newer than the `lgtm` label + +In the works: + * issue-detector - machine learning for determining if an issue that has been filed is a `support` issue, `bug` or `feature` + +Please feel free to unleash your creativity on this tool, send us new mungers that you think will help support the Kubernetes development process. + +## PR builder + +We also run a robotic PR builder that attempts to run e2e tests for each PR. + +Before a PR from an unknown user is run, the PR builder bot (`k8s-bot`) asks to a message from a +contributor that a PR is "ok to test", the contributor replies with that message. Contributors can also +add users to the whitelist by replying with the message "add to whitelist" ("please" is optional, but +remember to treat your robots with kindness...) + +If a PR is approved for testing, and tests either haven't run, or need to be re-run, you can ask the +PR builder to re-run the tests. To do this, reply to the PR with a message that begins with `@k8s-bot test this`, this should trigger a re-build/re-test. + + +## FAQ: + +#### How can I ask my PR to be tested again for Jenkins failures? + +Right now you have to ask a contributor (this may be you!) to re-run the test with "@k8s-bot test this" + +### How can I kick Shippable to re-test on a failure? + +Right now the easiest way is to close and then immediately re-open the PR. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/automation.md?pixel)]() + + diff --git a/v1.1/docs/devel/cherry-picks.md b/v1.1/docs/devel/cherry-picks.md new file mode 100644 index 0000000000000..903063423442f --- /dev/null +++ b/v1.1/docs/devel/cherry-picks.md @@ -0,0 +1,56 @@ +--- +layout: docwithnav +title: "Overview" +--- + + + + + +# Overview + +This document explains cherry picks are managed on release branches within the +Kubernetes projects. + +## Propose a Cherry Pick + +Any contributor can propose a cherry pick of any pull request, like so: + +{% highlight sh %} +{% raw %} +hack/cherry_pick_pull.sh upstream/release-3.14 98765 +{% endraw %} +{% endhighlight %} + +This will walk you through the steps to propose an automated cherry pick of pull + #98765 for remote branch `upstream/release-3.14`. + +## Cherry Pick Review + +Cherry pick pull requests are reviewed differently than normal pull requests. In +particular, they may be self-merged by the release branch owner without fanfare, +in the case the release branch owner knows the cherry pick was already +requested - this should not be the norm, but it may happen. + +[Contributor License Agreements](http://releases.k8s.io/release-1.1/CONTRIBUTING.md) is considered implicit +for all code within cherry-pick pull requests, ***unless there is a large +conflict***. + +## Searching for Cherry Picks + +Now that we've structured cherry picks as PRs, searching for all cherry-picks +against a release is a GitHub query: For example, +[this query is all of the v0.21.x cherry-picks](https://github.com/kubernetes/kubernetes/pulls?utf8=%E2%9C%93&q=is%3Apr+%22automated+cherry+pick%22+base%3Arelease-0.21) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/cherry-picks.md?pixel)]() + + diff --git a/v1.1/docs/devel/cli-roadmap.md b/v1.1/docs/devel/cli-roadmap.md new file mode 100644 index 0000000000000..cc3a7548625c4 --- /dev/null +++ b/v1.1/docs/devel/cli-roadmap.md @@ -0,0 +1,28 @@ +--- +layout: docwithnav +title: "Kubernetes CLI/Configuration Roadmap" +--- + + + + + +# Kubernetes CLI/Configuration Roadmap + +See github issues with the following labels: +* [area/app-config-deployment](https://github.com/kubernetes/kubernetes/labels/area/app-config-deployment) +* [component/kubectl](https://github.com/kubernetes/kubernetes/labels/component/kubectl) +* [component/clientlib](https://github.com/kubernetes/kubernetes/labels/component/clientlib) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/cli-roadmap.md?pixel)]() + + diff --git a/v1.1/docs/devel/client-libraries.md b/v1.1/docs/devel/client-libraries.md new file mode 100644 index 0000000000000..9e516ceaea752 --- /dev/null +++ b/v1.1/docs/devel/client-libraries.md @@ -0,0 +1,40 @@ +--- +layout: docwithnav +title: "Kubernetes API client libraries" +--- + + + + + +## Kubernetes API client libraries + +### Supported + + * [Go](http://releases.k8s.io/release-1.1/pkg/client/) + +### User Contributed + +*Note: Libraries provided by outside parties are supported by their authors, not the core Kubernetes team* + + * [Java (OSGi)](https://bitbucket.org/amdatulabs/amdatu-kubernetes) + * [Java (Fabric8, OSGi)](https://github.com/fabric8io/kubernetes-client) + * [Ruby](https://github.com/Ch00k/kuber) + * [Ruby](https://github.com/abonas/kubeclient) + * [PHP](https://github.com/devstub/kubernetes-api-php-client) + * [PHP](https://github.com/maclof/kubernetes-client) + * [Node.js](https://github.com/tenxcloud/node-kubernetes-client) + * [Perl](https://metacpan.org/pod/Net::Kubernetes) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/client-libraries.md?pixel)]() + + diff --git a/v1.1/docs/devel/coding-conventions.md b/v1.1/docs/devel/coding-conventions.md new file mode 100644 index 0000000000000..147951acd98b5 --- /dev/null +++ b/v1.1/docs/devel/coding-conventions.md @@ -0,0 +1,73 @@ +--- +layout: docwithnav +title: "devel/coding-conventions" +--- + + + + +Code conventions + - Bash + - https://google-styleguide.googlecode.com/svn/trunk/shell.xml + - Ensure that build, release, test, and cluster-management scripts run on OS X + - Go + - Ensure your code passes the [presubmit checks](development.html#hooks) + - [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) + - [Effective Go](https://golang.org/doc/effective_go.html) + - Comment your code. + - [Go's commenting conventions](http://blog.golang.org/godoc-documenting-go-code) + - If reviewers ask questions about why the code is the way it is, that's a sign that comments might be helpful. + - Command-line flags should use dashes, not underscores + - Naming + - Please consider package name when selecting an interface name, and avoid redundancy. + - e.g.: `storage.Interface` is better than `storage.StorageInterface`. + - Do not use uppercase characters, underscores, or dashes in package names. + - Please consider parent directory name when choosing a package name. + - so pkg/controllers/autoscaler/foo.go should say `package autoscaler` not `package autoscalercontroller`. + - Unless there's a good reason, the `package foo` line should match the name of the directory in which the .go file exists. + - Importers can use a different name if they need to disambiguate. + - Locks should be called `lock` and should never be embedded (always `lock sync.Mutex`). When multiple locks are present, give each lock a distinct name following Go conventions - `stateLock`, `mapLock` etc. + - API conventions + - [API changes](api_changes.html) + - [API conventions](api-conventions.html) + - [Kubectl conventions](kubectl-conventions.html) + - [Logging conventions](logging.html) + +Testing conventions + - All new packages and most new significant functionality must come with unit tests + - Table-driven tests are preferred for testing multiple scenarios/inputs; for example, see [TestNamespaceAuthorization](https://releases.k8s.io/release-1.1/test/integration/auth_test.go) + - Significant features should come with integration (test/integration) and/or end-to-end (test/e2e) tests + - Including new kubectl commands and major features of existing commands + - Unit tests must pass on OS X and Windows platforms - if you use Linux specific features, your test case must either be skipped on windows or compiled out (skipped is better when running Linux specific commands, compiled out is required when your code does not compile on Windows). + +Directory and file conventions + - Avoid package sprawl. Find an appropriate subdirectory for new packages. (See [#4851](http://issues.k8s.io/4851) for discussion.) + - Libraries with no more appropriate home belong in new package subdirectories of pkg/util + - Avoid general utility packages. Packages called "util" are suspect. Instead, derive a name that describes your desired function. For example, the utility functions dealing with waiting for operations are in the "wait" package and include functionality like Poll. So the full name is wait.Poll + - Go source files and directories use underscores, not dashes + - Package directories should generally avoid using separators as much as possible (when packages are multiple words, they usually should be in nested subdirectories). + - Document directories and filenames should use dashes rather than underscores + - Contrived examples that illustrate system features belong in /docs/user-guide or /docs/admin, depending on whether it is a feature primarily intended for users that deploy applications or cluster administrators, respectively. Actual application examples belong in /examples. + - Examples should also illustrate [best practices for using the system](../user-guide/config-best-practices.html) + - Third-party code + - Third-party Go code is managed using Godeps + - Other third-party code belongs in /third_party + - Third-party code must include licenses + - This includes modified third-party code and excerpts, as well + +Coding advice + - Go + - [Go landmines](https://gist.github.com/lavalamp/4bd23295a9f32706a48f) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/coding-conventions.md?pixel)]() + + diff --git a/v1.1/docs/devel/collab.md b/v1.1/docs/devel/collab.md new file mode 100644 index 0000000000000..7a1d7e42599c1 --- /dev/null +++ b/v1.1/docs/devel/collab.md @@ -0,0 +1,62 @@ +--- +layout: docwithnav +title: "On Collaborative Development" +--- + + + + + +# On Collaborative Development + +Kubernetes is open source, but many of the people working on it do so as their day job. In order to avoid forcing people to be "at work" effectively 24/7, we want to establish some semi-formal protocols around development. Hopefully these rules make things go more smoothly. If you find that this is not the case, please complain loudly. + +## Patches welcome + +First and foremost: as a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and holidays. Please do not ever hesitate to ask a question or send a PR. + +## Code reviews + +All changes must be code reviewed. For non-maintainers this is obvious, since you can't commit anyway. But even for maintainers, we want all changes to get at least one review, preferably (for non-trivial changes obligatorily) from someone who knows the areas the change touches. For non-trivial changes we may want two reviewers. The primary reviewer will make this decision and nominate a second reviewer, if needed. Except for trivial changes, PRs should not be committed until relevant parties (e.g. owners of the subsystem affected by the PR) have had a reasonable chance to look at PR in their local business hours. + +Most PRs will find reviewers organically. If a maintainer intends to be the primary reviewer of a PR they should set themselves as the assignee on GitHub and say so in a reply to the PR. Only the primary reviewer of a change should actually do the merge, except in rare cases (e.g. they are unavailable in a reasonable timeframe). + +If a PR has gone 2 work days without an owner emerging, please poke the PR thread and ask for a reviewer to be assigned. + +Except for rare cases, such as trivial changes (e.g. typos, comments) or emergencies (e.g. broken builds), maintainers should not merge their own changes. + +Expect reviewers to request that you avoid [common go style mistakes](https://github.com/golang/go/wiki/CodeReviewComments) in your PRs. + +## Assigned reviews + +Maintainers can assign reviews to other maintainers, when appropriate. The assignee becomes the shepherd for that PR and is responsible for merging the PR once they are satisfied with it or else closing it. The assignee might request reviews from non-maintainers. + +## Merge hours + +Maintainers will do merges of appropriately reviewed-and-approved changes during their local "business hours" (typically 7:00 am Monday to 5:00 pm (17:00h) Friday). PRs that arrive over the weekend or on holidays will only be merged if there is a very good reason for it and if the code review requirements have been met. Concretely this means that nobody should merge changes immediately before going to bed for the night. + +There may be discussion an even approvals granted outside of the above hours, but merges will generally be deferred. + +If a PR is considered complex or controversial, the merge of that PR should be delayed to give all interested parties in all timezones the opportunity to provide feedback. Concretely, this means that such PRs should be held for 24 +hours before merging. Of course "complex" and "controversial" are left to the judgment of the people involved, but we trust that part of being a committer is the judgment required to evaluate such things honestly, and not be +motivated by your desire (or your cube-mate's desire) to get their code merged. Also see "Holds" below, any reviewer can issue a "hold" to indicate that the PR is in fact complicated or complex and deserves further review. + +PRs that are incorrectly judged to be merge-able, may be reverted and subject to re-review, if subsequent reviewers believe that they in fact are controversial or complex. + + +## Holds + +Any maintainer or core contributor who wants to review a PR but does not have time immediately may put a hold on a PR simply by saying so on the PR discussion and offering an ETA measured in single-digit days at most. Any PR that has a hold shall not be merged until the person who requested the hold acks the review, withdraws their hold, or is overruled by a preponderance of maintainers. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/collab.md?pixel)]() + + diff --git a/v1.1/docs/devel/developer-guides/vagrant.md b/v1.1/docs/devel/developer-guides/vagrant.md new file mode 100644 index 0000000000000..e3991b3419894 --- /dev/null +++ b/v1.1/docs/devel/developer-guides/vagrant.md @@ -0,0 +1,430 @@ +--- +layout: docwithnav +title: "Getting started with Vagrant" +--- + + + + + +## Getting started with Vagrant + +Running kubernetes with Vagrant (and VirtualBox) is an easy way to run/test/develop on your local machine (Linux, Mac OS X). + +### Prerequisites + +1. Install latest version >= 1.6.2 of vagrant from http://www.vagrantup.com/downloads.html +2. Install one of: + 1. The latest version of Virtual Box from https://www.virtualbox.org/wiki/Downloads + 2. [VMWare Fusion](https://www.vmware.com/products/fusion/) version 5 or greater as well as the appropriate [Vagrant VMWare Fusion provider](https://www.vagrantup.com/vmware) + 3. [VMWare Workstation](https://www.vmware.com/products/workstation/) version 9 or greater as well as the [Vagrant VMWare Workstation provider](https://www.vagrantup.com/vmware) + 4. [Parallels Desktop](https://www.parallels.com/products/desktop/) version 9 or greater as well as the [Vagrant Parallels provider](https://parallels.github.io/vagrant-parallels/) +3. Get or build a [binary release](../../../docs/getting-started-guides/binary_release.html) + +### Setup + +By default, the Vagrant setup will create a single master VM (called kubernetes-master) and one node (called kubernetes-minion-1). Each VM will take 1 GB, so make sure you have at least 2GB to 4GB of free memory (plus appropriate free disk space). To start your local cluster, open a shell and run: + +{% highlight sh %} +{% raw %} +cd kubernetes + +export KUBERNETES_PROVIDER=vagrant +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +The `KUBERNETES_PROVIDER` environment variable tells all of the various cluster management scripts which variant to use. If you forget to set this, the assumption is you are running on Google Compute Engine. + +If you installed more than one Vagrant provider, Kubernetes will usually pick the appropriate one. However, you can override which one Kubernetes will use by setting the [`VAGRANT_DEFAULT_PROVIDER`](https://docs.vagrantup.com/v2/providers/default.html) environment variable: + +{% highlight sh %} +{% raw %} +export VAGRANT_DEFAULT_PROVIDER=parallels +export KUBERNETES_PROVIDER=vagrant +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +Vagrant will provision each machine in the cluster with all the necessary components to run Kubernetes. The initial setup can take a few minutes to complete on each machine. + +By default, each VM in the cluster is running Fedora, and all of the Kubernetes services are installed into systemd. + +To access the master or any node: + +{% highlight sh %} +{% raw %} +vagrant ssh master +vagrant ssh minion-1 +{% endraw %} +{% endhighlight %} + +If you are running more than one nodes, you can access the others by: + +{% highlight sh %} +{% raw %} +vagrant ssh minion-2 +vagrant ssh minion-3 +{% endraw %} +{% endhighlight %} + +To view the service status and/or logs on the kubernetes-master: + +{% highlight console %} +{% raw %} +$ vagrant ssh master +[vagrant@kubernetes-master ~] $ sudo systemctl status kube-apiserver +[vagrant@kubernetes-master ~] $ sudo journalctl -r -u kube-apiserver + +[vagrant@kubernetes-master ~] $ sudo systemctl status kube-controller-manager +[vagrant@kubernetes-master ~] $ sudo journalctl -r -u kube-controller-manager + +[vagrant@kubernetes-master ~] $ sudo systemctl status etcd +[vagrant@kubernetes-master ~] $ sudo systemctl status nginx +{% endraw %} +{% endhighlight %} + +To view the services on any of the nodes: + +{% highlight console %} +{% raw %} +$ vagrant ssh minion-1 +[vagrant@kubernetes-minion-1] $ sudo systemctl status docker +[vagrant@kubernetes-minion-1] $ sudo journalctl -r -u docker +[vagrant@kubernetes-minion-1] $ sudo systemctl status kubelet +[vagrant@kubernetes-minion-1] $ sudo journalctl -r -u kubelet +{% endraw %} +{% endhighlight %} + +### Interacting with your Kubernetes cluster with Vagrant. + +With your Kubernetes cluster up, you can manage the nodes in your cluster with the regular Vagrant commands. + +To push updates to new Kubernetes code after making source changes: + +{% highlight sh %} +{% raw %} +./cluster/kube-push.sh +{% endraw %} +{% endhighlight %} + +To stop and then restart the cluster: + +{% highlight sh %} +{% raw %} +vagrant halt +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +To destroy the cluster: + +{% highlight sh %} +{% raw %} +vagrant destroy +{% endraw %} +{% endhighlight %} + +Once your Vagrant machines are up and provisioned, the first thing to do is to check that you can use the `kubectl.sh` script. + +You may need to build the binaries first, you can do this with `make` + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get nodes + +NAME LABELS STATUS +kubernetes-minion-0whl kubernetes.io/hostname=kubernetes-minion-0whl Ready +kubernetes-minion-4jdf kubernetes.io/hostname=kubernetes-minion-4jdf Ready +kubernetes-minion-epbe kubernetes.io/hostname=kubernetes-minion-epbe Ready +{% endraw %} +{% endhighlight %} + +### Interacting with your Kubernetes cluster with the `kube-*` scripts. + +Alternatively to using the vagrant commands, you can also use the `cluster/kube-*.sh` scripts to interact with the vagrant based provider just like any other hosting platform for kubernetes. + +All of these commands assume you have set `KUBERNETES_PROVIDER` appropriately: + +{% highlight sh %} +{% raw %} +export KUBERNETES_PROVIDER=vagrant +{% endraw %} +{% endhighlight %} + +Bring up a vagrant cluster + +{% highlight sh %} +{% raw %} +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +Destroy the vagrant cluster + +{% highlight sh %} +{% raw %} +./cluster/kube-down.sh +{% endraw %} +{% endhighlight %} + +Update the vagrant cluster after you make changes (only works when building your own releases locally): + +{% highlight sh %} +{% raw %} +./cluster/kube-push.sh +{% endraw %} +{% endhighlight %} + +Interact with the cluster + +{% highlight sh %} +{% raw %} +./cluster/kubectl.sh +{% endraw %} +{% endhighlight %} + +### Authenticating with your master + +When using the vagrant provider in Kubernetes, the `cluster/kubectl.sh` script will cache your credentials in a `~/.kubernetes_vagrant_auth` file so you will not be prompted for them in the future. + +{% highlight console %} +{% raw %} +$ cat ~/.kubernetes_vagrant_auth +{ "User": "vagrant", + "Password": "vagrant" + "CAFile": "/home/k8s_user/.kubernetes.vagrant.ca.crt", + "CertFile": "/home/k8s_user/.kubecfg.vagrant.crt", + "KeyFile": "/home/k8s_user/.kubecfg.vagrant.key" +} +{% endraw %} +{% endhighlight %} + +You should now be set to use the `cluster/kubectl.sh` script. For example try to list the nodes that you have started with: + +{% highlight sh %} +{% raw %} +./cluster/kubectl.sh get nodes +{% endraw %} +{% endhighlight %} + +### Running containers + +Your cluster is running, you can list the nodes in your cluster: + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get nodes + +NAME LABELS STATUS +kubernetes-minion-0whl kubernetes.io/hostname=kubernetes-minion-0whl Ready +kubernetes-minion-4jdf kubernetes.io/hostname=kubernetes-minion-4jdf Ready +kubernetes-minion-epbe kubernetes.io/hostname=kubernetes-minion-epbe Ready +{% endraw %} +{% endhighlight %} + +Now start running some containers! + +You can now use any of the cluster/kube-*.sh commands to interact with your VM machines. +Before starting a container there will be no pods, services and replication controllers. + +{% highlight console %} +{% raw %} +$ cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE + +$ cluster/kubectl.sh get services +NAME LABELS SELECTOR IP(S) PORT(S) + +$ cluster/kubectl.sh get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +{% endraw %} +{% endhighlight %} + +Start a container running nginx with a replication controller and three replicas + +{% highlight console %} +{% raw %} +$ cluster/kubectl.sh run my-nginx --image=nginx --replicas=3 --port=80 +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +my-nginx my-nginx nginx run=my-nginx 3 +{% endraw %} +{% endhighlight %} + +When listing the pods, you will see that three containers have been started and are in Waiting state: + +{% highlight console %} +{% raw %} +$ cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE +my-nginx-389da 1/1 Waiting 0 33s +my-nginx-kqdjk 1/1 Waiting 0 33s +my-nginx-nyj3x 1/1 Waiting 0 33s +{% endraw %} +{% endhighlight %} + +You need to wait for the provisioning to complete, you can monitor the minions by doing: + +{% highlight console %} +{% raw %} +$ sudo salt '*minion-1' cmd.run 'docker images' +kubernetes-minion-1: + REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE + 96864a7d2df3 26 hours ago 204.4 MB + kubernetes/pause latest 6c4579af347b 8 weeks ago 239.8 kB +{% endraw %} +{% endhighlight %} + +Once the docker image for nginx has been downloaded, the container will start and you can list it: + +{% highlight console %} +{% raw %} +$ sudo salt '*minion-1' cmd.run 'docker ps' +kubernetes-minion-1: + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + dbe79bf6e25b nginx:latest "nginx" 21 seconds ago Up 19 seconds k8s--mynginx.8c5b8a3a--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1.etcd--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1--fcfa837f + fa0e29c94501 kubernetes/pause:latest "/pause" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp k8s--net.a90e7ce4--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1.etcd--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1--baf5b21b +{% endraw %} +{% endhighlight %} + +Going back to listing the pods, services and replicationcontrollers, you now have: + +{% highlight console %} +{% raw %} +$ cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE +my-nginx-389da 1/1 Running 0 33s +my-nginx-kqdjk 1/1 Running 0 33s +my-nginx-nyj3x 1/1 Running 0 33s + +$ cluster/kubectl.sh get services +NAME LABELS SELECTOR IP(S) PORT(S) + +$ cluster/kubectl.sh get rc +NAME IMAGE(S) SELECTOR REPLICAS +my-nginx nginx run=my-nginx 3 +{% endraw %} +{% endhighlight %} + +We did not start any services, hence there are none listed. But we see three replicas displayed properly. +Check the [guestbook](../../../examples/guestbook/README.html) application to learn how to create a service. +You can already play with scaling the replicas with: + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh scale rc my-nginx --replicas=2 +$ ./cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE +my-nginx-kqdjk 1/1 Running 0 13m +my-nginx-nyj3x 1/1 Running 0 13m +{% endraw %} +{% endhighlight %} + +Congratulations! + +### Testing + +The following will run all of the end-to-end testing scenarios assuming you set your environment in `cluster/kube-env.sh`: + +{% highlight sh %} +{% raw %} +NUM_MINIONS=3 hack/e2e-test.sh +{% endraw %} +{% endhighlight %} + +### Troubleshooting + +#### I keep downloading the same (large) box all the time! + +By default the Vagrantfile will download the box from S3. You can change this (and cache the box locally) by providing a name and an alternate URL when calling `kube-up.sh` + +{% highlight sh %} +{% raw %} +export KUBERNETES_BOX_NAME=choose_your_own_name_for_your_kuber_box +export KUBERNETES_BOX_URL=path_of_your_kuber_box +export KUBERNETES_PROVIDER=vagrant +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +#### I just created the cluster, but I am getting authorization errors! + +You probably have an incorrect ~/.kubernetes_vagrant_auth file for the cluster you are attempting to contact. + +{% highlight sh %} +{% raw %} +rm ~/.kubernetes_vagrant_auth +{% endraw %} +{% endhighlight %} + +After using kubectl.sh make sure that the correct credentials are set: + +{% highlight console %} +{% raw %} +$ cat ~/.kubernetes_vagrant_auth +{ + "User": "vagrant", + "Password": "vagrant" +} +{% endraw %} +{% endhighlight %} + +#### I just created the cluster, but I do not see my container running! + +If this is your first time creating the cluster, the kubelet on each node schedules a number of docker pull requests to fetch prerequisite images. This can take some time and as a result may delay your initial pod getting provisioned. + +#### I changed Kubernetes code, but it's not running! + +Are you sure there was no build error? After running `$ vagrant provision`, scroll up and ensure that each Salt state was completed successfully on each box in the cluster. +It's very likely you see a build error due to an error in your source files! + +#### I have brought Vagrant up but the nodes won't validate! + +Are you sure you built a release first? Did you install `net-tools`? For more clues, login to one of the nodes (`vagrant ssh minion-1`) and inspect the salt minion log (`sudo cat /var/log/salt/minion`). + +#### I want to change the number of nodes! + +You can control the number of nodes that are instantiated via the environment variable `NUM_MINIONS` on your host machine. If you plan to work with replicas, we strongly encourage you to work with enough nodes to satisfy your largest intended replica size. If you do not plan to work with replicas, you can save some system resources by running with a single node. You do this, by setting `NUM_MINIONS` to 1 like so: + +{% highlight sh %} +{% raw %} +export NUM_MINIONS=1 +{% endraw %} +{% endhighlight %} + +#### I want my VMs to have more memory! + +You can control the memory allotted to virtual machines with the `KUBERNETES_MEMORY` environment variable. +Just set it to the number of megabytes you would like the machines to have. For example: + +{% highlight sh %} +{% raw %} +export KUBERNETES_MEMORY=2048 +{% endraw %} +{% endhighlight %} + +If you need more granular control, you can set the amount of memory for the master and nodes independently. For example: + +{% highlight sh %} +{% raw %} +export KUBERNETES_MASTER_MEMORY=1536 +export KUBERNETES_MINION_MEMORY=2048 +{% endraw %} +{% endhighlight %} + +#### I ran vagrant suspend and nothing works! + +`vagrant suspend` seems to mess up the network. It's not supported at this time. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/developer-guides/vagrant.md?pixel)]() + + diff --git a/v1.1/docs/devel/development.md b/v1.1/docs/devel/development.md new file mode 100644 index 0000000000000..985079fd3541c --- /dev/null +++ b/v1.1/docs/devel/development.md @@ -0,0 +1,395 @@ +--- +layout: docwithnav +title: "Development Guide" +--- + + + + + +# Development Guide + +# Releases and Official Builds + +Official releases are built in Docker containers. Details are [here](http://releases.k8s.io/release-1.1/build/README.md). You can do simple builds and development with just a local Docker installation. If want to build go locally outside of docker, please continue below. + +## Go development environment + +Kubernetes is written in [Go](http://golang.org) programming language. If you haven't set up Go development environment, please follow [this instruction](http://golang.org/doc/code.html) to install go tool and set up GOPATH. Ensure your version of Go is at least 1.3. + +## Git Setup + +Below, we outline one of the more common git workflows that core developers use. Other git workflows are also valid. + +### Visual overview + +![Git workflow](git_workflow.png) + +### Fork the main repository + +1. Go to https://github.com/kubernetes/kubernetes +2. Click the "Fork" button (at the top right) + +### Clone your fork + +The commands below require that you have $GOPATH set ([$GOPATH docs](https://golang.org/doc/code.html#GOPATH)). We highly recommend you put Kubernetes' code into your GOPATH. Note: the commands below will not work if there is more than one directory in your `$GOPATH`. + +{% highlight sh %} +{% raw %} +mkdir -p $GOPATH/src/k8s.io +cd $GOPATH/src/k8s.io +# Replace "$YOUR_GITHUB_USERNAME" below with your github username +git clone https://github.com/$YOUR_GITHUB_USERNAME/kubernetes.git +cd kubernetes +git remote add upstream 'https://github.com/kubernetes/kubernetes.git' +{% endraw %} +{% endhighlight %} + +### Create a branch and make changes + +{% highlight sh %} +{% raw %} +git checkout -b myfeature +# Make your code changes +{% endraw %} +{% endhighlight %} + +### Keeping your development fork in sync + +{% highlight sh %} +{% raw %} +git fetch upstream +git rebase upstream/master +{% endraw %} +{% endhighlight %} + +Note: If you have write access to the main repository at github.com/kubernetes/kubernetes, you should modify your git configuration so that you can't accidentally push to upstream: + +{% highlight sh %} +{% raw %} +git remote set-url --push upstream no_push +{% endraw %} +{% endhighlight %} + +### Committing changes to your fork + +{% highlight sh %} +{% raw %} +git commit +git push -f origin myfeature +{% endraw %} +{% endhighlight %} + +### Creating a pull request + +1. Visit https://github.com/$YOUR_GITHUB_USERNAME/kubernetes +2. Click the "Compare and pull request" button next to your "myfeature" branch. +3. Check out the pull request [process](pull-requests.html) for more details + +### When to retain commits and when to squash + +Upon merge, all git commits should represent meaningful milestones or units of +work. Use commits to add clarity to the development and review process. + +Before merging a PR, squash any "fix review feedback", "typo", and "rebased" +sorts of commits. It is not imperative that every commit in a PR compile and +pass tests independently, but it is worth striving for. For mass automated +fixups (e.g. automated doc formatting), use one or more commits for the +changes to tooling and a final commit to apply the fixup en masse. This makes +reviews much easier. + +See [Faster Reviews](faster_reviews.html) for more details. + +## godep and dependency management + +Kubernetes uses [godep](https://github.com/tools/godep) to manage dependencies. It is not strictly required for building Kubernetes but it is required when managing dependencies under the Godeps/ tree, and is required by a number of the build and test scripts. Please make sure that ``godep`` is installed and in your ``$PATH``. + +### Installing godep + +There are many ways to build and host go binaries. Here is an easy way to get utilities like `godep` installed: + +1) Ensure that [mercurial](http://mercurial.selenic.com/wiki/Download) is installed on your system. (some of godep's dependencies use the mercurial +source control system). Use `apt-get install mercurial` or `yum install mercurial` on Linux, or [brew.sh](http://brew.sh) on OS X, or download +directly from mercurial. + +2) Create a new GOPATH for your tools and install godep: + +{% highlight sh %} +{% raw %} +export GOPATH=$HOME/go-tools +mkdir -p $GOPATH +go get github.com/tools/godep +{% endraw %} +{% endhighlight %} + +3) Add $GOPATH/bin to your path. Typically you'd add this to your ~/.profile: + +{% highlight sh %} +{% raw %} +export GOPATH=$HOME/go-tools +export PATH=$PATH:$GOPATH/bin +{% endraw %} +{% endhighlight %} + +### Using godep + +Here's a quick walkthrough of one way to use godeps to add or update a Kubernetes dependency into Godeps/_workspace. For more details, please see the instructions in [godep's documentation](https://github.com/tools/godep). + +1) Devote a directory to this endeavor: + +_Devoting a separate directory is not required, but it is helpful to separate dependency updates from other changes._ + +{% highlight sh %} +{% raw %} +export KPATH=$HOME/code/kubernetes +mkdir -p $KPATH/src/k8s.io/kubernetes +cd $KPATH/src/k8s.io/kubernetes +git clone https://path/to/your/fork . +# Or copy your existing local repo here. IMPORTANT: making a symlink doesn't work. +{% endraw %} +{% endhighlight %} + +2) Set up your GOPATH. + +{% highlight sh %} +{% raw %} +# Option A: this will let your builds see packages that exist elsewhere on your system. +export GOPATH=$KPATH:$GOPATH +# Option B: This will *not* let your local builds see packages that exist elsewhere on your system. +export GOPATH=$KPATH +# Option B is recommended if you're going to mess with the dependencies. +{% endraw %} +{% endhighlight %} + +3) Populate your new GOPATH. + +{% highlight sh %} +{% raw %} +cd $KPATH/src/k8s.io/kubernetes +godep restore +{% endraw %} +{% endhighlight %} + +4) Next, you can either add a new dependency or update an existing one. + +{% highlight sh %} +{% raw %} +# To add a new dependency, do: +cd $KPATH/src/k8s.io/kubernetes +go get path/to/dependency +# Change code in Kubernetes to use the dependency. +godep save ./... + +# To update an existing dependency, do: +cd $KPATH/src/k8s.io/kubernetes +go get -u path/to/dependency +# Change code in Kubernetes accordingly if necessary. +godep update path/to/dependency/... +{% endraw %} +{% endhighlight %} + +_If `go get -u path/to/dependency` fails with compilation errors, instead try `go get -d -u path/to/dependency` +to fetch the dependencies without compiling them. This can happen when updating the cadvisor dependency._ + + +5) Before sending your PR, it's a good idea to sanity check that your Godeps.json file is ok by running hack/verify-godeps.sh + +_If hack/verify-godeps.sh fails after a `godep update`, it is possible that a transitive dependency was added or removed but not +updated by godeps. It then may be necessary to perform a `godep save ./...` to pick up the transitive dependency changes._ + +It is sometimes expedient to manually fix the /Godeps/godeps.json file to minimize the changes. + +Please send dependency updates in separate commits within your PR, for easier reviewing. + +## Hooks + +Before committing any changes, please link/copy these hooks into your .git +directory. This will keep you from accidentally committing non-gofmt'd go code. + +{% highlight sh %} +{% raw %} +cd kubernetes/.git/hooks/ +ln -s ../../hooks/pre-commit . +{% endraw %} +{% endhighlight %} + +## Unit tests + +{% highlight sh %} +{% raw %} +cd kubernetes +hack/test-go.sh +{% endraw %} +{% endhighlight %} + +Alternatively, you could also run: + +{% highlight sh %} +{% raw %} +cd kubernetes +godep go test ./... +{% endraw %} +{% endhighlight %} + +If you only want to run unit tests in one package, you could run ``godep go test`` under the package directory. For example, the following commands will run all unit tests in package kubelet: + +{% highlight console %} +{% raw %} +$ cd kubernetes # step into the kubernetes directory. +$ cd pkg/kubelet +$ godep go test +# some output from unit tests +PASS +ok k8s.io/kubernetes/pkg/kubelet 0.317s +{% endraw %} +{% endhighlight %} + +## Coverage + +Currently, collecting coverage is only supported for the Go unit tests. + +To run all unit tests and generate an HTML coverage report, run the following: + +{% highlight sh %} +{% raw %} +cd kubernetes +KUBE_COVER=y hack/test-go.sh +{% endraw %} +{% endhighlight %} + +At the end of the run, an the HTML report will be generated with the path printed to stdout. + +To run tests and collect coverage in only one package, pass its relative path under the `kubernetes` directory as an argument, for example: + +{% highlight sh %} +{% raw %} +cd kubernetes +KUBE_COVER=y hack/test-go.sh pkg/kubectl +{% endraw %} +{% endhighlight %} + +Multiple arguments can be passed, in which case the coverage results will be combined for all tests run. + +Coverage results for the project can also be viewed on [Coveralls](https://coveralls.io/r/kubernetes/kubernetes), and are continuously updated as commits are merged. Additionally, all pull requests which spawn a Travis build will report unit test coverage results to Coveralls. Coverage reports from before the Kubernetes Github organization was created can be found [here](https://coveralls.io/r/GoogleCloudPlatform/kubernetes). + +## Integration tests + +You need an [etcd](https://github.com/coreos/etcd/releases/tag/v2.0.0) in your path, please make sure it is installed and in your ``$PATH``. + +{% highlight sh %} +{% raw %} +cd kubernetes +hack/test-integration.sh +{% endraw %} +{% endhighlight %} + +## End-to-End tests + +You can run an end-to-end test which will bring up a master and two nodes, perform some tests, and then tear everything down. Make sure you have followed the getting started steps for your chosen cloud platform (which might involve changing the `KUBERNETES_PROVIDER` environment variable to something other than "gce". + +{% highlight sh %} +{% raw %} +cd kubernetes +hack/e2e-test.sh +{% endraw %} +{% endhighlight %} + +Pressing control-C should result in an orderly shutdown but if something goes wrong and you still have some VMs running you can force a cleanup with this command: + +{% highlight sh %} +{% raw %} +go run hack/e2e.go --down +{% endraw %} +{% endhighlight %} + +### Flag options + +See the flag definitions in `hack/e2e.go` for more options, such as reusing an existing cluster, here is an overview: + +{% highlight sh %} +{% raw %} +# Build binaries for testing +go run hack/e2e.go --build + +# Create a fresh cluster. Deletes a cluster first, if it exists +go run hack/e2e.go --up + +# Create a fresh cluster at a specific release version. +go run hack/e2e.go --up --version=0.7.0 + +# Test if a cluster is up. +go run hack/e2e.go --isup + +# Push code to an existing cluster +go run hack/e2e.go --push + +# Push to an existing cluster, or bring up a cluster if it's down. +go run hack/e2e.go --pushup + +# Run all tests +go run hack/e2e.go --test + +# Run tests matching the regex "Pods.*env" +go run hack/e2e.go -v -test --test_args="--ginkgo.focus=Pods.*env" + +# Alternately, if you have the e2e cluster up and no desire to see the event stream, you can run ginkgo-e2e.sh directly: +hack/ginkgo-e2e.sh --ginkgo.focus=Pods.*env +{% endraw %} +{% endhighlight %} + +### Combining flags + +{% highlight sh %} +{% raw %} +# Flags can be combined, and their actions will take place in this order: +# -build, -push|-up|-pushup, -test|-tests=..., -down +# e.g.: +go run hack/e2e.go -build -pushup -test -down + +# -v (verbose) can be added if you want streaming output instead of only +# seeing the output of failed commands. + +# -ctl can be used to quickly call kubectl against your e2e cluster. Useful for +# cleaning up after a failed test or viewing logs. Use -v to avoid suppressing +# kubectl output. +go run hack/e2e.go -v -ctl='get events' +go run hack/e2e.go -v -ctl='delete pod foobar' +{% endraw %} +{% endhighlight %} + +## Conformance testing + +End-to-end testing, as described above, is for [development +distributions](writing-a-getting-started-guide.html). A conformance test is used on +a [versioned distro](writing-a-getting-started-guide.html). + +The conformance test runs a subset of the e2e-tests against a manually-created cluster. It does not +require support for up/push/down and other operations. To run a conformance test, you need to know the +IP of the master for your cluster and the authorization arguments to use. The conformance test is +intended to run against a cluster at a specific binary release of Kubernetes. +See [conformance-test.sh](http://releases.k8s.io/release-1.1/hack/conformance-test.sh). + +## Testing out flaky tests + +[Instructions here](flaky-tests.html) + +## Regenerating the CLI documentation + +{% highlight sh %} +{% raw %} +hack/update-generated-docs.sh +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/development.md?pixel)]() + + diff --git a/v1.1/docs/devel/e2e-tests.md b/v1.1/docs/devel/e2e-tests.md new file mode 100644 index 0000000000000..54db7321238b2 --- /dev/null +++ b/v1.1/docs/devel/e2e-tests.md @@ -0,0 +1,135 @@ +--- +layout: docwithnav +title: "End-2-End Testing in Kubernetes" +--- + + + + + +# End-2-End Testing in Kubernetes + +## Overview + +The end-2-end tests for kubernetes provide a mechanism to test behavior of the system, and to ensure end user operations match developer specifications. In distributed systems it is not uncommon that a minor change may pass all unit tests, but cause unforseen changes at the system level. Thus, the primary objectives of the end-2-end tests are to ensure a consistent and reliable behavior of the kubernetes code base, and to catch bugs early. + +The end-2-end tests in kubernetes are built atop of [ginkgo] (http://onsi.github.io/ginkgo/) and [gomega] (http://onsi.github.io/gomega/). There are a host of features that this BDD testing framework provides, and it is recommended that the developer read the documentation prior to diving into the tests. + +The purpose of *this* document is to serve as a primer for developers who are looking to execute, or add tests, using a local development environment. + +## Building and Running the Tests + +**NOTE:** The tests have an array of options. For simplicity, the examples will focus on leveraging the tests on a local cluster using `sudo ./hack/local-up-cluster.sh` + +### Building the Tests + +The tests are built into a single binary which can be run against any deployed kubernetes system. To build the tests, navigate to your source directory and execute: + +`$ make all` + +The output for the end-2-end tests will be a single binary called `e2e.test` under the default output directory, which is typically `_output/local/bin/linux/amd64/`. Within the repository there are scripts that are provided under the `./hack` directory that are helpful for automation, but may not apply for a local development purposes. Instead, we recommend familiarizing yourself with the executable options. To obtain the full list of options, run the following: + +`$ ./e2e.test --help` + +### Running the Tests + +For the purposes of brevity, we will look at a subset of the options, which are listed below: + +``` +{% raw %} +-ginkgo.dryRun=false: If set, ginkgo will walk the test hierarchy without actually running anything. Best paired with -v. +-ginkgo.failFast=false: If set, ginkgo will stop running a test suite after a failure occurs. +-ginkgo.failOnPending=false: If set, ginkgo will mark the test suite as failed if any specs are pending. +-ginkgo.focus="": If set, ginkgo will only run specs that match this regular expression. +-ginkgo.skip="": If set, ginkgo will only run specs that do not match this regular expression. +-ginkgo.trace=false: If set, default reporter prints out the full stack trace when a failure occurs +-ginkgo.v=false: If set, default reporter print out all specs as they begin. +-host="": The host, or api-server, to connect to +-kubeconfig="": Path to kubeconfig containing embedded authinfo. +-prom-push-gateway="": The URL to prometheus gateway, so that metrics can be pushed during e2es and scraped by prometheus. Typically something like 127.0.0.1:9091. +-provider="": The name of the Kubernetes provider (gce, gke, local, vagrant, etc.) +-repo-root="../../": Root directory of kubernetes repository, for finding test files. +{% endraw %} +``` + +Prior to running the tests, it is recommended that you first create a simple auth file in your home directory, e.g. `$HOME/.kubernetes_auth` , with the following: + +``` +{% raw %} +{ + "User": "root", + "Password": "" +} +{% endraw %} +``` + +Next, you will need a cluster that you can test against. As mentioned earlier, you will want to execute `sudo ./hack/local-up-cluster.sh`. To get a sense of what tests exist, you may want to run: + +`e2e.test --host="127.0.0.1:8080" --provider="local" --ginkgo.v=true -ginkgo.dryRun=true --kubeconfig="$HOME/.kubernetes_auth" --repo-root="$KUBERNETES_SRC_PATH"` + +If you wish to execute a specific set of tests you can use the `-ginkgo.focus=` regex, e.g.: + +`e2e.test ... --ginkgo.focus="DNS|(?i)nodeport(?-i)|kubectl guestbook"` + +Conversely, if you wish to exclude a set of tests, you can run: + +`e2e.test ... --ginkgo.skip="Density|Scale"` + +As mentioned earlier there are a host of other options that are available, but are left to the developer + +**NOTE:** If you are running tests on a local cluster repeatedly, you may need to periodically perform some manual cleanup. +- `rm -rf /var/run/kubernetes`, clear kube generated credentials, sometimes stale permissions can cause problems. +- `sudo iptables -F`, clear ip tables rules left by the kube-proxy. + +## Adding a New Test + +As mentioned above, prior to adding a new test, it is a good idea to perform a `-ginkgo.dryRun=true` on the system, in order to see if a behavior is already being tested, or to determine if it may be possible to augment an existing set of tests for a specific use case. + +If a behavior does not currently have coverage and a developer wishes to add a new e2e test, navigate to the ./test/e2e directory and create a new test using the existing suite as a guide. + +**TODO:** Create a self-documented example which has been disabled, but can be copied to create new tests and outlines the capabilities and libraries used. + +## Performance Evaluation + +Another benefit of the end-2-end tests is the ability to create reproducible loads on the system, which can then be used to determine the responsiveness, or analyze other characteristics of the system. For example, the density tests load the system to 30,50,100 pods per/node and measures the different characteristics of the system, such as throughput, api-latency, etc. + +For a good overview of how we analyze performance data, please read the following [post](http://blog.kubernetes.io/2015/09/kubernetes-performance-measurements-and.html) + +For developers who are interested in doing their own performance analysis, we recommend setting up [prometheus](http://prometheus.io/) for data collection, and using [promdash](http://prometheus.io/docs/visualization/promdash/) to visualize the data. There also exists the option of pushing your own metrics in from the tests using a [prom-push-gateway](http://prometheus.io/docs/instrumenting/pushing/). Containers for all of these components can be found [here](https://hub.docker.com/u/prom/). + +For more accurate measurements, you may wish to set up prometheus external to kubernetes in an environment where it can access the major system components (api-server, controller-manager, scheduler). This is especially useful when attempting to gather metrics in a load-balanced api-server environment, because all api-servers can be analyzed independently as well as collectively. On startup, configuration file is passed to prometheus that specifies the endpoints that prometheus will scrape, as well as the sampling interval. + +``` +{% raw %} +#prometheus.conf +job: { + name: "kubernetes" + scrape_interval: "1s" + target_group: { + # apiserver(s) + target: "http://localhost:8080/metrics" + # scheduler + target: "http://localhost:10251/metrics" + # controller-manager + target: "http://localhost:10252/metrics" + } +{% endraw %} +``` + +Once prometheus is scraping the kubernetes endpoints, that data can then be plotted using promdash, and alerts can be created against the assortment of metrics that kubernetes provides. + +**HAPPY TESTING!** + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/e2e-tests.md?pixel)]() + + diff --git a/v1.1/docs/devel/faster_reviews.md b/v1.1/docs/devel/faster_reviews.md new file mode 100644 index 0000000000000..99e930b44c5d2 --- /dev/null +++ b/v1.1/docs/devel/faster_reviews.md @@ -0,0 +1,223 @@ +--- +layout: docwithnav +title: "How to get faster PR reviews" +--- + + + + + +# How to get faster PR reviews + +Most of what is written here is not at all specific to Kubernetes, but it bears +being written down in the hope that it will occasionally remind people of "best +practices" around code reviews. + +You've just had a brilliant idea on how to make Kubernetes better. Let's call +that idea "FeatureX". Feature X is not even that complicated. You have a +pretty good idea of how to implement it. You jump in and implement it, fixing a +bunch of stuff along the way. You send your PR - this is awesome! And it sits. +And sits. A week goes by and nobody reviews it. Finally someone offers a few +comments, which you fix up and wait for more review. And you wait. Another +week or two goes by. This is horrible. + +What went wrong? One particular problem that comes up frequently is this - your +PR is too big to review. You've touched 39 files and have 8657 insertions. +When your would-be reviewers pull up the diffs they run away - this PR is going +to take 4 hours to review and they don't have 4 hours right now. They'll get to it +later, just as soon as they have more free time (ha!). + +Let's talk about how to avoid this. + +## 0. Familiarize yourself with project conventions + +* [Development guide](development.html) +* [Coding conventions](coding-conventions.html) +* [API conventions](api-conventions.html) +* [Kubectl conventions](kubectl-conventions.html) + +## 1. Don't build a cathedral in one PR + +Are you sure FeatureX is something the Kubernetes team wants or will accept, or +that it is implemented to fit with other changes in flight? Are you willing to +bet a few days or weeks of work on it? If you have any doubt at all about the +usefulness of your feature or the design - make a proposal doc (in docs/proposals; +for example [the QoS proposal](http://prs.k8s.io/11713)) or a sketch PR (e.g., just +the API or Go interface) or both. Write or code up just enough to express the idea +and the design and why you made those choices, then get feedback on this. Be clear +about what type of feedback you are asking for. Now, if we ask you to change a +bunch of facets of the design, you won't have to re-write it all. + +## 2. Smaller diffs are exponentially better + +Small PRs get reviewed faster and are more likely to be correct than big ones. +Let's face it - attention wanes over time. If your PR takes 60 minutes to +review, I almost guarantee that the reviewer's eye for details is not as keen in +the last 30 minutes as it was in the first. This leads to multiple rounds of +review when one might have sufficed. In some cases the review is delayed in its +entirety by the need for a large contiguous block of time to sit and read your +code. + +Whenever possible, break up your PRs into multiple commits. Making a series of +discrete commits is a powerful way to express the evolution of an idea or the +different ideas that make up a single feature. There's a balance to be struck, +obviously. If your commits are too small they become more cumbersome to deal +with. Strive to group logically distinct ideas into commits. + +For example, if you found that FeatureX needed some "prefactoring" to fit in, +make a commit that JUST does that prefactoring. Then make a new commit for +FeatureX. Don't lump unrelated things together just because you didn't think +about prefactoring. If you need to, fork a new branch, do the prefactoring +there and send a PR for that. If you can explain why you are doing seemingly +no-op work ("it makes the FeatureX change easier, I promise") we'll probably be +OK with it. + +Obviously, a PR with 25 commits is still very cumbersome to review, so use +common sense. + +## 3. Multiple small PRs are often better than multiple commits + +If you can extract whole ideas from your PR and send those as PRs of their own, +you can avoid the painful problem of continually rebasing. Kubernetes is a +fast-moving codebase - lock in your changes ASAP, and make merges be someone +else's problem. + +Obviously, we want every PR to be useful on its own, so you'll have to use +common sense in deciding what can be a PR vs what should be a commit in a larger +PR. Rule of thumb - if this commit or set of commits is directly related to +FeatureX and nothing else, it should probably be part of the FeatureX PR. If +you can plausibly imagine someone finding value in this commit outside of +FeatureX, try it as a PR. + +Don't worry about flooding us with PRs. We'd rather have 100 small, obvious PRs +than 10 unreviewable monoliths. + +## 4. Don't rename, reformat, comment, etc in the same PR + +Often, as you are implementing FeatureX, you find things that are just wrong. +Bad comments, poorly named functions, bad structure, weak type-safety. You +should absolutely fix those things (or at least file issues, please) - but not +in this PR. See the above points - break unrelated changes out into different +PRs or commits. Otherwise your diff will have WAY too many changes, and your +reviewer won't see the forest because of all the trees. + +## 5. Comments matter + +Read up on GoDoc - follow those general rules. If you're writing code and you +think there is any possible chance that someone might not understand why you did +something (or that you won't remember what you yourself did), comment it. If +you think there's something pretty obvious that we could follow up on, add a +TODO. Many code-review comments are about this exact issue. + +## 5. Tests are almost always required + +Nothing is more frustrating than doing a review, only to find that the tests are +inadequate or even entirely absent. Very few PRs can touch code and NOT touch +tests. If you don't know how to test FeatureX - ask! We'll be happy to help +you design things for easy testing or to suggest appropriate test cases. + +## 6. Look for opportunities to generify + +If you find yourself writing something that touches a lot of modules, think hard +about the dependencies you are introducing between packages. Can some of what +you're doing be made more generic and moved up and out of the FeatureX package? +Do you need to use a function or type from an otherwise unrelated package? If +so, promote! We have places specifically for hosting more generic code. + +Likewise if FeatureX is similar in form to FeatureW which was checked in last +month and it happens to exactly duplicate some tricky stuff from FeatureW, +consider prefactoring core logic out and using it in both FeatureW and FeatureX. +But do that in a different commit or PR, please. + +## 7. Fix feedback in a new commit + +Your reviewer has finally sent you some feedback on FeatureX. You make a bunch +of changes and ... what? You could patch those into your commits with git +"squash" or "fixup" logic. But that makes your changes hard to verify. Unless +your whole PR is pretty trivial, you should instead put your fixups into a new +commit and re-push. Your reviewer can then look at that commit on its own - so +much faster to review than starting over. + +We might still ask you to clean up your commits at the very end, for the sake +of a more readable history, but don't do this until asked, typically at the point +where the PR would otherwise be tagged LGTM. + +General squashing guidelines: + +* Sausage => squash + + When there are several commits to fix bugs in the original commit(s), address reviewer feedback, etc. Really we only want to see the end state and commit message for the whole PR. + +* Layers => don't squash + + When there are independent changes layered upon each other to achieve a single goal. For instance, writing a code munger could be one commit, applying it could be another, and adding a precommit check could be a third. One could argue they should be separate PRs, but there's really no way to test/review the munger without seeing it applied, and there needs to be a precommit check to ensure the munged output doesn't immediately get out of date. + +A commit, as much as possible, should be a single logical change. Each commit should always have a good title line (<70 characters) and include an additional description paragraph describing in more detail the change intended. Do not link pull requests by `#` in a commit description, because GitHub creates lots of spam. Instead, reference other PRs via the PR your commit is in. + +## 8. KISS, YAGNI, MVP, etc + +Sometimes we need to remind each other of core tenets of software design - Keep +It Simple, You Aren't Gonna Need It, Minimum Viable Product, and so on. Adding +features "because we might need it later" is antithetical to software that +ships. Add the things you need NOW and (ideally) leave room for things you +might need later - but don't implement them now. + +## 9. Push back + +We understand that it is hard to imagine, but sometimes we make mistakes. It's +OK to push back on changes requested during a review. If you have a good reason +for doing something a certain way, you are absolutely allowed to debate the +merits of a requested change. You might be overruled, but you might also +prevail. We're mostly pretty reasonable people. Mostly. + +## 10. I'm still getting stalled - help?! + +So, you've done all that and you still aren't getting any PR love? Here's some +things you can do that might help kick a stalled process along: + + * Make sure that your PR has an assigned reviewer (assignee in GitHub). If + this is not the case, reply to the PR comment stream asking for one to be + assigned. + + * Ping the assignee (@username) on the PR comment stream asking for an + estimate of when they can get to it. + + * Ping the assignee by email (many of us have email addresses that are well + published or are the same as our GitHub handle @google.com or @redhat.com). + + * Ping the [team](https://github.com/orgs/kubernetes/teams) (via @team-name) + that works in the area you're submitting code. + +If you think you have fixed all the issues in a round of review, and you haven't +heard back, you should ping the reviewer (assignee) on the comment stream with a +"please take another look" (PTAL) or similar comment indicating you are done and +you think it is ready for re-review. In fact, this is probably a good habit for +all PRs. + +One phenomenon of open-source projects (where anyone can comment on any issue) +is the dog-pile - your PR gets so many comments from so many people it becomes +hard to follow. In this situation you can ask the primary reviewer +(assignee) whether they want you to fork a new PR to clear out all the comments. +Remember: you don't HAVE to fix every issue raised by every person who feels +like commenting, but you should at least answer reasonable comments with an +explanation. + +## Final: Use common sense + +Obviously, none of these points are hard rules. There is no document that can +take the place of common sense and good taste. Use your best judgment, but put +a bit of thought into how your work can be made easier to review. If you do +these things your PRs will flow much more easily. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/faster_reviews.md?pixel)]() + + diff --git a/v1.1/docs/devel/flaky-tests.md b/v1.1/docs/devel/flaky-tests.md new file mode 100644 index 0000000000000..2f0ed914720a2 --- /dev/null +++ b/v1.1/docs/devel/flaky-tests.md @@ -0,0 +1,95 @@ +--- +layout: docwithnav +title: "Hunting flaky tests in Kubernetes" +--- + + + + + +# Hunting flaky tests in Kubernetes + +Sometimes unit tests are flaky. This means that due to (usually) race conditions, they will occasionally fail, even though most of the time they pass. + +We have a goal of 99.9% flake free tests. This means that there is only one flake in one thousand runs of a test. + +Running a test 1000 times on your own machine can be tedious and time consuming. Fortunately, there is a better way to achieve this using Kubernetes. + +_Note: these instructions are mildly hacky for now, as we get run once semantics and logging they will get better_ + +There is a testing image `brendanburns/flake` up on the docker hub. We will use this image to test our fix. + +Create a replication controller with the following config: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: ReplicationController +metadata: + name: flakecontroller +spec: + replicas: 24 + template: + metadata: + labels: + name: flake + spec: + containers: + - name: flake + image: brendanburns/flake + env: + - name: TEST_PACKAGE + value: pkg/tools + - name: REPO_SPEC + value: https://github.com/kubernetes/kubernetes +{% endraw %} +{% endhighlight %} + +Note that we omit the labels and the selector fields of the replication controller, because they will be populated from the labels field of the pod template by default. + +{% highlight sh %} +{% raw %} +kubectl create -f ./controller.yaml +{% endraw %} +{% endhighlight %} + +This will spin up 24 instances of the test. They will run to completion, then exit, and the kubelet will restart them, accumulating more and more runs of the test. +You can examine the recent runs of the test by calling `docker ps -a` and looking for tasks that exited with non-zero exit codes. Unfortunately, docker ps -a only keeps around the exit status of the last 15-20 containers with the same image, so you have to check them frequently. +You can use this script to automate checking for failures, assuming your cluster is running on GCE and has four nodes: + +{% highlight sh %} +{% raw %} +echo "" > output.txt +for i in {1..4}; do + echo "Checking kubernetes-minion-${i}" + echo "kubernetes-minion-${i}:" >> output.txt + gcloud compute ssh "kubernetes-minion-${i}" --command="sudo docker ps -a" >> output.txt +done +grep "Exited ([^0])" output.txt +{% endraw %} +{% endhighlight %} + +Eventually you will have sufficient runs for your purposes. At that point you can stop and delete the replication controller by running: + +{% highlight sh %} +{% raw %} +kubectl stop replicationcontroller flakecontroller +{% endraw %} +{% endhighlight %} + +If you do a final check for flakes with `docker ps -a`, ignore tasks that exited -1, since that's what happens when you stop the replication controller. + +Happy flake hunting! + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/flaky-tests.md?pixel)]() + + diff --git a/v1.1/docs/devel/getting-builds.md b/v1.1/docs/devel/getting-builds.md new file mode 100644 index 0000000000000..b36dfab5a5498 --- /dev/null +++ b/v1.1/docs/devel/getting-builds.md @@ -0,0 +1,62 @@ +--- +layout: docwithnav +title: "Getting Kubernetes Builds" +--- + + + + + +# Getting Kubernetes Builds + +You can use [hack/get-build.sh](http://releases.k8s.io/release-1.1/hack/get-build.sh) to or use as a reference on how to get the most recent builds with curl. With `get-build.sh` you can grab the most recent stable build, the most recent release candidate, or the most recent build to pass our ci and gce e2e tests (essentially a nightly build). + +Run `./hack/get-build.sh -h` for its usage. + +For example, to get a build at a specific version (v1.0.2): + +{% highlight console %} +{% raw %} +./hack/get-build.sh v1.0.2 +{% endraw %} +{% endhighlight %} + +Alternatively, to get the latest stable release: + +{% highlight console %} +{% raw %} +./hack/get-build.sh release/stable +{% endraw %} +{% endhighlight %} + +Finally, you can just print the latest or stable version: + +{% highlight console %} +{% raw %} +./hack/get-build.sh -v ci/latest +{% endraw %} +{% endhighlight %} + +You can also use the gsutil tool to explore the Google Cloud Storage release buckets. Here are some examples: + +{% highlight sh %} +{% raw %} +gsutil cat gs://kubernetes-release/ci/latest.txt # output the latest ci version number +gsutil cat gs://kubernetes-release/ci/latest-green.txt # output the latest ci version number that passed gce e2e +gsutil ls gs://kubernetes-release/ci/v0.20.0-29-g29a55cc/ # list the contents of a ci release +gsutil ls gs://kubernetes-release/release # list all official releases and rcs +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/getting-builds.md?pixel)]() + + diff --git a/v1.1/docs/devel/git_workflow.png b/v1.1/docs/devel/git_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..80a66248fb87d62344eae6b673df4246369974af GIT binary patch literal 114745 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 + + + + +# Kubernetes Developer Guide + +The developer guide is for anyone wanting to either write code which directly accesses the +Kubernetes API, or to contribute directly to the Kubernetes project. +It assumes some familiarity with concepts in the [User Guide](../user-guide/README.html) and the [Cluster Admin +Guide](../admin/README.html). + + +## The process of developing and contributing code to the Kubernetes project + +* **On Collaborative Development** ([collab.md](collab.html)): Info on pull requests and code reviews. + +* **GitHub Issues** ([issues.md](issues.html)): How incoming issues are reviewed and prioritized. + +* **Pull Request Process** ([pull-requests.md](pull-requests.html)): When and why pull requests are closed. + +* **Faster PR reviews** ([faster_reviews.md](faster_reviews.html)): How to get faster PR reviews. + +* **Getting Recent Builds** ([getting-builds.md](getting-builds.html)): How to get recent builds including the latest builds that pass CI. + +* **Automated Tools** ([automation.md](automation.html)): Descriptions of the automation that is running on our github repository. + + +## Setting up your dev environment, coding, and debugging + +* **Development Guide** ([development.md](development.html)): Setting up your development environment. + +* **Hunting flaky tests** ([flaky-tests.md](flaky-tests.html)): We have a goal of 99.9% flake free tests. + Here's how to run your tests many times. + +* **Logging Conventions** ([logging.md](logging.html)]: Glog levels. + +* **Profiling Kubernetes** ([profiling.md](profiling.html)): How to plug in go pprof profiler to Kubernetes. + +* **Instrumenting Kubernetes with a new metric** + ([instrumentation.md](instrumentation.html)): How to add a new metrics to the + Kubernetes code base. + +* **Coding Conventions** ([coding-conventions.md](coding-conventions.html)): + Coding style advice for contributors. + + +## Developing against the Kubernetes API + +* API objects are explained at [http://kubernetes.io/third_party/swagger-ui/](http://kubernetes.io/third_party/swagger-ui/). + +* **Annotations** ([docs/user-guide/annotations.md](../user-guide/annotations.html)): are for attaching arbitrary non-identifying metadata to objects. + Programs that automate Kubernetes objects may use annotations to store small amounts of their state. + +* **API Conventions** ([api-conventions.md](api-conventions.html)): + Defining the verbs and resources used in the Kubernetes API. + +* **API Client Libraries** ([client-libraries.md](client-libraries.html)): + A list of existing client libraries, both supported and user-contributed. + + +## Writing plugins + +* **Authentication Plugins** ([docs/admin/authentication.md](../admin/authentication.html)): + The current and planned states of authentication tokens. + +* **Authorization Plugins** ([docs/admin/authorization.md](../admin/authorization.html)): + Authorization applies to all HTTP requests on the main apiserver port. + This doc explains the available authorization implementations. + +* **Admission Control Plugins** ([admission_control](../design/admission_control.html)) + + +## Building releases + +* **Making release notes** ([making-release-notes.md](making-release-notes.html)): Generating release nodes for a new release. + +* **Releasing Kubernetes** ([releasing.md](releasing.html)): How to create a Kubernetes release (as in version) + and how the version information gets embedded into the built binaries. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/README.md?pixel)]() + + diff --git a/v1.1/docs/devel/instrumentation.md b/v1.1/docs/devel/instrumentation.md new file mode 100644 index 0000000000000..b5f247a7d4086 --- /dev/null +++ b/v1.1/docs/devel/instrumentation.md @@ -0,0 +1,54 @@ +--- +layout: docwithnav +title: "Instrumenting Kubernetes with a new metric" +--- + + + + +Instrumenting Kubernetes with a new metric +=================== + +The following is a step-by-step guide for adding a new metric to the Kubernetes code base. + +We use the Prometheus monitoring system's golang client library for instrumenting our code. Once you've picked out a file that you want to add a metric to, you should: + +1. Import "github.com/prometheus/client_golang/prometheus". + +2. Create a top-level var to define the metric. For this, you have to: + 1. Pick the type of metric. Use a Gauge for things you want to set to a particular value, a Counter for things you want to increment, or a Histogram or Summary for histograms/distributions of values (typically for latency). Histograms are better if you're going to aggregate the values across jobs, while summaries are better if you just want the job to give you a useful summary of the values. + 2. Give the metric a name and description. + 3. Pick whether you want to distinguish different categories of things using labels on the metric. If so, add "Vec" to the name of the type of metric you want and add a slice of the label names to the definition. + + https://github.com/kubernetes/kubernetes/blob/cd3299307d44665564e1a5c77d0daa0286603ff5/pkg/apiserver/apiserver.go#L53 + https://github.com/kubernetes/kubernetes/blob/cd3299307d44665564e1a5c77d0daa0286603ff5/pkg/kubelet/metrics/metrics.go#L31 + +3. Register the metric so that prometheus will know to export it. + + https://github.com/kubernetes/kubernetes/blob/cd3299307d44665564e1a5c77d0daa0286603ff5/pkg/kubelet/metrics/metrics.go#L74 + https://github.com/kubernetes/kubernetes/blob/cd3299307d44665564e1a5c77d0daa0286603ff5/pkg/apiserver/apiserver.go#L78 + +4. Use the metric by calling the appropriate method for your metric type (Set, Inc/Add, or Observe, respectively for Gauge, Counter, or Histogram/Summary), first calling WithLabelValues if your metric has any labels + + https://github.com/kubernetes/kubernetes/blob/3ce7fe8310ff081dbbd3d95490193e1d5250d2c9/pkg/kubelet/kubelet.go#L1384 + https://github.com/kubernetes/kubernetes/blob/cd3299307d44665564e1a5c77d0daa0286603ff5/pkg/apiserver/apiserver.go#L87 + + +These are the metric type definitions if you're curious to learn about them or need more information: +https://github.com/prometheus/client_golang/blob/master/prometheus/gauge.go +https://github.com/prometheus/client_golang/blob/master/prometheus/counter.go +https://github.com/prometheus/client_golang/blob/master/prometheus/histogram.go +https://github.com/prometheus/client_golang/blob/master/prometheus/summary.go + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/instrumentation.md?pixel)]() + + diff --git a/v1.1/docs/devel/issues.md b/v1.1/docs/devel/issues.md new file mode 100644 index 0000000000000..c0c91117777e3 --- /dev/null +++ b/v1.1/docs/devel/issues.md @@ -0,0 +1,40 @@ +--- +layout: docwithnav +title: "GitHub Issues for the Kubernetes Project" +--- + + + + +GitHub Issues for the Kubernetes Project +======================================== + +A list quick overview of how we will review and prioritize incoming issues at https://github.com/kubernetes/kubernetes/issues + +Priorities +---------- + +We will use GitHub issue labels for prioritization. The absence of a priority label means the bug has not been reviewed and prioritized yet. + +Definitions +----------- +* P0 - something broken for users, build broken, or critical security issue. Someone must drop everything and work on it. +* P1 - must fix for earliest possible binary release (every two weeks) +* P2 - should be fixed in next major release version +* P3 - default priority for lower importance bugs that we still want to track and plan to fix at some point +* design - priority/design is for issues that are used to track design discussions +* support - priority/support is used for issues tracking user support requests +* untriaged - anything without a priority/X label will be considered untriaged + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/issues.md?pixel)]() + + diff --git a/v1.1/docs/devel/kubectl-conventions.md b/v1.1/docs/devel/kubectl-conventions.md new file mode 100644 index 0000000000000..6c76fc3c06457 --- /dev/null +++ b/v1.1/docs/devel/kubectl-conventions.md @@ -0,0 +1,124 @@ +--- +layout: docwithnav +title: "Kubectl Conventions" +--- + + + + + +Kubectl Conventions +=================== + +Updated: 8/27/2015 + +**Table of Contents** + + + - [Principles](#principles) + - [Command conventions](#command-conventions) + - [Flag conventions](#flag-conventions) + - [Output conventions](#output-conventions) + - [Documentation conventions](#documentation-conventions) + + + +## Principles + +* Strive for consistency across commands +* Explicit should always override implicit + * Environment variables should override default values + * Command-line flags should override default values and environment variables + * --namespace should also override the value specified in a specified resource + +## Command conventions + +* Command names are all lowercase, and hyphenated if multiple words. +* kubectl VERB NOUNs for commands that apply to multiple resource types +* NOUNs may be specified as TYPE name1 name2 ... or TYPE/name1 TYPE/name2; TYPE is omitted when only a single type is expected +* Resource types are all lowercase, with no hyphens; both singular and plural forms are accepted +* NOUNs may also be specified by one or more file arguments: -f file1 -f file2 ... +* Resource types may have 2- or 3-letter aliases. +* Business logic should be decoupled from the command framework, so that it can be reused independently of kubectl, cobra, etc. + * Ideally, commonly needed functionality would be implemented server-side in order to avoid problems typical of "fat" clients and to make it readily available to non-Go clients +* Commands that generate resources, such as `run` or `expose`, should obey the following conventions: + * Flags should be converted to a parameter Go map or json map prior to invoking the generator + * The generator must be versioned so that users depending on a specific behavior may pin to that version, via `--generator=` + * Generation should be decoupled from creation + * `--dry-run` should output the resource that would be created, without creating it +* A command group (e.g., `kubectl config`) may be used to group related non-standard commands, such as custom generators, mutations, and computations + +## Flag conventions + +* Flags are all lowercase, with words separated by hyphens +* Flag names and single-character aliases should have the same meaning across all commands +* Command-line flags corresponding to API fields should accept API enums exactly (e.g., --restart=Always) +* Do not reuse flags for different semantic purposes, and do not use different flag names for the same semantic purpose -- grep for `"Flags()"` before adding a new flag +* Use short flags sparingly, only for the most frequently used options, prefer lowercase over uppercase for the most common cases, try to stick to well known conventions for UNIX commands and/or Docker, where they exist, and update this list when adding new short flags + * `-f`: Resource file + * also used for `--follow` in `logs`, but should be deprecated in favor of `-F` + * `-l`: Label selector + * also used for `--labels` in `expose`, but should be deprecated + * `-L`: Label columns + * `-c`: Container + * also used for `--client` in `version`, but should be deprecated + * `-i`: Attach stdin + * `-t`: Allocate TTY + * also used for `--template`, but deprecated + * `-w`: Watch (currently also used for `--www` in `proxy`, but should be deprecated) + * `-p`: Previous + * also used for `--pod` in `exec`, but deprecated + * also used for `--patch` in `patch`, but should be deprecated + * also used for `--port` in `proxy`, but should be deprecated + * `-P`: Static file prefix in `proxy`, but should be deprecated + * `-r`: Replicas + * `-u`: Unix socket + * `-v`: Verbose logging level +* `--dry-run`: Don't modify the live state; simulate the mutation and display the output +* `--local`: Don't contact the server; just do local read, transformation, generation, etc. and display the output +* `--output-version=...`: Convert the output to a different API group/version +* `--validate`: Validate the resource schema + +## Output conventions + +* By default, output is intended for humans rather than programs + * However, affordances are made for simple parsing of `get` output +* Only errors should be directed to stderr +* `get` commands should output one row per resource, and one resource per row + * Column titles and values should not contain spaces in order to facilitate commands that break lines into fields: cut, awk, etc. + * By default, `get` output should fit within about 80 columns + * Eventually we could perhaps auto-detect width + * `-o wide` may be used to display additional columns + * The first column should be the resource name, titled `NAME` (may change this to an abbreviation of resource type) + * NAMESPACE should be displayed as the first column when --all-namespaces is specified + * The last default column should be time since creation, titled `AGE` + * `-Lkey` should append a column containing the value of label with key `key`, with `` if not present + * json, yaml, Go template, and jsonpath template formats should be supported and encouraged for subsequent processing + * Users should use --api-version or --output-version to ensure the output uses the version they expect +* `describe` commands may output on multiple lines and may include information from related resources, such as events. Describe should add additional information from related resources that a normal user may need to know - if a user would always run "describe resource1" and the immediately want to run a "get type2" or "describe resource2", consider including that info. Examples, persistent volume claims for pods that reference claims, events for most resources, nodes and the pods scheduled on them. When fetching related resources, a targeted field selector should be used in favor of client side filtering of related resources. +* Mutations should output TYPE/name verbed by default, where TYPE is singular; `-o name` may be used to just display TYPE/name, which may be used to specify resources in other commands + +## Documentation conventions + +* Commands are documented using Cobra; docs are then auto-generated by `hack/update-generated-docs.sh`. + * Use should contain a short usage string for the most common use case(s), not an exhaustive specification + * Short should contain a one-line explanation of what the command does + * Long may contain multiple lines, including additional information about input, output, commonly used flags, etc. + * Example should contain examples + * Start commands with `$` + * A comment should precede each example command, and should begin with `#` +* Use "FILENAME" for filenames +* Use "TYPE" for the particular flavor of resource type accepted by kubectl, rather than "RESOURCE" or "KIND" +* Use "NAME" for resource names + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/kubectl-conventions.md?pixel)]() + + diff --git a/v1.1/docs/devel/logging.md b/v1.1/docs/devel/logging.md new file mode 100644 index 0000000000000..5136f68ab8035 --- /dev/null +++ b/v1.1/docs/devel/logging.md @@ -0,0 +1,47 @@ +--- +layout: docwithnav +title: "Logging Conventions" +--- + + + + +Logging Conventions +=================== + +The following conventions for the glog levels to use. [glog](http://godoc.org/github.com/golang/glog) is globally preferred to [log](http://golang.org/pkg/log/) for better runtime control. + +* glog.Errorf() - Always an error +* glog.Warningf() - Something unexpected, but probably not an error +* glog.Infof() has multiple levels: + * glog.V(0) - Generally useful for this to ALWAYS be visible to an operator + * Programmer errors + * Logging extra info about a panic + * CLI argument handling + * glog.V(1) - A reasonable default log level if you don't want verbosity. + * Information about config (listening on X, watching Y) + * Errors that repeat frequently that relate to conditions that can be corrected (pod detected as unhealthy) + * glog.V(2) - Useful steady state information about the service and important log messages that may correlate to significant changes in the system. This is the recommended default log level for most systems. + * Logging HTTP requests and their exit code + * System state changing (killing pod) + * Controller state change events (starting pods) + * Scheduler log messages + * glog.V(3) - Extended information about changes + * More info about system state changes + * glog.V(4) - Debug level verbosity (for now) + * Logging in particularly thorny parts of code where you may want to come back later and check it + +As per the comments, the practical default level is V(2). Developers and QE environments may wish to run at V(3) or V(4). If you wish to change the log level, you can pass in `-v=X` where X is the desired maximum level to log. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/logging.md?pixel)]() + + diff --git a/v1.1/docs/devel/making-release-notes.md b/v1.1/docs/devel/making-release-notes.md new file mode 100644 index 0000000000000..f1e6bf05925e0 --- /dev/null +++ b/v1.1/docs/devel/making-release-notes.md @@ -0,0 +1,63 @@ +--- +layout: docwithnav +title: "Making release notes" +--- + + + + + +## Making release notes + +This documents the process for making release notes for a release. + +### 1) Note the PR number of the previous release + +Find the most-recent PR that was merged with the previous .0 release. Remember this as $LASTPR. +_TODO_: Figure out a way to record this somewhere to save the next release engineer time. + +Find the most-recent PR that was merged with the current .0 release. Remember this as $CURRENTPR. + +### 2) Run the release-notes tool + +{% highlight bash %} +{% raw %} +${KUBERNETES_ROOT}/build/make-release-notes.sh $LASTPR $CURRENTPR +{% endraw %} +{% endhighlight %} + +### 3) Trim the release notes + +This generates a list of the entire set of PRs merged since the last minor +release. It is likely long and many PRs aren't worth mentioning. If any of the +PRs were cherrypicked into patches on the last minor release, you should exclude +them from the current release's notes. + +Open up `candidate-notes.md` in your favorite editor. + +Remove, regroup, organize to your hearts content. + + +### 4) Update CHANGELOG.md + +With the final markdown all set, cut and paste it to the top of `CHANGELOG.md` + +### 5) Update the Release page + + * Switch to the [releases](https://github.com/kubernetes/kubernetes/releases) page. + * Open up the release you are working on. + * Cut and paste the final markdown from above into the release notes + * Press Save. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/making-release-notes.md?pixel)]() + + diff --git a/v1.1/docs/devel/profiling.md b/v1.1/docs/devel/profiling.md new file mode 100644 index 0000000000000..c4fec648605bb --- /dev/null +++ b/v1.1/docs/devel/profiling.md @@ -0,0 +1,69 @@ +--- +layout: docwithnav +title: "Profiling Kubernetes" +--- + + + + + +# Profiling Kubernetes + +This document explain how to plug in profiler and how to profile Kubernetes services. + +## Profiling library + +Go comes with inbuilt 'net/http/pprof' profiling library and profiling web service. The way service works is binding debug/pprof/ subtree on a running webserver to the profiler. Reading from subpages of debug/pprof returns pprof-formatted profiles of the running binary. The output can be processed offline by the tool of choice, or used as an input to handy 'go tool pprof', which can graphically represent the result. + +## Adding profiling to services to APIserver. + +TL;DR: Add lines: + +{% highlight go %} +{% raw %} +m.mux.HandleFunc("/debug/pprof/", pprof.Index) +m.mux.HandleFunc("/debug/pprof/profile", pprof.Profile) +m.mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) +{% endraw %} +{% endhighlight %} + +to the init(c *Config) method in 'pkg/master/master.go' and import 'net/http/pprof' package. + +In most use cases to use profiler service it's enough to do 'import _ net/http/pprof', which automatically registers a handler in the default http.Server. Slight inconvenience is that APIserver uses default server for intra-cluster communication, so plugging profiler to it is not really useful. In 'pkg/master/server/server.go' more servers are created and started as separate goroutines. The one that is usually serving external traffic is secureServer. The handler for this traffic is defined in 'pkg/master/master.go' and stored in Handler variable. It is created from HTTP multiplexer, so the only thing that needs to be done is adding profiler handler functions to this multiplexer. This is exactly what lines after TL;DR do. + +## Connecting to the profiler + +Even when running profiler I found not really straightforward to use 'go tool pprof' with it. The problem is that at least for dev purposes certificates generated for APIserver are not signed by anyone trusted and because secureServer serves only secure traffic it isn't straightforward to connect to the service. The best workaround I found is by creating an ssh tunnel from the kubernetes_master open unsecured port to some external server, and use this server as a proxy. To save everyone looking for correct ssh flags, it is done by running: + +{% highlight sh %} +{% raw %} +ssh kubernetes_master -L:localhost:8080 +{% endraw %} +{% endhighlight %} + +or analogous one for you Cloud provider. Afterwards you can e.g. run + +{% highlight sh %} +{% raw %} +go tool pprof http://localhost:/debug/pprof/profile +{% endraw %} +{% endhighlight %} + +to get 30 sec. CPU profile. + +## Contention profiling + +To enable contention profiling you need to add line `rt.SetBlockProfileRate(1)` in addition to `m.mux.HandleFunc(...)` added before (`rt` stands for `runtime` in `master.go`). This enables 'debug/pprof/block' subpage, which can be used as an input to `go tool pprof`. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/profiling.md?pixel)]() + + diff --git a/v1.1/docs/devel/pull-requests.md b/v1.1/docs/devel/pull-requests.md new file mode 100644 index 0000000000000..059854e580316 --- /dev/null +++ b/v1.1/docs/devel/pull-requests.md @@ -0,0 +1,57 @@ +--- +layout: docwithnav +title: "Pull Request Process" +--- + + + + +Pull Request Process +==================== + +An overview of how we will manage old or out-of-date pull requests. + +Process +------- + +We will close any pull requests older than two weeks. + +Exceptions can be made for PRs that have active review comments, or that are awaiting other dependent PRs. Closed pull requests are easy to recreate, and little work is lost by closing a pull request that subsequently needs to be reopened. + +We want to limit the total number of PRs in flight to: +* Maintain a clean project +* Remove old PRs that would be difficult to rebase as the underlying code has changed over time +* Encourage code velocity + +Life of a Pull Request +---------------------- + +Unless in the last few weeks of a milestone when we need to reduce churn and stabilize, we aim to be always accepting pull requests. + +Either the [on call](https://github.com/kubernetes/kubernetes/wiki/Kubernetes-on-call-rotation) manually or the [submit queue](https://github.com/kubernetes/contrib/tree/master/submit-queue) automatically will manage merging PRs. + +There are several requirements for the submit queue to work: +* Author must have signed CLA ("cla: yes" label added to PR) +* No changes can be made since last lgtm label was applied +* k8s-bot must have reported the GCE E2E build and test steps passed (Travis, Shippable and Jenkins build) + +Additionally, for infrequent or new contributors, we require the on call to apply the "ok-to-merge" label manually. This is gated by the [whitelist](https://github.com/kubernetes/contrib/tree/master/submit-queue/whitelist.txt). + +Automation +---------- + +We use a variety of automation to manage pull requests. This automation is described in detail +[elsewhere.](automation.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/pull-requests.md?pixel)]() + + diff --git a/v1.1/docs/devel/releasing.dot b/v1.1/docs/devel/releasing.dot new file mode 100644 index 0000000000000..fe8124c36da71 --- /dev/null +++ b/v1.1/docs/devel/releasing.dot @@ -0,0 +1,113 @@ +// Build it with: +// $ dot -Tsvg releasing.dot >releasing.svg + +digraph tagged_release { + size = "5,5" + // Arrows go up. + rankdir = BT + subgraph left { + // Group the left nodes together. + ci012abc -> pr101 -> ci345cde -> pr102 + style = invis + } + subgraph right { + // Group the right nodes together. + version_commit -> dev_commit + style = invis + } + { // Align the version commit and the info about it. + rank = same + // Align them with pr101 + pr101 + version_commit + // release_info shows the change in the commit. + release_info + } + { // Align the dev commit and the info about it. + rank = same + // Align them with 345cde + ci345cde + dev_commit + dev_info + } + // Join the nodes from subgraph left. + pr99 -> ci012abc + pr102 -> pr100 + // Do the version node. + pr99 -> version_commit + dev_commit -> pr100 + tag -> version_commit + pr99 [ + label = "Merge PR #99" + shape = box + fillcolor = "#ccccff" + style = "filled" + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; + ci012abc [ + label = "012abc" + shape = circle + fillcolor = "#ffffcc" + style = "filled" + fontname = "Consolas, Liberation Mono, Menlo, Courier, monospace" + ]; + pr101 [ + label = "Merge PR #101" + shape = box + fillcolor = "#ccccff" + style = "filled" + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; + ci345cde [ + label = "345cde" + shape = circle + fillcolor = "#ffffcc" + style = "filled" + fontname = "Consolas, Liberation Mono, Menlo, Courier, monospace" + ]; + pr102 [ + label = "Merge PR #102" + shape = box + fillcolor = "#ccccff" + style = "filled" + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; + version_commit [ + label = "678fed" + shape = circle + fillcolor = "#ccffcc" + style = "filled" + fontname = "Consolas, Liberation Mono, Menlo, Courier, monospace" + ]; + dev_commit [ + label = "456dcb" + shape = circle + fillcolor = "#ffffcc" + style = "filled" + fontname = "Consolas, Liberation Mono, Menlo, Courier, monospace" + ]; + pr100 [ + label = "Merge PR #100" + shape = box + fillcolor = "#ccccff" + style = "filled" + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; + release_info [ + label = "pkg/version/base.go:\ngitVersion = \"v0.5\";" + shape = none + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; + dev_info [ + label = "pkg/version/base.go:\ngitVersion = \"v0.5-dev\";" + shape = none + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; + tag [ + label = "$ git tag -a v0.5" + fillcolor = "#ffcccc" + style = "filled" + fontname = "Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif" + ]; +} + diff --git a/v1.1/docs/devel/releasing.md b/v1.1/docs/devel/releasing.md new file mode 100644 index 0000000000000..00f3e636fd317 --- /dev/null +++ b/v1.1/docs/devel/releasing.md @@ -0,0 +1,335 @@ +--- +layout: docwithnav +title: "Releasing Kubernetes" +--- + + + + + +# Releasing Kubernetes + +This document explains how to cut a release, and the theory behind it. If you +just want to cut a release and move on with your life, you can stop reading +after the first section. + +## How to cut a Kubernetes release + +Regardless of whether you are cutting a major or minor version, cutting a +release breaks down into four pieces: + +1. Selecting release components. +1. Tagging and merging the release in Git. +1. Building and pushing the binaries. +1. Writing release notes. + +You should progress in this strict order. + +### Building a New Major/Minor Version (`vX.Y.0`) + +#### Selecting Release Components + +When cutting a major/minor release, your first job is to find the branch +point. We cut `vX.Y.0` releases directly from `master`, which is also the +branch that we have most continuous validation on. Go first to [the main GCE +Jenkins end-to-end job](http://go/k8s-test/job/kubernetes-e2e-gce) and next to [the +Critical Builds page](http://go/k8s-test/view/Critical%20Builds) and hopefully find a +recent Git hash that looks stable across at least `kubernetes-e2e-gce` and +`kubernetes-e2e-gke-ci`. First glance through builds and look for nice solid +rows of green builds, and then check temporally with the other Critical Builds +to make sure they're solid around then as well. Once you find some greens, you +can find the Git hash for a build by looking at the "Console Log", then look for +`githash=`. You should see a line line: + +{% highlight console %} +{% raw %} ++ githash=v0.20.2-322-g974377b +{% endraw %} +{% endhighlight %} + +Because Jenkins builds frequently, if you're looking between jobs +(e.g. `kubernetes-e2e-gke-ci` and `kubernetes-e2e-gce`), there may be no single +`githash` that's been run on both jobs. In that case, take the a green +`kubernetes-e2e-gce` build (but please check that it corresponds to a temporally +similar build that's green on `kubernetes-e2e-gke-ci`). Lastly, if you're having +trouble understanding why the GKE continuous integration clusters are failing +and you're trying to cut a release, don't hesitate to contact the GKE +oncall. + +Before proceeding to the next step: + +{% highlight sh %} +{% raw %} +export BRANCHPOINT=v0.20.2-322-g974377b +{% endraw %} +{% endhighlight %} + +Where `v0.20.2-322-g974377b` is the git hash you decided on. This will become +our (retroactive) branch point. + +#### Branching, Tagging and Merging + +Do the following: + +1. `export VER=x.y` (e.g. `0.20` for v0.20) +1. cd to the base of the repo +1. `git fetch upstream && git checkout -b release-${VER} ${BRANCHPOINT}` (you did set `${BRANCHPOINT}`, right?) +1. Make sure you don't have any files you care about littering your repo (they + better be checked in or outside the repo, or the next step will delete them). +1. `make clean && git reset --hard HEAD && git clean -xdf` +1. `make` (TBD: you really shouldn't have to do this, but the swagger output step requires it right now) +1. `./build/mark-new-version.sh v${VER}.0` to mark the new release and get further + instructions. This creates a series of commits on the branch you're working + on (`release-${VER}`), including forking our documentation for the release, + the release version commit (which is then tagged), and the post-release + version commit. +1. Follow the instructions given to you by that script. They are canon for the + remainder of the Git process. If you don't understand something in that + process, please ask! + +**TODO**: how to fix tags, etc., if you have to shift the release branchpoint. + +#### Building and Pushing Binaries + +In your git repo (you still have `${VER}` set from above right?): + +1. `git checkout upstream/master && build/build-official-release.sh v${VER}.0` (the `build-official-release.sh` script is version agnostic, so it's best to run it off `master` directly). +1. Follow the instructions given to you by that script. +1. At this point, you've done all the Git bits, you've got all the binary bits pushed, and you've got the template for the release started on GitHub. + +#### Writing Release Notes + +[This helpful guide](making-release-notes.html) describes how to write release +notes for a major/minor release. In the release template on GitHub, leave the +last PR number that the tool finds for the `.0` release, so the next releaser +doesn't have to hunt. + +### Building a New Patch Release (`vX.Y.Z` for `Z > 0`) + +#### Selecting Release Components + +We cut `vX.Y.Z` releases from the `release-vX.Y` branch after all cherry picks +to the branch have been resolved. You should ensure all outstanding cherry picks +have been reviewed and merged and the branch validated on Jenkins (validation +TBD). See the [Cherry Picks](cherry-picks.html) for more information on how to +manage cherry picks prior to cutting the release. + +#### Tagging and Merging + +1. `export VER=x.y` (e.g. `0.20` for v0.20) +1. `export PATCH=Z` where `Z` is the patch level of `vX.Y.Z` +1. cd to the base of the repo +1. `git fetch upstream && git checkout -b upstream/release-${VER} release-${VER}` +1. Make sure you don't have any files you care about littering your repo (they + better be checked in or outside the repo, or the next step will delete them). +1. `make clean && git reset --hard HEAD && git clean -xdf` +1. `make` (TBD: you really shouldn't have to do this, but the swagger output step requires it right now) +1. `./build/mark-new-version.sh v${VER}.${PATCH}` to mark the new release and get further + instructions. This creates a series of commits on the branch you're working + on (`release-${VER}`), including forking our documentation for the release, + the release version commit (which is then tagged), and the post-release + version commit. +1. Follow the instructions given to you by that script. They are canon for the + remainder of the Git process. If you don't understand something in that + process, please ask! When proposing PRs, you can pre-fill the body with + `hack/cherry_pick_list.sh upstream/release-${VER}` to inform people of what + is already on the branch. + +**TODO**: how to fix tags, etc., if the release is changed. + +#### Building and Pushing Binaries + +In your git repo (you still have `${VER}` and `${PATCH}` set from above right?): + +1. `git checkout upstream/master && build/build-official-release.sh + v${VER}.${PATCH}` (the `build-official-release.sh` script is version + agnostic, so it's best to run it off `master` directly). +1. Follow the instructions given to you by that script. At this point, you've + done all the Git bits, you've got all the binary bits pushed, and you've got + the template for the release started on GitHub. + +#### Writing Release Notes + +Run `hack/cherry_pick_list.sh ${VER}.${PATCH}~1` to get the release notes for +the patch release you just created. Feel free to prune anything internal, like +you would for a major release, but typically for patch releases we tend to +include everything in the release notes. + +## Origin of the Sources + +Kubernetes may be built from either a git tree (using `hack/build-go.sh`) or +from a tarball (using either `hack/build-go.sh` or `go install`) or directly by +the Go native build system (using `go get`). + +When building from git, we want to be able to insert specific information about +the build tree at build time. In particular, we want to use the output of `git +describe` to generate the version of Kubernetes and the status of the build +tree (add a `-dirty` prefix if the tree was modified.) + +When building from a tarball or using the Go build system, we will not have +access to the information about the git tree, but we still want to be able to +tell whether this build corresponds to an exact release (e.g. v0.3) or is +between releases (e.g. at some point in development between v0.3 and v0.4). + +## Version Number Format + +In order to account for these use cases, there are some specific formats that +may end up representing the Kubernetes version. Here are a few examples: + +- **v0.5**: This is official version 0.5 and this version will only be used + when building from a clean git tree at the v0.5 git tag, or from a tree + extracted from the tarball corresponding to that specific release. +- **v0.5-15-g0123abcd4567**: This is the `git describe` output and it indicates + that we are 15 commits past the v0.5 release and that the SHA1 of the commit + where the binaries were built was `0123abcd4567`. It is only possible to have + this level of detail in the version information when building from git, not + when building from a tarball. +- **v0.5-15-g0123abcd4567-dirty** or **v0.5-dirty**: The extra `-dirty` prefix + means that the tree had local modifications or untracked files at the time of + the build, so there's no guarantee that the source code matches exactly the + state of the tree at the `0123abcd4567` commit or at the `v0.5` git tag + (resp.) +- **v0.5-dev**: This means we are building from a tarball or using `go get` or, + if we have a git tree, we are using `go install` directly, so it is not + possible to inject the git version into the build information. Additionally, + this is not an official release, so the `-dev` prefix indicates that the + version we are building is after `v0.5` but before `v0.6`. (There is actually + an exception where a commit with `v0.5-dev` is not present on `v0.6`, see + later for details.) + +## Injecting Version into Binaries + +In order to cover the different build cases, we start by providing information +that can be used when using only Go build tools or when we do not have the git +version information available. + +To be able to provide a meaningful version in those cases, we set the contents +of variables in a Go source file that will be used when no overrides are +present. + +We are using `pkg/version/base.go` as the source of versioning in absence of +information from git. Here is a sample of that file's contents: + +{% highlight go %} +{% raw %} +var ( + gitVersion string = "v0.4-dev" // version from git, output of $(git describe) + gitCommit string = "" // sha1 from git, output of $(git rev-parse HEAD) +) +{% endraw %} +{% endhighlight %} + +This means a build with `go install` or `go get` or a build from a tarball will +yield binaries that will identify themselves as `v0.4-dev` and will not be able +to provide you with a SHA1. + +To add the extra versioning information when building from git, the +`hack/build-go.sh` script will gather that information (using `git describe` and +`git rev-parse`) and then create a `-ldflags` string to pass to `go install` and +tell the Go linker to override the contents of those variables at build time. It +can, for instance, tell it to override `gitVersion` and set it to +`v0.4-13-g4567bcdef6789-dirty` and set `gitCommit` to `4567bcdef6789...` which +is the complete SHA1 of the (dirty) tree used at build time. + +## Handling Official Versions + +Handling official versions from git is easy, as long as there is an annotated +git tag pointing to a specific version then `git describe` will return that tag +exactly which will match the idea of an official version (e.g. `v0.5`). + +Handling it on tarballs is a bit harder since the exact version string must be +present in `pkg/version/base.go` for it to get embedded into the binaries. But +simply creating a commit with `v0.5` on its own would mean that the commits +coming after it would also get the `v0.5` version when built from tarball or `go +get` while in fact they do not match `v0.5` (the one that was tagged) exactly. + +To handle that case, creating a new release should involve creating two adjacent +commits where the first of them will set the version to `v0.5` and the second +will set it to `v0.5-dev`. In that case, even in the presence of merges, there +will be a single commit where the exact `v0.5` version will be used and all +others around it will either have `v0.4-dev` or `v0.5-dev`. + +The diagram below illustrates it. + +![Diagram of git commits involved in the release](releasing.png) + +After working on `v0.4-dev` and merging PR 99 we decide it is time to release +`v0.5`. So we start a new branch, create one commit to update +`pkg/version/base.go` to include `gitVersion = "v0.5"` and `git commit` it. + +We test it and make sure everything is working as expected. + +Before sending a PR for it, we create a second commit on that same branch, +updating `pkg/version/base.go` to include `gitVersion = "v0.5-dev"`. That will +ensure that further builds (from tarball or `go install`) on that tree will +always include the `-dev` prefix and will not have a `v0.5` version (since they +do not match the official `v0.5` exactly.) + +We then send PR 100 with both commits in it. + +Once the PR is accepted, we can use `git tag -a` to create an annotated tag +*pointing to the one commit* that has `v0.5` in `pkg/version/base.go` and push +it to GitHub. (Unfortunately GitHub tags/releases are not annotated tags, so +this needs to be done from a git client and pushed to GitHub using SSH or +HTTPS.) + +## Parallel Commits + +While we are working on releasing `v0.5`, other development takes place and +other PRs get merged. For instance, in the example above, PRs 101 and 102 get +merged to the master branch before the versioning PR gets merged. + +This is not a problem, it is only slightly inaccurate that checking out the tree +at commit `012abc` or commit `345cde` or at the commit of the merges of PR 101 +or 102 will yield a version of `v0.4-dev` *but* those commits are not present in +`v0.5`. + +In that sense, there is a small window in which commits will get a +`v0.4-dev` or `v0.4-N-gXXX` label and while they're indeed later than `v0.4` +but they are not really before `v0.5` in that `v0.5` does not contain those +commits. + +Unfortunately, there is not much we can do about it. On the other hand, other +projects seem to live with that and it does not really become a large problem. + +As an example, Docker commit a327d9b91edf has a `v1.1.1-N-gXXX` label but it is +not present in Docker `v1.2.0`: + +{% highlight console %} +{% raw %} +$ git describe a327d9b91edf +v1.1.1-822-ga327d9b91edf + +$ git log --oneline v1.2.0..a327d9b91edf +a327d9b91edf Fix data space reporting from Kb/Mb to KB/MB + +(Non-empty output here means the commit is not present on v1.2.0.) +{% endraw %} +{% endhighlight %} + +## Release Notes + +No official release should be made final without properly matching release notes. + +There should be made available, per release, a small summary, preamble, of the +major changes, both in terms of feature improvements/bug fixes and notes about +functional feature changes (if any) regarding the previous released version so +that the BOM regarding updating to it gets as obvious and trouble free as possible. + +After this summary, preamble, all the relevant PRs/issues that got in that +version should be listed and linked together with a small summary understandable +by plain mortals (in a perfect world PR/issue's title would be enough but often +it is just too cryptic/geeky/domain-specific that it isn't). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/releasing.md?pixel)]() + + diff --git a/v1.1/docs/devel/releasing.png b/v1.1/docs/devel/releasing.png new file mode 100644 index 0000000000000000000000000000000000000000..935628deddc5ba9c608cd7f97d7c587bf519e333 GIT binary patch literal 30693 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/v1.1/docs/devel/releasing.svg b/v1.1/docs/devel/releasing.svg new file mode 100644 index 0000000000000..f703e6e2ac969 --- /dev/null +++ b/v1.1/docs/devel/releasing.svg @@ -0,0 +1,113 @@ + + + + + + +tagged_release + + +ci012abc + +012abc + + +pr101 + +Merge PR #101 + + +ci012abc->pr101 + + + + +ci345cde + +345cde + + +pr101->ci345cde + + + + +pr102 + +Merge PR #102 + + +ci345cde->pr102 + + + + +pr100 + +Merge PR #100 + + +pr102->pr100 + + + + +version_commit + +678fed + + +dev_commit + +456dcb + + +version_commit->dev_commit + + + + +dev_commit->pr100 + + + + +release_info +pkg/version/base.go: +gitVersion = "v0.5"; + + +dev_info +pkg/version/base.go: +gitVersion = "v0.5-dev"; + + +pr99 + +Merge PR #99 + + +pr99->ci012abc + + + + +pr99->version_commit + + + + +tag + +$ git tag -a v0.5 + + +tag->version_commit + + + + + diff --git a/v1.1/docs/devel/scheduler.md b/v1.1/docs/devel/scheduler.md new file mode 100755 index 0000000000000..6db831889a8d7 --- /dev/null +++ b/v1.1/docs/devel/scheduler.md @@ -0,0 +1,68 @@ +--- +layout: docwithnav +title: "The Kubernetes Scheduler" +--- + + + + + +# The Kubernetes Scheduler + +The Kubernetes scheduler runs as a process alongside the other master +components such as the API server. Its interface to the API server is to watch +for Pods with an empty PodSpec.NodeName, and for each Pod, it posts a Binding +indicating where the Pod should be scheduled. + +## The scheduling process + +The scheduler tries to find a node for each Pod, one at a time, as it notices +these Pods via watch. There are three steps. First it applies a set of "predicates" that filter out +inappropriate nodes. For example, if the PodSpec specifies resource requests, then the scheduler +will filter out nodes that don't have at least that much resources available (computed +as the capacity of the node minus the sum of the resource requests of the containers that +are already running on the node). Second, it applies a set of "priority functions" +that rank the nodes that weren't filtered out by the predicate check. For example, +it tries to spread Pods across nodes while at the same time favoring the least-loaded +nodes (where "load" here is sum of the resource requests of the containers running on the node, +divided by the node's capacity). +Finally, the node with the highest priority is chosen +(or, if there are multiple such nodes, then one of them is chosen at random). The code +for this main scheduling loop is in the function `Schedule()` in +[plugin/pkg/scheduler/generic_scheduler.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/generic_scheduler.go) + +## Scheduler extensibility + +The scheduler is extensible: the cluster administrator can choose which of the pre-defined +scheduling policies to apply, and can add new ones. The built-in predicates and priorities are +defined in [plugin/pkg/scheduler/algorithm/predicates/predicates.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithm/predicates/predicates.go) and +[plugin/pkg/scheduler/algorithm/priorities/priorities.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithm/priorities/priorities.go), respectively. +The policies that are applied when scheduling can be chosen in one of two ways. Normally, +the policies used are selected by the functions `defaultPredicates()` and `defaultPriorities()` in +[plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go). +However, the choice of policies +can be overridden by passing the command-line flag `--policy-config-file` to the scheduler, pointing to a JSON +file specifying which scheduling policies to use. See +[examples/scheduler-policy-config.json](../../examples/scheduler-policy-config.json) for an example +config file. (Note that the config file format is versioned; the API is defined in +[plugin/pkg/scheduler/api](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/api/)). +Thus to add a new scheduling policy, you should modify predicates.go or priorities.go, +and either register the policy in `defaultPredicates()` or `defaultPriorities()`, or use a policy config file. + +## Exploring the code + +If you want to get a global picture of how the scheduler works, you can start in +[plugin/cmd/kube-scheduler/app/server.go](http://releases.k8s.io/release-1.1/plugin/cmd/kube-scheduler/app/server.go) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/scheduler.md?pixel)]() + + diff --git a/v1.1/docs/devel/scheduler_algorithm.md b/v1.1/docs/devel/scheduler_algorithm.md new file mode 100755 index 0000000000000..a0a91f0afd32e --- /dev/null +++ b/v1.1/docs/devel/scheduler_algorithm.md @@ -0,0 +1,56 @@ +--- +layout: docwithnav +title: "Scheduler Algorithm in Kubernetes" +--- + + + + + +# Scheduler Algorithm in Kubernetes + +For each unscheduled Pod, the Kubernetes scheduler tries to find a node across the cluster according to a set of rules. A general introduction to the Kubernetes scheduler can be found at [scheduler.md](scheduler.html). In this document, the algorithm of how to select a node for the Pod is explained. There are two steps before a destination node of a Pod is chosen. The first step is filtering all the nodes and the second is ranking the remaining nodes to find a best fit for the Pod. + +## Filtering the nodes + +The purpose of filtering the nodes is to filter out the nodes that do not meet certain requirements of the Pod. For example, if the free resource on a node (measured by the capacity minus the sum of the resource requests of all the Pods that already run on the node) is less than the Pod's required resource, the node should not be considered in the ranking phase so it is filtered out. Currently, there are several "predicates" implementing different filtering policies, including: + +- `NoDiskConflict`: Evaluate if a pod can fit due to the volumes it requests, and those that are already mounted. +- `PodFitsResources`: Check if the free resource (CPU and Memory) meets the requirement of the Pod. The free resource is measured by the capacity minus the sum of requests of all Pods on the node. To learn more about the resource QoS in Kubernetes, please check [QoS proposal](../proposals/resource-qos.html). +- `PodFitsHostPorts`: Check if any HostPort required by the Pod is already occupied on the node. +- `PodFitsHost`: Filter out all nodes except the one specified in the PodSpec's NodeName field. +- `PodSelectorMatches`: Check if the labels of the node match the labels specified in the Pod's `nodeSelector` field ([Here](../user-guide/node-selection/) is an example of how to use `nodeSelector` field). +- `CheckNodeLabelPresence`: Check if all the specified labels exist on a node or not, regardless of the value. + +The details of the above predicates can be found in [plugin/pkg/scheduler/algorithm/predicates/predicates.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithm/predicates/predicates.go). All predicates mentioned above can be used in combination to perform a sophisticated filtering policy. Kubernetes uses some, but not all, of these predicates by default. You can see which ones are used by default in [plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go). + +## Ranking the nodes + +The filtered nodes are considered suitable to host the Pod, and it is often that there are more than one nodes remaining. Kubernetes prioritizes the remaining nodes to find the "best" one for the Pod. The prioritization is performed by a set of priority functions. For each remaining node, a priority function gives a score which scales from 0-10 with 10 representing for "most preferred" and 0 for "least preferred". Each priority function is weighted by a positive number and the final score of each node is calculated by adding up all the weighted scores. For example, suppose there are two priority functions, `priorityFunc1` and `priorityFunc2` with weighting factors `weight1` and `weight2` respectively, the final score of some NodeA is: + + finalScoreNodeA = (weight1 * priorityFunc1) + (weight2 * priorityFunc2) + +After the scores of all nodes are calculated, the node with highest score is chosen as the host of the Pod. If there are more than one nodes with equal highest scores, a random one among them is chosen. + +Currently, Kubernetes scheduler provides some practical priority functions, including: + +- `LeastRequestedPriority`: The node is prioritized based on the fraction of the node that would be free if the new Pod were scheduled onto the node. (In other words, (capacity - sum of requests of all Pods already on the node - request of Pod that is being scheduled) / capacity). CPU and memory are equally weighted. The node with the highest free fraction is the most preferred. Note that this priority function has the effect of spreading Pods across the nodes with respect to resource consumption. +- `CalculateNodeLabelPriority`: Prefer nodes that have the specified label. +- `BalancedResourceAllocation`: This priority function tries to put the Pod on a node such that the CPU and Memory utilization rate is balanced after the Pod is deployed. +- `CalculateSpreadPriority`: Spread Pods by minimizing the number of Pods belonging to the same service on the same node. +- `CalculateAntiAffinityPriority`: Spread Pods by minimizing the number of Pods belonging to the same service on nodes with the same value for a particular label. + +The details of the above priority functions can be found in [plugin/pkg/scheduler/algorithm/priorities](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithm/priorities/). Kubernetes uses some, but not all, of these priority functions by default. You can see which ones are used by default in [plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go](http://releases.k8s.io/release-1.1/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go). Similar as predicates, you can combine the above priority functions and assign weight factors (positive number) to them as you want (check [scheduler.md](scheduler.html) for how to customize). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/scheduler_algorithm.md?pixel)]() + + diff --git a/v1.1/docs/devel/writing-a-getting-started-guide.md b/v1.1/docs/devel/writing-a-getting-started-guide.md new file mode 100644 index 0000000000000..497ae62cff152 --- /dev/null +++ b/v1.1/docs/devel/writing-a-getting-started-guide.md @@ -0,0 +1,118 @@ +--- +layout: docwithnav +title: "Writing a Getting Started Guide" +--- + + + + + +# Writing a Getting Started Guide + +This page gives some advice for anyone planning to write or update a Getting Started Guide for Kubernetes. +It also gives some guidelines which reviewers should follow when reviewing a pull request for a +guide. + +A Getting Started Guide is instructions on how to create a Kubernetes cluster on top of a particular +type(s) of infrastructure. Infrastructure includes: the IaaS provider for VMs; +the node OS; inter-node networking; and node Configuration Management system. +A guide refers to scripts, Configuration Management files, and/or binary assets such as RPMs. We call +the combination of all these things needed to run on a particular type of infrastructure a +**distro**. + +[The Matrix](../../docs/getting-started-guides/README.html) lists the distros. If there is already a guide +which is similar to the one you have planned, consider improving that one. + + +Distros fall into two categories: + - **versioned distros** are tested to work with a particular binary release of Kubernetes. These + come in a wide variety, reflecting a wide range of ideas and preferences in how to run a cluster. + - **development distros** are tested work with the latest Kubernetes source code. But, there are + relatively few of these and the bar is much higher for creating one. They must support + fully automated cluster creation, deletion, and upgrade. + +There are different guidelines for each. + +## Versioned Distro Guidelines + +These guidelines say *what* to do. See the Rationale section for *why*. + - Send us a PR. + - Put the instructions in `docs/getting-started-guides/...`. Scripts go there too. This helps devs easily + search for uses of flags by guides. + - We may ask that you host binary assets or large amounts of code in our `contrib` directory or on your + own repo. + - Add or update a row in [The Matrix](../../docs/getting-started-guides/README.html). + - State the binary version of Kubernetes that you tested clearly in your Guide doc. + - Setup a cluster and run the [conformance test](development.html#conformance-testing) against it, and report the + results in your PR. + - Versioned distros should typically not modify or add code in `cluster/`. That is just scripts for developer + distros. + - When a new major or minor release of Kubernetes comes out, we may also release a new + conformance test, and require a new conformance test run to earn a conformance checkmark. + +If you have a cluster partially working, but doing all the above steps seems like too much work, +we still want to hear from you. We suggest you write a blog post or a Gist, and we will link to it on our wiki page. +Just file an issue or chat us on [Slack](../troubleshooting.html#slack) and one of the committers will link to it from the wiki. + +## Development Distro Guidelines + +These guidelines say *what* to do. See the Rationale section for *why*. + - the main reason to add a new development distro is to support a new IaaS provider (VM and + network management). This means implementing a new `pkg/cloudprovider/providers/$IAAS_NAME`. + - Development distros should use Saltstack for Configuration Management. + - development distros need to support automated cluster creation, deletion, upgrading, etc. + This mean writing scripts in `cluster/$IAAS_NAME`. + - all commits to the tip of this repo need to not break any of the development distros + - the author of the change is responsible for making changes necessary on all the cloud-providers if the + change affects any of them, and reverting the change if it breaks any of the CIs. + - a development distro needs to have an organization which owns it. This organization needs to: + - Setting up and maintaining Continuous Integration that runs e2e frequently (multiple times per day) against the + Distro at head, and which notifies all devs of breakage. + - being reasonably available for questions and assisting with + refactoring and feature additions that affect code for their IaaS. + +## Rationale + + - We want people to create Kubernetes clusters with whatever IaaS, Node OS, + configuration management tools, and so on, which they are familiar with. The + guidelines for **versioned distros** are designed for flexibility. + - We want developers to be able to work without understanding all the permutations of + IaaS, NodeOS, and configuration management. The guidelines for **developer distros** are designed + for consistency. + - We want users to have a uniform experience with Kubernetes whenever they follow instructions anywhere + in our Github repository. So, we ask that versioned distros pass a **conformance test** to make sure + really work. + - We want to **limit the number of development distros** for several reasons. Developers should + only have to change a limited number of places to add a new feature. Also, since we will + gate commits on passing CI for all distros, and since end-to-end tests are typically somewhat + flaky, it would be highly likely for there to be false positives and CI backlogs with many CI pipelines. + - We do not require versioned distros to do **CI** for several reasons. It is a steep + learning curve to understand our automated testing scripts. And it is considerable effort + to fully automate setup and teardown of a cluster, which is needed for CI. And, not everyone + has the time and money to run CI. We do not want to + discourage people from writing and sharing guides because of this. + - Versioned distro authors are free to run their own CI and let us know if there is breakage, but we + will not include them as commit hooks -- there cannot be so many commit checks that it is impossible + to pass them all. + - We prefer a single Configuration Management tool for development distros. If there were more + than one, the core developers would have to learn multiple tools and update config in multiple + places. **Saltstack** happens to be the one we picked when we started the project. We + welcome versioned distros that use any tool; there are already examples of + CoreOS Fleet, Ansible, and others. + - You can still run code from head or your own branch + if you use another Configuration Management tool -- you just have to do some manual steps + during testing and deployment. + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/writing-a-getting-started-guide.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/README.md b/v1.1/docs/getting-started-guides/README.md new file mode 100644 index 0000000000000..6f66790888d4f --- /dev/null +++ b/v1.1/docs/getting-started-guides/README.md @@ -0,0 +1,215 @@ +--- +layout: docwithnav +title: "Creating a Kubernetes Cluster" +--- + + + + + +Creating a Kubernetes Cluster +---------------------------------------- + +Kubernetes can run on a range of platforms, from your laptop, to VMs on a cloud provider, to rack of +bare metal servers. The effort required to set up a cluster varies from running a single command to +crafting your own customized cluster. We'll guide you in picking a solution that fits for your needs. + +**Table of Contents** + + + - [Picking the Right Solution](#picking-the-right-solution) + - [Local-machine Solutions](#local-machine-solutions) + - [Hosted Solutions](#hosted-solutions) + - [Turn-key Cloud Solutions](#turn-key-cloud-solutions) + - [Custom Solutions](#custom-solutions) + - [Cloud](#cloud) + - [On-Premises VMs](#on-premises-vms) + - [Bare Metal](#bare-metal) + - [Integrations](#integrations) + - [Table of Solutions](#table-of-solutions) + + + + +## Picking the Right Solution + +If you just want to "kick the tires" on Kubernetes, we recommend the [local Docker-based](docker.html) solution. + +The local Docker-based solution is one of several [Local cluster](#local-machine-solutions) solutions +that are quick to set up, but are limited to running on one machine. + +When you are ready to scale up to more machines and higher availability, a [Hosted](#hosted-solutions) +solution is the easiest to create and maintain. + +[Turn-key cloud solutions](#turn-key-cloud-solutions) require only a few commands to create +and cover a wider range of cloud providers. + +[Custom solutions](#custom-solutions) require more effort to setup but cover and even +they vary from step-by-step instructions to general advice for setting up +a Kubernetes cluster from scratch. + +### Local-machine Solutions + +Local-machine solutions create a single cluster with one or more Kubernetes nodes on a single +physical machine. Setup is completely automated and doesn't require a cloud provider account. +But their size and availability is limited to that of a single machine. + +The local-machine solutions are: + +- [Local Docker-based](docker.html) (recommended starting point) +- [Vagrant](vagrant.html) (works on any platform with Vagrant: Linux, MacOS, or Windows.) +- [No-VM local cluster](locally.html) (Linux only) + + +### Hosted Solutions + +[Google Container Engine](https://cloud.google.com/container-engine) offers managed Kubernetes +clusters. + +### Turn-key Cloud Solutions + +These solutions allow you to create Kubernetes clusters on a range of Cloud IaaS providers with only a +few commands, and have active community support. + +- [GCE](gce.html) +- [AWS](aws.html) +- [Azure](coreos/azure/README.html) + +### Custom Solutions + +Kubernetes can run on a wide range of Cloud providers and bare-metal environments, and with many +base operating systems. + +If you can find a guide below that matches your needs, use it. It may be a little out of date, but +it will be easier than starting from scratch. If you do want to start from scratch because you +have special requirements or just because you want to understand what is underneath a Kubernetes +cluster, try the [Getting Started from Scratch](scratch.html) guide. + +If you are interested in supporting Kubernetes on a new platform, check out our [advice for +writing a new solution](../../docs/devel/writing-a-getting-started-guide.html). + +#### Cloud + +These solutions are combinations of cloud provider and OS not covered by the above solutions. + +- [AWS + coreos](coreos.html) +- [GCE + CoreOS](coreos.html) +- [AWS + Ubuntu](juju.html) +- [Joyent + Ubuntu](juju.html) +- [Rackspace + CoreOS](rackspace.html) + +#### On-Premises VMs + +- [Vagrant](coreos.html) (uses CoreOS and flannel) +- [CloudStack](cloudstack.html) (uses Ansible, CoreOS and flannel) +- [Vmware](vsphere.html) (uses Debian) +- [juju.md](juju.html) (uses Juju, Ubuntu and flannel) +- [Vmware](coreos.html) (uses CoreOS and flannel) +- [libvirt-coreos.md](libvirt-coreos.html) (uses CoreOS) +- [oVirt](ovirt.html) +- [libvirt](fedora/flannel_multi_node_cluster.html) (uses Fedora and flannel) +- [KVM](fedora/flannel_multi_node_cluster.html) (uses Fedora and flannel) + +#### Bare Metal + +- [Offline](coreos/bare_metal_offline.html) (no internet required. Uses CoreOS and Flannel) +- [fedora/fedora_ansible_config.md](fedora/fedora_ansible_config.html) +- [Fedora single node](fedora/fedora_manual_config.html) +- [Fedora multi node](fedora/flannel_multi_node_cluster.html) +- [Centos](centos/centos_manual_config.html) +- [Ubuntu](ubuntu.html) +- [Docker Multi Node](docker-multinode.html) + +#### Integrations + +These solutions provide integration with 3rd party schedulers, resource managers, and/or lower level platforms. + +- [Kubernetes on Mesos](mesos.html) + - Instructions specify GCE, but are generic enough to be adapted to most existing Mesos clusters +- [Kubernetes on DCOS](dcos.html) + - Community Edition DCOS uses AWS + - Enterprise Edition DCOS supports cloud hosting, on-premise VMs, and bare metal + +## Table of Solutions + +Here are all the solutions mentioned above in table form. + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +GKE | | | GCE | [docs](https://cloud.google.com/container-engine) | [✓][3] | Commercial +Vagrant | Saltstack | Fedora | flannel | [docs](vagrant.html) | [✓][2] | Project +GCE | Saltstack | Debian | GCE | [docs](gce.html) | [✓][1] | Project +Azure | CoreOS | CoreOS | Weave | [docs](coreos/azure/README.html) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin)) +Docker Single Node | custom | N/A | local | [docs](docker.html) | | Project ([@brendandburns](https://github.com/brendandburns)) +Docker Multi Node | Flannel | N/A | local | [docs](docker-multinode.html) | | Project ([@brendandburns](https://github.com/brendandburns)) +Bare-metal | Ansible | Fedora | flannel | [docs](fedora/fedora_ansible_config.html) | | Project +Digital Ocean | custom | Fedora | Calico | [docs](fedora/fedora-calico.html) | | Community (@djosborne) +Bare-metal | custom | Fedora | _none_ | [docs](fedora/fedora_manual_config.html) | | Project +Bare-metal | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.html) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +libvirt | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.html) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +KVM | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.html) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +Mesos/Docker | custom | Ubuntu | Docker | [docs](mesos-docker.html) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +Mesos/GCE | | | | [docs](mesos.html) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +DCOS | Marathon | CoreOS/Alpine | custom | [docs](dcos.html) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +AWS | CoreOS | CoreOS | flannel | [docs](coreos.html) | | Community +GCE | CoreOS | CoreOS | flannel | [docs](coreos.html) | | Community ([@pires](https://github.com/pires)) +Vagrant | CoreOS | CoreOS | flannel | [docs](coreos.html) | | Community ([@pires](https://github.com/pires), [@AntonioMeireles](https://github.com/AntonioMeireles)) +Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](coreos/bare_metal_offline.html) | | Community ([@jeffbean](https://github.com/jeffbean)) +Bare-metal | CoreOS | CoreOS | Calico | [docs](coreos/bare_metal_calico.html) | | Community ([@caseydavenport](https://github.com/caseydavenport)) +CloudStack | Ansible | CoreOS | flannel | [docs](cloudstack.html) | | Community ([@runseb](https://github.com/runseb)) +Vmware | | Debian | OVS | [docs](vsphere.html) | | Community ([@pietern](https://github.com/pietern)) +Bare-metal | custom | CentOS | _none_ | [docs](centos/centos_manual_config.html) | | Community ([@coolsvap](https://github.com/coolsvap)) +AWS | Juju | Ubuntu | flannel | [docs](juju.html) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +OpenStack/HPCloud | Juju | Ubuntu | flannel | [docs](juju.html) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +Joyent | Juju | Ubuntu | flannel | [docs](juju.html) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +AWS | Saltstack | Ubuntu | OVS | [docs](aws.html) | | Community ([@justinsb](https://github.com/justinsb)) +Bare-metal | custom | Ubuntu | Calico | [docs](ubuntu-calico.html) | | Community ([@djosborne](https://github.com/djosborne)) +Bare-metal | custom | Ubuntu | flannel | [docs](ubuntu.html) | | Community ([@resouer](https://github.com/resouer), [@WIZARD-CXY](https://github.com/WIZARD-CXY)) +Local | | | _none_ | [docs](locally.html) | | Community ([@preillyme](https://github.com/preillyme)) +libvirt/KVM | CoreOS | CoreOS | libvirt/KVM | [docs](libvirt-coreos.html) | | Community ([@lhuard1A](https://github.com/lhuard1A)) +oVirt | | | | [docs](ovirt.html) | | Community ([@simon3z](https://github.com/simon3z)) +Rackspace | CoreOS | CoreOS | flannel | [docs](rackspace.html) | | Community ([@doublerr](https://github.com/doublerr)) +any | any | any | any | [docs](scratch.html) | | Community ([@erictune](https://github.com/erictune)) + + +*Note*: The above table is ordered by version test/used in notes followed by support level. + +Definition of columns: + +- **IaaS Provider** is who/what provides the virtual or physical machines (nodes) that Kubernetes runs on. +- **OS** is the base operating system of the nodes. +- **Config. Mgmt** is the configuration management system that helps install and maintain Kubernetes software on the + nodes. +- **Networking** is what implements the [networking model](../../docs/admin/networking.html). Those with networking type + _none_ may not support more than one node, or may support multiple VM nodes only in the same physical node. +- **Conformance** indicates whether a cluster created with this configuration has passed the project's conformance + tests for supporting the API and base features of Kubernetes v1.0.0. +- Support Levels + - **Project**: Kubernetes Committers regularly use this configuration, so it usually works with the latest release + of Kubernetes. + - **Commercial**: A commercial offering with its own support arrangements. + - **Community**: Actively supported by community contributions. May not work with more recent releases of Kubernetes. + - **Inactive**: No active maintainer. Not recommended for first-time Kubernetes users, and may be deleted soon. +- **Notes** is relevant information such as the version of Kubernetes used. + + + + +[1]: https://gist.github.com/erictune/4cabc010906afbcc5061 + +[2]: https://gist.github.com/derekwaynecarr/505e56036cdf010bf6b6 + +[3]: https://gist.github.com/erictune/2f39b22f72565365e59b + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/README.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/all-lines.png b/v1.1/docs/getting-started-guides/all-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..7de0438af632ee64e1efbb4e857f69b902cd1f35 GIT binary patch literal 226552 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≥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

          #9~@#s#afj=TayG~ zAOMafzS8YmX$6FXzLz7jqO`PawB7PsHa80p3%MjG_?=9L@tUS`DsO9KgXPfuu8)u2a|?HWdb<3L8UjLG zAuYz;nl{#CsOcZ-);3kAr>EZ;qc!zb3mr`IDH?2!n|^!$UZ5YpHMBoVJax*AW{`G< z+J5D@afzdcZJWmV!YgA|ng9(a++HjpGV$6wBxJ&Pm@<+*Td#*bB0ZK?L7`|deGdq(>LOU$QG z(|5qPZC$QKtou6Rwre9-1W>&>XQ)R4KGI~#v` zA|9G@);j(*0jk=u)HUqD(SLq219x=%rf)BeA7sA&*-G~rSke2b-16)DWfc`S{rnh1 zr_H5)bED@EYB2T!pCUWScITp-!Q(`t%)~^qWv9KGHiVaq8!-YGkzBt%;$ewQc#0ns zY94AP^K~0t>mFT&3F*>1@jsn;XWPEcRc*o}?j@$2aA5(ZzZ#>Jqmb?N=9KY?umhj! zbi)K`cyg%+(j305YR!JZjJLapBN9+W2(E66yV5zFn0R%j8n5|m`%O}p!61%~BGqVa zc71h2);WvtrNgxP48tdOF8$UqAQ>5$_wMzSN6k#cnIRt5(DY$Ox~w1NBPn5{V{b+F z$+IaqpwhOS!k(tNd^6*$r zaL4iTC>;3I@3=OevfexXmV$S$o7r+&?Kr|YJotRAbdDIh%T2t!PW83FUb0=+reQNL z0O7iPMfBdSCev0Kg(|)x0Oie{9VQV4Pi&H6#+VdHB$k>P9GtvK`|C2Qn(~jMm`$mt zjJib);qfzX7n5fy3oae4mH4qCzw@}2PI$vwgpOQ;l?$pzddn_HfR$Js!Mr=-m$WB>xaPS2T>Nw0^D^pIC)Bl_Gsay?aLW$w7(ll2U7WLN4H zM$4S3I1+!`*oM6_0adW>bJ0ZO1F^9^`t%`Z6mD)|q6L|ow1UKCHNLglZrOy=6Bw7q z_Xtkkt5<<`o_btD)KB=N4i?(6K1f8VjS-+b=55}zcm1~?KSJP60K>nLMwx4= z1se+9W0B;~&Uz_%LfZL@?@HTCPh>FMk;lLH-qEoEt|j(TQ5EuXa+f-Zdu*lAgu66e zzXeeMYEe>+qBTsM3hyJYLczVrpwD;a3bVm#hRGC46R;y&W344N;O(Gp#-Y5}EI+zt zE8V?$*D6{_q@n&=&VkUi+8AJES-FwgK z3i-5f3Ra44J+5R<_9is!o?A=1D{RqZ1XU;@elFkk>|68oDZ`_aAMpd-t0koY6^y>HYaK$pVhBHJIZ>G~j2W}24Mra@5) zy9Vp#^b%p%!M1G(a5pojiqg+66(fxom=twTs=*O+Q=wz1`ftD-eU-_R{JgX4DZ()kKKb%%*AqV>WZ~~$Vj*~;5$7(0s?$_1`|En~ z#Ug`0tW^#n{1lWfv@_g2?XPoJyLg2^h3-~A0EHWBGP^jSk9utaD=Sr}E@0|8yvj^n&gGxY&Cr!w46C3c^pq_w$t>!ARJoV9w{myizFgR>y-{Pv zFhn3TD=SRBe^n2bI~)wR7X3Sy2{U3ZXw?oL!+SYd%7?{_p!>Y>x;iG9F|V4pj~wSK zs(Y~3s*uh%SSxr#m}VbO>eM$dI9=+&ZN+Y9DKbaHlrXpVt*DbY>N(vH+;ijEi*&SR z*drhSM2ML>W7e#gUArz{xKQ)6)lpLe|3R!3`y%s7mxBI%`s9GNIh>OX87f9wbb_HFd~>Tij7UvZdeWZP*hZE}xNXC%Wje3*D&FNAaWj zdPNj;3Kz>LIcZs;Nmzt5@+iP4&EB4t+zEP$28R4FiVii9jrA+61yP%ZhQK>Ao`6m} z>SH~4{(2lbEd-sqC$!{sX9KQf54g7poR;-!k6AvRj4aryY^~N)NK0mJQ_pl;~ z6B`i4&^(iRi>e33&Vg4wS8gk+EpTP}=lk~Ow#ji;r#MaFmZLg}Mer%=MNjY^Y-6>m6JQqZUDkv8u{DJ!#1pi3y zIDrOCSQl-RG7PLPq?7yFbJ066RRXH-xi!%q(J(izq0tNzIkpJ4t++T>T;kt`MUH+b zl}Cez*@9COg#`myxUbrml99x$Hizei!-p&CS$wO#zNwA*0;BtEYes%o*%c`R;Oq3s z4aWY}X5wMwz;62vxqP`ad6xF*;M5DlO6TPj%qqv_M9 z16VLPvpgwPtmBi5m)A@4QoTh6>sfth)Mdlz8nHN>amVc&2saB9j(h}x!D`SJxP6TY z>-0hQt*wz#92@Pcrn`*oa|;2{E+-efykZ&R0BTUb$-YlB!!eHEmAVs6&@x(341 zQPbXYTg8)Ey!Z`XbA~oD^f1!bfy&wh_XJOEa@;{Ahg^Qa6@9vGyU3L`Af!Ejn*lld z#+C*b78~Lvu!eQn124?LA04BO5+xKJdU8ej=$cVM^JBc3*3seH8q0KjL;;M z;{3D&2N#Fh>izop6E`!31IpE{M(Wjzz5o4WbV^`z-G2NAG)weJ`LTCv8ygziIQV($ zk;>HwBDeu$!=ri5NYz^=hq;Q6U8;C(- z`2mm!Ap;j|ms(y{Hut1WG7R%`qa}7?q+63-YR5sibEkZ)746fYgC&bebDi29Ya089 z%lTW{x*TXmXrk}v%@MQkz&W+V!<@O+59MmB>>T4$sj0G)rUvN=>nv2IV0ty$A`@z< zv10={vUu=(@NA(Ta$7MQ6wE*CC5G~u^J!1lKLYVP<&8+*`*qd9ee2UC+xBHya;4lh#GKVP2Ai*R(F7hBE{AU zXJ;1J!ZZ41HMYMGmU|_z{U{2DmcK*!9H3YRW^pCLJfh-WS(5 zj7qRMpPr7WVVja7#^Cz;ow0H7nL)Irut=Icd~u@?cRxK@ZKSKDqq%VDGCroMNsV}6 z;9BlXt)0Rl3i1x674o%mq~YP~tQTraj3v;;!WCXswRGryFdz`7dU}M6-2<^cD&0w6 ztn%fRn9V<215`PcFJ7S0gaYsb=M0=)TwcEBNuoL0I?(qo$hphc$uvos?}4VJE3$a; zSvVd(ex&rFzJMb~xkIM#Yn+bkL0%R$=^Z3apcP#0oF=-nk3}cPXI{Q6h#q+w5Qvz- zD4!p>8G;w1EU&Arl`!m!=?E$Xj~}urp-j$@T~#vr%_?*AFh~8VbJpN8>i<6esG<9P zYAwELJRl<_3kMY^rBB?irlzxJ&V<$-*6I0$cS`$CfCTG4 zW|14g1EioGgLK@>6kkY^ZT@_*cds}qD2?v8n%@ZT=IZoH(qh6PT^i^$vvJ08ioToC zrw_)~%hCPDJR<$Uc&KHy?Y`-QT0UnkrA0VX?LmHc+{RcdHy@t|%P+ck!ZCuTsQwYV zodTU}wdJL`4;o-}qzqtG*@*}nYD187hhR+xD!kR8@jBy%$k=Ot)s7>j@8jp z8*;zjscIfgs{JkyWcl58ddid^gOy~_6AaydHa&f2vRz*_H3qVPC;?RCyjZ#NEgS=6 zJ+B?&!p)G!wcN|gX~~k!&2{sXZllwa)f<&$J9f?IC(p*--7s+p6O?VAGZXp?MpTr6 zW=E*h2(vDB&H6|}{{+dv3}n=2H-;`*Ph-o|ZR$hDq$?QQiKqs={k6iX+OH zxeOfX*H6AFUra*!(&;1DEVa4R6yA*p6^l7>2Bq1$e`~28q$9F8#vklPEy`uhSR0u; zl8H78IH21ovwHRq&Kh_Mu7{Zn`T1s`2HHfLNQR9SfIDX@6;!8&VfO@{NIkq!tKTr{kt?ii%`@d}HT_?kJ^G z0T}?D>MARnKbM}wlLqWZ>B%Bgk!A}v@smS7#&n)X^()*ms49I7d_%5j9V~%EYz;R3 zxGnU?4MH>~tT#~E0GvYeH4nMAHy*KpqO9>6yfeg3<>f}ErX476@b-%Ry~cFA;;7xb zS%v&Azqwt*9coy%kQgU%=4 zGL|=kpaa#uf^;DT-238K-}{S%gDEb~j`y&^j>mR>Q;Mx`Mp6>QB1ATdk#6_p2;bjb z;4CR6RnW|0dz>&qXm7djPT1-J`#v}{GNbEiHkSZeugVQv266_AnQfXqm(d=8*+!== zk?JAe`?`!tGVGW9nHC*8b}^>3XjBVQPn|e~!rLtk;rV0cBqH2@b9J7rZI==d)^R?{ zjlP#QCPEvoUS0M%j1V2VE1o0m*YijB1Zfq&wW7S-Y|2N{tUZfbX6W>UgJInePIGC5 zM^sTQA9X7G=R*I72vS1up|rDJ&@PQy88)x{vojYNcR#BlGUyZZz}@F(eEaI{0Gtoq zDcc6p?6tmDkk(pSq91{1>umq|SWQ`oWEQ}%@}Z(S;+iA2N<&QI@+Ps$?CAjtUIX;U zTje8qrlCB;PB1ZC6JV{z3iJc6RQkZff=>n%~*FlvSY(VP=VCUm_LyvQlsiGuYFVQjJm< z?&21vK}0~Och_+>qap(A4BdFzg)|1tC1_~LDZx#%$1oV1c17BHRx=-i*{`J_MKSFK zf_wvP?aCqUUlX3Mv2n%g*TMWe=Zr4a@^v?olZDWtnD@Jp*!LPr5b?%8y0SGqc#u;1 zx!{uzs3cGnN|*Kq1;_{(dOm@g=^v!Pg-e$x%+A-ZpEVe5I2Wj>U_(%lkjA+2JgqJM zO*7B17+aAnh%WEsVgJQ6ZZuu_Y;C4YaYrQK#e;Za=)lqIXe_;E&WuJ9u-y_lCerUS zMei<;Pv~~}xe$JEb$6!;GdAfowso2PeKN2%8iA9ShJ$1IYcfpq4xK~HDyf^R-=ZMC zhW&2cy3y+4rGTkdoz92SAQE1tD%}dHlJ;ZCd_83ZDWSE;C?J;P*{ytgy)QNeQ8bAR zVD4jOcpF#A>c#3ai>RV7$6+HzJohj%{@d2Mylz>3c(IFm5u0lg)+3@yl$DJFYHqUv z0`HzyjeEO1Kiq0qaaPdR-Fz+{1<^+;*k1-2_?F!^knd3LW?V=Y0Gnm%#b=Jk49EKm& zDAXx+ZEAQod5_ed)|;?Fv}K?fm_v<>_GOH(7c=s?v83wcwC)Wp^Bf$|WOh@yTYUtR zLKJtn9=H~w@z6=r81hWA*^C;4p4$oJz_Zq6@G1Wcp|oOuxvfO{z>R|}^XS+TI<=^% zP))nBuDxm$-i4!i<+tAZuu7Cu@az_INg4*`dncVa^BK4flHWyj!h~zwHPk)fDueb< zHxI|-{^8T7Y15_^Dz?sLu7VJH9T5R4?O|>%<}r?FjT3qT_2s`Xa9_1vbzEuaqPrrZ zf-aF$wl|uqjG~rWz(4Xd30(a5*n=NI^$SWY=aj?t3vHUVcJ-!pYu9dCv13sB^pRwm zPnC}Zp6K@?j}igmx$4ZEfdhSKW9FxsMGbZ5&LH|aE)?w;`b?&qRGh7-+PiDKwzezM zu*?B+reVRp3@M5HqAo5sRx5w;D8IK8PhJ|xS@@O&2pZ`vU3*1e=%nob4m`#WI@;=g zO82PYy#P7|in#n2;+Y0dJ&gEdji0J%joa#|e{B5Pp?!R$NNMIUON9*rhdO;5#XjO5F!`?{$eN22~#Nq#^Boe5uNQVc>|7|&b=L;y%d4)1>DhWz{9FujXlI8 z+nkQJ?=ewcQkR#tt*?zinZcFYtHB6TG9 z#^ywwQ2h}p##WKt=g8%Mdl&R-^1Dx>);?X@{OX2xO}ge4qW$CO*7}@tM*SmQ(6hud z7n6oGBzU$%1pP?#<=~Fp;*EM!7o4pRlG)Ss$H27aAQOdBr>o^2pQf9HhQ9vW|5MZK z#w9%*o%8ExrqEqE*QBQXGBR}TYb`fcK}vkZ6`iWr_F~U}4$Q23xhJU0@008AJ~IE? znzL5QF~ntdlgycck@I{5iUM8}`*z@1>ZUnj+aPLg)qO)j>zqQx>@TXBbgeEhMAJs` za&Tuv#hLVUI*ZQw1W)a34{5Mo=YB+nxBI`8Q13onNpe!!r5>-(y>klueLd>F0!SM4|2Sql?-O-KUu*W_*|;fz8Q zvYt$3$ug{Jch|06b*u%X;PVp~DtEocz65<9+O_2T?j1Xt8XHG$dafnjI7TR8vm6(t zy!p&aGL_ahSgFlc;|8j#8qh81{M;v+A@W*BjS4#ZIPBGmP8-^})IYGO%|{E(zU=MJ zG1b40?*2Woh-L$;(VR;IlC~>`@rEg>!&=%>cZ;QsZ_ZQ?kWR-$!{2kNx@-(rcT^}O zXGKebT$=y)YlZ)JJ1;IozeH_?=dFP2n^UrG4H>@Y>+8?Qgdg>PzbYz3@yGriD&5|k z`Cu8nUR)+sRUr}p(5l(bRk`<}8`X(7{)`*g<$rwx-`*HoCR!+4B@4q%T%(_0Zk++Ke`(HYm6Nhj4U%y=V3A>N%9waXR-|ryo zOb@sG|Nix6!R4~i9nU*9;nZ$wV$+rU9BUHBk-v=oCwwCAl zq6gbXJNF$NFh*5jz@>@*^@#Z(6vFbyPCXm;!|&Ia@%xni`?WOA3H$%OLsKtPpWyk6 zQ|Gq#xnHsMzkXR`XV~tN(5*gp|NS;)2byY2IG8;3(~3Yz@V~y}cHXg&x1o1Lpv~ws z6@(e+7xZ`aJ04Rk)3LL5Y@ulEuDQyCl;ygL5Be!Qk=rsd>Vrj!E}gIM4Gx)YY#Mi0 zTZu)YV_h@0qhs5#fqg5h6AgSFTNK;qav_IKh8V(P{2gw7AG zTOTqvKS2F#SnU;uG-hVEnC+mt$2O%Si@e+}!y#{YUEiWcr`J}C{7xo**}YAA1M0~= zIt#AJWc|)6wY|P#NJI0>SFY2Sbq*GND2;#W7_M12GSDh6xTAdoc{v+*OxqKtxz9}c z=HoYBVs4uAU&{>ruq@Q&5KBJ6W}C|)q(@%aiUwH$>M5R1U;zr!2i%jcbRR#$EK%Y? z@qlyta(erURN=7ooydPDR$XcF*-{Vu7yjx@z!As=kq)m1<2tmeMxe0Ml&@ z3!0o#7B*G#PN~u28~Y;T!a@qaF0Z*Raj;_HnOo00bBv5u0d%(KO?r~Qsh>ijy@LZ4 z(|@96@aY~=m@=oql<6LM&#$S86rXFfHYfcE4eXbxsUusnNqR8<>e?C6UG`Js?207w zz?9;SjSl*b^A6s8-2ZKA_!z5&iTj-HzO9<8DB0yk0to`Pw$2z${wm!HSd?l{wonrd z4}3)@E?7>;@}$W!FcyJVB+XBqJ`I~cmd5(QIGzq>XNP4$Sp_EiKjz~S^a z4Gsj$B#7_Q<;yG0TBj;mLO2umz)v;=h@+6kJgA8{SEpy=d9ewLY0?PswI7qb29#rSPn_;Y# z{qrxqk2yh4I5-?Aa7K=Nt7Bu(odET7E(=Bv8&>lA^>vL4M^5P3jF5>o5?d+h0D-b^ zA3~S%Y+1dn?k^zW01x7H(z-9xV+PKIfdeO>L}OD~?)kpqcwo%&>%R6~+QVCJ6fAcB zdodysmIdk0p3N3XPd?X+CZgiUpbTkD?_4Ui=r}=}3@Ii}&R*`!!uFu1>=C$K=o*lq zgO&uuUDQC5ibw;eZ5o;ifZUhlpdodJLzK8#I(8S5;)fV>5#LZ%qSv}gQ^2L@Znz*} zdf4Wc_=EG;Zq>O5MDp$!P zOc*cYCciw~wEOG^K4BVJ+HMrvKjyW0@rs-*IV7$Su7R{2A|IslX4`j$bUvqhi0t20 zJPgUc6gV6J6qr-xm4Icuaw@Wzk1y8mGTU(iZX%1ai$0Kq3ZoW(Mlw?Vf(r-mv83A5 z*e_pjc~<;r#R*ciV{gLf0#6G0hq}7UDd+j@sM;3|(X1kr1|&EjAZw99NW8*KD!oUK zNZ2Bj%h#~M_h&bKrx-Wq#n+V2lFxBCHkN~d<}GG@mkq?fi1T++yzSwz$BEK>Lw&RAm=>;tbhEq%)9?c6jFRjtL_=CPmZ+ zPMLBCFc18le*~2L{Qdiq6fGxvd$*MeWw*C*Zk+IcaE*1E(q$i{gj2-K! z9c$FGP`~H)OHRI60`;eXh7Z}{RjKWGfS9Eb`uc=`qG3ZgGko~N;-Gnsj>5r^nVAVQ z1{H`%ShblV88%n=*>pZ77jUF8s0W{Mgt<+e8{7;{P_9Av_R9PB>*#FI0{y7+lQaj( zCrNnz!7Tj}d|Ift{`nfJ94!P4-_s?m?dWMw=+M9SvVzK!uqAP6Ug17qWPDP_p3VJZkEvo$za*rm&-8Z?45Y`;;w5}@0&C*i$LDSd!Q!8%D* zUi}9AD~riOc>X>&2c=Ipp_3fH@wZP<(D>^s*BVc+8M_%^klYrQVqXG2$WB{l@Fn)PekjnN-R zM*GScC+VF9{9*>5iOFK^*ekiYSW+__gkjQi$Ey?tY_-V3@B}|L**}Ji9g2P=E%N`i z&-3h0?{+h|^}>?#On5#DGy>Sz+6QoOEBd5u+km4;De{BVdmWN>c1jzvjspEC7u8v1 zFtx9UHdQ;k#MfdtL#!FhLHjvEFaEOj1%JKH?3oe)q1ldWNn4cus;_a+B~R+r-JF z#hn1C^L>3KYumPI-xg1gbA$FIT;K)A&H;A;=yYlA$kgxGqsKcO%(b<17yCw>^~!#U z!hp2h9Vd{fpg*n9oYHSU!g<_yw_QgTig>P5r5)mQVAT#MB$zg``>V6H?=JZ9OMoh+V@ZMj-!+R2Ey!MMDcA&83^q)GSq;jEa1 z4^N7lqk8yf~vF zvbNq1TH)+mjfZAjf#O9W@|W~NTSrH|p4$=U10Y!n^2Vid{s+HdM>|>SKfq97l*=ti zKR>@c#hT9$>VL1wJAUX;C81fgh|lJ|WWrtl{+sX$@WjA)h}_^}CEPJC{*8G$P`5Dj z5Qos+yQg`T7}-+G>Y_B+tUH8!i`>;r;^w44*eoY0-ZAsu1s^ytAzwi{g6suKmZJ#? zt*du)ErQ(PBP2QI{VG8a2_qiu^awb5Jv0hk{VZTHqr@_p@cg0nI218vaQzA&Yfe;)^I< z+OylPTBBK{G+}R-{N8=8#&uKa2p7;882_}gxX3g|6AkrUwcH+%itv_CawN^^^>AJA z_O4vJ_I$10vy*B%));O#fB~_*g{i^RdK3@DqF&&cP`VsC(cDuq_W1F<0=;&+cbpD_aJ62&SRPx1OhZ0)o))F! zKeP*PJx7ZD^9NZ)9hDeH)TFt=K{9j1j@^V(g(pMxa2gPv@!rW!^e-2wt#N+t(UysZwg$ zk~f-|8p1%oA+jaR%5mcY1`l~v)KQh;FCl4p>zvhZSExwOEvA-)^}C24H^(}ZX>2rtZif`1xpb}^u^I(^xxuA|A*Z_VkyD9}e^zlu<59j2pkCBL;wA@+GAus*6 zL2p?}TU3 z%}P!(3?w9)ltKZp7%d6>i6a1!c$fK>6diQv9RFV&WFuWjBMxM1QTU=I6^M7xNOY|J z>(+I&%}3 zy?5TBV&>B~3fLID)_d`{`OgAhOz>;EET6B65+e(aVGKpG%GPX~DdiR4?&V2@DEED{ z#eD&K2MRT+2PchR6VecglcLTw72jk#GsHhwHaw81LbjKrxH%L@f!1nP4lg)7IzM0{ zyywV~r4Jq`j9$dpBI|X`Y;JC850O+aVh|b}7^DPb^eE(q6k}k|)~WWJe?A=JQ}Ha6 zPjSn(ZEdZs49CzhFjz_7fzU>nac!$-lw6i5sH#ROEJGrFp5nosXpfwnG3y@+gDKfj zD0m^rSFD)-{PG^1zT_tJ@ClcOCVA;B`ug@p8;2{0i{K?o-^V~Gj#zYa=ww2PQwpMYA{wKG0>MnKbIpvgHd^K9B+_xYxY_bKMNv!@?+1~3p(9oxo8c_J? zQ8(T0VP;C43ZQ!6!+ee{2y*x+Uy-svhxMhxOqI|z#{&!wT!I9pUM+uEtQECA-5U|A znA*;8$yd7U&0+SQb7>gK0VcSsce1oU$V?lDWk6ws=taK zv*X^gOmU!IVvD&HM!Kj9CIH-y*m;$dzg_ zG?uc*X~6>Q2rK9&{I2zW^h(kGMsKH#-;+999}89KrsBn?pVvcOlOXIz5Hhut)6|w% zOC%4t57{AP3-ZCagi-fRbSvHidOzE=RWfad(~hVp)se2ZIfon%0JAe~K=^)oKtZ?t zW8?vMJ{gFQJX+3Fd;I6(5a;2VSlR78a3;HC2GDa#$v?XR__?ldL@)Cg@ znH{cKjF^Vv1|e3uuI{{Z+bmVh2QGfP<&sB;cD0Ht_b^JVa8|wBRb`LQ(HDI}btjA; zzbeRBp_;6jn5jUmT+5b9Tjo^v+f|F@W9WW{=)qkf>*!;ve5ctT**U=!IXUPhNdo%) z`#1FE61@ZNgfsDnyqy0eSkU1somp8v_^3;o#;c`f(ss&&RCd0L@h(5pqf=Z-7P(u^ zPGBg{Bj9bBG4faCqcxrLKd5w@`culP_l+eZ(oX!9f(IlZ&PDaR_-DP9lHu}_8Y3U% zHB?vE190l@rB`>Ecdm!hrr=Ha4|c$v}j!U-gycI4~J9oRTtljC3_=Rs6Aw z)1eOM`U}~TsqYO|Rj4pA#5i)&bJKy>d#M+>*hn6XC!>wyB**^zbH;uP5e__;LJ^u! zQe==4AxpLGz;!_x%$EI2etm)EB#H+ros0z+r6c!j7up9jU7tei=1*%w9fouTQwSaOcCFKL#QDZn$5en(h5-Po2v&iMA-F&~Vmk$>^+DcK7VB z`QLk;oRoFe-&?&1(wI|q)D;O?ahruTePmvyIAur=UqIQqO>Im}fxD7~t4Ni8D<^eF z#*PJP>FMS5%>WRS#s&Pr?XhREs*2Op@P0)BG~Kp(W9P@kHg?;A{#;4ay(~I*cGp7D zIW6Q+;<>ZFtUf2<(kWVTSo-IHkT>G}DI*QpYIO@A=FVffCBre(D#GPY1TFJCA}EQ^ z%rXvANX&ZjNy*^0$DcD_aZB^C+IX;Z(J0V zbP;7SXa<(i4f^{2YqVUYrVvS&9Q^0adT@$UdS@vu$(PS%f(`^&LgvL3tVM_|0bk8ip!A$Y zn7q04d>C`WBqCltuBbv<4nbX|KxdOaULx(>!Zj``9#2oPe|4>&R#eQ(aOgK~&%0xO zuYBch)gkHN#A0%r*q7&&W&9sG<%Oe?^@a`^@&&AhW?MB9_0FThLbA1$wRQ7MMsGvGBEuBwRz4{)Eu8vlz zasqG_Z<(vAKV!_3XY~0zjI=-i6o2^)LA9r&qwjPnDx}w*cPNUH;SzuOkgS=RMo|*_ zB`;sRSo`HEDQocb?CT#tW|yt8w3O8U4J5M`qbHX?r|sBrX^nQErDKqa)bVQBItsV;LwSB)H7z4SXvzY*LTrx^t<81{Te=U1WI($Gid7aAJcJ$A(o%_ut9 z$;xMWKev0Xicl(Q6dvA-3(1#A0={lPl&D@|wvtPLMxQ<@&+B=8)myVKUyeK_m*JEx z?mj!Mg5F#0^1jWDclxkkVWBr-;Ioc1Jp7do$kx@u;udWb1`PAkwd>a(H}bTj(rMk8 zmE-#g=0Wn_b+UbK{`>t3gppH*qGHJvf3XAoFjq2vfMtRA=>ENXp!b4jearK(tZZb7 zd=B8Qc%O#5N zLFqtAa0yt<@UNSi-h>p#G^=43cuhYa#`*$L3Of2!)KA6AjR2Vyto(ErIBwq$E9sWXipJ zg(LUH(Lp_}c^Ox}bY0U%v5ReyHjS4s#^>1dZrq5;b`XGRY4sc+xuTE*?qpTbFaij3 zk+U&#$7CS{0-9Rne&9coS!DWc=Rd>^>_ppz7A8}6>+jK?Pj5ebI9yvh+~p9jn!VBQ zCf+kmQ~PAQSRGH)SM(cT2K!!B+`f=*KlEGaNtySn>PQ5ryx5{BwqQNiD%qD1CeH^h zRV}&jKRPUevG}#vUuwrNP?&K0nTJH=xP>W5W<*X97hf_66(e~D{a+l8T3wSii0I)`AO;d0qG)SV$2FN!KgGr%7Co_d0}EQ7nuaqNEV7Fb+nvJ zOB+^x%0_omxF$AeHuc8lI;oYJfGj-oFI4GF+?xEgc%|dpl29Dp%=yt#s8wnIv2?Ki z_b~VV3L~BMwr&**$#aQNF1q35IM1gYR5*#Lh3MqaX?(@@GIrOi7cZnFB?(-gHf2iK z73ylmnP(aXyXi46D|PBgE$gSm9{=indFV^+Ns~Hxl%xpoq8V$=-;aJ~Q6|`Kj~}0{ zv}LAlJDr{%SEq-_uJY@%9(wb-ZIhL{Spt9iO?4 zTz=nPJQf{mM2-N;j^hr+$FD9~)u2o@K4#dk87E6apE0~~42R;Q?u(q9{?aDk%k_u? zPbANQmsWMyMXsn301Pc#c%Nj<^ydYUJtHtUm=Cx!tW(pr*T=7bfMIKxbocIBo8y6) z9Xnubj5+tSvk5q4bf#<8Smy4?OG>4#Aw)LAVTRHcGtJLWlXsR*fSKXs;SG23P13th z&J*H|o*Jb_{ZVI|s`E2oIhdh5yNI`TTS_8&FIB~@XQDVAlZg{qOk@A;b~(gFWp=3%!?&r~&x<7yYx(+MglrehKTtUuCmrVgNQUPr}vPWu6 zp~3(I7)ke{%?d@Cg~!i1sUKr6DLn~{!>}dkVS#O*Vv#QdorVra<3wgKioyjB4$n0E zhIb5LlJnG)sefLF)wU3uwT%&~+zvjz!vEgL9)y5p$48Wy z7#pu8AdBM>xC6k5>bZxkBs>&aJerN8I>!mqf6!m3Bub+#lx|}Q=L&O3BMV~G1-ZlF z1H;c=+Q2}ecL{$|M|qWB6h$jXQl7^ z5!-j~UdkMLimKHgqd6pA<(&VrLv2>s(Y$Tm;Y-fr$Jz2wA3765vgxVQw?q#L3r|u; zadwB7udTjoWo>;JQfuneyWn&@$KywjUI)>lyyFhpaa`+jLPK)jvF%zt6^j~KDlaQ5 zA=huc!G?^3YSo|bi){?%C|6u?FKK9KfSXn*r1?LN?^;FWGAXKXy75=y+!m-@o+z5P z;R+YY)H0(_&yA(ji*jWbgqiID4L)?}GobkUfDI{5q!8n%>tMzloHrxvzGDc@T=Kzy z90KZHN*nNh4kYLu^^vYyN;S@{zkEb9ij*ffnlht=*w`!vlbn<{t3s&-&5TtFxR{Oi z`XMb|FbQPDL}HQ63+d#aIvDYYbnnN5yuvqPx@s$}yB;qr-ZmuKQN zs7lxLN6<&0|4VMDmFu;v<1k`FE{(4`Ww&wGmHAzQSE2EeG-uhaer%OeR%)aepe^e0 z>eVYmnyP6p|2j|KRy+1seEc=cWbARIuslZ4XA;@`mr0aw$58U%_@qv7;r5nUpZ#h6 zI2uqK%AGicftiou2Gt=N-h{MBL>o0bM^yKrkm=PctfH&xTL2lEyq9~lCg+cq>6DtM z*c6Ld!O`F#qI+CUtAlRbJay_e1#w!%qr;;T}KVGr=J$gxwiHR&Y46dJ}B|R zOg?*|oB`W}Q{igd5giTKZK~666YV_2E0s|SSzpw{WH3^I2Dg37p^d;{ATzeG1NArz zgMdeprU7FQcybJgjuYUvYXGPMpFC(0EsF_?Vy4P)$d`O*;ywl976wkSmisHr88$5K zct}TIwT?IIs~Y>s=lAqPssU<1GtV{>%E7WDhh0<$4^E-3m^_5;=5FAz%~95ZZwC-U zx|{kLTRo5xtpaVg0qACBWo12{r5|Pn8%G9n#AJ0>;l-N7fSX-$3=$M#0Xc%ce*1Qf zSlWL5+7OZ;=UaVFH(XOQdk?oe1v3Q%VRgO1x$p>(j)yve*Yf4d297_EBM}i1d3ho1 z1~Pyp^9fXzk(M4memtY5tp3NTqr09YBXAgEFm5Srl}#5gtYY%C2eehix+;oGN-8o4 z#=;v3;bW;^L-yZ?GqId9#hB6nCK;ru`^_~IB>#^V;F2CbKh&|j-H*rmSH6KC;)&<4 zA1Ax@78O1C&|7B_#|jSK_uy85x#|RL;1Gf?qQ3wkpKot(#KjC?Bt#E@7=w+HflH-> z!ub%^)_oRbmku6$PT~2k)Q?j0Zj#bLJXWWNA)9LdnCL_iE5I@IY#ka5WcA=H=b*jLw6DhdMB zr@tE=!^8qK90a?byu0~mc~R&c2j42N1YrW0Y1`LPv;c>KX6-I?^}at}%KH(;U4uW@ z_>*WYIq64tB&RKn89FECPkJw<7m|I)08s+2iWE+IjwcBj$MwO35t9cJvzAhZnGADW zRBFN5OPA=ToK=^5dNTG+gXO~M1mFv48K=Xf6@*akJ5CU5%lL^cfjYXnLfH+6aQ-<$ z8}3JDZqa^#Xfo*NJOoRR|bCl@=lOcGL zY(Iba;J$qMZ;DhlUrS31?f|l7_*lrZECSBcS1G!E8yK;>P86zmwnE}EFnOT3B?}e^ z8Ur%*iFk#lV#6!qZL66}+s(5AGrNA{2KHtA_jL2SYT5fg9*Cp@W>V-ev*#mIk_p@wbOg){g>Hp$&aZ8e8zn_saV;#m z5yZrmy%VgWPJe;Bx}~64J5*nvsmr?t6v+R(a!EKXBDx+lV;*h0uI*R9<^LJo&u7Yj~Hca?Wqsv2hbdlw9Dz zdi(Y*7Z!~v4S|HzRbqI8SJ-@eVzk)7;UnW-92OsNr?MfF8w|4W1E{7bqK>zD z;`3v2hTPUKp;^rz8P#mMtRo@0T)a@kT2QJGKW_HAk=iLOZJLht>EvX_FoZD8*WX{O z(*ad9D#2pofBx%jyHZmz)_ac9m??AEFZO!Ms*%m#ULACQfse*w6ck+<85Y>vd+1Cu zaznhpTjpg;)vv})D4fWwZHgF1-F2UMB744c$VQ7UdO3Ur!Y-~ZTUVj#V!9H2FcN*2 zdGV#oA0JC#(VqNf?(QE+N5p&r8{=_vt$T z&|&x$ghg~2^;)smM5LYj|}N(XF)9FizUMa&vHS*JCoXzxh^c8T1Io2>#29H z#+=PA+Hrz%9WN4>((27-HORXj*I*n|my7~ztHnqVS(cTH z>NDs&ZktY!Bc*vbIZ!x2gCW}CKBk$HDS8P;-x?t$UVspW!g@4?FrQ!8obJ242(jWi zf<)n;#QwOzK!_BGDG?}^PY(`XbiE@?<(-`V8W7nb!%6Dl~At_^NY|A{1 z1Q3w@%xrX+7U)*05>6D7*{COP8*i)1&$&^e6i7J*Jx41r&hX_O;Z-rEc%Un}1Tnn6>Sfwhz1k5hmuga7e9TO+28@=K+vvu|# zJUH2;VAf6-)%Qj3$L#5B+qUz_`Nk>E3!X8jv1uphgc0*>Si#jIU0Ly6&Nb)M$$*Y@ z5sauicGMgjGIKni6n8N$1}NEkj~@?!FJ^3|knUTApM9u_LgBg}Z(+LX2}ocrkn+t5 zC|Zf`))>F0xT@;-tD`ILcflvM&E51&QS)cTo4IHIhP0MdfhFuFs}3reHxb}o5Ia5i zpRMj*UNF(buPQ4KIm+w_W3N$x&zwD*Sk!i475aXc)Lrv^_oinxRomjD3Ui!)?v}F) z`8q4%61SY~Avwp+u8C7dMpBYWo$)!Jne+H5PQ2H=qCAIfuZI6WWW9M@k89iZO{J2M zB1s5I2&E#S6rvQFDitcBL6l($(L_laluSt_NtB{VhLj|kDN4~GjfBjZdcWto-s|~1 z_jCK_TGvAB_dCzy*oST3wr!7zi0BqvTDRF>8A=5tC#0T70}KT9*6ZmPs3u`>&?Nn$ z_*Hg2bJ+RH6_J%otj9xMtsMEhPGWqAUxEji;XWnAKm%sqx#x5#J^$xeU0nqc3%oX% zBZG|50otovEzEs-191$jNrUoxTFNnIpM77&7j zA6oMQ#TdKiaU`&)qRec;U1;f8rvIEewf#T&U@%+zLhPZ!qB>V9!Rr`*H1fJcPaW8X zNR^bYh;4G+@~*N2=^X(T2M&a~&S>-!6IU--@KETKv|Vl{`67$0zf?^=ZrgH&13mNQ zRb(2Wq1XQt7U7vNz9V7u7N13J1;Ldm(;hbrtK#Ob3A!;OMzu%-lGD$3nU83D#fJY*F{4k zqL+r4Lg0(5+tTeONR(6}EC=}B3LGnB#C+MZUOyQ<@)u0YzA#H#GGk@W>51@N@K3zU zQzIa)ad&?(Bx0`2Eh-6~xv)rrVxOaiOE3~jVLy9DZN>ug3m4_+f1mO)+v4EZ0ZtsY z6Ax~4JNdJ5AA~jN8G_9?%tjJZ=?59zS+NE~%Cz0LEG?cEBRYIA@R7z@M#;iTguQ`* zq_iU&|439nV0y(i62o76eZZZbxw4Or_gk1Zf6-FfCuTjppGSqyo#?-G8g-Esvd

          |233n1z|>GVau307RYr4Zoi66;J^hjQUqEz!VzF%h{%_vDpU___VSZX#+HfyW zdE4d7Jr~S<+yS&k7G#8*Y<5h(cc98}*r#VtVR;=U2x;UZ4L<$qX zt7Ftywe>Pdh0n_F-jyb=#^~w6;Np3!dw|Fj_*?Vv8}%TB1j7N z-B1^*B`j01-0gc&w@{qsLejF=6BCu(*1Pi7@N&iUyN94S^1j(Rv2^81VV?qDo87Sk zPrN4N5Czln_0g(A)a)*ypnEg)R=+pz&To$U+g@JlyVt=Q{F&=T54~0I6%6FJ@812+ ziN4lar@LY8T2;2GH%Psbx|@X5DR{P>YDHj=FZaMhXrahN@WM8ER_TTfp1N^(iNn?k zzm@3>+;s2j5myt@xT_F1&3-|3}vV7opy_0}FHI|?TNtUA1Q?6~=bEQU)2eW|g`9^5|}1b8JRjE1wk zJn>RvdwcKAviB}|c*(zU-m-aflxfll30dDSwmN;rw)Bov=^0L@6RWI1)zK7Ey z%6tww<5$aq;g@Kl;E+u{G52AddQbnB7n#i*F0Q4%P@4}dJbQG;&VOjzls`Wt06nMo zq@lu;q3rwni|TH;tq_a|sobO9O1cq0J_Pt>oE!dyE5e{}2skv+0!;OFpC19mr{}3K zIrH4K$<*AOt*dX`G|rS8o`1HfG$7%va;M~!(S=Qxf9tx7${XAbH1IR5y*X~}4s#hL zaNE5elkX&a`#$<;fW6#%vBjxl&%C;QTXo{Z@HNW=3N0)x#TN~=`>L!tcf~#b&VBQJ z|Aaf0@dPNlw=7#cuksP;(dN~0yXDKNZ+g>#v>i;2zyAkf_s7w>g?IbA9#lBvcAF6g zdJ`2{_uBl}xWD2#{~W(mg8W2@`j?`VBdGDG@XMlx;xo>=GH%@-j+Tqk?C?7vCZkXM z41so^QRZ_BiPx*vT{idAva|<%gLQ)9MY;b{3#hk z{WhLwtfFJ>s(c7aOCbf7*WcfHPonMHT&uELX>Ei~WLIDHS|xioH(P_P`!@b?vmP|B z4404Zd>YGCYfpGnKLDI@UVBHq!#lG3EAvqEcK(bN%I0OzG3%0-mYnOe3Cd-H1%Dzc zQ{T6$uBAotMI+$nbOz(}R_;~W^Tv2JKOA!BeDSNew`Lj@vdbifJWnaj*mO+CP5$@t z(TmngW$3Wh>;qGOB8zh4yvTRh^ziizt@bRN@qK>i278!d8?+{+iX1qdMKXxFH$3oO zNlB1a=d$D-*F?Jf@{_d=XoZ!JoVdGPA+%sewNK|mue0NA2Rx*PVP%1}x<31FE9Tp) z@pICn`tARh2FLd)j2q_MWA>u{N=B?#6YTgEik||dC4L@3VWhk)thJX6gFne!u?8zx z^R$MryBwCYp;aJ5x5;f|B+hzXhAx8w{W?mgjA82pYNC&R+!_~`;D*a~6NYK6m9`eA zk-tvfhWJ7WQLpz!_%aDzp`Yq^ej3wr2`_yU0>N(i_XyMKwAo4Ta7!oG8j zBXpHL0#r&dO~te?U#WY{$aUcXQ{=>wo_rAvR*>}9_4#}4VC1bvPY(}|764I@HKm#Z z%VKS+Xg-)DN*7^p29##`XZ<4Uu30}u#{KHJ!*t`ZGZ z{Wkp*dL7W`uZ#`Q)sDE@S8VdEF=B?mi_q$`cdT~!%5LY@bLugCaq?2JMk?A4I@{Dm zM;sNz|H%OQ`B_vvxMJ{~-PvgSpegqS_@z9q^fAymnk6jXVtWpVI(gEvVw%hGzbM0? z)*n45dgFk!H5pgz)xeStxS++iZn48bE&8tBklfiax3E!Ao-1x}(!cM$OK2%>dtM_> z(_8<69uL$`TVfJPh+LVoemTv3Me6dAQKb-9g=!5CBv_LQgVKkaRm_VDm|BCW!_=wA zdfBd45MQuY;$mQf?uo#MU8jr^WI~EPj?0=YGA_Aj*fdeDEM57)JexF} z?G7&i6nRvn3WZ?X`}Yqwj&ZiA8|$0Bi<*^oX`a=P?#E7^oN#d7^cgegEb9(3XlL>U zeeuqgtHUp!(Wn`D@4*9|#XD=hnNcxhXQOrMKy}10;6r=+gCs+TQ(OSIHrn{_XmXi|pki9QU?)#<(_x|(8k9CtYD=HruZw(y0sc&rcn>9;^ zS*S8G%BNPxbN=DZr6adI>u&mC{h39@RHHD@4Y#s<$W(Mfa8Lg`puqRvtOn$-Wey;d?>RH1A&)=XVOiH%=^UqLx-D4k?X*4$R|AoDJQ#S+lkJ)osaDW8tXEwDR zUgM7$;?w-%U1VMqj9<(0n5TN%x-NI=(y^1n& zhZq-rx7hUT?AxU~Sxd0j2=17$s_SJfxR*CXc-m+tMFs@9HI8pXe!-tmorO?@_N z|49l6+6pudr4TUSTCz!kvD$vZNEbjOWi3n{aoa(cTgm=37f|oyX=j|HErgAdNn9FYjFx%+H~t zzMob;v0qCvixvk8^Ru^W@fG}SCz~mB;2%r3^}FjS(ETj z?=NO;CcC7qy~lL(0gM%FVpU8CymS3BJ{$~_k~UFRw;v&vEcfpI#+ioqCHfx$v3mC{*ma9VjW{=saRofY0Z-a%Bx-GfwsaBmLT8*Tz;xq?ktCUpl0t`$kU?GjJpp=bj`>8%j=5 zxjuHngun+6v5W_&qflD`e-nWlbbD-=u~Tb%{d#fu-TTLNV48y2;o&&-q#|&p{Yvpc zcls(gEf*v-3~zvyzIJo~)$`AcSYM6}2~gh0&(oAH16gi62aZG&fL`E?+E}=Y6OL4j z37&R)=LGe8mg%D{qv!mh04HDJEkHOV%>-S4BxZ<_rj=F2zJ2=$m4z2gBVMyY6x*?m z^Xd7MMy(ni)<8SOPlckP5J&~_>e_Z%qo|2(4&Q>q!UE;8hccgrL>v)uA}eT(?7hu9 zo{dqDRVf7(qfVvwb+63me)4nC&q`I;H>R=pLju8c2j z`HBzblpDp(GMM$zYwIp6Wf@_Q0W)_>j)?COnPZB|Q!URUs3_cg3_${LBiA~ycg&V& zh2LJzUNXbj1u&0KtZhzD!D$Su9Snn%ig#9^wBN3kU~CBE_cICkZddRiA~KTGRCo3a z0fp^zjtkT>q_Ehlg-qK{AWKljqByi%*_}u zBantNLu-HFr_!6j&1Q`^zVgsXco}`?B$olQU^frWx-?zZD-$T&gV7|9^!0SB5w)+2 zW~5$e>$1Q463f#QlWQ{WNgVw%aJ-F^hJw(SvG2^mnvoD@y!NLXBUMr?)PN5P6{E4> zR#e2NYp{aCo#hMiw%0mKqws-Qi4p^pQ&8s>X&hbyjDo?=Nu1F=>Wz5V(WX7#nt0ul zm6N00m*}%%!J;=e`v0yq9C)tS#-aQT16z6mSTKhUAHM5!>58hSPxBv|MgcBnwC_8< z^!al_b58v9%}4yC;R6p?p9qvlP85n3@WsYW+i7`08Z-G*g4)FP8vj7Iv#;1u!HRdm zNgzYHy}Ckou4OqOh_w^QQ}8FQAG1%YzCQfFT!7-&`}Rr76hqy{)@_QOqloW#o%kC9 z5smfLArtd8W(15saEh@HQ$)ze1l!|3)Z5qr&02<_>07`Gur}TRVE)F(>AWoMM)Spj znXi3rhRXe2xMBQDyoLxT$XL7Hrr!wM9Vk7Xf&384bb}=O_6U{jd;@Tk`AJVd9iqJv;R81`{Rwv91eZ4Pp_m!(xr{LcPvtrb!Bw#+}{Urwmi4M-w zkj~7?V&S5|KL?6NoV&-t+SwV0&_TH|&+guJ{n&N!dyVI!A#WSHrdDrrXuTd_pAhUn zZ>hS;?B1^LRs^55K4n~7V{29(qY&jbQEYzyopUWL%HyqP9-MH!=X~4Bnunc#I(|>D zz257!zvA`pS|1F&OW(h{e`4yAxb1f{9LDE}+KrVFdxEYVqW~PpdCW{&XMjgeoVc<4 zES~?y*kSS{@p-h(urK7kfy-$_hNZ(`^98n!4^Gbb6?;-nfAWVUzd1uD)j#5X{zJ*8 zp&^sAtzBb#L9N;tU+X=^jw#PvGcGR@*nbKue+La%y(l1RfgpksC{ysj3EWsV*U1Ih zEaKRws6C1A(|dA3MnI4!Tm{BI%DP8tUGXbQ%PL`=NO~PQfCPUQ5xRc6~`&vrtJrLT`B0`|b?`(>pVKEeu{L^c#dA!I^rjOZ`RT@nR zHxHFd|616-!+DwOFOl@Y-zGd(U8*rVETFkx1<42E1sF*AhH_KI)`(%F9-Cr3LOL?tbNZ(%DjY3#H#r8-L8tEdW zvPN4q#?G*NYWlA&XPZ&C4V_r5a#rzW=ezUCA&6noDEvv8*|1xted$*vb!k23Qx$64PZSJANl}fsBI>A6eJm3kr z3y&F#96#N#fH#Wzg`U@d*>Kgu`(nSZQhbNQ@jxqSqY3RJ@KmN0g^u0RUjgPV|D3&T zJ;9!Rs5LzTg}ufIhpHrGEy~A4Ut8eL5% z#S2UeZD4@2XXjC}fBE9=(^c3t1y4t5anaXW-qNqeC0JZ$Z9G;VGP6<4+f7(?*@JY7 zaVnvZ5gK*fs!L9#w7;acX^2`dOb|rqupfyebY=dnnt*f{F1%-4&FG)0E=eDn57oqm zxzPpP4i`K6jXc-)*ERbPu?6x_3M|x!bijS_A-&J-1+nejvuAhr?Rj>%89!sQdThIT zs4@1{wF*g@vtFf`M3B?N1w;62nac8QC?ZSDH%55AbDp$ifvNspkl$W30{2=1Q z32#msFIlk4F6p35dsb1AjvP$8yJ3&DOuldkJ_cUO0wb_(L107#YQJ}9n{2;+2M-^f zOwOc*N5IEK`fN_lKLC2uhxVPY==9=Nj?A19Pnf=$MA}_)3bsi*$pnarkm#&2R1m0- zI3SRIg^U|zi(ra1jl8FAVH=c6NZ|GJP=4Y#+rw|m>BTPSNKR~?7s=*>7}Srb{tr)F zrOzmw<1p~dT9NN{l8_Rp$@GMHXck^nJd!_3GnUektc4OH%A?p+Y}InhGZ>%%te z@P#2Y;*$Qpbl%Du%1gkeXw&TN zpV!K`Zmi6}$at1nE;vd-;U-u#8E*asg7dZwG!;9$6DZnUTv~ytG5p%PPM#HyNW&3P zlb@cKmy_MA84TQO6#STAiM3bJyCad(NQH;pZI2>TYukurO+!+HvxFTnzGM_+giJ*B08zrXt7@7Hu6sNsmf z`w<`@0sFw;vA0)#W&${j`>6+qjZy~UW`J{iN{S0gC_*mzcBJIZ%1T`gjgK$@m>+U~ z?-2r+ots384L@}9QLl$)DzZIU#)z6VI{KMJZPh^)!4!c`0ZZj%1TG{>N=s%JAm6^B ze>j-n7lk@nF%SNN%dk9q_&+t2_rfBG{!+uO=b~T^th~+2BeqIT1u!cuKFeQe;ji-qaY{{{+ zr$DFdSh8c~&waaiPy)(A;n{ca!3}JdLb^+}(&zR}ny^Dr7N0`D z{;BrWpH5Ps-$CxFs-`CS`+MjhE#t%|bdIA`RHl3X5MF@*JB}SYi7{+e)^woupdw!O zlji4d5{+u{<@r|ovpmqN;noZs;0dH36XN1(vHgKK)n{APA-kLb@vHm`6&u^E6Q5}7 z==2lo9@(F{XO5Rg-f&iSjve5ow#UrAq{#8&miMk-#N@w1QQ#=x3rKpG91g!^F=VT; zwUCR_5quzoPFAIn*)1!0#ff!PStJ7SPV z@wV2dJyx!Q8i|Mh)~!0avuU6NA3*Hqf`TN(tWiNhXh+hRP}T}0$AjkY^Jl3u40hW_{pdtyixdh$?MKJ z6dm2s=}k2rKE6OC*OCB9yI;R4j{`xiHVrZzhacx}9)zKr3!R(&SMjUAiAMo8)2vf0 z@@P}?a&qKH6ygm-(Z&)#5;ElY^t3c+^b}#}&tP1wLaH&KNxr0mqMv{P0p|wW1;<7s zoZ~_~#+m5KdB4vE3=sKpNA9uZ5fVrFn*w_cERR9mg7dY6eBS&P*S(CX&C z4s9#rqi}JH>@_ai30^)xrJrWO4qRM!bwbF;!Ar?6>;`(8C~UW31ehu1c)zA`tNk)}kL~mV-6n1)J=15MAT` zY5eh_$DVS|1pI%IB@g;WYrQPQsKHTTEz2|#E*JiYEp{Xs^jfpT2R?$SX7|9B|Gj98j!CAR<2T{72N%2E0Q-$Mukq zk)y?u?WuKm0MPZEFVs{^WsDAde1RWD+EMCLQc$3b!nsOpPk$aA_P`m9)_8@`VuzP# zQ8=SwI9t6ZF!1Kz(_D=N3s%Rv(Bc9VJoB7UGeX6LWdn4dY#HYE!=7i67L1P-J2&^0 z6SmQ(Zlh{|tc~GW-LhmpZrwF>$j^9^FJDfF6+}$DaN!|pc<9?DC3A$@ss-m6*USw zsj@3(Ljr4QAt5=hTQ_BMli9h=Mlmq;3jR1U4P)OO3oRIe(vBpzZ2O#I?PL7N*D=zxmU*S>Ja!|IG*R{)4$ z+j@9>B*z-O6O$|n0+q+*PG(mB0Rvc*Lux%C^^U>U%V@loEiNkOW2gmX73y~1*lZCDM%u=CNn5i;F zbh>B_zrlw6nAYl(H8pXvz$1@|Hy=`is!CcKXcN9QH&$k8ENU`aTV7*J%4U0KXUPjL zoIb&nBgfvgeZy0Kf02FWSVnVwpzxuLe$!okc)* z_4`JAc96lWix<03xe9ssO^27z0rcr}fsc6Z94f_ZO#85^#sr3`?)q2Tr`HTz<=uT! z|2#YW)wiW(EEES1{tmC>))y6%pPikQ;4^io;zlnxaT$1Q@^&xAF? zSa>FMY1gk^gD%E&3#|iBfo%tQb`w&=KQ3l~p95tfr>&K=j!`2F*F8A@i-~zxiVrur zl#)`)rFrtC-&&ia;-m~UPiaFLNd1>`a}lDcsjFvQy7Uu%M|Rw)uUqFPK0&nRJMIdP z6jFm;EN*gjy!wC#`%f+#C3%x$|KbJ4L2tQ_@S!ky7X+K%ZaU%Sl^YZ9$X?^eI7DTa zR!9Xp(6W2$8*q8!;|uQHbAux%bL9$902MM?f2u7S4tAT-ff3CfJbILS=@KioZcQ_< zFvuD0wc^Pc{Zp$zG8F|2Jeq==8tNJv8tUrnp{B=g_G=wJ@6^%>#g3X@I}*h($CUhS zZm%G2c$c!m@F<4L!&^k#Lq&}w_pi6Nf2@CXj$)`KJA>Zb={GqBn04;hu@_WSg>x0{ZgxQj z27&Mk?)#JjQG{L&IXHS>D%Z-vS2wgI%Bbd1Qi>U3U`?Im7laqWMHaPzC~*P{`aG(r z82G*~eIf_Y;d;kagF|Hi$*|M3lCzKWzH_$4Wd zA@`Kju#cM@Ryb%V&{=HRvgJTn7+%j}#V(Q)d;2?t8jEh*!2obo*Uy2{!=0DiF-)@* zj=fR2oS5JS8xb*chI)8OuReXmpU4`@Kpj7IQ+y$ovsb!1`%!-`U_;H<;iBVOxPvp@ zX4+n1GsfJ<%aayAuc#3GSBJpZEXPv&$jCx zP@(i&xS=}dK|z5%O%U+x^L&Htyb~%OD#yA&aG~@g-ffx^JgL#onhYd-L?#_OQ0(Y(uXX0Mg~^Up#>;lBY|D8%=j)A5pBVXT-x{(i z+3J>Xcy0UH9#vEE+0$s7GI{a_{l#Be{VHQD_qK;F7-ty3v`Zme#x6B);AHer{iQI~ zh}p84|z47Wqu}$=fKJ^Ice0 z&E4lJ2r{0)h0cum7OTLtf8tzVe7e&@B;`8RtnpvVhcs6Q1}_LPoMdr&jfTR5(Zf`u zde&Ff%lkQ(z7jjLraJ6;&s?dv-0Xoc0gFq2@AA#;`&ad4Z?T0ih@ESE&R&dv;>-@O zzi}s%vtoMPa$nlZqO|VC@ZORRTNS(4^fD{1nqe{b#f@m!me1EzOc+f-6>!86nkKx< z>-g8lZ|gqUUX^g%IOvIQm`?P!xbm*xDc=G?HT8yXJ-e~i(LC{q{lPzVX$j3rlBJXr zGY`G+?&IBjMbvn>ayQEOcH2qu%8~)1->o04)36o+YIo6Al=P^!k#eplO+~4=I6KeV z`|EUBEAmB;t1RK3HA{5Q4eCcIUUpIRhCs4$n&qM2o86-h{!`+7v2X5W1160bZ{BVh ztd_)9tH2yKbMEUEll&y1GaoIzf3G)960$8_JX6|N+Rx(R9^YQ-RS&%E(l2;6Gc&^V zg9>pkCyfoRo~wKJUc7Ya?8ws$A2%;7eLO??g23^c-FxFnyhIjHI6~n-apdz+SEnl( z<2w3hAk(aj3_vWA%aebow5MFZ+u{vly6`Zog6isvg2 zRsGfXj(hF$Th%o-G5ZT*@dQ@ym4ZH4kKfn3%hFzbwccrvy88&NF zzTdvMYsx3XNiK6Ui)?BsdxcX&-1aCedu~=`^Sb2Zlsbd1_E?!;$;O}jR z=R2h`s`i}Rcp=&;?$L(SuR9z!hAEA2iod?LOLS+7kFVv>Z*gzjH|{wzV79DJV(Hh1 zTJ_EMr~MkLGxA1Pd6$0D+EM<(?&&Z8MO~r4-I(r&$uIx> zwVrRhZ~SgHCKa>|J@m3lMSs@6OC5APl*lI>VuiqCF)==EZCTyaR#;kDH3&>?p&_qY zCzGXs-~8W@ZhzMNN$b;ZpU+T@iF2NgyVa!-m)I>tBuloc*?YftLp(foT*JtWIZfS; z`F0C=)SR2H`0t7hgFEXk6wJ$;GNSf!*ROINVO52gu;`+uuteVey47#V%OxAWZ%pwi zJZ3lTlE@M5Lyx6Q(uF^h&^IovMQY|)(f|B;3}^d%7*!w=KEA4BNR?DlE%;JF+NbJw z64||qYc9(LeDtXD^ZI``fULfjF8+L{X&Co9s0bb~!Tj{1pI!2|)|shBJy<)k!s@?2 z{ofBI({=vZk#28`%6$ucea7^){8{ot^y|1gY&`hy#}@tr9R{U4r+Ripe05G&9k|Io zcyxZ#@|i7xGrk)Hf+y<-BlKST1?y3h-9+p=v!-+lV;&;9@ZD?5xL-xv(p zn~{>zv*-W&gZMp^5`WIlsZ)y>_J4mSHtK8^@BCluR-P+&|DXG6#9n6_S4cchPBQ;? z;EvV6|M4Skb@hno`@cSB?@9lz&H2ARz4vqP9dbtg%GfQMCXJBvH%>gL65Np1y0~v2 zzu4Wrd*D*V2}dw@1<;br{P#mV4g!P4QXuPDuhX+fEQfrF*q9a%b2ii%*YMG3=cCp! zLIX*sJ!X9KJAT<;ACdtSRRQM5$%X;(^y$n*-vu05ylT}ATtlE9IVuP&3S3A^8$Zc2 zSGh~?oZC1n(uppeU*p!W8xf?BRlVO+wTu=@`kw{O#p5HcJ<38&o!L9<31%$kHkQKKIxY>1$sBZm*?uM2ztbb6ddoe17vsuwepVIyD96a>^8Zb$9(-uL|g6gP|-w(Fb9ha2y&MKK0Lm3(ks z`HoAhsUR-%0Q4U%+Tt{gxjYg!bTDgPZt7{`tu-(7Ged%)2lmFvHa zPA&SC_{15oKdO|UI$l-TM0U$qgB(}Z?r6NPiVawtq9W;ERDW%}pHYIc$)#wqpRAGc zRNB~h{YIuDSaq6Z?$aj8Kf@&*8EHTOOHWCey6yc5n!Ud_Q0t)FQR)+M7QO{ zeKL_J+uOkd7}JwhK{T$dYj)|U7>Y|Sz_Ljs<7v8tj*@*PMmRwXvSY~yb>!CD$JzPO z@p=wu5>61|CDk+=pUw6d)q|6v<=^%Clf+2+YF<@O( z026VlP?!JQDM)ZRlI+=SUkn`20u_uY*c$Z_8y!fnIoanJhi!0n_T46N?=FfLuo*1cdrqc`7_j` zcD-wiO7zbCI(GDEo$kt2tNO;FZ(_Um;*{AV7KPlF&{j0xc}*?aG@{35T_p(nm7>$8 zPHkN-7j3$gwiPT8q2oc7*7tzi-)osKEgvnM>2$k1<`xXf<<+g@GrwZ&$M}Gj0?~dn zPAg7Mryo9oL9>PTCf?9xu!^(>OhTi&Xtg`qU1las6zR#!Gn>Xo#>TokJMU}oqG!k8 zXs(nwNWlD~MGW0Fq}@u&*?vtJDW@{&yDG2m{>3Rw^x9ut&9zB;c=s;kke>?X%qb9Q zD9OvCEx`exzM-M)xf0Cm2M+`b3@xpl>l`DLrt0ZEbg15uGL`{1fGLm{Hnw9%bliG1tlbE-cCkOBU6Wn#v< z8)6emnNCepe4l~EOp_L?$U-mjV4hf28>zCL|K&f75u;KG6F&|NB<~ARr3faOxF%Yt zftR3EN-vvVoA>_Z4IcxT#d_Tjs+8Jm2(#ZD{d)|l7o40v=HNVlZJzmKW(`d)nEgP1 zL%uxv;5^0<^v5v^Thl%>k;J=_CKG8hL1o9zow?a3##$vv72rVBZ4i~JFY1ozzu%|pSFN^UXrVn;m}k=rx>O|h z8pSTTwXWBCb4XiRiIp1hr-NI)SMV-`jrI3DtZ#W?^=c1xDP)R?jB=N5|9981xJ z2e9bKjJ$gK)Ym!rOO#4zn%Tq?_Xv0wKFFDeE(IvZu5NwHf~qZBzLZ?f7jN037gfqG z*}4ud@}j!@{A9&pVo0`<%j&%ZBG%f>t^agEz!=2-07gbAJn4i!E0HxAVIxfkNZS-V z`x1CY(qcqd@?-txso22kBrzdK{m|U}9WufnVIy#;DozBmW)$O_K6Jo~Ez~ljn!F|Vz+{W;d#In|Z4PcN_%=Xc|wR00753!3lfo00Iix)ld z!6U8d|MTuBAMWH-0wiZZ4fiw}6C}*k8X#hf53#(De~RrQ#}A?iyt<1o-hJz74O^?& zk-*hsUvSLv<6E>(<8ld3=fy~g(DdzE6wouQ9s>o(LfLetVijUI*;O zAOLsje4Gd#GgI%Qq${JOl)CUQIw&}d^p;;_Ag?;Rx+=mRZRlX%Vo0%`&tGrsIFdE(W461{lS^Hy{q*6_HH@wtN(cRSlHVOJly6YEWHFa zJq(GSefzQsK^P<6y({30IWk?KRuG2q{ixekyDOJTJI@>2thUuqxMfVyinv9k(1hP*$Gw5&vSxdR@#(dOocV_l)7(M3uhr z0Jgz)Fs1nFQ`%1yk?~tcIZGEYs1gwosoIiMp&B0v9RW`J`pLgWzVgU?v7S$;AGdMC z2Ix~;OsC?h%oK{Jz#;A8pMVs>cZjyuHa3f0I3>c9qpJA&p|%V7lN9q8CQ5d5!L|$2 zm>-fz4n=F5y>s6cfshFYnkUuOJBgnVHu$6Zp0D?WDNP?WY7GybX&z?quyM^)Gt&kK zBN`T{b&!rQlOsTe!6y$135b2V?%_`N?a)aUwtdhlDSVVtGM z$S?g@_hG|~jov+Wl?%np4gAdl9T<{fiwe2Mz`zIRS%Eel4^?66)Ike$6as-}qfPfZ z93>1jk6gF({4?GY1SRx>F~}8BY2k7}AbHOA6$=;UU|X8*52Duw*1+C_%sXlPcz0-3 zKW|J6p3QKfd(vW)*zH&h@V2sgSOZtR$lo#4$$Ca4V=2`2c}_+33-WglgotUZ)}F+ScN{GEUYAsv`|7q5=f_;;M~`*rip&3l_fQpL1T z;Mn@yYv_R3dCW|eBGp5e_N6LPIA|1tv9TtR0O9VhjEz}UqJqV8_3+bcCmrLbiWxp` z-7?__V(ph3zSdjP`Vd|{uHSFm#N*!D$DU16?x0Utd9waEWU?dU7)lL*BQd|F%u!hs zj_82`P`oGE6VDHUZ9trtF5+|_p0HvE<7DP(gA^6>yGC*w_Zsz+k-^ErS)rBF#&0q& zU{0|q&yF(IWkm$zoxBqZlHmsAChCK3QMS?5shHG2roo<{R6IpXEAhF=pM#}NY`euX zAZ^_0B}<}6IEdQ#`kK<4@zMrep{MZqQ7`c)gdLznnd59T4s?KBhPf&p6+QyQ*A zQNff9I|sln%p_{hC@x0ocjpfGXm0-aLjDKNEfZ7F{%ZX}gMiN|LIeqS%GYn-1mP6U z!lMe#rKIGsUIRha%Q$|D566Pr#XR$Iv+mu74%Qm@Fh=SVl)1X3&(57Y#REF{9wj9u zh%CI|N)hfL*=1yAhV0v?p{Z#CM+Iu>fdkr;CSCFA+HGtcXr|iG;RSYz-a&Kn30Yt-pZD@FM*KI72pO=+=23^x|>*)NAqy=vm!Gk_xrdt1@Q#YxoskKm3@%MAG zv+0F|-SBw-%v>{xo)sdgeq1fYlH6=T>qW}`onsPQ>V#6s{Me*Mn!L1YcHLec$kG)& zip0;9(b~W}NIRdYpJAPfNkw6Q2QqN;=dG&VGgV|EGToeufqY^`>Do*~wUp-5-Cy5p z3dY~oG|6?%C-4}sDs4SmGYDjcZONAB_ZlTom49o);Jy3nwRHV!Gog9v2YS>N7Wx&{ z``+(Slp+798lzejS)#UnT;Fp?svJd}{Q&NF?bp)O90X?`YbaO`pEuU78vy>!*-jgL z0YyE6A5l@!2}j07o5r~P^p=4W8?OjM9Z`Mrm4QVX7#Kft(t&7adErE~Y0~Tw-A8q6 z+5bSN4t~$<5scBtPcVz$bFcYx;nDcw`RU(F=%_yjHvRM@xWatkOj`cQ{ zj*K2_NVkd&11w5`Y4B}~7bjhyzPzpYKzGAL0M6iX-XIJr+iPxJFTEyqmk(>mh;cEoZ+N^~IxC`mA(Vl=m@8-r8Ojt-Ox{gT6xG(P8c=OIX2o7X>ZduK$HG&T+f-pQ3>WGT`u? zSrB^#u>?K9f0pkxkoCEn8dIhOX>+{q}4*AY!yr**w?hOoy=AS1vLaIMY!*!i16U^niJ7MgTOST&E-(TSF|Z+!FS7NYRLzzvld zg>X5_$~H3?qvnElRB_`FL7CAa?&MU>wn>XU^Ip>MV#;#d#syaorS%N&aQdxpX%SY9 zkqTW0XHWoussN3XA2JEdP&b43@2|oy_191(KL>@_1slI#?-gp?@VV1NUlaZ(bE^)c z{H;absH9ict*f5A(NJ0sgLx(PK*%sh5tVlz~ zC(A2$m6g>IyuQ|EO7vDN*Eg5YkNY4@G>^g|+T10%e)8adf;N8kV13#C0 zmmDR5bP-JdWge}5+WX~rF5k| z&;2^{X1xb8h`~R6s0E-~V+_*kv*0iR5c8;^1KYTIwng%l2M#Q$_ke^AJ3&Jl7AewR z_yhOu%}=uwrsiCMCr>>24^q!_yo#Jd~$2I8+$!wJorwEEPMXkGQq-E~AcJ_QNv`1-X+($pEF>L~sW1P9|{LE)kowE|R;1`#XIoO3xWSf0fpr@T&ug9x<8 zwS#xeh1C*Y)>^e-CCfvZ7h|0!K0+4WSwTSomjKfK5~D$cGk(b&%9<1c@AAmY@%cwk zctQMxu83WA%f6jbQc_I2_cVA>m_QW#^Scw5F=}Z7e*DPG7c(+^&+C(k;C+Sw}KYfC-M6XlrA|?jBu=(h^x3 z`#(P3X=rOx#H+g}Bt0zLW?b$^@N3+Z#}orS9RMop4dHleCV9ez<+tcurz(YIXMe4} ze;!X&m^`iM}cp6UY$nX&<@)uU!CNpy~ES_wHD))3@IV;~O9P&)tq`tYyUD$7rq zizO{yW@R-iGeGllnE0+un?7-<6MmVqEqA+j28}T^emFP8eHOd1iHVDQv^KN8V1v7R+OEx;p}W9as#I}KcXPZb ztZ0qzSYc}mX{QCjMoWvruwm&-#{z=tJKPi-8^r?!cLAcJi*a+C#?r>v;^U=Gw2^e8 zEcbZx=F4QAIF3@qvu9tCtFUCNN6dr3nqD)^=Wdz;>__-qd@2{gZ-h!p`|S=G4@LyUC&E?l7L(lFC!r4cO)B#r2q%JH)| zk?PoUgi^vicl##NE-@cdUi%D|?!a`^_xWo_v41-MXZP(ByHlzyKL6~HtJ$xI-|R=6 z{?qf?)}z^m$9q);Mno>I_?cnxRF1VqIbSqJ<5qvC@e{cwQpIKM+NQ=vRtVq{siW9C z(18z7e%d5b<>hr2(E{7>Bq;J$zZ)qV%pbu|6lWEx4Mwfm;UyaC(55*YC7uAHbSR)G zbQTe3peF|zCvt7=5-bYVYQnrykwyG0CNADKuMi&}h>^PMvNJL;0FTdE9{-Rf0`?VH zquF-`t+@1U9P*)Y>gxSNiq}uBhUHOPyJ~0k=x9?^wrp-@*ntWsG}N4zlB1kBVD^Z9 zNAF#HvHqi8JzwOB^QKLkusH!C**biQP+nMc8(GUqYCii>0P+q&=>m=9Hd26)j?%_& zkQltv3oBRwr?XqJe8Q0>k8ZBb6#C}t*B#c5Hj!1o^TS&|yaY=FkU>uMI}UlwgP#Yfr8N|$0aN{n5t`r z)b*+jH80$4x|ev~UEoT8MgQmK)Wbr1AZ+rC+%Kl`w|ee1%CkEO4IbseWP|a6i>_!@ zja7KC-F7F?^Cz$AZKs}*U~6hts>?6wX}4kp3?fawZJfxz-6No1P})gr zNLEPlZ|)of$3->;vV?6&g-=N8=83YyhAoVAqWSxpK6QTQ48oAKKMP)+r{>ew(prMXV)STI$fNOR4&G}d z*HEYFhAkOkC0$fdADeS%?t~+-^8f7m?te2j%sw&T23y zox%r3XOOh`1(v;-r?swMl4tk+v`G{yD%cBhLxLP#v#;djeB+t&Jy4rNXLxYujxJh4 zTG6odL3h`b2=Mj6->vwqw_Q1#S4jL_j!q_^@aUv9`wt#m#1b0*cC;xNy`VraP8_7; zx)h6WmfnOEE7GlfIYr3@pZMHpDj9m2FJHFMSOAJ)G)%=kWA|@igg9vu+9BpjPE5X# zrBDO6fpsol{(}CM#skmuF(^guylIZ};p9{Ice3|%+}N=Q=#&Nzj){yEQH=mG% zUAL4a5omJ5(8|C=-~aQ3ib<&PW(pYUepXmTzF}T~w$EzSu4OA$P&o+3X$u!FWZg4U zPx=UP35js9`HL4j2vm9?LUi<5-{(=4bFlooYOih2EMC`L&VXtj8y2)Fc|+vS(DKx| zr7|WHu6U>Ax;|jJNcpOoCss~!S#^b>6Gg_I#!azzv-01cU3w0OTzDdL$42+T0|}4K zpGpy97*}J(Xm79l)r9j;k{>g22cH}PHYExVn6f8I1)_4L8{x=N?1sCI5r9Pu+?Z%Jqy|ck_GYsXAKY6m?mH@SGmxsEn zUvI{W%Y_SvX*!D8l>;qN8D~PUMg^@c&_S_*#uGumAu}OiIB4dDCb;`}B@h&h6E(H9 z50wfbRoECXuQ%`-*6=gcTi(7skH%-#HT=AE{phlXhFfu7*l>WG+Fhkt>hcELKg~{B zjDtTFK~vKit?n2Z(*#^UbLKYHO=aZ|%2%2(kgC4DdV!q)#{d$`28&glD5`(l`i0Di ztqRQa)`^CXHOEZk5mlsZoF9j*#$H2zik2oYOlu!|1yc2wxF{hK=9A4oiP2TZ#0?h+7JX=(6|UnssjmY$I>;5#o)0cbi zmp}M-&$T0~3J0+;L-3FxtwKsxP*Cu_Dp20v?hA&Ds-TXQxO?XjeGFxFtX`ifYptoN z!RD)^gQN=em-jL2hyo5E&>XPA$sX08Impi4yYs*Kxl>W#xdjN_@#V|oUUTlZr!2^2MmXtKpVUXT7R`1QZ zGi^zJyCr*giXJ@*FSMuY_IFxR^4JBth<2@0B^vMOq6EmB`X;M!E?_6U{MG*QAnLr@)I&J4m>`k}Hc15{B@CXuT zG4l$b5{7nEtQW28to7(HC>EgDkC1f4j!tm?ryIiN&yyC53q(^?)IGsGTzZEZZ$QlO znvYUxlW$lh45OKt^Om1w7XyNjqXnotC=79%4+mSM2PI$!h|B-*-=jq9wgpUzgt7yI zrAC`zfeo0lsOTg8EA0ej!F~h)DLauxaMpDN1IPdg@NjMbex5^RWkn2n0w739vCVg) z&VX$c5fdlEDsiDmMkGmTtZZqY`C`~3zopaaK6e5Ryd`a6XY`keEoKLkj+t2)muc3< zXsu(%y$}pJJ6X-+^y9D&eF&nY7Yh-nhEPkDjA`gcs*~M(VrIzp(bG9ed>ziT9C&~M zd0>l|*AJ#B;La?ONbre$+a{>dyr!>oalygy_t}OSlP7;;zXDIM;^aqCeW7Xa&pnTt z@wuaE`m;;z{IfRtZ{3>|rN(pS#7^C;s;|G&XS8$OhJ`!FG6f-Dl&|cw;EZgr6T(PT zD(LOtnKFlUj;duFrepi!f)ckmbM_)fii_Ig6ZuUtL+yqY%XB$&NJA8{slVe{wQl~| z88-7Gm*ULY*~`ubAHw}cvcYfMbM_1q(~Bk7fPhHbR%5B&l1hmK-gsdDev!^Fl0ToG znJ@(8twZH4&rrsoYoiZRL1xUZg7R{0>R1)o;*t`!2eCN`!4LU}1PhRf>h2HOh-!0G zK;aLz$Wm^Q&i5KQ&sroRUe>YyJ zXbf$WWO7{{3seZ@9ehRoPSV#amd8%&7v)R*HKR$E+B_ z3bh}tkn)bV48-`3_HVubuySyi6mj(Qju9{kn}WKUEl)RZitO=)Tn0&m3cLK-;k>-5 z*2hM%hXrfo^!v;>moJ?_-$XgKW}OZqhx$DBljI5if%~3H(eEz~e+y ziUncvn?CNRs5n563+GJ$CHbE&srj=VdA3U>rZ$nonzthXAA6v8DaMqGGxy$WA1z4Q` z%D7)&BV9Bzl^Qc#%(@*su#QP1h2*D>4wq4z9+!wtFlc%hJHOQF#rkh79=@>Z#?WEI zZn!=>M;}VO!Y0LuO>P;JXuG#^0SRgAgXI4|vfc!o%e7tqFR3V`l1zoNq*5VCBO0s} zq9jEk5*pB)G@xjp#Hvs-R7w(>OUV#wrH~9whLos8A(Z%ip5DEW|K9uG@gB$9TC4ba zp8LLr^E%J-`q@^wM|sE)@RjRx3%b=*R+s)5u(w9vPNWx;U6Gkp`d_Q7Ev>C{U9M4d zZT@0JC(E`I-d7ZX$YOrqpRnvJYM(mtm0vy6JyjXMD0;8l{_JWwd3oOSfSG-}6$tha z6P4%e-G4)^zAypkoJ~kv=L_c=7=sTNBkx1fM2a0B8a6 zn(toE!E}R6YGhhDJt&ukQ;<5VUc7hDhaAa)2d#BDyi_4ci>3&Wk@6_2$xj9*1FaJj zIHXK7>EGa`kIv~yfFd-3(_&4TOgf?Pb`WXqIcy{7s)Uk$O2=zqB^iF9RW7&YPR{VG zaQ*wBppm|{VUo7?vg@wLe)L|{yjE4?zFAieacgUPlOqj;*3DPYjyQUBUzaBi;w50w z0BN)p$Rf%x@Q>J)Be{3U=)i33KtA)s82s?PIgApXBuoFae!ba+;$1#IY;`a+2{STv zSigS7^5vfz8h-1kssybCcx8f@H7NyP@yp@&8+Sm|W0=R()pVwV33dI+$jE*>B_y(; z4j~ycH4&IPOTfmjxqZCL3l=PkxC}&nMBai+xeO&*^;adW5`Z?y)9|aG-kq{4<-v;b%Zfv$JQ%S};?*)my8>w8s*`;PK#`=kqt; zu`V_G5*$1+z;XI;mZ)XPmu6+LJ1}DaW{w#(-++iUn)hg>5#P2F4o+=tq)TE!2?Iyw zE3Sd_le?VPtbzA2JUfLlU~PZd$Xh)S9n0Hv=fffSMhYU|GKOX;H3s-#4pB3ADQs8? zDGN}hx#|%Fav6!#6Q@4`@OqX=?&&8g0`+oH0vwjfoEw|j0(T1&N*iTXsPc3-B~IEu z>s!gvm6_AeF7Bt+Cv|VvfL{r&7y8I{{;eT{x4J&KBNAw67wexN*{O)Q1JF8W6$LFY z@QgmI`ec3>H_2h9rv4GeOvt1kIbWUdpi_rT@XHp0$R!K0E|Iam=6^FD$LFR{io6Bz zO+v@%jEZ(ABV-E=Zp!sPd!(v9J}N7_g*P}qd`u?=`T3ntH{& zmhQ6OskxzQ4-a~7*#gF)_u^$mMHgAj%3JHv1(E0VJ+|r49Z;*KSb$mo0%@4~S^M5- zslZ|%Yt(y7oSe?GhIvaM{nqq#=c)xkd|#(FZR4{Jy0Tw#kL+L7ySJ60x5t9O)jMZ2 z2LAf@&W{Hw;}0AxXnxk%Yv`BZAgU8L739CIl~t>pw6Yz_)4@3)#=**!@OIi|#zmO+ zsn3X5NCe$7HEL19K9`^78i*Qs z%9PB3=M{qEFJI1AI~u@7%!{iOz0>HSV7`CJPJHVM?}>3@i}#Em5f;Q-jS0U02CS3K z6nRv(RDgZ5d3`KB{Vs69XlHV-L~*R4;<$hRB%fwex=H@M)yX~TkF3413nJJnj=b6 zzB5i=_a;kN2n^wGMWsStiK)}3;pgN+{U^QRbxazh<@;T|o_H#?!Oem4G1I3VATUF- zpzd~{q@u785wPdJy#Z(xD19yaVg zTpuV#)mgp6Lc(|=pEgf*8gk9}ELtwfsg{|zXPB%p4t*at_pr+8q?==QfO#-I5y;%h z$;l?a!lx%(yVg8PuH+q7gCtn87~T_E<(zQoA}1y79&S~iru-wT*~WQKydR7%{V$WN zC=5Vn9IZu6gT#C&xpe^Onu_o_dhUKBB}A`&jH&T(U&9{V|CnV^^={BKW(536ti&I?&wMq0aAJXbPDIxgUwTWkQ)J-0$NjUa(E;O`c%b?c_n#9AY2^Oc?zf|I`i@RKGYhQiBNMj-t zr2}VOUP+6NmB^WD+qz<~xQ|rkt|oEU&y_>$m;aibq8Bc=a9$`j>yLSYf&1IcE&pLn zp;3=t_O;`If2kNRt?yk@zgd`lnkQkA3>Lre`1}&87s6LrhlN}Ky-1C|{n3Q?D?bXz zCFBw+ji961TI$%8(f%q)tzlBRWw?YcBSnJd=gm`@H;2VvyLnTuVk4sOai9_8&X6Nd zJLiY0amL@!_LS|>AE;6F^G8D(NM@p@VUo#UTce=dCau5Glyi=tbbL9@%`g23AC zb7H=J8sfRK?R}->9gThx#kOtRrX{D<^$CT(+nX^sj0iqHcH_4Zin|Ye^qZ$9GQ^ zWBAqmi$~!6_BW?(rA1Z49tVBAy=~aLb)AoQetej_Y`)W~Ri#%}z~lq&ei^fGl>`G9 zAVB`72((>b(EY|W>5z3IEI^^H}2Tc!3$$8`t9qAXN)ZHVVQ|rc=7di}`6Cyya(==i)9+6R6_#9gxE;e&XPvZ`*|5QYQ2l z^@H6~YVTrrhfXXz|{<@`oTcN@Mj_c%ttGvc|U0;c{_TetP$D(&|heFwC9&ybS}emj8%H)!^E zY>LrugoOcD3i7Hw-f%%jG{x z=&N^0vNg`n$jZ{Ph-}jKOe~oFS0YE^fSmR;ygv#hX`S9Qj9Y0bn;w%KGU}6yw(UDG zxG8#s$#WbJ5w+Zy8)tsO$xoh^Q{#{~yJl)$;mf}EqGBgypqJ9*D?@DTS4@KMvYyYQcHe6^dh|~{ylD;)#kf(xmaw%!zl@?hZr$AL-+WVB0*I6C ziiAC8>G^7+y=Uo-t?9n>px)HVEx)nq90(?zB^^bcU7zIHYJ(!2zWEQi!!q`=WaY&o zruSv$W*!PwIRGNq@$)AG7#7t?Wb?8JTQdE6-~L;ehAmrGQkn)d6EAsqqT8W>ty4U! zbblP^DOa*2s(bYaDM%hnA`f~#LA1v$9wlAcv;MGn#xtVbxJjZO#52L_-w)rX?wbC2*&zTFVc~Vz zbVIg@VNj^jsN1yXIBZJ~D;&LDF@2ec>C9Y<2 zsl>g;YFf-A2T>6tX$!GUM)Xr+i9e&oEJtxlIfzHuY6<84aE|hXr%L*z+N1VQZ13n` zHK_-M3cMwk_u2Gvmr>AE_$0H?N1jQG5BW!Vq z|21##--ZnZczy^Lm}r(LRUGBE0;5S}2b~OZr~#=9G;oW&0vqS8uqBg|S^BxvQ^o;U zHS*?}svqGj9kgW=bEUevy3TGBYAb$Kd2IM{69BS?83%a9sli8Z>4Jq|Vj}JuT`gx6 zHv6_p)TZUjmy>$5C7u)%>}jqI{+X68hxiITpXy!@?F`EG1ic-P!P5ADDI3sMSL zoKFk#E*IBBpBp-8kPe2MbxY|aFut+DuyOtBeu3Gs8lP4iz6EV)-aB*47qAP0l&#Me z)wO!Z3!4W?%TQfjy-d%T{9yRf+e9TnxR_jaRAJJ;@5RdaF*se?wqB_=KHXir!baYe zLy9066CRr<*pheUme3{U)v&|^DoBPQl6n9Yv?s}LHB}~?&fErxOUogH*TCtz=2c@{ zyCr(sw((fT09v`+J%=!C6~uZ7FyKd3BR11&&>b5etpD`s7114l#57#Xx8NfH4KhX_ z$n!U5q&Vy=?O4tjIe4)T^jXM755}&^Vgh)B>`By{nD9_r!s*&emR!#SP^*!Z294NgF+fs$CZ7)W4B@RX5G3aBv2e=+kMi# z0{gD^-mqbOvk6BFyB2Wh&)Sit@q98sLCk)r{%GTsXZu2mfzvuqE#F9+X$XCj`cxzR zu%xX9&b4OcwQ`e19(|;i!}Sf)wJQ^k{H1)bBf-Ifnn&?m;9dF&U@Q*+6zMsz0m5wM z!7~L?H*b*)meH??!UDF6sYoUNhVX;}amdD6ybV{g7pza8(kmu2nvWcm@PV_iW5*Py zlv_7%1{C-Bl*u@wwDbqJebB*&?34xNnLeFARFr@73BszUPvMRSM_AKUX&hRmu8zT3 zjnhA$&(Tx!+%0rYJvBEq4LW?-_RdD;+=5yUYcF^^)VHAD>`0u9RWam0UJE=X{ogTN zSq6H_oBPG4#zn^0Q@}FQ$^7TdZPA_%_DmQ&uj`$9+UNcdXVbnpve5+|cKLgLXSBEc z_;K^vwf^GbQ)omH3IxAZ@>H7q%pVm|zv8`K;&K9+AbiTQAAqIQQapC{u^OMX(G=)h z#jvMTX-c=oZ28@PWO;E`W4`MArcvR3LJ73~QpjI#+sCJT?E7{w%wl>)hJ44551}GH z=5jjOTvIlCL8g`_3MCB<*Q|ZwLA&oVhXkT<_)(2TU4FgR7Lg&lPtGcwqm;4q#_N6B zdr!4opE_;0o!j$G8RenSB<$?+>+~7yLWaRvOIQ6suNvckmEma__0L+TYyQC;xGIz7 zBnTVTjXvDw zt3*%7;b<(rPylP9s!%WpCvEA3{-$n4IpAJ#uY+NdgRt@htn~Qf&4M^q*sr2;05BfX z!b`QjfvHJXX_$2UN}lZ)5LTCVW<_!t>Ek!dd0n%DaP91Kvl*%_lF8Bh$pUl=kBUi) zasT&7@4!)1PFYR@fLGw1FjPoM)_W#;(9wpJ1OW&@E;IH!kj&JmXYCpK5M>!X(IFZ3 z`2g;ml{Kqoqyvjs7zfc1=yTzQA4RaH3H)z=}F@#fq#RGL*J!pz0--vq0IdTk<{tA6%yW@%1WW$Sf^*3 zV8wDDZ>}kBSx)l>&J-zwr7rkwNx6;WJL`gn48Elf8{a|$a@^^=g@xYq)(nGWe(ikM z#W=||^2}t9;WhPNSm!7$R(d62!>J+v%>`I74JM>gp1;38XgzU>-r|l!rU=g6Bw4}S ziMI)sL|}&y$A(#BSV;5KJ|Tgf(oeJL41`fivjv!JL4~AahV`>SX*MH?bsioMn2JNn z!AnI(Mon7GQ>l_|oIE=UI1GeCQOVfYxVpLBfwB(VPbmxAU_IXmz0BpP!7+N6gA!I_ z#E6r&OO`Nf=6wS`>#p<_HiDv-l^wTyx_65Pg`|=a0Yu&W^dr}k5PfI|OhTRA-N($e ztO|QgR;RL+AG*ZO4jZgqCU0=)`BvLN@E3-03>1xzC{c6K$Iw%z;^0@)P)Kh;Ox&O) zM|!!jynz#+j7Y*XVpZJu(Ha_p3-RaH8-23?y^+WcK)%3tsMg;NK1n$ZjYZ-00#+VZ z%ff0tIsZHdYNC0#t5knkO;%Gy;)+RM0Ku3Se2Q<0(8VSBqIDww2w{e4$h^>fn`lZdY*w+Mrde`XGz+ZrzR~xw(Q%5J+QY|>>xFNL z7ry_GY!3MPqPX6NbAECJ^SdWZR5f{?nd!(Y1#)R_YaB=((?eX%`J6bGBiF z1}$2)?7!GgBz)c@v;|5JVWB(i(ug@c+9~MqC2LRi&-~GubP!i!d#d7 zt#VgeR9f0E@)Pmvd2uln!?T)ikoAeDTXEUuxFbL`fX=L{YJ}g4%pp7=$1S^hj))He zFD4~59IHOop)gCNc9j@A)+M%%qU_zf@6p|zqv(^knS7D`7y4LAd^-r5&4{6$Xu|dT zT2nJvK_T+Q3H4+11nsIyZ&@WP)B+5%ejQu1Nsya_7DCy&2M|Om2G14X{NAOMvVcCz zG_4tM{+C@r?Niv2r~)}ZFcc;rFCX-n_rzOUz^1>y3$LzTF#Kp6?URry2m=f@c_{Z7 zS3_wNq|x}$zU&2sr97smEj(G7eq8-3*Y@}&4zO%^F%?BcmPywBqeXOMv6EdTgIaYh z3<@s%FDid9!>uR`F@y>WoBb(z8wSp-6UzD648!wXZLO?=f;V^~lYxNY23NU&U~ZS` zq9D=nyk*5i9mJe%Zn&4gmJ$5b@kyufqox#Y-OKP({{PuaET~_2`2RIoznPlq8znH- ziHFby)V0YpI6lb*&(y zs{=Qzj~>M<+mt8b978 z)dq4GM*s|hcW`h~g7f!ZA!-0^Pa-1~4#hE2po)gE12GG#H5y_Xas~$iH$3zFg$vZb znh>8=RVfo^Ysf&#rC}kD@$>o`##m@%WoJ`H4MRh2lAKuN$~S=mda20uKO*PT%3td0 zaFQ@mf;L1H1Qgd{jUtER_HCQwGMsU_N)-7VAjWTKdr3@;q>5b8!Chb8z_DQTZJh`` z8Q@yiO!zQR7-3>gp1d^Hf*{Lh2iNh>>@iB2Qfa8HEU>MS2V1}q`Xa>S2dP@o4Hks2 z=Yb_#H*dxk1Y_Fq6DE|o>T*A8U1P{2WCmJ#n{tvBQGsfOZ+ft`S9S{5rcjr`$pn{f zHmRxXnPYEn52i~Si)IMUEY>IdT`s`7_3OLkx8x$YVrw-s&bI^=0t2yN1q+zrkqP4) zyKv|Xq&;2`-z%H1u6vo$EUN&?g^gHFP2*TB@L*=v^^{7Rg~_rVSDS zacvJE0kjj&)WmdEU9;H^dyu{oUnvlH0ZV>uK8oiAbs6NGB9> zfRNh>4mAI~j*3c^pdK8a1Cw-zpb6^i#D_lJwP*xtGl3dUPu)4&vqyQNp+aPC)S{&Z zFumyG60rxqejU0wLs49M7}~GVQ-s0K-5WptD>0V-j^TP0gYKY{=O75Net0J}4{r7xv}L z4ju>$;!4QkV8F-VEOGxRF!Yt40lF}JXuGm~&tOOhCZYK_ z_)1FN-_aazHRdul2ni4C9|KKqw+Vs#k2{>p_cR6$I1-b+;;XJp3pSYiWzQl&+EX zcQ$@tL>Ii?N-X2=}zjt&3 z&-&*n7pCvp8D&0{9#%oYef@e#Z`qoS%+BOwWhv@ak1v9T#?}T3f1}g0?j9wDpdF>K zgt7%|U3gcmkCfr3Gi9`t>Aef04;3Q|OkwEZxh~XIWUg`Jp62Gp19a`_?y4Pi7UKqn zWlS`LwH`dYQ`1{+^D{u^dHZ$-uNS|K5hMIm4p4r|wJA$vb3~>nNnN&~xF&Xk8EMgL zO9hUUJxq@@Il>fEh*s}iz!%U7u;>G8lXpXGSx!Vtwdo`U(0I~bqHv?VbE3kF(eVAw zV4fD35cuFhHxHaEeJL@~(T>o)NJGYY$r8Z=DDEOD4^scYk;YtT)`~M;LpwMTtatn^ z@;M96@zH^Vu-;;$?k4O}@V!QFa`ea%fSw=ZOEALwc+%Dklr+(U14wVouX&+@(v$Iw zqbsE)2n0l6@+rzr))-I{A5k-T^hwxFhu>IQzGAdkWx)RomP@*`U5cQc^ z`TF%Q?j2c|26h-5@n}T(HXJ54=VV;&B;Ha8VQRqKw$=ML4~FUO-^$9-eb&z<{$q7u zHKv4$-XLHP)(x18qZT3mGa*g*<8)j@pa_r}*6&&YJ_jrxVi#Riie-eUHK)tU%Gt@O z7@7f#_2#YqE9^1n7ktas&W=V8LB~hRpjo;0KqBaDfd2kcSEuw>S5xB|A|)kYZ=;UF)Q<9;(Lxy0{Cf=XNjip7S3kHaZY1v!t+_9rbcNd@Vz)4(09=K-IqTl{y8@MWYnc=@R8?{4 zf3a+aUko!z=00t2w@GdZ@~a7tl_qObmiukmKdWjF)M~?yis*hTrzGK*t>-1)j*~uk6}OmQ{)gY zYYEhYOeZ80zvv%Avi;Od0DNA&utEUCn}At>ui8P*w2kJ%g#}bFvmS>GJUuWCjvseQ zRTXJ}M#2SV1r!X_2gD~P_tR?Xd%1Zz9Pu?-p&s@d#U+COxC*@uZ`#Rvlm?!H;lpbd zoqE3E2KSiO<8}_tDUOasyjR+Dh2)JCM-jy%Je9V2c|nF6JJOYZ{iCjEq*%qig%nk6 z^K#sChHa6Z?Org6y1Xp>Xird&JUzJe*^?)%-V%#0pdX{2WB;p_r)P?FqNJD@08u*U z{(VXTgz(OG?H1if%lfN4~13xAb+y+8=^_O`~XS*P&SHDmsIWx9LdxK+8_<)RF zhfU7EBnIfuvP>>xIWpLpoK*Tg30Jz;UPt93<9R?*yVt0hJd2o!Q5m%3gLyS>Hen3nNXQXJxGd_XeBLO?P2hi#HFuyZ27If*0N49K=Go zKSu%-5s9#Yf!vW~fB)4(PbBH-;Fsu;*m67JH~$r;)YNO<2aXe9~0JmQ$P8{F{15CO1e5O=9oP)k$_S%^;*TO`K1G<{~9v=Ow}@l zC~5ezBzA^L@l$_YHP4ve_nB94`?kpV*rKX+SKI6d*v~T?UduKkrsI*Jp*YKVh23Ad zICGu^tdQdRPXz}szc5e>L&00}xpkdhnt3&i6qW-Tw-uMBclgYk+Vsr zkF-u?kf;9u4{f zVNS>pSy^vb+b`F7<}r>hF&N2t+STymVX)MU7`NrI7B8-tMipa`aK}1v3o`uQ$7jW| zxEW&^${N%zH-10CSg;}8^4EA>GaMicb05AsdUjC)PoL8*=GWBHqPxs_?D2o`PSTf5 zp}cEdcga!7sN&Yt3AA#QFuG>YI_^F@f6qSoXmId(w^uB9u=2fu*-Vc;1$0r}pPPT~ znZ}=amEt&?(<;)d7hUvkadjCC?EuX6k6>zmxSSH?#`@Q&wX!8!r(^1SV4EFsvpT^aL7qEUo$HEWrq4^^CHiEOK`<^IE+^OS zQP$hH-6KxBpQiCsbchT^h3ao!Qa^X~iT!)79M_aVy2~{`lmB>I?LWQJKg4AG+-{yE zIMBAQjEjlsk)5)zw6=p8I8(P!HCrr7pi1mXoBCh2yJ8O?EOe5wk-(etY>}bQ#@X3z z;nG=fQ;hjp3gsU8;sH;SuP|)Zf&b46_|I4WNBi@OgWGz#JxMh_Z#yx4xQ^}QtR3tj z&{`IfVm!>~|NilZ9bjRn0KI_7(6c&$_Vm%T;#0A=-a1sg+}zx@HqU`y5t`=nCH8H(tauabdA2brOe>K_KNFv`K$GhU}h%f zMB)BFKSiglVf^Uku%u$$_36c>fn!o;Dp|||!Pt{F;(z`zUSV#t>fgOf2OPTh-|oNv z^@V(%cm5h~v$x}$e~%+IjZaSq@B4rJ)pq5o#g-1*-WU4}o6}x&$^ZZSS1Uu+egET6 z^Is1vR5UkL_}nPgl?NgAU35p9kji+-Fd~%L5)O z9lgq>`k&vh)1%o$BW32pVu_sTBmU2SafGqh);gChIDGHx$oQwIQ1cLKZ5bTd%rE$_Z1KMTZL3tCSIy(Pkqs>s zw!ud?4<*5*<%EBnJ9>1tcI3IIPvu2|71e_;J`Svm>$=o6alrQh4$l%NH$T;jn*?P2 z=n=(LYv1{bp=#oOM9btd|8>4A42wl8CO;w6iHq>&9=n;}5$MmJUezW}n(*FYj90 zS+3S>{yW^@u}JX6g^O?G?iuzTBr2%8E3jdVt{G#D`}Q;xj3EWm!XfJ6O3CJNb1g-U zcpj1Q%QR&dIs8r*+1T8xH>PYVvZqp33C7X`mGVr4$@Q4yhq9}6>y(jvL+jx3Gg%ar zS|6VcqY`8!9y0C^)0^QOt3KA3-gDk3~a2c*~y^g{T3@fSey)MdQ% zkCeT5(Ftt?jFQPWAba}Gwhdr5j>{e!hMu!dOiDL)B9?eVq{i%9MX>*GHk!(Ng zD6YNyGWEeQqdX!A=pO8A|V)r}hf#c~TWzugI_2}3e#Q;9~P~mYbHqgNFk(0x^$ingwF_n|JlXQ#LRRW z!^^jSdTNg7}Kfix&A!7;)sY#1y zF7Y$at-c>K3Fs~viLjCq6moc~NRn2+u{AWzZ27xb_vDkLzxyC*^mbM;lE%$a%_OYC z#qRYF>jtlHb#;nc8%HP$UjU;hZ03h=-st4lPuXrSK%IshO| zBDP(`W*Arz|Ldmh_h|7@I-L_gf8w#qr0Qtp{x^oE**JYzcy=tTAxwc;ZD|i{k*#o` zBD8ChAAQ1z6I>3-KP%W46kmshjUTGuwRoXNTQFmIBuW^JNhs>&S5`hSDiBjR1i0+C zR4l;J!Bx1P@{{mq!&sgj^?WE0O+Gd&#++)FhsIq51Oijt_PKODon7w8BPwF$-jI9& zalsQVYu?y~2VPp4me(Q~E_QwSdPm1tq7wgYgSO#jP7;QnM*a_)byN&J4l|2Y|sR(uz?`y7uo40EM`VOG4X&y8fLU^ z^)@e3ahL9dbWJt zH*`@DR)CsJgYJoQl1hsi7=HNHjK~onE^ZAIk(f& z6rUL46As6y=1hEvI}i91>eH^*lh;)EnpAUgh%&&H&+9i+*`8+L(b0G$PQ#)Dvy<=J z??F#*!M)l|vM>hYi^}^u0TV^DQ%EwVr}WG;WU`7&?woPFxMpF?!KUQVDJn;Y6pyY< zjB~oOCVoloiJUr-{KwI&;WAR6K(3G1ppz18P9>MfW{v5FE&!OKB=wPrY}Y)g(`I5O zp*+{hNpmB`@5Nw@PENuYHz0jjdjwKXXOEg5#EHWKDH*Na- z{CxlDg1&BIi>8srw%!1}R&e~;HLptlO4(;HvCxnZEXe3J+SxMqtG!)r+xAd3Ch6df zfUDUx-_WjN%;3?y>w(cq`C-G>+cC=%s3a$*k&JaC0pN(|C;s{8`ns3GvN)gyk2+Za z;^*N_nX(LDB1S`~oq=1B$b7&gAZKB{FAASpUT~BjWZ#Wg{hFE__hH0 zF-5MhN`Im0iYWhQUMMy|QsUx_3Ae%`oV?*QI83*v(!)H$4a7jDshc06Wgs5JzWNKt z^66)ozglRtG&NyGpsgp1i3QrCSu5{v`Fz4^OwyX1W>sx7^lwZ605|w#4DHC7F8ZcUaVFNdgtdY)x)J$M{Yy#k6 za^`)1xWo#Ix5N^^wF@mQLZYKr&JI-j(Q`fZ!dF@s_BYI4-QvBAtql;wxxflP9|d0& z|5ArHdPrpCRD|b1%PXOj!$bnUJFVsD7tvrC`kt88b$ra10^~cK|78C{ikwROw2>bdnH!mUjWR4kF3Q5 z=fF00(uN0;*K)y+$_KydPUllRW1B(+&QjQAROrn@k zZ6&B1L`)KHa#{2C=?omm9$@ZU8Y_O^|E`qhbz?aU$a9R(V7;_py3EgqRvd4LXlxpQbMVeLCKa`Ch0Rj$4QuI0g_8*ah?mEeT@=y7>*? zuB6>tt2OH|7ns+w0d9!Pk#E})22@OY|M_T(cGtEr3O;o)rVE#tfX#|cAu#*Qj7CGX z_;nx0+Ivo&D(Xo_q3?zHAV?Z)B%W&NM1$wL;|3iB4}e1Kjk9F1@#5Eu1MXan9Y9hC z)P_U!ope4m(WqEAx&Ut{?i&Rrb2f73<1`JkVyY8X$!_0H>k@0>`h2dq-^D9e7${?; z{E68~MM*EWNHkq+hFky&So!+*r~1HF-O(nY^sH)wFyrLxF|By#v{}n$WBJRMa9d%( zvhUb2XX%KOXCwR`~4o4eT@%7 zv1K&wttqEGz)uA(KHHX&v~!ds`(y*50GBYQ?RBM$BKYG+j8b*(j)}ho+ZhX_g+_jR z4>n$i-p%CZ1dg@TKYUtL$O6#B>CgTdo`d4BckjM^{Tof7I1!3Ias@pqrZ*3`=;sFeav$ z(kFNV4%s;6c`cNgOG_Y+g=OncN@ViLvJ1rwp*Z2Cqi@7`B$l}UfithYRPVo7>uIKQ z-`PitMD~u@`{V;5HhX3S#;8-KaH3yLUiGir>C%el&qFb)T#j2r?y6KMo9izx9A&~f zd0iX~(i+oGP2aJR=Lr*xVy%);7v}Y_T~*KOTffDhaDIVsN9Rc4Q;FsT^-`)0J3Amr zg@5Qf{cLLX*@Jtq%4b8u`9+R$eG+d4SO>({Gnir_!D$Fz*4FUT5s&~(0_n+SYc+Ky zUr@-6?Wt>qqV439Ne>hpK51xb+NG|_p#6D))3p)k}yP z$pxO4lL#PZGWXzFLK^sXf7_0e*~2s+GEW7hHTyDy4eEJ$m6+>7O63d1x-CCjbb7|l zt(3bki5rK>^zqLuD=Vw4G{DRqKR*i2IJdjZxN(i(`ZI-e_zFtc(%j6Ts!lwjS@>xlJW}n;AZ4Aa}VrM zcmoeO{fw|P4ap zly!+LD5+$S6u&{lcW=jA2Q7;A_mo)%yMAsa(th$8mfuL-5t>Wgv0tV~j zr(&ad0@_eSgTqW+GuC1c6wUmwQ8nfUCt2M|^nDMpMRGy8wh~%l6hY~6aUzLpcNW~% z(n{ZMp>Q}y#MjAZsNDCE?uYO1XFq2VRQ8EOh}aZ2);)I^4X+1ry^7fRMQ&PhI7Svj zMI^oWIrrM>k5hWorN1;%27VnS zBFTq?io1ZoIlbEG6nDz#kWN;n&5x`@$2y8_Onpa&QxDCG-M(~^s7OzCj_#j!IL962 z!awqfl7ou0XwNQDI3^sMbECB+phgTnoMW?MhV-wr!7L;{Gi6h*T94q4uz0ugiymw0 z=_*JDW@mOMd#JZhF4C2p@a%SA#>^ZR!up7T*PMJZgb~RnhhW={d!Oe2nJ=*E4mv2Y zZ{XJQ%HoxjJ@{de?fU3=lKSxthyW+PH|LN*?&4(#Zf#If@l&j8{mJQvyOL4c|EH&w z)jwGL6LKJkEl*R3*-edxd#iHL;>dU`%{#8XI=zF{OPq=``d(S^pXs1t3NI*zo;#}c zn8_D>2h7>(4^K$f7&8XfKcS1lcQa434_qo(Av_|EzoX#_tZzq*7{My{>=b4{@OAJ^ zqjrWh!Kj(79{*-#jhHzzoqslx%IfaNTt-AS>td?H&j;!cUUc=VnEHMrl9R^el`j^* z*vUv?-16%r-dw)jhmBKy?D4--RTRFkY9S(`viO(`*1G`3+ls$Q)#xi(Qzi`b* zL1pg>&poWXBUfzV>jm)?vXK>l8Y152t z3DKC3QK-S?%#3SdG67EqA`%x`#O=Iw;vZjuzLk=Cr*^TbOexQ(HgeC|qlae2>N8^i zet||_iprPnfy>ypZ(q^}sl;#wV#96YPp07p%_N`N4H^iPIZB2y3}KyT`j@TvRd0An z6K)y3dDDdd=mUa|v1a=x(Rbyp){+4Roft*7Gt`75jRSd!e8|d=E5!VIIR4HaU_iS} zlz?g8Ocg^Nz&`NM$MJ2*il7qCiY+W}d#EJl2e}5nrI@Iw6%^t2*m7-nOT~g;O0U=A zHlbe;Cb8szNh}H%hL{4KA7X<1;C?2d7@+`-q2Q3`n2;z1j~2Q!KFV&Y;s;U!uDQ?r zbzyykn#p~84>vc0hT|#6tIne0nBiBn`r+D*Q7*Mvb2G%2`w-rX&i38ssvQ~_40LF37m?bMu!KZ^qq^k0jva~$*Z4%50Rk3%JLai@?<1SLC6O(7D*fbo! zmFa-NPv71eoo;rK_Q@1u6K!66I_4rX_d{(h4IL!ke+ho?k7v3FTt(UjN(|DkP8YZk zNyJf34;7ZpZ15pLrh*yaX-EM(U(Zi2gKS7?@&nd-1YH0yGiVW~2(#Zoii*>~v?xm% z!zxMy2pkor@~l>Y0K2EVi<7@ZLx$!$@Jbi31U25>v^1=}AMwFq)Gxa#n)i(wIHIG} zVJ)s;2|x>Mw}~?U$hCmP^7g?VhRj+66crT43_6(J{;t2D3gpRArr{|R`c#A0-Anq( zj$>T#>fW=?WqWx9Tx@2qGqpEt+J0fB&$k?i3~-qMP8>Qbm=OYIyST&~sx*E322l+y z6^6@lkYs>af}g}{;6AA+V_J2`#eABsn2kJqAa*?zhKIv|(zIqp4mp}c$)ug&gqts= zI$aDZdd=gInb4Cxc7`Xh=qp~l2_h%9C*{tp- z6O0BZC`d4koI9H%2|^=h@@Q2mauzI4#>yU!4aMOKCn=m}M;zO0NX$joMRy|fV=u3M z;Q#P>A@cHc^XdYse)Fwa-cjVr=WUSpjjw0lIvIuvVUT1&!;hGX6@BAVRJKio*k=D9@EN7L;`RA10EPY%o^8p@eXgNSI z8^Y*&7!L2B)pMrc;ooP7|MDcvx9_pAP)wBL#gjNh#RTg%#QspcTe&E7A4czZ=1ROs z$Uk!+XB8CWjF!9)8x0n%W57Yo=Yq=xu(hYgw?_k;)Yx-$?hEc`x@K&?Q}-Tf*AAW0 z;R&)Qlp0!cp)zydqWKs*mMI}fE%D~qJYB$wloSj(MdU;6$bb5uhFB$E0S5~ zGjyeoPH2oj6i z>zm`+SEb#(izG)!RW%l)+MDK6qrOrH0!T#aif3!ZTIfR;11JKyWjn{2gmLXMWfOY! z7U?;%m*U;}osIV(*4T|VK*>nGNRz^BBlf%G-Tljxu&%S`MyejTO2GwdQm6unLym3E zT5<>yrco-uj$|ezd-wwiYhpB?FJ2lN5n|F0e||x%kqWHgyAl}HmuUv^K~E#7lHLlq z4ABt8Yk%p*3pcRkA9Eb|0$k?F2M|PtZuqVGXNK@|Ioc5Z=xrSWtvP!(Hews)&+YZ9 zju|3y*a8k9B?t;i(noM`_tdEIGiD4c9kHc0*MGZi?J|8Ob0qZ3Sv|&fun?GS>@_&^ zoVo&Jj6*D3&JdSZPoJ8pNV7UaGFwaU)LVidr4>|?y2sx4D+&q<%F2e?_cRHG-o{Q) zBJjfto9!pDKezruG?ffLJi}BTA)_rtd3o`$zIN9Tol?FKj*%wOP_V&)j@BqyZ~P&Z z0|@sZ&wu@Tq~v+D`wc;?{u9Yzv{vY_(y83uGb}73a+qKE_2pUtj-RJPLeL8Y?Q%4< zz{cvDjV9mE=0?U+x}Jgp55!oQW$>rjH6mzj1`L4RrhTQ4jU^HKI?WgfX!7QSzoqA3 zMhO=h9TxoaKN}3H(XXLSr7!Mln@6Dp6&ENvZ(X67I~+PWckV1N1gnfs7NL~N*)9sfnlb7>7MINIqGIs4`Q)9|s?O7=HFauZjeLBz82-&S>f^ZoT{F^`tW1y4ccFi$ztyId&Ro<36=!% z*-OeUFLT=6+o4*_*Su#4M(oR}jMlsGmU$Y>9=GbF* zP@f|;(Yt=gU%qP+$~t2DWHw}k8LBv3p?2-r?Haxk!~)0(%5RXOX!@m(@oX0Wq2;83 zhp*JZNO9MfU5Waps4FMIedRd%%Q8XOv}Fr^lB`*(Af`tstx3_{ z|KYCyN80_>otlx-g(30h&KZs*Z7NQi?zhFA5Ke@_lYW&^r1n25sM?cl*ot^DF*;ylIy zcFAQ>ah6(JkH=7pYAz)5?+e9(f=e$Sz(7bi>wk;PwPc%PHh8P2lCTEX`N;;?u=KSR zJ>Qn%7l}qpSlhgF=P$%MVmY4*WBpH_9BL%ZUzyE1G4d5INJ6qX2Vp?)8Rj1xBo7@u z8a;8%5$p}NY=M3#NX+`}4;pk@?J>wLPJ~RYgaCqeG9|?mdN{?w+w@&&Y+tq;&rh(U zE-yw)q8MwKshjn8d{>Ju z2t0x8%Ln@I$tSxAOB7TnS)}&Y=ywswpm6(%ynw_Gn^`D2uU_4_WeYUj+sBWW(B+Hy z9XN8N3q~?LU!YmC0*g_EnE?^M3zsm{OM@k{cXxHH@l#QGvlBVwjS`4G1*9G|4imkoFJo*^ANtpEO5;gLY5jtf@% zjI343*#=faS(Nc_9c2+C6AR;09V(4c+cFjtu3P}OKv5YR0iM%l)G9v~`M2L4J7JMq zO0%OJ7Xqh@5PVBqj*I0^jF)VDn?^xqWZTcRTY2ZlVMB9Des@Q_?Dr%~WP!&b8OwF9 zGQHDQ&6PZ%p>Wp7Y@K$|oZv`@FDsl5Dr63~v`mdVpdq%^$Y|i`F`D<=8m2Y>s_6_b zo4&xyC}?IuTY7iXjq%qe3fk!pZwjXTecrFkLYN=9%e`>ck*~1OdRGv9LN29l%2SFT z^ikxXv4aj8&WigbIayy@q}asFEZAxcD|}S$#y$uPj#t0;I5K=)z1X@kyL;OQDoiGG zGTlqObcyT(poMagt>CEeIB=rP570(rR7hE0I6ZyWPu+4mHs)e3!<3xXEMrX1Z&E6y z3Tz4f^<%w{PbWoUbwk5bmupaKV7DO|JW|8t44f9BSHO}sa2Bu_UOv6D;b{r~8Aj6F zeEhDJCb~$JFQ%C#K++czlz^gu$j%={HF4p>r~pSsMCiq!?i73!<`4X#!l5>{w$KMe zWdx5~e&G+BvnumuHW&|YZ{n(lVs$d}LM7ORI8TjO9;4o)aRDBdcl8u{<$a?*pxl-F z;V`i4>)UDVY}pt+cI+uFN0I42>1Mfq8}(V{`5<>Xvf>{ok?>aUxyiOCkz2QJ~+2|b&aQ%v5qEqL;T z)3NG`XiUKrAd|$zwTup^h)>x%K^sAu1g*H16;oLjk^lTNM_^^f!0V-jO}PRghTlT7 z!2C15$C>};0t~XxWs)as_xY8z=pOeA+K_a3FZqFJmfB{6!kph zn>bm{EF$hA`GRs4_c-4D36r001^UZ9CHMHf9D_b>cMwO%e*ACAmYsYpX$Jsm3G3Fo z6J9|so2Qo5wb+q$J+AB52iM$AN@@_GFvBd`Dbkr>s6|KQ@V&;|hhAHes-x~|emn&2+|PCj`{$pc7@ z+#BWyO*kR&qcCWd*O`;I)-oujO4JC$_(@FB*+01KnX75)?D_Nm1v01Ta$V>-EYnM= zv&OLPC+Gr$ZTA&($Dd@1#MB94x!~|m%L@l()s+LA@62a?{G1>ZQ9K#Y`<9ieTX)Wz z_Xxpmgi&36<-Z>`V$}5FZIwO>a}_t2O=bm>y9XRqbXG9svXY04dN;G48sVf(NcKur zKFzV#(bjgmGFq}C0XhcR8W>KgLi%xIxA zW48x|hR%!@4mv=IJSD((%|vJ@g8(CGe`B z$YDJtynVUqC=FZw!=S;u6z@h}_M?LbniFJzJ9q5@hw=g9ym(OqGa58>)c#mtmOOmu%xsmQ$f#QS;2hpG4pW)5 zdPI`C!s#hRuUif@5tMrM>a{(|VPMhaNRL%-RK-vQO*1gqgG~dLkiI{sK!5?As4`kC zg9>$}q@0!tFAyIG>Iv!13(pqqeK>sGJ5FGh*K{o{>4&QYLOJ`_8|GNE>XuLWXzaVj zMh{n4q9`I+VH^U)$5uPc=4iuqqnN5%1jiL9{zO#Nedou6mOq=wbEHPZ+=n8r0aKB_ zbEliWh`7=7xthj~O?f|EmW*CukU#vO+G7arj3Ci2uyN@;#R`0Mk=`d#Q?=K(m%8eL zGXjH6Tj!~hHu}c$-$Wf6HA1=vmzX+OTudwk70Ss89%WbF3MP@!(E}9jvi?>wJB7?c zp-pguO8Dh%+GI7g_khBzs)&7JvapZq8kyQ)*w-B+u?myif{AqKeOY8tPNQE-WU!G(>fBs!!7eBY_(OIv4Uz}-i zukFY*xd6PG#P?@`W>aep5>-9#%Zzd$ZYU{?CnQI0_3>>hGT~@FjIWx_g`8bRUy{&|*#;4*#R) zeVJ)DytlPsO3JKLixaG>49&;N8T2VU&eAuu3u4zWRiwFR%LgkRPw{z;uCc^KaW$d@JnOigfbi8W)#7+O;I~D@Crzun8uAx>;v5Pv8=pHu)zC zw7|HFz_pYt%N8y~!Cy}(f_X$-X8cFY!|@C`e@a{LAL^lMb4Lt()89y%k6?~_JVyY` z7>^ew>G(@h%5uu}7&yxwJ{}$2P3Yyb@Fh0hc|#m0Yye)k^erm?Y-afnr7utwaira+ zi)t0Ho9GFt5}hO>Nxl^9H6s^c)Cb4$4-mI{-00Cq^DuNYh1QGJ^3lBJ)>dXzuy|>5 zxb~ud57GLFgYdxY6gZANl%G>$$mu7cx49L&V6jgYpitz`^Q0h!2@Xm9_S5>`-tyU+ zR()}@aTAoMA4@V!^!u1x&o12Y1``E0YqXL~|qzLjx*wadL3N}8Qupk@%c)=C} z@hGQ9>v#}RL)cwK!4_$uFuBiVZTCOR?i@q=4qhpH_`KDa`c-?Yk575ycL3v5Bh7`> zcWmC%^zEhMhONZYkI9X{->8U}*l_t5@T(Cx(@W1pv1i6Fue>w02EGyd9T^bN2P?Ezn|o_dU!X;_!QfcBa>xKh_g` z`&JeOcD$B-bGdYl>uH7HfGH!gYx^}6?<;xgofjl8a9z=T{EXjx=eqG(uWj25aC9mC zH!MyAH5qUL1)t|fXN6?i*@)CBtXPF%k)FPrQm4edl~;}xV{->B&Q26vgaF3V9TlO4 zxoPS_bFhxi7r(_)Hv~{$htKYGx?|VHAS&ZU9DOineRoOv9W7L|;DOXYFJHaV+ji?sMMXtU&Ifu=SOF>8S6a(JfjD}EY23%T-O>79?=T6W z{3*Ua?Jtw(%qAE)PMlbrnHkGhY4I?szCoYL<|yt`=CIUHit9)WDVj?!fnu=7g*vxMg$PO-rU6so{~%WRgz-z`B-8t4}-! zwi6SjwF@xXLEDRq!y2qdem`;B)h?&&H3UNfki>{u983&VAmsLyXcMHfaTtNYAH;e^ zAT%%@YS|I4Gahj>v*cB&eC1D#jRTe#Ej)CEg;QZO?$}914LJE^82ecSP6N1L z78t(r2>*}?;R>^UfbrSf-l-fdi9h>iH{d~(WW6w4 ztLKjZTf6911E6$26~QeFj(Obx8cD{2VguDQ4zVJ6;yOjhEN`DYIc&WvOK0Cx7uN0o zJ89b8mcF{EN?*{g((SWHa=;NL76*cY;3U@3zQ%S!VPMr#i1;XG#^eC$O#$|~ROE6B z3Oc%p&tw)!9cU&GldEyK5jn70ghsH4`B5d-GGf*ZIl?u<-kp zNRpY|_7R0|eFvCPqtSZ&KeFCDoXfp!`%WZ6RFY(>Bxy2}N~lDsC`m#{5|ts%WGa<1 z#402SO_HK$RFO(nL>Zb#4Tc6SRGPe>b6wm0JkNc-{c&yUYAyVn=XW@c{n!V%Pblmk zPDUD`u`IG4RPS_&GbH%6tYv1ez~XXZ?w`|w?Bqu%>=FtR)R6^FliO`D`ezVEMpg&d8R;v%!b4IA7Q*Re9e@E-%ihw?x)1*(n!LayF6yYL(lBZ9n%TAUli~}4qME<6VzJxX8{nmQitP$90!sn@xOtGOVM`!{y&VPfC*c1ItAe14S?V>(z8rt zTKhHa_>d-^u)t^_VnA`kRRJ) zIl&9|ym$I$K6m2&{WHJqFo6tja_T8kGi zPME!7^7w=>WNd6SuE(HruhU$R>WOZ9OJv#gQ zS!Lx1A@k`H(jGVsoI#>}!<}n4F*HCf4<8rVN5)Ohk1wuGF)#>bP!3<|-s1$1vyZr4 z7~?}5I{;wixa^;<5F$2kbV0Tulp7aP&E=+Hjsk84)3#T(#F$qvrxT9o43+B2)gw!D zTCV;YH)>SGD3#DgxQo=1&%5~a%Qt=YRMhOh)4f!5e;0?PM9Rzzg_DX*9Xn1+Wezuq zlO19t-5^ROn@1CPEkk!7DMDQ#0sEu3pK{El)x>IvcUHNX*(MY0<`KFV))%RZFzVu& zb<+2^JFJR`&6d=P(K9sMmNWGC5tnhWC!N2fjEWIb=mGRI6`j^7i0bs(UbXSvw?kHk zTaH|~uJ}Yed|nQ&E$GL9-+PZ#-(669e3#m|xJJFy511xMNJxP7`ktKY?Ka5l!4fI^ z-BvHhV{lBUwH;a4Z3^1BrkuyW|8A5s0$I6RA#TfrR&Zw&Xc zeB1kvj|2n-^&B+EE`)vZlkx?$q*s`Nij?$^zd&a|`Zug^$~CY2heMfu{pO7u<}0_e zk!YA>6?MsTx!Pl3v9(5IlUO)K$%zxNr)!@r$~LQX9eru1ZD&kK=yPv^7+!}-?GnU^ohw*50Z=aIONmT-i|>G zF@Cu@IUaF!ge35j85dKcQn{hOk*SUD^)2qfP5*5Y(y^<2jbv0>{#v=E`1-el8`&a^ z$vFFaNXc(6(=|3$)A!zuWwqn6;P7veUE>G*n0@~Ic{Ro}t3-yjW(}tN<~SGY)k|eU z(AEZt`QyviuV$1VQR!v2u~gW zzP5G^ygWI7)!ZS8H#`FwkGKv&xD9ScqCxs!ug1C05c^@yQG{LR;iE@|WZE77U@5@T zIlOIFhb+fAg|d)csJi|*RH-gP>Uq{q(q;QF9bkPkI8Vrj{l&G|$SLb=WrH^c)hPoQ zJOlue^CT6$9JcNlVSqw{kpu`0-4i_d;5BQOnhmqxyZ&#e~<%cq%JN^&DW-@9*Db_S$=)7_0vh57YgA@Wh~NGPnBY zWkmh1Cn;jzc3~z&GHIqALD-a-b}tSfo%m$p{zs;u|DlWKr-#b-Y5u+OM@+|phbxVC zw2g|v{w(;Xrp*}+j+>smE(r90UF{Qs5=dR)rqX`5+VvxoDoX6fkvlm`>X_C{ROxkf z;d@=jC_u!Z`VrL=)UI}SmMV&G*~Q4lxm4xl96-zGBtBd)SaqDZymf&OPRu*rB7WI> z)4^%)?;QWUBC=jmyfs5)FdxG~ z-`IJ|eP;~YL(K*_7)EK&vF+U3PM#q=TA20QEbrk-baaNKO(HiuAkb02&43o{Dw+*v zGUD}z;)QpSu^xPVBzrh@+4^6sO@8@h1AVTFj(d-^s?|E7(v=gqvgP{q(*>1aqv)Pr zfa^Ow-_f}lZZ0k-|D|&9O^I4V`%`EusS}#>V&=-gz52Yf7{S$uQ2U#)r0@%9t&gDFt4`Sc(VpgQ^y^D*LD9rK0eJYNnvv zksV(B%51r;o{al*Gm;dpETE`1S&%= zgYeXuXQ>qXj%6%A9rCZyH><*TLprbZZW^q3*SdeChhpX7QrR6j1GiZasW~%Q4?zux zlJ}S??;g*~RV=)pS6XG1x7TXTdwsk2kS!R-?%uwAhP%7^?W+AwC3V|DfW5sVzqSYv z3dnY)+y2WjWr4+zFd{FM?az?BnIIWnO3Qg&Eb5|R)ugKhxqt23cXeaCc-BU}ZZRR8 zQ^|TE?hW641jt48P-#^$@$6pj=H(O?7a#DM^J!&3>UOKR`YNxK#VNDLsANi0^kMSl zjWd;gzlndv-k;z)$Z7H)oS(0C|9Mhd+s60~s*`^(&j%NXmYd`J?Rke(uGFE_ZDvBFvn6q#tcZ~X5ZQkY@}a{8 zi+29du2J&dDIWf=r|fgT*;fwT?Yt%;HHRt?C^Th{Z)R6S7PAdu3=812ljA zh2X%79lbaPgVYTT2X6hCr`l+hY1h&E0PuU(usyIQ7&%kQ;CU@CUnuyKi)(Zw1?Myk z71a!KwwF&eF9KQdTd(6}rlp5a8@^)rq#M97U|oXffp^kV zW%A_nLnV4zPQBk{3aQGYV@2E6*k?*-WpC(Iay(|*)!YxlnV1vSCw;)ag8UEL-aUJG zL3DH|oq6(|(tC=QU+|rbXmGGB94{Q0$=C~71iPQOn`bzAa{8$QtTBaMHw!mf{MZk1 z6L=A?I@psqf^Oxj`og%wFNi_Kq*>V%X25*9`_nbQQu|aKQ zQdxd)vnVH5!w8#R(XZkc1}gVGM&%0H0e?*J*9UBC-R^K`it&Xshp>*U7a}KCC*Pvx zcqC!|*R-^Rh@;Q)QuU+6kJxZ}RJykW3}oVkJo)6<#QOYba5TRXA4=bNd+_(cWjZlgTP-tL~ckJy%@*rK1oU3b^keNWlh3KiA7AU0{AZeypT0$9ZllM6U%4gh#~|V2uQ^v%hBe zJK_pSMxo%^ziRBRn?dW=UF8QuTcJuyz2#_E&%kHbO;2j}AKC$f&}3jNqp?-Yg5}A~ zaBT8uc-kGkk<1a96DRU>%=WSfWzzt2%-^TmXKY;eqf|`WP7oCfg|v|WK#GT zj)|DRFEJdO(Ly0aAWR-eWl6rfMeB3S!)bI_iBM`6Q7{@RRZ+b&%TOOK(w+}H7$1CS zYK-E5hE85wC}P;#wuk$GT~)WI%0?#w|C!!#!cUCxSk*u|J8~?TkzvmL;{XH zoy{{8|Bx$`nOlq_)tMhbG`8qH+rK+egVEHY1q*sD9>vB^$V)Vnj4vN9(Q|dgx%?WL zcUSxkQszKi>#w9_3NFn@DLFAwQ_~x&tf_c^d`S@0@cY1=U|s<nA(LFA0<8?~E+YGcEm}HnER;q)oGQ>0s;XETTYY?-7jms0 zOm0|UK6$d&Z8^$2TF?s@On#)-`xwvxm|`625(iP1T=8Yg#xA+~l=5R-1wWiYHWN@L zg1XXJHziki0ot0*u^SbGC|D-0k&V|$?|oE}$}1^JG$N@fDAM$xy2Ov8O;63(KD*-L z+;9=(bO9cDH4-S3?g+6rB#@e$CjeTwz6S9S2ss8+j0kOE3IHC_F>DRLK24Rtx&Uz1 zk)}xCv2^SkdaLQsp`!4)q84(tYRWzzYYZXNLUMeH;%&yhVLn*?Z_zmjvBgl>`fCv!3GoLNhZ0U$?>!vD)c(*<4~Zf9+e zZs?4`AbHpx)V{S5o+Lqdzh2tlb=IhJ=#HP%JCc!#20k@(gU$tJ7#EWW0O%?t_`+W< zNv6sEkBrsxF0KF$+I!WaX_fb;HaAE6uUUG_44J*WuGk9t^3OAZR!Z2E#@?% zVB_Jb*Y%XS2Replt99DYVe>33L{uJjAX?)Ht0}ALC9dMQcCDf7?yXzJq|4xc?_YLC zvTxtMefmHHXRM<%Wy`N}iH3@$K-UU8`RmGVs#; z926W(SH>pX&k$|$#chQeT)UmCv|=L~H=wqlN2kRl=Y8QxCtVO%NBN6oGuLsAGNZ}R z@wm>Y@>b&)@G^Go1XQ?A{+6SK5C`CAjNf#nF9*GinR!IXG}!02Swe$rr0dR4q67Q% zk{EtyEvMJ?88aB|M8x--Zcl}NZ1`J03t6|>@e?&{7)Vo?V6tayZM1y^cOgqPaUI=3)Zv|2f?K_u; zi*RkmEALky5%m-5FhKeWLK{+F@Nw@sd1$l;zbc;4s@vU1tD2Q4&aL(rbKB0;w zqiLJc2C=LpxVNSVC8*BM^#K9&@IC?UgWqTb_&G1`Q(4_{xcAK4zib~!y1GttJskGk zuDh@@qwGu`cw9)QxMybvUy~l zkb%I0aW2g)Fm)Y$;X7Ac)MYK#S*#sSqV*sUf?@G8!KU)e*|U(mQuB6bRKP<3@-<4E z%m4#rPRzybMR0BY!$Cwu9spis*RB}7$k{ov2~z2KuB-fFBK(+=%mT%Rf?ihKFCk;) z(+j$2)z#&GK~<{sS#sztrpI`F`9f}v_JHq?CkVS`yQo%75XP_i`j`2o(Qad_OmhRu z09IVOeZPhcxFU5Ke}`0VfXgB@Y=ZP@>C*O%my)-h7@v|_wqh=87axsGQ zF-X{^P(p@yw&6 zwYB#TyrFVe4i-MGIZKk+HL#5tIK^Glp4kC>H0Vy}@jRylU}yKBre|a+P&89JeJ9_KZwys~Kz$R{- zsQ!HJ?AeBTdXXcM9q{k&+O87UH6I%40sl$mhKhF=%xd?9eX1<}8V)Em#nkc&;{%yMQ4mczbsju`qVGq0f@U$;Iw=24#3KjIq{$)Q<-DUI zL2fTxkEk9fYa*xi`WK-B2+oIt28a4%ih!6sb4`9UCanq&aTDYP@P?i9gh|Ax7;P=B z4QwY~65X9iawps%;CGxk#J)fX5K=%={q}-EazW#lfZqlHuFhXi9zMiZMf&S3Yz7b+ zU}QQ!RI`}5;u*v_4jzjuF(lXUJ+JBO zg!gkVSx%a9>2;hQs;fUQeN(7wWVD4t9fTcM{iVy6AqW;6SE(uy!qt2(f_sKl5FImM z>BWm(yfHUoi}zSl{D2f7!Ev2GUs!O+WVml?0hdA{ z@$q3$GY;sZ9zd^qe<<~cYN;_uC%S@AW>X#DgpgmeWlZ6t{b>}0T_;?qlO@7%sE z;aN6y)qMFPHUO`g&j|iDY0IyNwY5p9-IrFle{3fNgHD|al#jDzw}s;v1@x^zId_1y z$0(HFy2WW=tGyS4&y!piJX-4Kd<`DsZ0N;)N^y-?(AJFKdGj@|0aJY{j8;u62S>R zZ}C9vC7@6f3ewPU?)Y&ZI9PH=hfkXH6rt&LCPzxt|2jbt88yh?Iqy<-_Lc85Js?2G zLXQ3d*8mtP?8I#+noIn}<7Kn;wJg;*N;1a!~C*}O!yBn(tqXTqIx^Hl)! zavDr)>m8Pv7buu1Or>g7mCM0A8A9P2z@}zOccY7+-vV3L!9noK#R+%6p&z?-0Fp5- zGTz52=OQj%UwE(-lNk-sofhI_HYsOmu|{N6Oba=MYlfbCSOSY3cM39X`)s2NymU#a zOb5)EsS2j6Zf>WJ9b4|{dEZ%lj87G#qC-zH%V54pZ3yX=Yl*WZzo=;2Csl`gK90pP;5g&cpHJ62$?SiJ9kMdRUsSGkNlF@BlWak&X^#>_Xs5 zP|%r(2)H*=f6aVLHCL+dl6?;^?*5MXeCvE~O&dK>&AuBtTlTU8DIB3c{_B4Odk{JV zLP25EBDswA;GYRD8n)*!A`>q!lZg|BY@IDmAn4fjE?!Lk2kne$68=8ux7iA4bosyV zjgRu$5m2J$=)dy~k6bTxC2#xCN!-MQ28lWd-}k^@fF8)X64T7{jGFpOKrV-8Hg!4b zv)-ejYmrePaWo6f6oPoD(t-b&*J1J0x6?*$D;7`(4?brns*hUX?EDxuY^Gx_jE|DU z^u2qREnOPr;S?04r(xSmW)?R&4Yy4q>=6oBeo6EOTw6SM8aE;~(4JD*P}}i_)y3z` znw6WEM;Zs56i_SZL2!DvJr&|O5;j}k8MHszNFK3Pua!H1E#*olj~jRQ;lm9u#heQi zk#v|S$B|sKMpuyV0uT}7N72Sm3XKI5+mzH))L;v-K#?8ZsY|&`&x~b8T4v@@iGf7A z_qZo$rKO}Ua#HYU2#RLtPb1494rN<6)L|-`ubrJoE-y{gAT*WZ4sKv@a0fwq)3?`p zpMAugIBx9Nk0esoePwC~b|UCru50RZH^s(2!}2O3!UF7N1oFlzE~PJW-eUcz9SGTQkh&4CNb* z7Fh^FG(kh2kW9xfh4f|iXk$PkV2XUg9&W-oGAMIH+?XuJi*1G?%~4=?0wtQVleXHg$l?o73PgWoCchhA92B|JsrS)kz1Bn z-neb+R;De~W7!U{h5pbU@~!81t_Dd@nCmwD|mdn$DR|$ zO-F4-ByAaoap-SrE^ZZVPvW8W5*JrB32)G-SPv&kRp3nczT;iTH0LXUZZh>{^9QRy;JP2Twrv^< z>zsROB!+s8CeP`LV7u;A_&z|)e%`z@=xMmLtwUjRM6|TDfH0uMFG;!22IiL+>dBKs z650n%6YC^moJ0E)@q5&2)GX95yBojLCcr{u-vMqudHncpnsGHAN4Cz-pFcM}w;-j9 zdkUI)EUr2$r(T+*_bdlPBos&7ec*=X^J}2QmXw%--kM%bw9|6=PiPYFD|57>o|m<| z`ytxt>GlF@Us1tbMM@JlEHhaU0VWrmgKX!QKk|98WH7;2QJ%O?`kW=3SAcji<|F=9 zR5S`x2wLNjCMJyGB(@>28ARv;G~5|hRzg%fBW&P6{!mmY8~Xlbl?|m1kmwne2KsU! zxtDL>9=W`hCAvk>`Rc5s56C-}Ndv~F@hyVO@k|(1X(2%P+0})|QGUz3AZYXiAP^lW z*sj0a{trHTE7q}hf?K1h0G&Do(E136F`87 zXY5wYysU5Nv=#DYj-8fOtkN=H-ygbJzOPNLQe{Fi5rj4-acfLqJlqmU8n-6cN`Py- zKSFsLK#iZM(W|EgVKg*IO8xrLR2K5dsWxJ!W#Nm+-Xy%oLy?C%vj0wEn^4wz`T1QI zh(BxIU-!O$VnCx?nbA(^{v|qLkMsI{y^7M)($J-7^p~8(=U%XA zkxlE=(&y))vG6@GC+nAWqU@llN`Zy;-YvvY)ATSTqTJBZI!>`8v`5j>B5SSxWA6zq zFZ8w|;|wbJ8Sj_ZY=fe!bMhoFkK>5<1P5|>e0iGbTJ7Lzrf$7fLXsMv0cF9E8hp^CVW$($=Ei6ZXW>kz=2;} zq#SAE@Jd)&^>TOCv17>z2{kQ=58q|wIX`&Y8MQs8@jEvb#tk~seh{I!3JnQTgeR|K zT)aNCSCTc>UGwLcc^0U@R1+W~xPE7x#yFjZq0gv^e?^&g(FKNuX%ao(!amN7E! za5=Z=8)^5`h5-b=YwsGi$A@(>Np(EvpqZKKfhfT!&$mu1QXQKm;h~z!g%eWm=629! z+-G_O#-PMLNO&ZgH!-x^1i&Y|Ge|O0YxHO^V?xP~e*WvGC!^u;BMLni-fPi*ECz2t zh|<6um4k!z3P!d;lsB;dz=05Ga1yuQfBIzRU8x9@F*S7~j${Gbw&k{Mm_)_~Ulw_1 zvg3P+eFqNMe%7NC;5mX`NIh@Ip@%Z$@kCe;G?p-$aBp*0gk>H|t7q-iLlz5G&Rf=L z@q;gfS93w|vn@{yTDr6m#DP)BygWx)ZVD}VeoV8r_oh@lF zkTAqn5Ab{sqa7POlROGgG_ELJIW3!RyKG3Wz2KZDM2mC7=}ITvc}wLx-mUnM|Gu(U zNbS~DrsxJNp;#T+>S?nDcLoH<{O*w#|4L7Pwt2*vwtV;)=%GU0uR*jDi}++^;m;XNHQJMEUkM8>=9Mvi3`{5DJ7 zWq<$0w5R2&+jJj*Luz@Ble>ga!^dh!4}2{>`I^F^4`nSHg?gzlm?VNvGckS>c5BZz zyS^P^w9LN*$5L#!2nJu|Z+iHK_~c(R5NI?y zqpdqVomlk6-kzS8QVyxv;=691ICTo~#Jd0!hF0!wEAtCwdJeaTiKVh<#*!sVa=(O+ z88qxRGGD!277aJ+z4v8w?N}@Ab3f&m%eM_$v4-|7Q=)Y1*To2r@H`mhQReR| zbIpe*TWeq_T;512s;e?3P0QwYZi0rS&59wxSIS%78XkLL_`{9=-fJ_G)KyXqAMNI} z$u28!qUd)X{Isx-UAI-+r3=phP__5|jaYt+LSvPrS9W7I)_%}_^Sc;wOe`MPN85Gx z(N^WU8s;`~-k4fSDz^<8tpSIEN6BE2wcxK9mil&Ua$&EJ%AeMQZL$zQ|HpHAO0>Je z({d8i{&lV!W&5&VQy(d4o1<{Yfoy8_^_W4XKxm2sV=+UO3MB1GlC` zWVlYX({OReCM%ujW(7YDP5-4Oi+6fFEZBL2imYufxe%-7)4-M2isg@&j^zxpU?62<~>6E!;`wMrq z+Xw7RzEEDtbzumUBTAy9$FhMgARl5bT6%HXQagEi*t!(0X}e_g z+@Y?02f$q)94yrIzkmOR*;U{zKB8XFy)-6$OO<;AR4&@orkdYQ&k7~umMi54Upv+C z@vpsmJp|J_a}Rq)nd^p`=;vh+Fo^6i--pn9T6+2EbdG>DWM5b=M2H2K6Nk5o_wBSZ zRh5-Zy`>cjfIzT9P%el6KJ=rym%w;>8CibPTyeZd;c%NXCr|D^ca|>$jo%?NcaZ42 zJ|HMOq>hztq>>C7qA%)RdgBVRlEOmyGMzovUOqk&{X;K#vP{4;7?3eebQ)s>`WYxu z9tcl6a4{-T8=IZXZQZB3d)BEha@Sv8c_uU6p6{~1yKA7!OqQd?+qB<`TC|5h*wxxH;7f4(OTvm zzoU*-w83z<{HA8ibkIZ8g={C3Mbs{As1Ny@}YHF_iZ z+fcf&gQnZFligQl4eF+o=O;Vgd>M3+PgptLLzySPZQ~?;A9)Konu6L*!*uTT+jX;Y zzlKCsetyE1JLbyeCl&HN_`=fpxl@t|Ghq3t#{{n>psL94_jG@HBwJhQ=|XHgkM?_* zRT(l8sNzU%7vS}&6~s7vu3qg&K*%;mAJ=Z zB$}g)gam4QrTOz~vCIM!F#L9}F?Q<^|LH!pwgb+lh8CaO&B-)Gf! zU?MSb{hVBj)0oC+qs8LTqbvNmVQ`htEV%|RH|yg`3fCUYUT>!M+|V#rcZY_HyCN55!`3HWAfP_x@I_{s|=gd{A<3j_6 z{~B~_lk4AY9rX-R1uf}7z^ID z>}yYFS;ap$J}fA@yX4x+Se25(qkbyU54MH)wrN);`lw_t7+Lx0%%84i`#z`7zHa@K zsGlqKv-;1eKksj~Ol$pG6nAXd{MiRG3)1TKJanobIiv41JLp+>S3>&JblCCy$Shqmxp%%>qZd6Emn~7+*(ko&Eo_RypBpQOI+qupSF9Y~ z{9|SQ#@3+3AD4Fi=q)!}Gs&}l#M2ck*TnC8Qg?09538mvMZJbtNNB1@r{muUA@;&T zzel^KOyGnvG^~H|LhXJ-KH2l}0`bVBEIL$Lwiodu-{q9%-wIXd-H~$-B{errvX9)3 zumOFy^8{1zFC#Ec<=f|eJGzGj+*)n=d(jNhx66G?vQ`-bryv_sg)e*M%H(u=%Ww0p z|5F4m+0(mLe9XIR&QrR&w|Ogz+PnoRaehZ2%ddq!H2XhZIb*SN!Q3nNBFuk15Yej# zjhioD&(&7FYVFp>3p0;^OZEJXkz4xt^TzWlcM+S>{iH-%&2oOI<8S?*7NSvj!%S}& zEf!fJd<^h^2zsw049BLf$p6bE4o-}Y`@JvM(mL0i7#FI#Vf=7W1tFm2`K$pg#nmE5 z-w_}EE;>udCg~OlaM`>k(mcfRkY#u* z{qvZ$lmy-eX&VY{m|})IfnlR#{8eOk=J3nWetCa9BPs*55%&{4lzcr zTek;i-kEN(8I&2br2B3||5pS_h;~ZfHENB&)VxZ51f1=cm*HCw6I11_A1eD_p)}ok zAfJ{VO{+_Mb?P@S4cYX5V%sn%o*9?a|Id&A_rvV)#+8Xfeddv>nZxnIw$rNn@^Y^K ze@D0cT1a>XvS5{`E`#>(Rd9J?_$A59Eb>59_aFcN`q65AE#$`LSK~b1c-l;gARMPd z37vg-5&!o$d0mSr!>pxiXZ)sh!Xy2E|CJ~h`2YU98_Q$QiOl-e^xwHKH?FzQzTfwC z-2eOKe6tWopWcBWEHgar{nsZmwY2}Mpy11lD_hTr?7H)I*nif?|NU5&GZLhR{@2Ip zHr4w7{oUDj?RxIb<9biMuKT|}>5lH<>Vqu**I!B8SYGx1$bUag^}?FFmft^5wU@WS z!pm@>l$E`FT%(u;WBhmrqyPE_Bj48!$;YkXUxk4D^nPNQ*@LCZiL#q2sKDO0cioQu zKVdW>ld$dFA0#B&ydH4f8K%+5;z>4%#Gho^A^irzU5S&!$!`{NVrf<4e#y>xw{&)w zy+YU|=`SX{hwk8lz@_nYfnM47GFdS2B zZdlF}W`|&VMSX0Lt-vE6O_=jNAHZpeNF5y=pU&J6O(?LC*fACXT}3;~H&u;)(6X>= z(5>`pX!XG3v|KxP3Lc=?F;2PF#)d*H8mMe+U_b@8f)NThgFY^d1)oa{%98fx>;RPjcEquSzIH-}de?SaDs zIRINan)aln4N1OJ{~JGqy>OCu?cCYSSPF6$_M}vtl`flHuWVXNeNQI~2x2>H7Lu#) zilOjdmyx1OgN!DfaUW2pe#rMW$Bc`xSH?RRHi4Jn5c!=B4ps1E<|cV9^R)MZ_yBIs zLY2#D->T5#o;vVY+|HfA-!K<4No>&nprTnb##@?pr#G8k8;e! zT>=QlYQ_vao>%OJ>qD6>&o!z~z)OeFOfx_&)j5eSW$fi%>R?Uk>LpxV&!2CpJ5CY3 zz|71{E$F&97~vv30LU6~(C+;9%~(&bg}Kq1xt57<-e0povjgqq3|%y+5TFKgKZx_7 zyXQVFaQ1t8uV5xzPr$x@3JUAk1`OvN&o2vCo4YiuiacZq31J2gYwlfjMi}!%0Gp!K zB0AEW0ZzfstrI`Mo4{Eb?1}%VFz()wOE0%m4uZe?bXs~U5~U0`AdN_XO&v{qDiG~F zexJNQ)0m;sR?BDFJ!EnLU;?Nlt*B$3TQ11L*nq&g>(-sK*6_`j4WZFzs>yTP3iEgy zEzB06Ko^$-)YbcdD-$*Y26S(qwxNCz!##`fDqf zV~r9Q<}-{)Gr=XS(d6#?c3`l@>k>h#Kn-Lkh-T>$u54{B5M?0g+)>C7gwTxfu5T5n zad}SXym@&zZ)pj<$JxJAO?@O+lw^O^mv4c_OkoVCgBl+aj(B_p$X`VTTaPSh-_jP9 zOTFG1ceX}oRIqQDmNQ8_|2@@l;lkx!UdQWw0jV^Ny!jGf5FSrUyv(IT^Ky6`q@u20 z4^_jzEd`<;LtIWiZ|{beBKh*DW`ap&u^238%R2-dg++z44RfStCp)KLIQ(S;&z1+v z@`HxzTwR!--v$pL#0>9F0e@nbsx2)&i33Ido%Fa=MQGW{8Y;I_Aam3#14BO9G+S;S zzY`3x&O&#>_9DlD>b|aJ{(DXk+$k8yN|yyFZ-1p~6{1`|a`t{Nl3gz?Tqz9E2+mbI zI@(UL$a$5&KXk(HVaIx4(hc{S5m!Xl+*PYqfp-BJK0LV^o}|!}0`o)}&0na9 z&chfjz+iNKwh(uCl%{|rFLUhW7jQLzS@ZeIM0mf5%b+ANGOWMyrW1=d4p%0=1RkjG zkgZ!|7#$lcv+E{_3xE}1&ON?vy?0QCmxyCg(8oI$IBPIr~$=}^zsjdz7Xylx@|FK#GYHp_bcM!& z`5OJ3TU*i3kmQ>8=?8n9y$bz!lImQ|B%b%GM`yNuS{lIu;drjw|_zz>+(&0CF_ zLoRlH7bfKVTn1)^O6FKqUAqfiI<9C2+JLVEe?1E&SJ`aG3;B;&aT?;#&Ay{`@;!? zE0Y;O)q$7GiLk>nkMxn2##~EC+ysI>`Ex|L;K$QeCQFTQE6|03Gp`rr9~*-HT$fo% zna)L*EnGN1hTIeEjQaFpUCB=$>v|~|`Ioiz_n|j#-rSp<3I?1HoT@M@CAmfTLenaCS(5ZacUo?A&#(?H$-n93~3=``_1-8e<{H`{I*aHdhb7m_md!K7rkN6t1YZokj~qS9yP{fX@ev2#a=jYT#i7V6 z{R|mFJB{rtgsz>c=PcoPq|O0!pE7>@XWrBzxEnmbrc_nyIk)1~GDufudH!gW5ZjlI zfhv3q=~AWGTTh;(ne{0D!dy%MZJ5MN`Q0)9tag&*q*1Ezz2Cizf1{-#Cm|6DMn+OV z)^UZ(qh5N8U`z?3-Zi2M|0;fUbSNJ<8uO~69Wxi)O6P9D!34Ti@wY%qK{b5G5oo~d z%`XPBr9oQmwNSR8YEJtqg>wF8tkR_2>1QTFzk)of!bYR z&o*|+{+aUix&FAAvmd(;evI9AWW9yCeZPJ;<2DVsd0h9L&q|*i1-IM=44m~rv7pyw zty@Y`PI3e73x=xqj0x{KZ{PEM%NCvcT-pA5!>O*yFblCU$?HG0|BP|LKeu&-_(*2_(sCaS=Q!9jy}WU-GTvz~A;Q6lf^miyB7x!qtnwEX;sP0JT}Dz2lVW;j*oDTWQuJMJ;Tu)|skCoaJn zi7%YGI)FJg^LRKYyA^feg8Q|W+#6?db;x&>93E5VN%L=qa-G6do-|DQ&w-eKETfmM;&?z z2k7DgStR+BARAaaV-Og%x{fU zg&=2;s#e|%=Jp~2#%f$LM*jQf97A*aO2{f%_d#*(bzx-Bp~S6wgcre2cfPje3VDL{ znZeEXk5Hra78A3@r=IN()r?ifTy=GGg}SwQPyxSbUQ-*LetbEU+?TJT|N0u8wxY;6 z<%dCxV{X-*I|Fvz#D5vKP*qi)$3howZYJ1XdUOQ{L?Nl7t~prl83eJO_R@7SFbLdT*8>p`qYXqBENK8@>Z~DB!@RD_0pa9F+n4u50SQcjjJ1O>T@nx3gEy zzdp#|b}9Fat){-Qv0$4?^~E1)anbTXomMG|(pE6Tmj$$E9*#;0rU?KvGMimlI)twbSj6{9CYw##BC1sl2ULX z&q!ZC$+x8E=T>?m_(BhEB;5=wK6R>ZL!nIfEV&yX@cW(Kqj*p%%ZC*Q#r53I0S&%I zeYW*%cptl3;J7d)XK6tOQ~Y)3)-7-FaRVhxOvm83u`}D?Z9z>hUiyq(@h8N_u06yi*XGkV*ix<<<2!007 ztjGA|>?s^VIzmp2X8LTjXASGs}L-l8p59u?o8|tR|F}vPQ;@ z^2^Q9QBz^p(Bix0<-K1YBXJMk@_&ma;EaE}--94W004M`KX{OAn#{FC@51`ykIo#! zO>^G_5uA~iw%BO-Q@lgr#Da(777Kr$b_E*hRUOU#0P6V9?x8f}_U8+Kj+FPLiaB#T?hp%FUcJqC^aBBYhM-P)SIB8T12^Y&& z8Vxy|#ObD}qVlY1g}K^8zQ)m|Cp;-p<#OoX5|>s8YEYDx!bN817^xl^6-A@V4qB}8 zJ*fHq2#^JqA8DilPhNGB34#FpXF^m$LPP10bn&H;E*mpu3>}#<>z+C0g&{S5IBwi{ z{8$K$fxie!avakYzRO*DrOwM0Q;dpAOMZ2%hgXPV)?$z(? z8oagJe2(76dfs;3WP^UA57##H7KzZd(^~n^LQ(lVec#oq2lr>s`ZU;7lf%Pm`77QNE2$Q5lFCExto>&-9H9Kc#``0-HGU5l5#4V_N!4HC{fd;E=Bm?4vxu27OD624 z`vH@{VFpVh)yFNl`U~FZ{ctpvx8Aoud-m*=IGF)^_IUXFcQ43UY8eGKG*%3SYU^o$ zhJ^hV>yo9#molE_yt%1E4%0cx4k~<#!75{S55=SG!Qa1My#EruxDetOZSPXWb6yo_ zZ9n{rFgy+!KQ5`F;t;Ko+Uyz>uV+on{^hf};Y<_xJCg-xlvVp$zJko_+;x zB2+S*I6)S;*_fJ^&X6wSf%YFT;Ady6F^D5p&(OXy!v0L4Ycp_XvomYsHE?x8U)pj*^nHo$1kvUoQj^vq4x3XfXVPaJ@F47(Q zefMwFl^wme@BS7@&A`3%%0$S>@HLpRCj7Qa-|eD-b4hQk@+K3kZ6!c#DO9-cn+iA?+Ji$5KM{)=VPA+V}K;_=`!m|OYYf%5)5*7YbB-(>Thip03 zw(0&&&o8hjDIPRu@8?oL#BEII2oinGq>ZqpQqBteC9n<3n`ZDro~`?9e%U|(#dpW< z3evWo{SN&*sF``h*Z#ACdr6O$aDW$^Sg&I}jV^rqNGKM-5t3%aDNR zchLVvR3E(a7Rl2W-YK7o9SI$wcY!=*Dk>%ZQ2%punGJ- z)(W{=PELyW?`h6fnh@kQdi9Fh#=Bhjcwvnv7Nwk20*&lO5{f*R>X&ABUR3LuG+XV73r4J&Wr~?O3Ua@z=peGxpamnxr5J*$X zo?3E^a{)ecT0%mJ_gT_wi5c7Nq1YtD$%NzqtkZcBsk5hQo5iIS&F@x)a}h-5-FWe$ zTYpsVf=3_t6`~ew0=liM7X;U=W|nSIQ77nCy>Ah?Mc`8obmA|E&E8J4o36Jk1}cWR z`giEmv@fz371SWhJW{MRdisl{&&i-*v#5;Nxl{7{Bx@MH zBp6-vqJD#W!ZGf3ZUtxGU}-CeBU8Uz*0d56j}pcngn--Iqw}0vWxi6AZUlJc$&(>w zn>KF-iR2tg5I;!)#IZz@HYoMtJje6bCpj-%I8tF3U8(ii57cx$MMaU9R16$!umO8E zC8b#Jny#oTLmb9$wH$imS=eEN+T>T+`^wdW8qic~CgnV69jcz2dTqoiw>l9;OR#wy z&P5)K4%ymQ$<6hQ)6k1*|GZc8pOIbL%xCAy^eAwW^Sc7c8|09+M3apxCW6aZ8i@$? z!Y}%w)vD{z8kbBT%GGPKK^MIpEaT~q;|USq{ZJGGGglbfUe3&E4!%TD3_@eB{S%cF z7TK8S{q3$J5t%}oinRuSE0JrMEb)jbwF3HrveebNfSWOVYBRWQ&xC^S-AiFB_nw@N z=ULkFN9?nX{`1r4aDyR8nt3F#@EJ5_w2Mi_SC|A+6@+gbDeb_Mq4cln_l5bKjFeQ= z@;+6!pw8vi|LvtGU51yb0en>xA6wf>tb7ioeeLLg4laLjK>D2Z+$E?P!PULJ9r2=k zvA+5KGJb6bsh8jbOtFdA3NT?480QDPGC9ac8!#Z7_*c)1E}wu(N;kpIqVSb@u8pb4 zym>u`Zs#h{)PKA`sx(q$PQ0n#pqPGH z0F`&SvT5%D4NCStF{Y(6#*aTuKl>D858TV!W&>2S7wHsUh9Yi8;qXLIg#Z1w-Q)|7 z!}nMpTC(a{b%l)$GnvId7Vmg{_x5c#@TK%5jN-uMuoI_$g03qzxr=k0AmB%IosdMv zB@Y=iXg$dRtTgz!z6(9|>SNoUq_{8ORmGk``K6#P>1DqIAzU*-4k{kza zfb+Bkh(TGgkSOU(C`blVKT>}#9<cO`PVrb7dz|-p9wF-$LF}Yy3e-RlYkb64TA`Z z$_Aj&^4*w$O0h-=b|cl*jaJbG6SA?g*`5VOv$V>?V^3=81Zvu-J;?Sp(Q0uHVNw}6 z?Ze!-h&>WN!)}g~5Q3XmJBUp^{b1^~^pun)>dSm1q#JVqY;$G6A9O)JX}TQlz4-BC z6Y7hgBH5nZGUY`_nR#*h<()pg-Q(Va2kZIv;*m2E@^pW?EC^hMV%m3%te6tCY0f0d zTviULw88+7=fyX!vt8VG`_#KlbOO$sx~gu_HDt*`bU$8$M+gKZ93Pq+8`&BbR z%+a6+Fsz%0+r6slLD~rfJ|n$p7Tr9b0J5>qiJhRpCOtD12puwV7?r- zgxn+^^<~eBsLvB+@c&QJ?X*5{(mFdU75AT{dYaQ60gJKmgO^R4u9%^+ zL?=e`B$Q<*vHqA(;S#0(5Zv$B(WA~-q5dcE^wCjTirJ}py*yW8MBwY~y)P{-*G>x@ za2lCIlPB}$j?5di;UMRQg)3T@6O0pqu7DLsjS_}n%8L}E1&@4)5iAGp6y}N1GiAW} z(mC(B zGHn>6Ff@4IdBV1{XETH2@JY4x9#C+>fg1BN=GRF{ED2#&$6eTdjaNz$$DhcmA!Rzo z#>T)iW2@B9?W*v?#_}Ts1SDHoS=X6y*VP#SzljFp5X_N<2e%y9yLT;TK7*_)<3kSN6TtzDl38ZftF6(|*i-Zl@uW7@ zOHt-Pqf4Z*gjoZi;87NB=%TczcvGkLxN)lia>cWES!OCCt16<`a&lVI6jk+XA|87~W?r|c<;fX+fq26;lyAb z)e&?xzkORjZ{jv2ZwxPU9J;5EnoQnWOUn;}k7BJv`$$!F=jGB^6C^UKrv$w0A-#&@7XVnM{eiP0)r%5`1W437N+Dg&hjpE4))7!ELt z76E_>D-Yax$QX-3W1WLpQ7}OY-_4scQZCRPwo|lMe9&OUJp3fM9JrQV zdT{E~u=ah8ft@xJ*%hSrELybFLowDW%4<0d7xoQY6wF3>>{CwhX&%4Joz(_h2lzkQRybp0c}#k;VN&XvAM>FG+Sn z96b0#J{{g-PzeAVk0`Etq{)!$RzJ)avE7QKfnJbeURWm7Kd@}^YC+6Av?$3co7RC3 zKeckq2QQ{YlvLL+hQh4?0DA7l3v30 zjwKKKL0ZY+cvs(%s_{q@xh_2HyCnUmPenRKeF3q7YP9D+ly3B52p(;ptL;c!ol_j2 zlhaIv&3czwFrTD*VVO+%^Ii0h)E+gNu<6HkiJ z4KEgUw70jid&+iaF*XGkcy�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%0A$YL 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 a;;&9#zjgMJhlLpb%$nh7cf!VN>wf`%>059B literal 0 HcmV?d00001 diff --git a/v1.1/docs/getting-started-guides/aws.md b/v1.1/docs/getting-started-guides/aws.md new file mode 100644 index 0000000000000..51052916d17bd --- /dev/null +++ b/v1.1/docs/getting-started-guides/aws.md @@ -0,0 +1,145 @@ +--- +layout: docwithnav +title: "Getting started on AWS EC2" +--- + + + + +Getting started on AWS EC2 +-------------------------- + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Cluster turnup](#cluster-turnup) + - [Supported procedure: `get-kube`](#supported-procedure-get-kube) + - [Alternatives](#alternatives) +- [Getting started with your cluster](#getting-started-with-your-cluster) + - [Command line administration tool: `kubectl`](#command-line-administration-tool-kubectl) + - [Examples](#examples) +- [Tearing down the cluster](#tearing-down-the-cluster) +- [Further reading](#further-reading) + +## Prerequisites + +1. You need an AWS account. Visit [http://aws.amazon.com](http://aws.amazon.com) to get started +2. Install and configure [AWS Command Line Interface](http://aws.amazon.com/cli) +3. You need an AWS [instance profile and role](http://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html) with EC2 full access. + +NOTE: This script use the 'default' AWS profile by default. +You may explicitly set AWS profile to use using the `AWS_DEFAULT_PROFILE` environment variable: + +{% highlight bash %} +{% raw %} +export AWS_DEFAULT_PROFILE=myawsprofile +{% endraw %} +{% endhighlight %} + +## Cluster turnup + +### Supported procedure: `get-kube` + +{% highlight bash %} +{% raw %} +#Using wget +export KUBERNETES_PROVIDER=aws; wget -q -O - https://get.k8s.io | bash + +#Using cURL +export KUBERNETES_PROVIDER=aws; curl -sS https://get.k8s.io | bash +{% endraw %} +{% endhighlight %} + +NOTE: This script calls [cluster/kube-up.sh](http://releases.k8s.io/release-1.1/cluster/kube-up.sh) +which in turn calls [cluster/aws/util.sh](http://releases.k8s.io/release-1.1/cluster/aws/util.sh) +using [cluster/aws/config-default.sh](http://releases.k8s.io/release-1.1/cluster/aws/config-default.sh). + +This process takes about 5 to 10 minutes. Once the cluster is up, the IP addresses of your master and node(s) will be printed, +as well as information about the default services running in the cluster (monitoring, logging, dns). User credentials and security +tokens are written in `~/.kube/config`, they will be necessary to use the CLI or the HTTP Basic Auth. + +By default, the script will provision a new VPC and a 4 node k8s cluster in us-west-2a (Oregon) with `t2.micro` instances running on Ubuntu. +You can override the variables defined in [config-default.sh](http://releases.k8s.io/release-1.1/cluster/aws/config-default.sh) to change this behavior as follows: + +{% highlight bash %} +{% raw %} +export KUBE_AWS_ZONE=eu-west-1c +export NUM_MINIONS=2 +export MINION_SIZE=m3.medium +export AWS_S3_REGION=eu-west-1 +export AWS_S3_BUCKET=mycompany-kubernetes-artifacts +export INSTANCE_PREFIX=k8s +... +{% endraw %} +{% endhighlight %} + +It will also try to create or reuse a keypair called "kubernetes", and IAM profiles called "kubernetes-master" and "kubernetes-minion". +If these already exist, make sure you want them to be used here. + +NOTE: If using an existing keypair named "kubernetes" then you must set the `AWS_SSH_KEY` key to point to your private key. + +### Alternatives + +A contributed [example](coreos/coreos_multinode_cluster.html) allows you to setup a Kubernetes cluster based on [CoreOS](http://www.coreos.com), using +EC2 with user data (cloud-config). + +## Getting started with your cluster + +### Command line administration tool: `kubectl` + +The cluster startup script will leave you with a `kubernetes` directory on your workstation. +Alternately, you can download the latest Kubernetes release from [this page](https://github.com/kubernetes/kubernetes/releases). + +Next, add the appropriate binary folder to your `PATH` to access kubectl: + +{% highlight bash %} +{% raw %} +# OS X +export PATH=/platforms/darwin/amd64:$PATH + +# Linux +export PATH=/platforms/linux/amd64:$PATH +{% endraw %} +{% endhighlight %} + +An up-to-date documentation page for this tool is available here: [kubectl manual](../../docs/user-guide/kubectl/kubectl.html) + +By default, `kubectl` will use the `kubeconfig` file generated during the cluster startup for authenticating against the API. +For more information, please read [kubeconfig files](../../docs/user-guide/kubeconfig-file.html) + +### Examples + +See [a simple nginx example](../../docs/user-guide/simple-nginx.html) to try out your new cluster. + +The "Guestbook" application is another popular example to get started with Kubernetes: [guestbook example](../../examples/guestbook/) + +For more complete applications, please look in the [examples directory](../../examples/) + +## Tearing down the cluster + +Make sure the environment variables you used to provision your cluster are still exported, then call the following script inside the +`kubernetes` directory: + +{% highlight bash %} +{% raw %} +cluster/kube-down.sh +{% endraw %} +{% endhighlight %} + +## Further reading + +Please see the [Kubernetes docs](../../docs/) for more details on administering +and using a Kubernetes cluster. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/aws.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/azure.md b/v1.1/docs/getting-started-guides/azure.md new file mode 100644 index 0000000000000..a2f007ac8e29f --- /dev/null +++ b/v1.1/docs/getting-started-guides/azure.md @@ -0,0 +1,26 @@ +--- +layout: docwithnav +title: "Getting started on Microsoft Azure" +--- + + + + + +Getting started on Microsoft Azure +---------------------------------- + +Checkout the [coreos azure getting started guide](coreos/azure/README.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/azure.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/bigquery-logging.png b/v1.1/docs/getting-started-guides/bigquery-logging.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a6f94c288e973636ac31a9d870157a8e7ae7dc GIT binary patch literal 57417 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/getting-started-guides/binary_release.md b/v1.1/docs/getting-started-guides/binary_release.md new file mode 100644 index 0000000000000..5522eddda7a63 --- /dev/null +++ b/v1.1/docs/getting-started-guides/binary_release.md @@ -0,0 +1,47 @@ +--- +layout: docwithnav +title: "Getting a Binary Release" +--- + + + + + +## Getting a Binary Release + +You can either build a release from sources or download a pre-built release. If you do not plan on developing Kubernetes itself, we suggest a pre-built release. + +### Prebuilt Binary Release + +The list of binary releases is available for download from the [GitHub Kubernetes repo release page](https://github.com/kubernetes/kubernetes/releases). + +Download the latest release and unpack this tar file on Linux or OS X, cd to the created `kubernetes/` directory, and then follow the getting started guide for your cloud. + +### Building from source + +Get the Kubernetes source. If you are simply building a release from source there is no need to set up a full golang environment as all building happens in a Docker container. + +Building a release is simple. + +{% highlight bash %} +{% raw %} +git clone https://github.com/kubernetes/kubernetes.git +cd kubernetes +make release +{% endraw %} +{% endhighlight %} + +For more details on the release process see the [`build/` directory](http://releases.k8s.io/release-1.1/build/) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/binary_release.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/centos/centos_manual_config.md b/v1.1/docs/getting-started-guides/centos/centos_manual_config.md new file mode 100644 index 0000000000000..1e1e6c640fc0a --- /dev/null +++ b/v1.1/docs/getting-started-guides/centos/centos_manual_config.md @@ -0,0 +1,220 @@ +--- +layout: docwithnav +title: "Getting started on CentOS" +--- + + + + +Getting started on [CentOS](http://centos.org) +---------------------------------------------- + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Starting a cluster](#starting-a-cluster) + +## Prerequisites + +You need two machines with CentOS installed on them. + +## Starting a cluster + +This is a getting started guide for CentOS. It is a manual configuration so you understand all the underlying packages / services / ports, etc... + +This guide will only get ONE node working. Multiple nodes requires a functional [networking configuration](../../admin/networking.html) done outside of kubernetes. Although the additional Kubernetes configuration requirements should be obvious. + +The Kubernetes package provides a few services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd and the configuration resides in a central location: /etc/kubernetes. We will break the services up between the hosts. The first host, centos-master, will be the Kubernetes master. This host will run the kube-apiserver, kube-controller-manager, and kube-scheduler. In addition, the master will also run _etcd_. The remaining host, centos-minion will be the node and run kubelet, proxy, cadvisor and docker. + +**System Information:** + +Hosts: + +``` +{% raw %} +centos-master = 192.168.121.9 +centos-minion = 192.168.121.65 +{% endraw %} +``` + +**Prepare the hosts:** + +* Create virt7-testing repo on all hosts - centos-{master,minion} with following information. + +``` +{% raw %} +[virt7-testing] +name=virt7-testing +baseurl=http://cbs.centos.org/repos/virt7-testing/x86_64/os/ +gpgcheck=0 +{% endraw %} +``` + +* Install Kubernetes on all hosts - centos-{master,minion}. This will also pull in etcd, docker, and cadvisor. + +{% highlight sh %} +{% raw %} +yum -y install --enablerepo=virt7-testing kubernetes +{% endraw %} +{% endhighlight %} + +* Note * Using etcd-0.4.6-7 (This is temporary update in documentation) + +If you do not get etcd-0.4.6-7 installed with virt7-testing repo, + +In the current virt7-testing repo, the etcd package is updated which causes service failure. To avoid this, + +{% highlight sh %} +{% raw %} +yum erase etcd +{% endraw %} +{% endhighlight %} + +It will uninstall the current available etcd package + +{% highlight sh %} +{% raw %} +yum install http://cbs.centos.org/kojifiles/packages/etcd/0.4.6/7.el7.centos/x86_64/etcd-0.4.6-7.el7.centos.x86_64.rpm +yum -y install --enablerepo=virt7-testing kubernetes +{% endraw %} +{% endhighlight %} + +* Add master and node to /etc/hosts on all machines (not needed if hostnames already in DNS) + +{% highlight sh %} +{% raw %} +echo "192.168.121.9 centos-master +192.168.121.65 centos-minion" >> /etc/hosts +{% endraw %} +{% endhighlight %} + +* Edit /etc/kubernetes/config which will be the same on all hosts to contain: + +{% highlight sh %} +{% raw %} +# Comma separated list of nodes in the etcd cluster +KUBE_ETCD_SERVERS="--etcd-servers=http://centos-master:4001" + +# logging to stderr means we get it in the systemd journal +KUBE_LOGTOSTDERR="--logtostderr=true" + +# journal message level, 0 is debug +KUBE_LOG_LEVEL="--v=0" + +# Should this cluster be allowed to run privileged docker containers +KUBE_ALLOW_PRIV="--allow-privileged=false" +{% endraw %} +{% endhighlight %} + +* Disable the firewall on both the master and node, as docker does not play well with other firewall rule managers + +{% highlight sh %} +{% raw %} +systemctl disable iptables-services firewalld +systemctl stop iptables-services firewalld +{% endraw %} +{% endhighlight %} + +**Configure the Kubernetes services on the master.** + +* Edit /etc/kubernetes/apiserver to appear as such: + +{% highlight sh %} +{% raw %} +# The address on the local server to listen to. +KUBE_API_ADDRESS="--address=0.0.0.0" + +# The port on the local server to listen on. +KUBE_API_PORT="--port=8080" + +# How the replication controller and scheduler find the kube-apiserver +KUBE_MASTER="--master=http://centos-master:8080" + +# Port kubelets listen on +KUBELET_PORT="--kubelet-port=10250" + +# Address range to use for services +KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" + +# Add your own! +KUBE_API_ARGS="" +{% endraw %} +{% endhighlight %} + +* Start the appropriate services on master: + +{% highlight sh %} +{% raw %} +for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do + systemctl restart $SERVICES + systemctl enable $SERVICES + systemctl status $SERVICES +done +{% endraw %} +{% endhighlight %} + +**Configure the Kubernetes services on the node.** + +***We need to configure the kubelet and start the kubelet and proxy*** + +* Edit /etc/kubernetes/kubelet to appear as such: + +{% highlight sh %} +{% raw %} +# The address for the info server to serve on +KUBELET_ADDRESS="--address=0.0.0.0" + +# The port for the info server to serve on +KUBELET_PORT="--port=10250" + +# You may leave this blank to use the actual hostname +KUBELET_HOSTNAME="--hostname-override=centos-minion" + +# Location of the api-server +KUBELET_API_SERVER="--api-servers=http://centos-master:8080" + +# Add your own! +KUBELET_ARGS="" +{% endraw %} +{% endhighlight %} + +* Start the appropriate services on node (centos-minion). + +{% highlight sh %} +{% raw %} +for SERVICES in kube-proxy kubelet docker; do + systemctl restart $SERVICES + systemctl enable $SERVICES + systemctl status $SERVICES +done +{% endraw %} +{% endhighlight %} + +*You should be finished!* + +* Check to make sure the cluster can see the node (on centos-master) + +{% highlight console %} +{% raw %} +$ kubectl get nodes +NAME LABELS STATUS +centos-minion Ready +{% endraw %} +{% endhighlight %} + +**The cluster should be running! Launch a test pod.** + +You should have a functional cluster, check out [101](../../../docs/user-guide/walkthrough/README.html)! + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/centos/centos_manual_config.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/cloud-logging-console.png b/v1.1/docs/getting-started-guides/cloud-logging-console.png new file mode 100644 index 0000000000000000000000000000000000000000..fae0aecbc53d78d3f5304da70b4b429e684a9134 GIT binary patch literal 87825 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≈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 zX008phBy

          u{e7;Hs{NvhBm)0o5#1}&p#}?lC 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/getting-started-guides/cloudstack.md b/v1.1/docs/getting-started-guides/cloudstack.md new file mode 100644 index 0000000000000..b0baa68681e00 --- /dev/null +++ b/v1.1/docs/getting-started-guides/cloudstack.md @@ -0,0 +1,105 @@ +--- +layout: docwithnav +title: "Getting started on CloudStack" +--- + + + + +Getting started on [CloudStack](http://cloudstack.apache.org) +------------------------------------------------------------ + +**Table of Contents** + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Clone the playbook](#clone-the-playbook) +- [Create a Kubernetes cluster](#create-a-kubernetes-cluster) + +### Introduction + +CloudStack is a software to build public and private clouds based on hardware virtualization principles (traditional IaaS). To deploy Kubernetes on CloudStack there are several possibilities depending on the Cloud being used and what images are made available. [Exoscale](http://exoscale.ch) for instance makes a [CoreOS](http://coreos.com) template available, therefore instructions to deploy Kubernetes on coreOS can be used. CloudStack also has a vagrant plugin available, hence Vagrant could be used to deploy Kubernetes either using the existing shell provisioner or using new Salt based recipes. + +[CoreOS](http://coreos.com) templates for CloudStack are built [nightly](http://stable.release.core-os.net/amd64-usr/current/). CloudStack operators need to [register](http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/templates.html) this template in their cloud before proceeding with these Kubernetes deployment instructions. + +This guide uses an [Ansible playbook](https://github.com/runseb/ansible-kubernetes). +This is a completely automated, a single playbook deploys Kubernetes based on the coreOS [instructions](coreos/coreos_multinode_cluster.html). + + +This [Ansible](http://ansibleworks.com) playbook deploys Kubernetes on a CloudStack based Cloud using CoreOS images. The playbook, creates an ssh key pair, creates a security group and associated rules and finally starts coreOS instances configured via cloud-init. + +### Prerequisites + + $ sudo apt-get install -y python-pip + $ sudo pip install ansible + $ sudo pip install cs + +[_cs_](https://github.com/exoscale/cs) is a python module for the CloudStack API. + +Set your CloudStack endpoint, API keys and HTTP method used. + +You can define them as environment variables: `CLOUDSTACK_ENDPOINT`, `CLOUDSTACK_KEY`, `CLOUDSTACK_SECRET` and `CLOUDSTACK_METHOD`. + +Or create a `~/.cloudstack.ini` file: + + [cloudstack] + endpoint = + key = + secret = + method = post + +We need to use the http POST method to pass the _large_ userdata to the coreOS instances. + +### Clone the playbook + + $ git clone --recursive https://github.com/runseb/ansible-kubernetes.git + $ cd ansible-kubernetes + +The [ansible-cloudstack](https://github.com/resmo/ansible-cloudstack) module is setup in this repository as a submodule, hence the `--recursive`. + +### Create a Kubernetes cluster + +You simply need to run the playbook. + + $ ansible-playbook k8s.yml + +Some variables can be edited in the `k8s.yml` file. + + vars: + ssh_key: k8s + k8s_num_nodes: 2 + k8s_security_group_name: k8s + k8s_node_prefix: k8s2 + k8s_template: Linux CoreOS alpha 435 64-bit 10GB Disk + k8s_instance_type: Tiny + +This will start a Kubernetes master node and a number of compute nodes (by default 2). +The `instance_type` and `template` by default are specific to [exoscale](http://exoscale.ch), edit them to specify your CloudStack cloud specific template and instance type (i.e service offering). + +Check the tasks and templates in `roles/k8s` if you want to modify anything. + +Once the playbook as finished, it will print out the IP of the Kubernetes master: + + TASK: [k8s | debug msg='k8s master IP is {{ k8s_master.default_ip }}'] ******** + +SSH to it using the key that was created and using the _core_ user and you can list the machines in your cluster: + + $ ssh -i ~/.ssh/id_rsa_k8s core@ + $ fleetctl list-machines + MACHINE IP METADATA + a017c422... role=node + ad13bf84... role=master + e9af8293... role=node + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/cloudstack.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/coreos.md b/v1.1/docs/getting-started-guides/coreos.md new file mode 100644 index 0000000000000..e623aeac90374 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos.md @@ -0,0 +1,88 @@ +--- +layout: docwithnav +title: "Getting Started on CoreOS" +--- + + + + + +## Getting Started on [CoreOS](https://coreos.com) + +There are multiple guides on running Kubernetes with [CoreOS](https://coreos.com/kubernetes/docs/latest/): + +### Official CoreOS Guides + +These guides are maintained by CoreOS and deploy Kubernetes the "CoreOS Way" with full TLS, the DNS add-on, and more. These guides pass Kubernetes conformance testing and we encourage you to [test this yourself](https://coreos.com/kubernetes/docs/latest/conformance-tests.html). + +[**Vagrant Multi-Node**](https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant.html) + +Guide to setting up a multi-node cluster on Vagrant. The deployer can independently configure the number of etcd nodes, master nodes, and worker nodes to bring up a fully HA control plane. + +


          + +[**Vagrant Single-Node**](https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html) + +The quickest way to set up a Kubernetes development environment locally. As easy as `git clone`, `vagrant up` and configuring `kubectl`. + +
          + +[**Full Step by Step Guide**](https://coreos.com/kubernetes/docs/latest/getting-started.html) + +A generic guide to setting up an HA cluster on any cloud or bare metal, with full TLS. Repeat the master or worker steps to configure more machines of that role. + +### Community Guides + +These guides are maintained by community members, cover specific platforms and use cases, and experiment with different ways of configuring Kubernetes on CoreOS. + +[**Multi-node Cluster**](coreos/coreos_multinode_cluster.html) + +Set up a single master, multi-worker cluster on your choice of platform: AWS, GCE, or VMware Fusion. + +
          + +[**Easy Multi-node Cluster on Google Compute Engine**](https://github.com/rimusz/coreos-multi-node-k8s-gce/blob/master/README.md) + +Scripted installation of a single master, multi-worker cluster on GCE. Kubernetes components are managed by [fleet](https://github.com/coreos/fleet). + +
          + +[**Multi-node cluster using cloud-config and Weave on Vagrant**](https://github.com/errordeveloper/weave-demos/blob/master/poseidon/README.md) + +Configure a Vagrant-based cluster of 3 machines with networking provided by Weave. + +
          + +[**Multi-node cluster using cloud-config and Vagrant**](https://github.com/pires/kubernetes-vagrant-coreos-cluster/blob/master/README.md) + +Configure a single master, multi-worker cluster locally, running on your choice of hypervisor: VirtualBox, Parallels, or VMware + +
          + +[**Multi-node cluster with Vagrant and fleet units using a small OS X App**](https://github.com/rimusz/coreos-osx-gui-kubernetes-cluster/blob/master/README.md) + +Guide to running a single master, multi-worker cluster controlled by an OS X menubar application. Uses Vagrant under the hood. + +
          + +[**Resizable multi-node cluster on Azure with Weave**](coreos/azure/README.html) + +Guide to running an HA etcd cluster with a single master on Azure. Uses the Azure node.js CLI to resize the cluster. + +
          + +[**Multi-node cluster using cloud-config, CoreOS and VMware ESXi**](https://github.com/xavierbaude/VMware-coreos-multi-nodes-Kubernetes) + +Configure a single master, single worker cluster on VMware ESXi. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/coreos/azure/.gitignore b/v1.1/docs/getting-started-guides/coreos/azure/.gitignore new file mode 100644 index 0000000000000..c2658d7d1b318 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/v1.1/docs/getting-started-guides/coreos/azure/README.md b/v1.1/docs/getting-started-guides/coreos/azure/README.md new file mode 100644 index 0000000000000..63de36380c3e2 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/README.md @@ -0,0 +1,289 @@ +--- +layout: docwithnav +title: "Kubernetes on Azure with CoreOS and Weave" +--- + + + + +Kubernetes on Azure with CoreOS and [Weave](http://weave.works) +--------------------------------------------------------------- + +**Table of Contents** + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Let's go!](#lets-go) +- [Deploying the workload](#deploying-the-workload) +- [Scaling](#scaling) +- [Exposing the app to the outside world](#exposing-the-app-to-the-outside-world) +- [Next steps](#next-steps) +- [Tear down...](#tear-down) + +## Introduction + +In this guide I will demonstrate how to deploy a Kubernetes cluster to Azure cloud. You will be using CoreOS with Weave, which implements simple and secure networking, in a transparent, yet robust way. The purpose of this guide is to provide an out-of-the-box implementation that can ultimately be taken into production with little change. It will demonstrate how to provision a dedicated Kubernetes master and etcd nodes, and show how to scale the cluster with ease. + +### Prerequisites + +1. You need an Azure account. + +## Let's go! + +To get started, you need to checkout the code: + +{% highlight sh %} +{% raw %} +git clone https://github.com/kubernetes/kubernetes +cd kubernetes/docs/getting-started-guides/coreos/azure/ +{% endraw %} +{% endhighlight %} + +You will need to have [Node.js installed](http://nodejs.org/download/) on you machine. If you have previously used Azure CLI, you should have it already. + +First, you need to install some of the dependencies with + +{% highlight sh %} +{% raw %} +npm install +{% endraw %} +{% endhighlight %} + +Now, all you need to do is: + +{% highlight sh %} +{% raw %} +./azure-login.js -u +./create-kubernetes-cluster.js +{% endraw %} +{% endhighlight %} + +This script will provision a cluster suitable for production use, where there is a ring of 3 dedicated etcd nodes: 1 kubernetes master and 2 kubernetes nodes. The `kube-00` VM will be the master, your work loads are only to be deployed on the nodes, `kube-01` and `kube-02`. Initially, all VMs are single-core, to ensure a user of the free tier can reproduce it without paying extra. I will show how to add more bigger VMs later. + +![VMs in Azure](initial_cluster.png) + +Once the creation of Azure VMs has finished, you should see the following: + +{% highlight console %} +{% raw %} +... +azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_1c1496016083b4_ssh_conf ` +azure_wrapper/info: The hosts in this deployment are: + [ 'etcd-00', 'etcd-01', 'etcd-02', 'kube-00', 'kube-01', 'kube-02' ] +azure_wrapper/info: Saved state into `./output/kube_1c1496016083b4_deployment.yml` +{% endraw %} +{% endhighlight %} + +Let's login to the master node like so: + +{% highlight sh %} +{% raw %} +ssh -F ./output/kube_1c1496016083b4_ssh_conf kube-00 +{% endraw %} +{% endhighlight %} + +> Note: config file name will be different, make sure to use the one you see. + +Check there are 2 nodes in the cluster: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get nodes +NAME LABELS STATUS +kube-01 kubernetes.io/hostname=kube-01 Ready +kube-02 kubernetes.io/hostname=kube-02 Ready +{% endraw %} +{% endhighlight %} + +## Deploying the workload + +Let's follow the Guestbook example now: + +{% highlight sh %} +{% raw %} +kubectl create -f ~/guestbook-example +{% endraw %} +{% endhighlight %} + +You need to wait for the pods to get deployed, run the following and wait for `STATUS` to change from `Pending` to `Running`. + +{% highlight sh %} +{% raw %} +kubectl get pods --watch +{% endraw %} +{% endhighlight %} + +> Note: the most time it will spend downloading Docker container images on each of the nodes. + +Eventually you should see: + +{% highlight console %} +{% raw %} +NAME READY STATUS RESTARTS AGE +frontend-0a9xi 1/1 Running 0 4m +frontend-4wahe 1/1 Running 0 4m +frontend-6l36j 1/1 Running 0 4m +redis-master-talmr 1/1 Running 0 4m +redis-slave-12zfd 1/1 Running 0 4m +redis-slave-3nbce 1/1 Running 0 4m +{% endraw %} +{% endhighlight %} + +## Scaling + +Two single-core nodes are certainly not enough for a production system of today. Let's scale the cluster by adding a couple of bigger nodes. + +You will need to open another terminal window on your machine and go to the same working directory (e.g. `~/Workspace/kubernetes/docs/getting-started-guides/coreos/azure/`). + +First, lets set the size of new VMs: + +{% highlight sh %} +{% raw %} +export AZ_VM_SIZE=Large +{% endraw %} +{% endhighlight %} + +Now, run scale script with state file of the previous deployment and number of nodes to add: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ ./scale-kubernetes-cluster.js ./output/kube_1c1496016083b4_deployment.yml 2 +... +azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_8f984af944f572_ssh_conf ` +azure_wrapper/info: The hosts in this deployment are: + [ 'etcd-00', + 'etcd-01', + 'etcd-02', + 'kube-00', + 'kube-01', + 'kube-02', + 'kube-03', + 'kube-04' ] +azure_wrapper/info: Saved state into `./output/kube_8f984af944f572_deployment.yml` +{% endraw %} +{% endhighlight %} + +> Note: this step has created new files in `./output`. + +Back on `kube-00`: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get nodes +NAME LABELS STATUS +kube-01 kubernetes.io/hostname=kube-01 Ready +kube-02 kubernetes.io/hostname=kube-02 Ready +kube-03 kubernetes.io/hostname=kube-03 Ready +kube-04 kubernetes.io/hostname=kube-04 Ready +{% endraw %} +{% endhighlight %} + +You can see that two more nodes joined happily. Let's scale the number of Guestbook instances now. + +First, double-check how many replication controllers there are: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get rc +ONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 3 +redis-master master redis name=redis-master 1 +redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 2 +{% endraw %} +{% endhighlight %} + +As there are 4 nodes, let's scale proportionally: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl scale --replicas=4 rc redis-slave +>>>>>>> coreos/azure: Updates for 1.0 +scaled +core@kube-00 ~ $ kubectl scale --replicas=4 rc frontend +scaled +{% endraw %} +{% endhighlight %} + +Check what you have now: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 4 +redis-master master redis name=redis-master 1 +redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 4 +{% endraw %} +{% endhighlight %} + +You now will have more instances of front-end Guestbook apps and Redis slaves; and, if you look up all pods labeled `name=frontend`, you should see one running on each node. + +{% highlight console %} +{% raw %} +core@kube-00 ~/guestbook-example $ kubectl get pods -l name=frontend +NAME READY STATUS RESTARTS AGE +frontend-0a9xi 1/1 Running 0 22m +frontend-4wahe 1/1 Running 0 22m +frontend-6l36j 1/1 Running 0 22m +frontend-z9oxo 1/1 Running 0 41s +{% endraw %} +{% endhighlight %} + +## Exposing the app to the outside world + +There is no native Azure load-balancer support in Kubernetes 1.0, however here is how you can expose the Guestbook app to the Internet. + +``` +{% raw %} +./expose_guestbook_app_port.sh ./output/kube_1c1496016083b4_ssh_conf +Guestbook app is on port 31605, will map it to port 80 on kube-00 +info: Executing command vm endpoint create ++ Getting virtual machines ++ Reading network configuration ++ Updating network configuration +info: vm endpoint create command OK +info: Executing command vm endpoint show ++ Getting virtual machines +data: Name : tcp-80-31605 +data: Local port : 31605 +data: Protcol : tcp +data: Virtual IP Address : 137.117.156.164 +data: Direct server return : Disabled +info: vm endpoint show command OK +{% endraw %} +``` + +You then should be able to access it from anywhere via the Azure virtual IP for `kube-00` displayed above, i.e. `http://137.117.156.164/` in my case. + +## Next steps + +You now have a full-blow cluster running in Azure, congrats! + +You should probably try deploy other [example apps](../../../../examples/) or write your own ;) + +## Tear down... + +If you don't wish care about the Azure bill, you can tear down the cluster. It's easy to redeploy it, as you can see. + +{% highlight sh %} +{% raw %} +./destroy-cluster.js ./output/kube_8f984af944f572_deployment.yml +{% endraw %} +{% endhighlight %} + +> Note: make sure to use the _latest state file_, as after scaling there is a new one. + +By the way, with the scripts shown, you can deploy multiple clusters, if you like :) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos/azure/README.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-rc.yaml b/v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-rc.yaml new file mode 100644 index 0000000000000..00a20f3b4ae60 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-rc.yaml @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ReplicationController +metadata: + name: kube-dns-v8 + namespace: kube-system + labels: + k8s-app: kube-dns + version: v8 + kubernetes.io/cluster-service: "true" +spec: + replicas: 3 + selector: + k8s-app: kube-dns + version: v8 + template: + metadata: + labels: + k8s-app: kube-dns + version: v8 + kubernetes.io/cluster-service: "true" + spec: + containers: + - name: etcd + image: gcr.io/google_containers/etcd:2.0.9 + resources: + limits: + cpu: 100m + memory: 50Mi + command: + - /usr/local/bin/etcd + - -data-dir + - /var/etcd/data + - -listen-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -advertise-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -initial-cluster-token + - skydns-etcd + volumeMounts: + - name: etcd-storage + mountPath: /var/etcd/data + - name: kube2sky + image: gcr.io/google_containers/kube2sky:1.11 + resources: + limits: + cpu: 100m + memory: 50Mi + args: + # command = "/kube2sky" + - -domain=kube.local + - -kube_master_url=http://kube-00:8080 + - name: skydns + image: gcr.io/google_containers/skydns:2015-03-11-001 + resources: + limits: + cpu: 100m + memory: 50Mi + args: + # command = "/skydns" + - -machines=http://localhost:4001 + - -addr=0.0.0.0:53 + - -domain=kube.local + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 5 + - name: healthz + image: gcr.io/google_containers/exechealthz:1.0 + resources: + limits: + cpu: 10m + memory: 20Mi + args: + - -cmd=nslookup kubernetes.default.svc.kube.local localhost >/dev/null + - -port=8080 + ports: + - containerPort: 8080 + protocol: TCP + volumes: + - name: etcd-storage + emptyDir: {} + dnsPolicy: Default # Don't use cluster DNS. diff --git a/v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-svc.yaml b/v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-svc.yaml new file mode 100644 index 0000000000000..a0e979c266406 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/addons/skydns-svc.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "KubeDNS" +spec: + selector: + k8s-app: kube-dns + clusterIP: 10.1.0.3 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP diff --git a/v1.1/docs/getting-started-guides/coreos/azure/azure-login.js b/v1.1/docs/getting-started-guides/coreos/azure/azure-login.js new file mode 100755 index 0000000000000..624916b2b56a3 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/azure-login.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('child_process').fork('node_modules/azure-cli/bin/azure', ['login'].concat(process.argv)); diff --git a/v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-etcd-node-template.yml b/v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-etcd-node-template.yml new file mode 100644 index 0000000000000..4cbb480e53147 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-etcd-node-template.yml @@ -0,0 +1,19 @@ +## This file is used as input to deployment script, which amends it as needed. +## More specifically, we need to add peer hosts for each but the elected peer. + +coreos: + units: + - name: etcd2.service + enable: true + command: start + etcd2: + name: '%H' + initial-cluster-token: 'etcd-cluster' + initial-advertise-peer-urls: 'http://%H:2380' + listen-peer-urls: 'http://%H:2380' + listen-client-urls: 'http://0.0.0.0:2379,http://0.0.0.0:4001' + advertise-client-urls: 'http://%H:2379,http://%H:4001' + initial-cluster-state: 'new' + update: + group: stable + reboot-strategy: off diff --git a/v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-main-nodes-template.yml b/v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-main-nodes-template.yml new file mode 100644 index 0000000000000..340c804139f24 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/cloud_config_templates/kubernetes-cluster-main-nodes-template.yml @@ -0,0 +1,339 @@ +## This file is used as input to deployment script, which amends it as needed. +## More specifically, we need to add environment files for as many nodes as we +## are going to deploy. + +write_files: + - path: /opt/bin/curl-retry.sh + permissions: '0755' + owner: root + content: | + #!/bin/sh -x + until curl $@ + do sleep 1 + done + +coreos: + update: + group: stable + reboot-strategy: off + units: + - name: systemd-networkd-wait-online.service + drop-ins: + - name: 50-check-github-is-reachable.conf + content: | + [Service] + ExecStart=/bin/sh -x -c \ + 'until curl --silent --fail https://status.github.com/api/status.json | grep -q \"good\"; do sleep 2; done' + + - name: docker.service + drop-ins: + - name: 50-weave-kubernetes.conf + content: | + [Service] + Environment=DOCKER_OPTS='--bridge="weave" -r="false"' + + - name: weave-network.target + enable: true + content: | + [Unit] + Description=Weave Network Setup Complete + Documentation=man:systemd.special(7) + RefuseManualStart=no + After=network-online.target + [Install] + WantedBy=multi-user.target + WantedBy=kubernetes-master.target + WantedBy=kubernetes-node.target + + - name: kubernetes-master.target + enable: true + command: start + content: | + [Unit] + Description=Kubernetes Cluster Master + Documentation=http://kubernetes.io/ + RefuseManualStart=no + After=weave-network.target + Requires=weave-network.target + ConditionHost=kube-00 + Wants=kube-apiserver.service + Wants=kube-scheduler.service + Wants=kube-controller-manager.service + Wants=kube-proxy.service + [Install] + WantedBy=multi-user.target + + - name: kubernetes-node.target + enable: true + command: start + content: | + [Unit] + Description=Kubernetes Cluster Node + Documentation=http://kubernetes.io/ + RefuseManualStart=no + After=weave-network.target + Requires=weave-network.target + ConditionHost=!kube-00 + Wants=kube-proxy.service + Wants=kubelet.service + [Install] + WantedBy=multi-user.target + + - name: 10-weave.network + runtime: false + content: | + [Match] + Type=bridge + Name=weave* + [Network] + + - name: install-weave.service + enable: true + content: | + [Unit] + After=network-online.target + Before=weave.service + Before=weave-helper.service + Before=docker.service + Description=Install Weave + Documentation=http://docs.weave.works/ + Requires=network-online.target + [Service] + Type=oneshot + RemainAfterExit=yes + ExecStartPre=/bin/mkdir -p /opt/bin/ + ExecStartPre=/opt/bin/curl-retry.sh \ + --silent \ + --location \ + https://github.com/weaveworks/weave/releases/download/latest_release/weave \ + --output /opt/bin/weave + ExecStartPre=/opt/bin/curl-retry.sh \ + --silent \ + --location \ + https://raw.github.com/errordeveloper/weave-demos/master/poseidon/weave-helper \ + --output /opt/bin/weave-helper + ExecStartPre=/usr/bin/chmod +x /opt/bin/weave + ExecStartPre=/usr/bin/chmod +x /opt/bin/weave-helper + ExecStart=/bin/echo Weave Installed + [Install] + WantedBy=weave-network.target + WantedBy=weave.service + + - name: weave-helper.service + enable: true + content: | + [Unit] + After=install-weave.service + After=docker.service + Description=Weave Network Router + Documentation=http://docs.weave.works/ + Requires=docker.service + Requires=install-weave.service + [Service] + ExecStart=/opt/bin/weave-helper + Restart=always + [Install] + WantedBy=weave-network.target + + - name: weave.service + enable: true + content: | + [Unit] + After=install-weave.service + After=docker.service + Description=Weave Network Router + Documentation=http://docs.weave.works/ + Requires=docker.service + Requires=install-weave.service + [Service] + TimeoutStartSec=0 + EnvironmentFile=/etc/weave.%H.env + ExecStartPre=/opt/bin/weave setup + ExecStartPre=/opt/bin/weave launch $WEAVE_PEERS + ExecStart=/usr/bin/docker attach weave + Restart=on-failure + Restart=always + ExecStop=/opt/bin/weave stop + [Install] + WantedBy=weave-network.target + + - name: weave-create-bridge.service + enable: true + content: | + [Unit] + After=network.target + After=install-weave.service + Before=weave.service + Before=docker.service + Requires=network.target + Requires=install-weave.service + [Service] + Type=oneshot + EnvironmentFile=/etc/weave.%H.env + ExecStart=/opt/bin/weave --local create-bridge + ExecStart=/usr/bin/ip addr add dev weave $BRIDGE_ADDRESS_CIDR + ExecStart=/usr/bin/ip route add $BREAKOUT_ROUTE dev weave scope link + ExecStart=/usr/bin/ip route add 224.0.0.0/4 dev weave + [Install] + WantedBy=multi-user.target + WantedBy=weave-network.target + + - name: install-kubernetes.service + enable: true + content: | + [Unit] + After=network-online.target + Before=kube-apiserver.service + Before=kube-controller-manager.service + Before=kubelet.service + Before=kube-proxy.service + Description=Download Kubernetes Binaries + Documentation=http://kubernetes.io/ + Requires=network-online.target + [Service] + Environment=KUBE_RELEASE_TARBALL=https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.1/kubernetes.tar.gz + ExecStartPre=/bin/mkdir -p /opt/ + ExecStart=/opt/bin/curl-retry.sh --silent --location $KUBE_RELEASE_TARBALL --output /tmp/kubernetes.tgz + ExecStart=/bin/tar xzvf /tmp/kubernetes.tgz -C /tmp/ + ExecStart=/bin/tar xzvf /tmp/kubernetes/server/kubernetes-server-linux-amd64.tar.gz -C /opt + ExecStartPost=/bin/chmod o+rx -R /opt/kubernetes + ExecStartPost=/bin/ln -s /opt/kubernetes/server/bin/kubectl /opt/bin/ + ExecStartPost=/bin/mv /tmp/kubernetes/examples/guestbook /home/core/guestbook-example + ExecStartPost=/bin/chown core. -R /home/core/guestbook-example + ExecStartPost=/bin/rm -rf /tmp/kubernetes + ExecStartPost=/bin/sed 's/# type: LoadBalancer/type: NodePort/' -i /home/core/guestbook-example/frontend-service.yaml + RemainAfterExit=yes + Type=oneshot + [Install] + WantedBy=kubernetes-master.target + WantedBy=kubernetes-node.target + + - name: kube-apiserver.service + enable: true + content: | + [Unit] + After=install-kubernetes.service + Before=kube-controller-manager.service + Before=kube-scheduler.service + ConditionFileIsExecutable=/opt/kubernetes/server/bin/kube-apiserver + Description=Kubernetes API Server + Documentation=http://kubernetes.io/ + Wants=install-kubernetes.service + ConditionHost=kube-00 + [Service] + ExecStart=/opt/kubernetes/server/bin/kube-apiserver \ + --address=0.0.0.0 \ + --port=8080 \ + $ETCD_SERVERS \ + --service-cluster-ip-range=10.1.0.0/16 \ + --logtostderr=true --v=3 + Restart=always + RestartSec=10 + [Install] + WantedBy=kubernetes-master.target + + - name: kube-scheduler.service + enable: true + content: | + [Unit] + After=kube-apiserver.service + After=install-kubernetes.service + ConditionFileIsExecutable=/opt/kubernetes/server/bin/kube-scheduler + Description=Kubernetes Scheduler + Documentation=http://kubernetes.io/ + Wants=kube-apiserver.service + ConditionHost=kube-00 + [Service] + ExecStart=/opt/kubernetes/server/bin/kube-scheduler \ + --logtostderr=true \ + --master=127.0.0.1:8080 + Restart=always + RestartSec=10 + [Install] + WantedBy=kubernetes-master.target + + - name: kube-controller-manager.service + enable: true + content: | + [Unit] + After=install-kubernetes.service + After=kube-apiserver.service + ConditionFileIsExecutable=/opt/kubernetes/server/bin/kube-controller-manager + Description=Kubernetes Controller Manager + Documentation=http://kubernetes.io/ + Wants=kube-apiserver.service + Wants=install-kubernetes.service + ConditionHost=kube-00 + [Service] + ExecStart=/opt/kubernetes/server/bin/kube-controller-manager \ + --master=127.0.0.1:8080 \ + --logtostderr=true + Restart=always + RestartSec=10 + [Install] + WantedBy=kubernetes-master.target + + - name: kubelet.service + enable: true + content: | + [Unit] + After=install-kubernetes.service + ConditionFileIsExecutable=/opt/kubernetes/server/bin/kubelet + Description=Kubernetes Kubelet + Documentation=http://kubernetes.io/ + Wants=install-kubernetes.service + ConditionHost=!kube-00 + [Service] + ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests/ + ExecStart=/opt/kubernetes/server/bin/kubelet \ + --address=0.0.0.0 \ + --port=10250 \ + --hostname-override=%H \ + --api-servers=http://kube-00:8080 \ + --logtostderr=true \ + --cluster-dns=10.1.0.3 \ + --cluster-domain=kube.local \ + --config=/etc/kubernetes/manifests/ + Restart=always + RestartSec=10 + [Install] + WantedBy=kubernetes-node.target + + - name: kube-proxy.service + enable: true + content: | + [Unit] + After=install-kubernetes.service + ConditionFileIsExecutable=/opt/kubernetes/server/bin/kube-proxy + Description=Kubernetes Proxy + Documentation=http://kubernetes.io/ + Wants=install-kubernetes.service + [Service] + ExecStart=/opt/kubernetes/server/bin/kube-proxy \ + --master=http://kube-00:8080 \ + --logtostderr=true + Restart=always + RestartSec=10 + [Install] + WantedBy=kubernetes-master.target + WantedBy=kubernetes-node.target + + - name: kube-create-addons.service + enable: true + content: | + [Unit] + After=install-kubernetes.service + ConditionFileIsExecutable=/opt/kubernetes/server/bin/kubectl + ConditionPathIsDirectory=/etc/kubernetes/addons/ + ConditionHost=kube-00 + Description=Kubernetes Addons + Documentation=http://kubernetes.io/ + Wants=install-kubernetes.service + Wants=kube-apiserver.service + [Service] + Type=oneshot + RemainAfterExit=no + ExecStart=/opt/kubernetes/server/bin/kubectl create -f /etc/kubernetes/addons/ + SuccessExitStatus=1 + [Install] + WantedBy=kubernetes-master.target diff --git a/v1.1/docs/getting-started-guides/coreos/azure/create-kubernetes-cluster.js b/v1.1/docs/getting-started-guides/coreos/azure/create-kubernetes-cluster.js new file mode 100755 index 0000000000000..70248c596c673 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/create-kubernetes-cluster.js @@ -0,0 +1,15 @@ +#!/usr/bin/env node + +var azure = require('./lib/azure_wrapper.js'); +var kube = require('./lib/deployment_logic/kubernetes.js'); + +azure.create_config('kube', { 'etcd': 3, 'kube': 3 }); + +azure.run_task_queue([ + azure.queue_default_network(), + azure.queue_storage_if_needed(), + azure.queue_machines('etcd', 'stable', + kube.create_etcd_cloud_config), + azure.queue_machines('kube', 'stable', + kube.create_node_cloud_config), +]); diff --git a/v1.1/docs/getting-started-guides/coreos/azure/destroy-cluster.js b/v1.1/docs/getting-started-guides/coreos/azure/destroy-cluster.js new file mode 100755 index 0000000000000..ce441e538a5dd --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/destroy-cluster.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node + +var azure = require('./lib/azure_wrapper.js'); + +azure.destroy_cluster(process.argv[2]); + +console.log('The cluster had been destroyed, you can delete the state file now.'); diff --git a/v1.1/docs/getting-started-guides/coreos/azure/expose_guestbook_app_port.sh b/v1.1/docs/getting-started-guides/coreos/azure/expose_guestbook_app_port.sh new file mode 100755 index 0000000000000..65dfaf5d3a968 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/expose_guestbook_app_port.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright 2014 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +[ ! -z $1 ] || (echo Usage: $0 ssh_conf; exit 1) + +fe_port=$(ssh -F $1 kube-00 \ + "/opt/bin/kubectl get -o template --template='{{(index .spec.ports 0).nodePort}}' services frontend -L name=frontend" \ +) + +echo "Guestbook app is on port $fe_port, will map it to port 80 on kube-00" + +./node_modules/.bin/azure vm endpoint create kube-00 80 $fe_port + +./node_modules/.bin/azure vm endpoint show kube-00 tcp-80-${fe_port} diff --git a/v1.1/docs/getting-started-guides/coreos/azure/external_access.png b/v1.1/docs/getting-started-guides/coreos/azure/external_access.png new file mode 100644 index 0000000000000000000000000000000000000000..6541309b0ac87c4081315c071295400d52614447 GIT binary patch literal 292367 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∾^*s<$@7TQ-t(eaByz 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

          x|V8l99BH`CfU>K7!K2Uj?g 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�MLVZV2H*=DRvZApUtis2`GD0C3TMn75V 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

          cgf{Bj!`^beXjlZFMY4cD+g+8W7FnF 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 + + + +Kubernetes on Azure with CoreOS and [Weave](http://weave.works) +--------------------------------------------------------------- + +**Table of Contents** + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Let's go!](#lets-go) +- [Deploying the workload](#deploying-the-workload) +- [Scaling](#scaling) +- [Exposing the app to the outside world](#exposing-the-app-to-the-outside-world) +- [Next steps](#next-steps) +- [Tear down...](#tear-down) + +## Introduction + +In this guide I will demonstrate how to deploy a Kubernetes cluster to Azure cloud. You will be using CoreOS with Weave, which implements simple and secure networking, in a transparent, yet robust way. The purpose of this guide is to provide an out-of-the-box implementation that can ultimately be taken into production with little change. It will demonstrate how to provision a dedicated Kubernetes master and etcd nodes, and show how to scale the cluster with ease. + +### Prerequisites + +1. You need an Azure account. + +## Let's go! + +To get started, you need to checkout the code: + +{% highlight sh %} +{% raw %} +git clone https://github.com/kubernetes/kubernetes +cd kubernetes/docs/getting-started-guides/coreos/azure/ +{% endraw %} +{% endhighlight %} + +You will need to have [Node.js installed](http://nodejs.org/download/) on you machine. If you have previously used Azure CLI, you should have it already. + +First, you need to install some of the dependencies with + +{% highlight sh %} +{% raw %} +npm install +{% endraw %} +{% endhighlight %} + +Now, all you need to do is: + +{% highlight sh %} +{% raw %} +./azure-login.js -u +./create-kubernetes-cluster.js +{% endraw %} +{% endhighlight %} + +This script will provision a cluster suitable for production use, where there is a ring of 3 dedicated etcd nodes: 1 kubernetes master and 2 kubernetes nodes. The `kube-00` VM will be the master, your work loads are only to be deployed on the nodes, `kube-01` and `kube-02`. Initially, all VMs are single-core, to ensure a user of the free tier can reproduce it without paying extra. I will show how to add more bigger VMs later. + +![VMs in Azure](initial_cluster.png) + +Once the creation of Azure VMs has finished, you should see the following: + +{% highlight console %} +{% raw %} +... +azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_1c1496016083b4_ssh_conf ` +azure_wrapper/info: The hosts in this deployment are: + [ 'etcd-00', 'etcd-01', 'etcd-02', 'kube-00', 'kube-01', 'kube-02' ] +azure_wrapper/info: Saved state into `./output/kube_1c1496016083b4_deployment.yml` +{% endraw %} +{% endhighlight %} + +Let's login to the master node like so: + +{% highlight sh %} +{% raw %} +ssh -F ./output/kube_1c1496016083b4_ssh_conf kube-00 +{% endraw %} +{% endhighlight %} + +> Note: config file name will be different, make sure to use the one you see. + +Check there are 2 nodes in the cluster: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get nodes +NAME LABELS STATUS +kube-01 kubernetes.io/hostname=kube-01 Ready +kube-02 kubernetes.io/hostname=kube-02 Ready +{% endraw %} +{% endhighlight %} + +## Deploying the workload + +Let's follow the Guestbook example now: + +{% highlight sh %} +{% raw %} +kubectl create -f ~/guestbook-example +{% endraw %} +{% endhighlight %} + +You need to wait for the pods to get deployed, run the following and wait for `STATUS` to change from `Pending` to `Running`. + +{% highlight sh %} +{% raw %} +kubectl get pods --watch +{% endraw %} +{% endhighlight %} + +> Note: the most time it will spend downloading Docker container images on each of the nodes. + +Eventually you should see: + +{% highlight console %} +{% raw %} +NAME READY STATUS RESTARTS AGE +frontend-0a9xi 1/1 Running 0 4m +frontend-4wahe 1/1 Running 0 4m +frontend-6l36j 1/1 Running 0 4m +redis-master-talmr 1/1 Running 0 4m +redis-slave-12zfd 1/1 Running 0 4m +redis-slave-3nbce 1/1 Running 0 4m +{% endraw %} +{% endhighlight %} + +## Scaling + +Two single-core nodes are certainly not enough for a production system of today. Let's scale the cluster by adding a couple of bigger nodes. + +You will need to open another terminal window on your machine and go to the same working directory (e.g. `~/Workspace/kubernetes/docs/getting-started-guides/coreos/azure/`). + +First, lets set the size of new VMs: + +{% highlight sh %} +{% raw %} +export AZ_VM_SIZE=Large +{% endraw %} +{% endhighlight %} + +Now, run scale script with state file of the previous deployment and number of nodes to add: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ ./scale-kubernetes-cluster.js ./output/kube_1c1496016083b4_deployment.yml 2 +... +azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_8f984af944f572_ssh_conf ` +azure_wrapper/info: The hosts in this deployment are: + [ 'etcd-00', + 'etcd-01', + 'etcd-02', + 'kube-00', + 'kube-01', + 'kube-02', + 'kube-03', + 'kube-04' ] +azure_wrapper/info: Saved state into `./output/kube_8f984af944f572_deployment.yml` +{% endraw %} +{% endhighlight %} + +> Note: this step has created new files in `./output`. + +Back on `kube-00`: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get nodes +NAME LABELS STATUS +kube-01 kubernetes.io/hostname=kube-01 Ready +kube-02 kubernetes.io/hostname=kube-02 Ready +kube-03 kubernetes.io/hostname=kube-03 Ready +kube-04 kubernetes.io/hostname=kube-04 Ready +{% endraw %} +{% endhighlight %} + +You can see that two more nodes joined happily. Let's scale the number of Guestbook instances now. + +First, double-check how many replication controllers there are: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get rc +ONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 3 +redis-master master redis name=redis-master 1 +redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 2 +{% endraw %} +{% endhighlight %} + +As there are 4 nodes, let's scale proportionally: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl scale --replicas=4 rc redis-slave +>>>>>>> coreos/azure: Updates for 1.0 +scaled +core@kube-00 ~ $ kubectl scale --replicas=4 rc frontend +scaled +{% endraw %} +{% endhighlight %} + +Check what you have now: + +{% highlight console %} +{% raw %} +core@kube-00 ~ $ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 4 +redis-master master redis name=redis-master 1 +redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 4 +{% endraw %} +{% endhighlight %} + +You now will have more instances of front-end Guestbook apps and Redis slaves; and, if you look up all pods labeled `name=frontend`, you should see one running on each node. + +{% highlight console %} +{% raw %} +core@kube-00 ~/guestbook-example $ kubectl get pods -l name=frontend +NAME READY STATUS RESTARTS AGE +frontend-0a9xi 1/1 Running 0 22m +frontend-4wahe 1/1 Running 0 22m +frontend-6l36j 1/1 Running 0 22m +frontend-z9oxo 1/1 Running 0 41s +{% endraw %} +{% endhighlight %} + +## Exposing the app to the outside world + +There is no native Azure load-balancer support in Kubernetes 1.0, however here is how you can expose the Guestbook app to the Internet. + +``` +{% raw %} +./expose_guestbook_app_port.sh ./output/kube_1c1496016083b4_ssh_conf +Guestbook app is on port 31605, will map it to port 80 on kube-00 +info: Executing command vm endpoint create ++ Getting virtual machines ++ Reading network configuration ++ Updating network configuration +info: vm endpoint create command OK +info: Executing command vm endpoint show ++ Getting virtual machines +data: Name : tcp-80-31605 +data: Local port : 31605 +data: Protcol : tcp +data: Virtual IP Address : 137.117.156.164 +data: Direct server return : Disabled +info: vm endpoint show command OK +{% endraw %} +``` + +You then should be able to access it from anywhere via the Azure virtual IP for `kube-00` displayed above, i.e. `http://137.117.156.164/` in my case. + +## Next steps + +You now have a full-blow cluster running in Azure, congrats! + +You should probably try deploy other [example apps](../../../../examples/) or write your own ;) + +## Tear down... + +If you don't wish care about the Azure bill, you can tear down the cluster. It's easy to redeploy it, as you can see. + +{% highlight sh %} +{% raw %} +./destroy-cluster.js ./output/kube_8f984af944f572_deployment.yml +{% endraw %} +{% endhighlight %} + +> Note: make sure to use the _latest state file_, as after scaling there is a new one. + +By the way, with the scripts shown, you can deploy multiple clusters, if you like :) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos/azure/README.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/coreos/azure/initial_cluster.png b/v1.1/docs/getting-started-guides/coreos/azure/initial_cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..99646a3fd06ece2c88cbe47a35d59a863d5f8e7a GIT binary patch literal 173212 zcmeEubyU>d+BSlKhzN>`fP|z-cb9Z20@5ik^w8ZRBHi8HLo+le(hM*l3^1fL!+^BZ z@QvrZ=e&=Pp0&>R|I1p;Vt#S&z3;vE9oKzrLRDYN5!@!bje&tdpdc@;hJkTw3IhYP z>=q9C%B7Ly4-AYukF2DmR28J8s8yZp0amu=7#Q-QiOIMc@dJjdtg}H^k#p*|{;EP1gi}R@S%|z#<8H#?_VnFgvE7=IREK1eQw1RLs4t5_MeOPM=rh|!JT*30btgSgb|y~)V>9luLgeN1VJVUqjrSeS zF#B7dwmOeb>-W#cFq)e~0xKkfZR0KtvcCEcrHW+5Ltau?%xD(`?+lIJ1JrI@XHV>R zDrpvZR1k`4ms;g@$q%F~x4khR#*5|n8kKRME+kk=^Mg<5XyUoj55qJ84!~FcfcO=x zjXNASByJ=l$uUVs=m#HIeDR2^CD5ab3`SW#7UzHFl@KrEOe1%g@7eaGvxM{I3U+YR zx;}mX9rBff2Oa)IW=-Q`D`!?vN3KjuB}#F=J6se_axY~y`b)0!FL|=7IjLd=)beI9 z4&V=B{R@V1)rSU2$w>eMCQ7^|k|)C|;dc{y-tM<${21f3)6c5PR>taG!+R^sYwF{X4EAwZ(QHminK(DSuvjX|?R;K2F~?~IYVQ88P63wX}7dFHbYPu^ov zE#YfR+_B+G!5Y8O>6_z+;TPZV1B;I+P@@a$QGQa*M**vF46%F(u^;&N30EWfJeBl3 zsR?I0BlOH);m6R}LE>f20*Yhm90=wp+GH55wUy@}$an!8oj*w^mJUqWTwm)e9=-Gy9|Z*w3N;PbY;GR*bR?*TVo)`*98 z?DYv)7pFs!a&PFO5vQc5=bYiA?#^F=v!9B4y)Cac)n<0P+ZvJidHV*wa5%5A-Lw^6 zbk%#t@kEX(y#ftAoZ)V&!!;b}>{QYZ?p+wtT*@BPrNkJxFgQ8)=uYSW-&;?#Z`@(P$OzBjJWh|SB9oY`#Nj*gA(OUi5s^aEK0EKe(afG_L*Tl31I$y(~tV``yk6048SLyS6Di# z$NJSoELg!gk1KHXy40>PSO2D#ByJPlZg&F|*Dyfx``tUVw_d!k zyoL2z&V@+o%aa<(3?lb0gm^MEu{Y`P6l89Ge5~`4MJ_Bhvfs^&P%ZK@EJJ$aX>#n# zRkrbMZm0$iIYdq?#|Elak16_bDtBY7d{d>K z+&A#92}XQhN(vhwP|!q7TOjFUp)rjur{?=aU;Q@8vP2yK480N*d60$3Kyj~sk) zzHtiRj`otQ*nCHNJTwdeFTwUHeTc3VbMEort=}YhLG&~$MlnU{8C?R=3GquJwl0cE zIS)Cy`>E2Vd9-uscwbz;VSXd~_VSy_TjHAdX{9GLvGUt=&T-^S8DALI;%+Oz<#81( z6buT)#&K&!bV6*UP8b>Euvami@Xj#K?lgyAMu@N!KeKqYK|{jUmzd5DehJLh&!6LM z7Hc*MyWf-YO*XWsKt1WTB2z;GegbX+|G~k5*TKla#Om3B(wfp*biYyDUhK8}o1(PW zz9rlxZ?|===^H}5lFvWL=95B2tU~McXLWUXks`=@NUTgrZ~-o~`H23A%Zs8t9Hl1t z@{{T(C6lBV9WO#Za|YYo#tL%^lMNFKv+d~#GY?~YXwQ6?i8G-h@pEEr!qhVg)s~7Q z{nP^6f}P^wH-@=wT4!xe>{zCo+&+(=^g8v5^%ZHYIK-{koHES>@JLb-~@p~gz-!%_;( z*3uJ&%);H`tlSRCcEhV&9FR#7r-~^^wz(HOGBETxu>qqK!y^?Dq5Uj|GOHre(q;+g zDnR;rOj4s}K$5CW`jlto4ZEVoVz-tP0Frz5O6U%SJ4MF`AhS-$zg9!XutHgrsXUms zq`Z{8gn4Q{9}W_(u&5x(*UE9%-pdt}SyT|0@vrl%L*)cUebNXD#^J>|y|Z>F^UlN_ zFj*s62R|2I7`LvKhW*i;HbkIbV6mz9M<5>LOE(?7;PdJSCg|4zo^F?7s}NFafPE4` z6W|7U!t2hlk-o>Xmm!_9Dx$zq`gYt7zbrUeCQBw#CYpYN>uYUS?ZUyDSr$iI7FW_yBxQ(z(*f8+r8n;q;9Jja56tNDsF)H}@UV6LqB4 zEI-`e(ZPjC@T<^~Fqr^@;I2a(vf$f;<@(;OIPOm~aL>>~rj2N}yKK#Dat0{31_y|P z=+e1Q*#3is1YdQp`J=gMp!ZzMyw0w|ZtHxjsEg<{&s48MZ;B(Y zExR?=1F_|+g}xq(*jMrF>*Py%tMJ|89g-FB{9bHlmVcRltR0{iM#X;!6a0%y6rm5O-N}IsG%0 z>|;4Ixl6uC0oJ#=Gxf!>Q?dB8dijrE*X7@pZVx|+G9>X8@1>J{GV!FGNSL-!=)^a} zey+D^_s76~__rzsOS; z0u_<34&|8@$d@j@gAa`gaf|j8{j=|7y-wwfBTe=c2+v4Na8=7;=_jfmhGucwzbqcp z*M7D$;x@1lC;II6J>;mQ6JVWZwX7@uW%{)AWqcFksAv_-UiaK|bKg1>gm~B{-JZ|? z_|oDGb=Jw!MdI*?hyANTldZ`pO_hxIBiitI5`K25QSDoW#qof`H$%^cxRS06jo(z) zEFlk?)*_kfHCYUx7wTQFc!Q5#yk15of|%VaKWpu4HB>bkwA&rSXn@efx8>jBzKz-l z*nlo=ubj6=X>HV}8mpYOwK}qz469L7IMD=e$P@Y2?RVyRT-E0RQ|oyUd+_jrQ}Y*) z8BB9fbAM`gd~E!K9S(fT{-RCP?gGNKSKBSj<6g0_@5ktFq19~RiDauZ=xG&0uJ3i! zF&e)z2!1UyVEApJt^L($&#ui?&sOsG71>4jsekDM4L2l(U8=T@aO>AZ?yiXv?D}i{!_X1XhDi{QJ{xUA6{>0o=^eMZ{FBf z*VkR@h1ABtQamIQ6v^mUcUgImuv=O?QC1Ag%+1ho1gzSkW^x%!Cc2uxI=4gW()Y5X z#r^Zmb(JoHWAKyN&W%JCw4Ik|T`NP*eR7L(zcHK6`=2zeoCj#61SB5Y5!Wji$iJew@D0=H2C~xQ-JEw0H zpI==FqcTtyi}=go%YmOe6Hv4JG6CF9Okq*%r1l? zh9%zj9gIE42Q51&de)CSBhTo+zhY_4R|v<#NX)|c!h%ixAnWy@3GaL5;Ow{+_j*PN zJG(xF<$yv>L+o1KXT3Yi-TnRKtQhi<7(VwRBkt@yAw8=l3~R@iP;cB>U}Tc^=v}O2 z%WZ^*E%hC+*M!*!=G-?#p%Vo>2YDT542(zgKYwp1sL_4Lz_^iRrJ?Pjt)eVsYH!D8 zVrKu=oXx||0sS-vhKPp{`cFG^7ZYj^J6oW$kcTMEKb{am|NZkaI}P8PPx0^^dD)eTm%`VgI-8#cn%r ze`UhJkibxomelaLu``dI@$k(>*M5k0%x)5pNK)~Im88&3Wz{dcUX!q0ALNq#+wdHD zrg2P~$M4^}C@3j{uMeLHbPvyayYICRVGg10X0N@>NEJNHY;t$cy2!X=1FO8ydUlIC z00Z-v4+)|BDWcvd3iI%wkazx3R*Q`g1v^4=IgA@Oi6nmgxWyjBd1+Qe^LG({llbqi zF&)^qDijv`vfKY8?Qg>W@%1CMgt5xa#|*UpWfKMVH!y9+PxmeM?)^#JAFk2dBGM+l z@nPT>9sIk;zc;(37tob<!>?OQ3Yyb!8(dZE9h3 zUnXxodhzRm`{VHc@yL<}@yF-Y>x=%^iToGsra{)bO>45vC);9yY}tcJOsp!SHa=xY za-`%R1Pb6`?)zcw(D5Xy{I-<4tk`14@3fNU@6WW_XJ4LNxRe@{7aeWQGZSeLLk_ z%IIcUHR{d#Ml!hoJ0604W-ZX&Jeow(I#kRtf?qxzU)L*8xFxfO*e^j}&{;9){Mf8_ zSSN4G6O|$?$7MeJOeLKscGo~iY58;Tj`iu@BD-nd^)uQIDkgvXSxZDca8l9BZ4Urj zUUaht!R_SW+}^t)sX|DSRBrn$+nJU(wRC2&l=Cf$A#Nm!FJ8PWw>EO$ouxPJB`r_m zEp#c3b6f0-%BI$XIH{2FC)Jt{4HiMt3+xd1bV^Aqf#z4VKvDCdgjih**!R)5kN?}n zjuZIPbSd$vt#<`tImu*qFi4nn`0Ve8yvDU<(W`kO=uIUbwKKDp2g)@6{6(SG`j|}5{>M_F zT8V@tTnti{e?!6!-WVIpaLb|&PZ7E=Y2?Qs6aL_&F*^-070II8CVg(`A3xs_#gAUf ziiyvjVs)ToISM_1 zS)6UviWhftno#}SO3UwIGF^GgXc$OZxh0l+oz_kz8+bM-XI!dl?51*4Zt-nLROrN4 zWYbziNgr~jn)9kh;T&43LfYLInI;$_lP~s~m1GI1Xhy}(QViD1I$%Qt;00i7nb&%# zocXtDs@1^jIaXp>e|Exo|0)9D*6FTypt5jjGtlm9+u0$~jS98r%Vqb?!}A)+zZ#3X zmu$rFs(Qv+vqGOf2#2r+>3%I(uC=&h5oDdk5y;tzI?5+7JHN~)EYK^CYTPb?n$FRL z8WK{8u^9RB_TvyY*e>uueHec8TmQkJO0yHaF^&YiY^5HTc*x4X;8xuBInVQ|kSI%aQW}HzxV~>THt3ay?6zttX6bys*>xwO-TU+` zeU)I*x6f{T-Yk6}=4nu760;T?beNa7Oe^tex2&{_(LT)R0I@e=*PC_8piYSW-|hsz zz!EGQ7vf}tIjIHj3zgOeRJI=*L0V&seFw$!kh>Ik0im6w%gMtjg7L_^TL(&PclDOv zC9&?f5NKG<*P7=Ek)@0`zERTYG|8{fYh~jQ=Y<)7lu1jqJA912fznuZBQ{@E-S%c# zFHZN|_}fSLB3`q+t}--W(l0TdPV-b|AYn~5 zoKqhWp!IQAPpzYy7P=s$tgk{{qo)9c{1L*NQiOJND22dfK0CG;AJ0RaqUP8S1S1VW zw0@6SXOZ!pJJZb*W_6@&4K|YrgAbX{EjT0o)U`icBMOmN7f8B?1ZNS2moI~%Z+NMt_hU(7qvoWp+{{HMkl76Fd zt)X|p_~t*{Y1>b%0BH_|VR&JV1`@#|?79Wj$X)BO`#_Zu2q7d$lLoC~=>dVNk|Ec!-v8fjyFp@8hNuwK9N0O9u-m)Yz)(hFoA(_sd#m z80x%6F{8KbJ%TAK2cW3E5Y}(5{`Z*aACK(ge@U$A?QCXY&>Qweo0f7Ii2D<*c-ju{ z&}xPCo2xhDlhtkmE>?SDeBR27%-#xMw#-70nzwPhh?)waVEhLOa@jsYY{_Z7qe-{d z1_wj3eP}X;8r2`+b5D4q9iP-;^YM0SXZ*v&%=JABojO2+Kg>zE$*&t{rrtArbud**F`;VV9FW@&a7|!qtqmrc4gbJ%gWk1cj{rRUQ*bd}-!` zCs+zs8_53VP(r&L!#x~3Z?sdIA8o|~ikr9alUZsExOnYn z>1^SIX`rn2Q6nNZ!+K)9dP@M7O)pB|^m3zA=1liY z%3X~+ZFMMFs}?ZuJRNMynQC(~!}2WcA$?^My;AZ_k&WA?8h!LtBV$y1i=$Llmn%!%JF#mniyreGcO6%kYCe*Aj$QMT;=`Et30Co1>w9E=efNQ6|h2rz`WR(dj_>!A3X{QkEdv$}yX zZnH19wtQy_0~xHd$N3k$MOjVLkKcfBJsB~@7 zRJ$VhprBxVD`!dOQdc(uerqF=l-&W|AHC+PcZZc}Y0F_14Xlt%Veo2ymS|7qROc3} zQO##iv1ROMCPO10W^J=tK`IW?^adV#rw$U0{1q||m*d2C7Y<5_N3lu%vQGn_0djCe=j4yQl#6n&Vi;{08*Fq$FXsGpbW2($9k!BApg9Odu<@^E78+; zm(9k3`s4Ynmba%B#8qOGjr=Fv(hFwv?(T>m;Dd#qhg^%Ygb-53p<_`GCWrYpZNuYq zj$C?P*nF*yy63m8jn!rnqohvF$|N=l;pvlTQhvjQz3Untt2z0!H1X$cc9^khYGl0D z#z>xz#d;efal-DPgo-Hh-_{pKpt|PLDJgebC!wn?Otb7wWn4++o99~huN2BePq^8mxY>sfv9o6aIq{Zj#9dT)lO+*Bw2$^t5{? zy8LUU5@YioNO-kea*Sz##KlQ$w*T219;sI!B1q?0 z1`^KX73W0O$rYdpZJr16RudcbI8*gj^Uu>{N`n4iZWIC&{VQvcBi5)#8qI1wDJLdZ z9|*YCHmqvhuDr-IoR_+8K!J^|F55)?Mc*`q(AM-|9b{ z;lY)6L}x_$_k843iPvOV+~OsH&C&G!!KnDP{QCQ0r!#sIZyk%1-Faqpl~Z{#m)gEN zHUqXTa?kY|BkF-OpBuXuDdKQGS)ODr`en1VDtART(i$zaje}HdnDm=s*s{z>PgkU8 zY&t3$f95N%lCwFiYG+=`qJyOv9ucsg@tL6W#=uUqbGxr5?R++0rS1%{A1jeIB7%!F z*hLVcTDg`ppnKT8$$8S?7=+U}KT`hU%*p9Q$705788hsy-L=LcxY5&p1Z*@mv69%6 z!C0BbujB%{G*M1wGh#bGZN)i844jHbBsCzWX593Rqkmp^Eg|+q8P!UxvIsNoRUn)?ovH3e6qBc;Ls{Qc24t8Pp-FgJj3+2i8j3!N#Oz4|1lr8Ub;!nryx{j}k zC)XKK77Ba$mvEa2KiuMi;dE4kXCQ;A6Z2<@4^5{?_ zmCIE(PYC$gRqHg?=j>qcW32e}5>Y0|hz4G_A&(JNUR;&txqhMtyidRprV(eI%$6@n z4-zi=>3)}TyCIDy(z=-hpc1`ew=ZWxrYl7%2g`lgvK9G~%x{z>5)R9>bKebg%|WM( zsx4#hP@pm?cE9FkCa~#@my-a4bCFa>5HMdqo&NlovkZ7|B!BGOIuCJID~{`!3Ss1T zVc^GeLwPxjvUP}k%j#Wy7<`7TD-S@%LJX?6a}Ff&DLCxBFi9BBJhf;lb4&Bnsj|;z zZa=9yPc*S@4Jp@%L~LBQTyVhj3z)=hLn8E~6pocmnCp;jg8>tshgFd8XGg z3B?{gh3Js>U@bRhc2pTt+F_X{|uNxwh8- z+V5=UW{;(BCfKBVQSD%ucAn>qdw4o{*xy_+IjQ~PWEN?u8Ciu(SVO8d=Y#yLSQli= zJLBM&F4k>kJF;|@32_Z6aOEwLtxHGuB+9NB$97Z9Dkc^Hfcl1N+*c;q`H4rM5u<7L zJ}Xg3N*tp*WxVf3PKH7L2LqS=@xs92aT%2)bvQt2IBJXA zVqkioc&GNZfVWKgxLOW-ytaxT1P%pP1M=bw2E1`=S7v+$>>$cFpfbE+R8`-=KZE9r&evyn|7 ztL-)0c9b+hv8e8PG@ZAIidw)b3^vS>e#Ahhe`slqZCNDOfg9eX=@ogEx=JS+jligCDS}$y;YTzZ}%;9sfg!!^Ae$@&+H? zFw&7PNj^J2rc~8#(lTVl;5t&8SaN)>!h?=kK0P9PzY>OH-v+y;CEv{X#0Xj)j+GiI z(|p5b>nllZEEgmzo5mJdZ+l^pPNKa+C^423Q|@H|Y}Ii>OkhwW-Q<-5FVE~?s;J#z za$W(gM%x+d)=6kUG=*@~%^Ox%hh)47y##2Lj(51E(Liew(d8vik8TMWq*4Df!+|DO7=3f|^!xSJD(p_Y&LNeW6x0 z8L;k7a?%OcAK`fKoj!@Bwad3kJIhqzitd8QpYvyG{ZbuRlD_q1i|AC^Hq`D3e;}2z zc%Sn+Bw5M(C}ytNnF4%VOY_U)|AS~h=m&5?=6t$c8S)2G4G(#iq_~rO#Fm)%Oxi}i zhU~GmM&i)?2(otR0K9bz#B236pw86EdtYzwoy-3UVeLq&?J}L6IZYKXhNxA-l;ll| zm8~1Lgy!5u0{W>mOf6Ebd2UICi*HJ`UY+1hZeG3!j&gmyipl2UrDl$LM@#Bg4=)+p znIQ96#eB>|-AkphGBuOqC(3X6E=|*`I~M22qeA;EIkR%c?NX9g2cq9n0O@-rQ{SRM7s^?wB&X1-4I2R#w; z=tmqVVA<;n8n<|z&%2Bk%t-SbhTz~dQDax;r@rQSCLJ!0A=$dWk2|+{S=x!R#(L(` zWF8I}0L*;H_2seg>R@~HtX#9QaYe2+`T_nhK7XDhH#y&vf!=&cLADrqgf(2NQmnS) zGr+L9*4)J@P9`WSjyVlm&cFUW&cKiM%R}@Oq1@;u{Rk4E&Jy7`r4dhfdnrdFQlotR z9pH`rJ3a(=9VPkLVx*&2nmcly>T!l%U)mA6S0uCP0b3E{Z+18Xb&Y&@H~T%~m!}nZ zC1jOi(ba<*0m~6dEr!(Hg=AKvr>tqb3NDn*ODvV}G8t#E{1+|vimSfQR1xcszWUC( z)svTTD?KgusMX3{Ds3d;6D6>9L47NqeDF5)X6fP+nb z*&a*Mw{Q9j3&rXI^j_m{vd2e@oh59=d!~VhZP?qFe7$?p`+u>-{{+q)((pA{j0|_% zjsa(0--)Wq=?RpfAh&vWk>??a2PWD38kA)~C_j`x$AHHw70{9c#lXEHS1wS?k?>>3 zM^8(xTV-0H49_#O{W#h{s#%#hK#l^aDTfduqE;;tC_Tyh{Y5x{B$UCX5A9>ZaBf>M z=@muzx?V#vPm7Z)WrG-L64#hDr*+7NiP_*UH=X=bm#C7li}jnA#4g$|Z}70?$b)kY zT$Xga zAcVPsx<``o2IBIH&vll))*PWJ?0uZZ%NHY!RnOMm6k?aHYdseANHm%UgFzqa3-{#7 zVS4&Byb_(o&YJe+*``W|S9039NSdbY_ddMdAKUG^q)$53Mf5sT@CkO-5TrTTP1uT_ ztFKgS|I9)Bogd5oQnh+nf)U8em>}E{xkW_+Y&~O`5O#vUOu#XQdyaeeNwsiM;4O4)b5c9;ez#Jr4Q5N}Kb*DVx|Z)+ zuUCM^{$@a#C%bS)qq|ScNLba&62Q0pFV3iC$w{Mq_Q{%rc<(0o zXvnkD)wKO?!>3uh$$9YN^A(26XWW3RW$YG6s_>|rmaE^2tXt>bz%2nNx(=OTxi0{A zPg3wL6Myi_p8Dr(2GU}J!f6SJ#+D+avBsHN${LU zyXC1QDB_7|FM*;bvF%EjIL1@ClO15K?=h~|>R=)>2m9Pd@y+gRNYCV?G6!3bT=2ms zWe(8GO~k=NW+dHw^5@{&*Z_;cjDaW%P6HcrzE4ccgW33xygpIBQOSzOQ(rpffVz5KDrGBmXzD$xh zFme>sVKr_2J*30H+|o22%@XDE`&RJrqVw&Vks*g%?mO)J*v?J32f54+lFx;F50hB= zawI|!uu5X>zFw7d=~k8TJV}0;um_FZ1K8A0xB~G(EV@o~h;VYk(=`3DkWQr{%Xcq$ z9Nuoo;4_D(zKC*>oi? z(#f2=l<(^X^xco`9rx1Ry1q+Gw&rmIz|yL442~ zow9?QZGPV~`*KR_8sA8lcu$78;?gFuvUo>x0z+ zB!U0_Bz4^)qRkQMw*k5K*5cWeRVu!VY`Z#n9!xq`Aq1ovN(F{r(#L5P1mvyG?qN#u zD2*^?`;$)dBVUwV7iSNk6aNkKv(V=Py^F?+4h4-DWtNLtZZ2R!eq2B9X*kGjk7vT8 zcJ0qrVKe8@Z<@EG!bm8)~pljpKEHf#S; z{N#Fg70%$^y2zwjiLs>BOj{~N<241r$=OD>zu7|eA(GDEy34+U*MJ3buzl8w7w#gW zzotEE1J>t(Eq|5?Ukgq)BB)n^3-{N z_E&8un&NuyBW<1_!M{N*j(9}dR3zm1e~q~QRc@q^>0HF*&QlP6hM&W7)aSzdsfvx z@JOx3$CE#86)|2owBs`mwA9R$H!Rnp5|o{V#C8f-uFm?ugw&aj%+UtkC-d3g4Y?w2 z=(LQbFil5MIW=fXSwfC{>z}uG6S$`e@1%x%=F)N6b%pqSK zZ(V=iqHe&Hr5>M-)vE$=K9Vm^!a{VlpDm~R>hw5FiG514D#N73-{}Sett^UqF`5jC zUDBlJRiSt>f_D8Y3tV|a)JahZs5BsyyJ4~mZotVK>NU#0vug*{`Z`$q{tvT zl0Vhk#Zxq!S6;5})m95nlfuxP=b;_U!R`I^FBPCbft&r>#JFVPe=0~8fFy!%ugPHD zq)9~ASO$KgO}Y$YpN-f$3yLkL2(@@tg7GcUIeqa@2p+G4$=YHAUGd;irLA9u#LJQK z+b&_3B(Q6Zl;;s1HEhKky^fOc_mc!TI#w$f}D(B05&oaLBmEXhmLSDk6q1@ z@hTh-nG@L4E&ZDCW@^pjx8IcG0L*yU@7Vj%>~eQL~`Lb8;G@gZU9~jGIp16XYftsA*;&3D_?5#ap?H(4 z!T`K0FW1GSgFo~KdukmvWgV?AXp z+4D3(X9g%+>7KZ%TuW|0x6{q5l@x*r6808A{vm^ z=sCGP8TZMIN&!Rwtzb_QYPp7k_o@NG_z!DmUcX3&Meto;)*0}0_jg`XCdnVaNEW`g z0Mh`? zScwvxDDL`9DYFcz;1ugKJO(UwT=7vejJI6Do!|r1q|#WgX)>=-=6R%1==Fah^wn3t z71)kQOs8 zDS-^?dNoVci(fjuNsaz%2maYghH9WI0+v07tl|8_SObsfC3@42T-#>!{&4q~*8WG2 zfzQw!)zJH4)_)wtUnb>WYS~iyNeKP_Yk^BnC;HC~NYnr1P`;kbzyAw5{g1{R%J5@q z)-}Xm)c>t){U7zYRB#LZMnQGm>)%JebVO{4=JsxZ)pzdw)>eVd4X&vIMEB^(f6Kg; zzK>?D#@(6ty#)CuE#J5~-hhtyw$8uT9sak9j=hPV7`kqk--q(Y@dvuFqPfE@VwXE2 zzYXsX(}?bc1RZ+Q&Q2_gmbT9M~c{%`5e@-XzC z`M+uSFn4gZbV_&=lc$7tf$Wra3MsT0Qw|H*JW4C1rsw`rrP zq4YYnW{LBy?n)Df7u{+mwqZU7|6hBsp}uP=mU059#uIxKDz}LTDi#B zotZlC!xk4?_EawOgWmZrbV4|^&1*81ic{=eDiFR;Q&1skIOzjL`BXCCT zU~S0e1L5ozE}HLihm^}>XjAmL%~XY2^IMrx%?3r|EUm50uCPRA^Mi!agX9@-WIEqW z=~-lIW1UX?A-&c}#{F`gO}-a>XaJr~{AC&ox^fiX9YUzo8$l`q)~WFkEVWQ(PSIlR zGrdM58&bUyLx~YMs@`s1_h21DY?;;pyL0VV;4411{1epEnJmZN7QnZ2 zM)USvb{$qld;KFW@i%Mwv)QwKN1v%RRr^2cF8&xGTy!q@#puX6FpKuw(5ORyrW*Eo z(*p1Mz-y;G#rz7^wm|NZisp%&g1{MqPKuRvHuC7Kc_@`W>_W>VMBOQp!Ik|eyUuG5 zF$St!9qcK1Ae3PP9nL`LKJn|JaiZb^ENW`s(UZvq@EQucN_Yl+rm{ z@ReegCm>JeNQ~2KP9POclrw|G^(@GhYn1~)&2DPwilp@MRUc zFIlqG`6a8>TuJVg$nthpSQR?J4U-Gz`xC}N9T32Xrhn)+Z=JNZ?f+!Ye7DC@Tp#X3 zwKc;j_P)V^B1P9HS+af468+=a zj<=P5p2WeLa9OQm$L(jfZ+n=6`f3{OfgqRh(Tu%bBoL@HbU#rwZ_#7YeJ9SsOzb|KF z?>zaSKbF^gww&Azx~sqNGF8BsR!b#cMeX-4!qNd(*Im% zZ(;MzcY+7cRV6;$Av4CZ^@*3+D}N<^n%8!<>x~)+Gy!L74`VXlB8BF>>&x&zm!k25|Qj<%pG+!qP;}S0}QH7dE7@Y%U*J!}F}v z$$jp5Ma&6ZRq-3TM~XP?iNrM^-;pK7 zR=tiU+pLC_SM879y(50M+3hq$0P~!P+Tbl?CTJ%)AJv)fMAM~0Q<_#SL9Me5){6cs zug64q{I{Do+HHDmeBR$^FJ2vp7j{@A<9Cv#t_JKa_#S*KubR0q-?YXdpnSXcw1wS$ z-c4z#?(L?d^1#Nx7?LYW!U+@Zz7tapYJa-p9mQ4-o30X9Nf2~iAAq>eWzKEy`1p#q z<(P+eZQLLjY&}`m!y00wGfPtPav@YE7je;!+iO4#dS#bs)V!G6^C#0j-3ezO2(M~e zH?lLH_RYGbEYc&(mGu^xEBGJ6X$c8xr74y`N66gwvw*-rt5hyP+!Mhl^IRy)jodZ# zQJMo!`J9L;(reRiA!S1I*^{z;4L*Rz^2M9S$p-7`IcVE_@~XDmBE^;n^nN!eeFV*K zLW4a#uq?5ieO#zaT|}d9ouK|~>#Hw0WR>b|me4N#0av})ch>bCNt`Q;^4$!q(pcj9 z1BuMV!X1t;i}rW30mY?ibuYi*W&m5;FAN#?POqmU6*o^VPd&Am;$${C zosO@nt`>ZavV2ZF)91UzGneC;iMCSC^$KCH`@+3ubME?n+)->Ay${UlXlX%LPh!o` zMQMmzZ_S-YrH+vw7Vv2^>vCa%jjZ*XD3@Kw&>f!Co2IO}h||SAo|F<_Somk0$sgeS z3-l2r8_evP7ty9|*^F0klgELUH;;rmk4L=Yd`Ck81_P64pUk@P(fkiiY6sT$Bhdhn zqn3!Zt12`bg`QL+AMT#bm}fOKP)2-N;99Hu$?ZR6P=SwcQhM#+!FdCUUPd>v7}jbW zNxri5?7Wt9a@{kGV};k?YUaASv?&&baZMHgjm}`ttHQA|#oQONYmK3ADI&@?!AOVQR-_iaNil$-^8-yqr zRFU2KR%^Bu*5a~b%uV-zV^L_)tVQ{Jp~5+CYrIEPAe+lIt?m0k`2wHoQe!$WMs}Ti zgPh;)u2}{&}B9kD^RhgRZ@YT$r32SqwV#DLpS0_7)ldNH6FvBhOG| z<7uEA6~6(L<(BQToAaVIw4(G0no|k5;?&FHxIt}AsvF0JUy11DmDn${0lDX&ys2vx zIsHo9i2noAWjpJ%fHd_IFH81Rh5nsAlg z0Szjpu)%Bl%O-7BGf%~NQs17;JZEZ`U1=schd&aU+dI~>1zR4jk0vARo9ELjPx}(r zH$vqo4~ne7JcQyW1tc*g7o`Se6sXf`^zq0pm*s?`jTZMvsZERKYtf5(Bn@Kp41dRW zz|QvTv|}TAS$K6utLr*)d21sMzW;Qax$nVM^OT>%4 zRHyDk+u|PUgpB$-x|E%abISdN5ULp&*JhGz@7W6qnxj)(NEo;A7!1h0VAHf{+LN1t`bdaUtn{wzW~}MtUXU?05=1F)TbS4O<)XMufRav^qaIUHQ`W*1qE)E@QDN z_e{i5d!1eT8KKyT$CuONu6K-{@4M3CeK4l~LuUSkEoU*HWABsPY8`41cl?sEp=i(V z@k6&pu^-S~eSNJvCd_9HC;=-c>gsjxIzwNKosL9&93L<+mv0`d4=_I*Os<0&PCidGKbiB)gHqoHVVJ$>i;lj+oa+)Ivm zN?zrZfpt#QsXxPY!srgtcQPpkEu_tXdybzbBis}%wu9QnKza3*{QBOJXCFMj^(iZ) zdXnRlKIXE0PqLa{S1(*~deP3*?7VSeZ7m@M9?3LAOxcBE=I9q%p4gwGk8P$t*N5&J zd7kleWUn*(5t!BGM}_rdfmcJ>NwM_)w{@|p?()0~ z*R_Yqo-5}us7Sx-4eTiwOK+3B-LLiK#SZ52&3p@f8>03}3+b|VFQ!`Mwj1<14d=T~ z8pzAs>~!VsWJPTp7QirYh(1c@NCaLkc>2%Ki^?p@89+}#StPE!d)PX5s)hJX6K5fW z*9hz>G!@1#u2X85$B6nn?q$m{!e(=ieS;sknr#aI57`1>JD}g71YH zx-PJgaeHkj4Oq%{u+TS@#AGLi-*D919#*_0(W_pq!h`o8vS@j_98%NE9$#Xe;w}En z_~&T^Cf{Rn4HI*Na8m5w8m>kXlJ95oKe6gEFFZSkKQ$COM#8~E)q5SM@2p*B3eX=N zsK7b%>M=+3;iL?K8}7(0tnFil!%${4&G(MC0fTEhU?>T~3N)(Xna8oxB=d)cnCTu# zCVLwfuDGW}kf3tNo+-I){_B4MWNPMlaC)xq%ejs**Tvl$KYZRJxU^?I*cm1n)Oj2| z*hkgIJXxlRr#x{Fa`2E$AZH?;YvL?dhN|BG$3EkNnXfjgaUfusuxuZY7Kmm7pUctS zm7DGSBo%_4?rfAiEaYK)f=o)eb1{klJ*=j{z}JgoDY|ZDFeUB`oBkji_Z13pd(8D)*Gi-=Mwd*!_W)p~ty` z=W)-*e97hF#U5_s2ILm^lD$^S45!K<`gnmEnslHC7#Lq`9Fii4bEQ`=GCiEHSKm+U zN>kr28Dsb}On_blfvmHU@7&0j1}RSGn9-GF;;VdQZcxbFs&v(P%n)|(rWCxz)jAy{ zO6Glx4g*=z#6wmel=d)QUpm=Krh)lGi(24T!o$e2x4ha%6Rq|+KX@zTU$*uwZ# zE%VN+IzFT=m}h{s&j-yZOAWyJY^4SCPm5r2pFdrcaQ}JMjqt*5s{jORaUH?qk*E4$ zUGyQzPI%h>Ln|&!cfcI%fR9di#|dx@$+Nsc?p07ycq4`P_Xj19{~vpA8CT`@wF@h0 z5Gn%F2ny0lBe6hA8tDe5yK?~xWD6oC-QC?C3#7Y2a?#zjU@aD$oAbW^bKdjpy?=YZ zAI`Vui$8@mm-oEqoMVo0jcZ(E^Sj9hpxC||heYT@$(eJrN`~8~L_qGV5j;$3yN@f! zqk2AoVvmW4(yTk*@^hK)3>ktRH&|w+)hk%u1=;Il<6L7$hmszk_d)=XpC5DvHM@(822&7_#RJrgWgi+|l@ zk0tNr%Q4i$=sNG|Sb^&`;#9t|h&(?pdVg-!C7`RwF>}>l_mCjlrTuhmXV+HRsU`P} zG-Ok6%T{}<%tbv@{LtO7OYXq{9&r?L-jnw4w<$Y9{ok~k{CeN4v9V^RCB{SyN7_&{ z(L4$Aaj_>t@c#;_U0_%*nEE-4jf2y4*j1qi(cQPPnAj>`%<|uyiuK3c0k4vdRE%7+ zI%fneQZ>46Kl@#TMHF4ACYl1-CIpIOMGY471tNGQVfph~v%qEYR}S{JmN1poqRVLr z`-H&rDQsFq+1hb#>eE5qrCV;JH)FN!{@}<4m+e8kR1Hia( zZ*wbIAu&x_#zHTBFDMzh=WE{Wm{kjSo+X}$W$cW29?r-xs7%6&c#w2ga5+ShKSHz4 z+7ixsdLuA}D}Qr+)od|K5d+m`Nq`E^~8b2L!)uYC3mv4o<{MA89#0FX-jr$*q zGYA0cX6uILQ3LEBds=7Lb;iUWxTe{*FBFI_$`dvwMj3%KA3IP4`jKz&@5Wf-sojZ(hq zD6Gx0*;VBjmQCiB2g6fz!oertH(CZs@FiZT$~R!#$4 zs|uq#e?V6-)!DEK=mq+?R7V&-5>M>9m+(%J6 zzqWrOR||VhKqr6Fg+d?qzLGneTP@K6kFzM{8EG;ouQQi|-z3A^^WJ5M@GkegjOY>A{Q8Ym3!FQEL zu~ALV{UWftX;(wNfaDWE*HjAJ@R;0FMYNi2RHbH38^>a(W$Ut;)rx<6M1&)oirh@~ zwdbj@x^g&7Tz}63zOZtM!TO^vf)+eRVttnGogZP^u;V*DC)ZWlqJEAi3*O5&wJJ-O zpSVX0nPvegB+|{*1{~6{l|6%fZL`2R)v6&`UWA6hLZn zy2b=w*~FRUJcL}G6pCcDz5Y+g6h04_L|rD*ksN$@nCY=;_*jtwa2Mk?B4DN%huh(3 zB!(yf5*I^RF={MdG&AJ;Jl(?VeheoB-VFe2f4hwmN`44q*be^CnR$B<{ zYAI8pX!M4LS;1-64$3m-1OH~;N094uwIQdl3r2nP(6JC zZ8A@9VQSRoi%vY}75z+wb0JxEDL|!r{WgVRwOp9|HaG~Z^Xe9SVV+3RE_Vx*U662I zYV%k$_Bqlbjv8R#L$EKajfYaHRQxw>d8leCmyDY26qw5U6_jdUt<+}UG0U*AX6!V> zCh#jx6Q(En=$?K#jd;`RvzM#2qJEoxLrGAB&uNbfBydT;V{w|hBzNJ48Pg-WjAX_S zDs@H;dB-r!8zNqQ;L#$zJ_~r5p;^DBKxTG4y>jKyyv;~kpTBr2TxWQ;fS+mf z+Z6^5DNxRJ`R!8xRP-kdKXY$_d*jwQ&Qw%c(m+NXAt%2_0c0<*(RO?fzof(QE^cv} zdklX+;qUxc>wCTnq1N#^N>z*VZNC&Qn zXRG8#0Q@r2{>|Rjuffz$0(@?pGt%7gN5D5x$K8u;PSFQR!OrL5EjmwZ0InfNN<;)4 zbc>RMY?`}%w$v1Yl$iZYg?2RF-Z*D%y!GYE&+l*eYlw$>5~Ip8nn&NAq4)f@+9KN1 zmeQ?019oFG(`3HXJvcs{p3|Q<60mO5a#LQrDXzPa2cHEBGRT%30p2`YrY{f2K&$-e zJ;)ucQ|7CQv>oVk0Xq=Zgl77ox0w0yrciax1_|wJZNUuw~a6ODCXqq%P zfI)7MKd+nZGZ#{OmAzxM4;#7@0T~&*UW z%0_?^-wa?y4*kh+02e8=e$sm&2nI;?*(bm`yc5c(vskoLGSPbt69$qK^Cs-umofkv zDBc(g$ljDD7tM5JJk$v`xxHRMZ1>qhH}wDvtUF@{?W`@=gWJa57s}_LTFN9=xnOpT z%_YlqU+%6@GJ_7Wq!mBA;e{qhis6gVjY+XI5TsGks z`*ZtT#~qc!GNpy3xMlOkXpnXaSKK9jyColZOX=aQ$AMY>CKSK#R?kcDC!fNh`i!Rt zrw#4@W1||Z1HgmELSfs^;lobl`S>v9Le4yW&=Iv>BUe((EVXXib>w?Q{_JcnJGzL}(t0KXb7mSwKP_DPH`a8zZN9i;m z&T`O&3FT<#+NJ93GMFVBw&jB zt>mB(i3>hhVLHDNXneUFGrqV$+)D=_+yFG(!-qRmiQkow1W7UDCV@;lHdHXv*@*?2 z^t+!A8qQdq2{{~G4emGD-3p?9)9P^t<;V>^o(FSoi9vovV;?q73j`~?e;gx3j)XZ5 ze+;k@++*a-TPx2^iFRG|lw(vcirZ>IbgH9^Lq5pBZFE1-ODUOzAJ|)KRaf8-m<}M? zwe?eXzqWBN2EW0In1zmIOZR5t&$ESrPLpbLZUv5hZYk6`e2N{aL5lE{O4gS6uIBj? zA_z)!CU;NlBI9HHF@Gh)ZWij{CHz?_y&4210!Cjq&${(FeQYkL_2X?|75(FP;sJMZ zI-D;QDy6Q1b|aXxr}IiUroib?3VKToKbI7@wU>u2+56v}Y{%RaigOeW_1?!>NgbRT zRWPNYp-Da1I?qYP)vDe#YXA+rB#y(0BOM@}B{X(8Tv+BVH#`1v40Ua}7<)Wc?3gR8 ziYm(RZPlux7&je!w(r6^_3RLtYO=q(0RMPVT$230&xSxH53U61HU9c_!K)X9QX!=? z9L#s(G<*ElzR)YCCkX4V+eOD(uO;$^G{A+8?QUt)O!u5AJFg<6S3g@mSz}P%Gpifm zLKJTRq6Kw37uDNWA^W?_kj&jjjAd^DNe4S649>y<8M?9#{gTG37$d0MeksJ@_P(tO zmCCm0(MTGpSC3w^ma4V_Rg^+9FKdBqF8-~F0d90yQxYHG>rD1H}uO9jYkjWwA^3eVAom`$v9K!H-?3jiY*Aq;t1^1GdWV+S3X4&Zhh=ZU)y27J$rHq<}fs-ldOhgNRuysOWb6Ow_#*?iLw$J}W|oO{ye`&$@cm`7THac3PpQuvSQ6I0jie(B zAn|DD!2LIT!tw`3Lr%=cE_ZbYUWuPLsQ(bMq@yM(tTZjp`H zrYk=IBA&;WrGmFy#oA-oVsMyaZ0#tZS<>Ip8=2XnN0y|m|GuhmM0*jW2*9-5iXBkz zyhBHhY>PkyG0^cUKDtj_se((hZtTXp%?aY|dI{X-U*aPryH>?3!9!I2*N5@Fn)WKylkWT&FSW~|`l~^2N^7b(c z;-2Hg(MyNb>S+vKNekS_IuW2 zb;#e1hv->Gc3o4mBv3pSkm=h0^_t^m-;HG$ zgBQ?}@Lu=tHXmhgriPO!=l-_21xoa~-^C0^-Z;Mv78XE5H2zA?397T}Os*8g@+P@J zbwPtooR5i7&)PI1L%IlY1(>wfdXN=~Ii**p>yc`7GNDWf43do*K`OscEo(bnh?`uJ zHGl&>+iHqi%jz{bEJ)BDD(%#a*iB+=Cz&eIjx{n>wG6w+*UXhqR?Z%*LjQAATZXnf zRT?Jq1z2`_7S|@C_ik@4H(#Ju-~LCdY%Hg>1wdJ+OBNy+lqF^$OFp<|kG2QaD#3Ij@`WBSPl5E#Hlo{9N*^ol2F!>`w*P4{{ygLV`87()0P}KU!g%3N@BBYJ-v9Cob2VT9CwR+@ z_uo$2;t{|GO=u`0`}6tv(@VYk2=(CI026!)+<#36mAm7YE5|zj>)oLV3>e!>&s_d5 zv-{hB<}(1KS&N+tn}54IIGKO}34%_XC+Sd(w<@`0F+vLyo(KikgD9z#^dHh#j`&U29!oD*Q?Vn7j{;eVXa;Hvh z!cO#;Chaeb???PQQyq{wAoOnwMLL)Pi!xxu{5OXA&u^I$C=8IomyGuk`-}houb%V! zU9n4Cug1UpxG=RKAQB!)8Oo0Q8xQ+W&-A1cxMkl(mjBBO&_~$g3GiA4$&D|b{#!F@ z0<7E@I>UeY@q4~!cT(yeynTDL|Mo%~09LL;w(DPh94K`b0bc8wUDS-^zdE=8-W_*W zYZD)g`RASd*V7vFyDJ)5ep4Ctr#JpLyXDrh8O08DeVPS1oJ>GIR3D(PA*CnslFv`Dz3KTgZ=Iwv*`=?6dxI`K%Iz1yk+xB(QEnNWyY zk)9~{;vmyk|ALl>M?Eq0)J7I3nVEY%%qACKjJlWPrqBiJAgr zAF*->%N>Zn&hwn9hyuM$ojK)olq2O%19JYa=VFh4$i$Y8wETS1@XS40r^EU9eqMuYu#7m0gJXk!827;VUo)4tq3>hkR|lmA) zq-ecK-Wy--%p8y0~AZ~VY#*lh}8Bt z2$f1*YYR(X)W3)o3GK!DP6!RA1oX6>-~L|v4vrbN-bX<4R<#$_=P}XHS+J(;%0@mu z^*KGQJI3n%Wt+nFX8#6-VKHA({eby>l$DL%aW|V`p6DDmU9I5oDtozHI zDW#2Di~7Bc@c4H^>7b zO}9n&TiTV~JW}l5Ek6sy`Ask#>X?j>Au4KcJr;JGWe-KAH}p@RlX2e-PUOmdmnktq z{nRs4tCS5f=0B)Cq3t&vHD8%DV|qU8{9Gl!fJmi1Qp>^n`tqGK@n*qS3*M3K+Vafx zdO+xQYAH_XWaAhb#(NeKkW|EJ;-ZLSW!>#|Q$0|R;!i&FtR8#Eq zo%W)|epTWTK7On+CMM?7+q7&UUpeiXv5-WbZ2(-&KU~vWB2mp(3BSZrJsx~S19QOTCtj#%IbIfiU z;vVzNLPzO`%r`DV5sw{G&OG&4EpA(BXELrx*fjZ*-t6+TeRrx@Z+#8_f7;uh?vYr^ z>Nw*u#&eoKW6`SmK9tN)58<}@EzG1|!Z|uuUigJlAcKlKV3a=ye=PKr$K3k2^G^At z4^D;sUW)8+*JjUV!B8UZ?+=)>ag^VxOEY`|0s;iAOpo6ZBP7+gpV|)S8eU;)ss%QrR;w7twZQLA!dB-^T3csNq(38h~1pw1UV88 zlQeJ!h9Zzn&of)jouT>CK@P~>X9H}E{uTjKj&SD;=b$xwNPYXw2zr&gQR$Lp8;j)> z^U16o9S)d-&(1u4aIR*2gJo`Or`pm15YTXt$(1JT>xU!sfwloe)1U8)izU&s=HH3+ z?9Ar-wO!dkoKx4%;JFs6jN>b}EV;>z5ksZ!m2^(1S?80BiwqB%BVh=I?jb8w>#(g9E^zJ>XIyFVj%U!`Fiv29Ej02 z?a)Dn5I#a^BgR%ja=bhBA|??+1?OPVXo})(jLJ6IjSGrpH78MTxhY7+aVqCz!%k(^ zZ290~K370!`~+r==<-zra=p|;Un^D4kRPHV0QXIn=tTxqX3Rn-MDon{jr$+*^)9qK zIrGnn$>=M8y@=I0y*P=w5AuZCt0kI!?t$IUmX66fSmEaY$}xL$CRuU*dn{nI#NVS_;eGFC{HVK*MhPlM1PKf)AAe!F!%T-Y;-=`RG# z^22jbJxGM!@PTNm3SQRNcmb9Rg~vkelsp+3M!k_xI=Rt}4a^~och}vi zTd9-%y_d^}4o}ZcOu}4o5vPfOGoTElV$BD7p3b&g;=S4eZE0(c{lW1z`1;B`Kh{B^ z&w4OUP|~De>vsuDXJ_YVMRXy~#>UudKfq;5g(H3&2%55(EtFS!wid%$yM>H?+i5jB zJym_)_Qn&Z*#jPp|6LX2{ibBdm#U_4DR7luUMZ-C0ta#Of)#nv-t(!-rqkhs82@{{ zeXBg|M!)|Vo5Qz*>0jb9c_!5sy_9{s4X?D_C`6B;r1qp zE>+I0ZJ=-Dar^CH4^bsfHC^?2h>F@txxSebnQcyo2^k|~&3op6CPggpcEa$@Z;QyqLFvUUR);EwzEQ)3E5fpc4Wim^K}@* zWiS1<{8A2IV0^Z3{cgWOxLTgGSUJZd+7b(Y9DC1VvFah}Vj4qPx7zt4czFqAlO%Q5 zFUKMN(A*}c0&{^lJ4B_X0^pGugI4vkrK5fp@@~C8{+ywM_q;81eke&$vhiXsx=rai zCCvH98}!aWWsG*ClherlDR1MUsEM#JU%$oRIni?c7JTFxm04LJ6us;Ego%X!Mocc2 zYny~A0h@padMA6wqhr0KrO(^#Q_)eI_Df6YRin}pBpk~0+RX;X&)gMG-c{a@ z?e&N7lrg}v{YY7D+NM~PobWeYYGQw;zmy%VcX}$98^1L#g}-xN0tQ4 z=IA*ZDLg7sKD?^7SeK@`m;Fs=vPce`AYhHPPjsK#7VfFfdg>2ELN8YbI2?RN*@RM# zp|=dvL@Y|bsq@5~*RA-j`8E$LUZ38?On-;2s;suM-^k0Duihgadf#50@IY*}$mE-J z)YM+VR6bKh63a_fJ?Z@b^vF8y~OTV_$iBp^abVH8RQdikSXBI=_A0e?aDe6I!qQKzbDC5++fpC@(borg{CxW47 zY z%wf^Al6a1~6cs|r%I{aOi;_fMuUupD(PKjajfaVsr-f22+b{);anB;m4II*=Xt!1> z;pUbtrb;%uGR)Z9W$Xlfd=kb0d(A9Rci1HR_!0VQFbVs}_f&5pW2u}#rB}LgLc-k9 z;vy8-P?CRd}oPJ|(#pciF(#1N`1}*nA0gCk| zkMTxAS*0o9o_@%fmseVn_WC4bemP=W9RTb6K@=VjK6|ZSl^myOFegaEgv*2XY{iPY z!2Ssi$Z6x`{d`>$F~1|nknHJjAK^rWm!vs|<&ci1ixkz*cEh^sso-7$;~G4?ouy#X zB$n^!HoUt}Kpj)26&ftkIQFZ1oH_;lI;+@w=uo)^&}BN}NA}}6S0Vf%$__{V z6}>S!Zml>Wr0xDGyK9$90b7M`Ue|PvA+m=3w{)@NL}4*p6kgl#4BKCh81_0TIS)ph zN@CRMu0~b^tFozn@X@X2kUm8+wfqMNo4?j7EvI<4Z+K+Oel_3!Qtu-h+GnL%UeTyW zOC-qgkH>tc3JsED{PD?v?Aeaq4WhR>KQ+#;mv_Xl3+8Axo}kJe^b}jEE3m?To^t2w zqw`f+mdbYg6|hgghCRp7t9DpA0z5iF-V_RwL}7W-hFp2YhEiO18jV9@>e2OShjNs2 zKNEa%VUv%6a}1psJJ4`2C8y|Mdl}^J^ubw8^=BC?7DFh`GcS_E+oof?0xf&jFQWv* zG}C((N{xDW+g*tar)VjLBxG3^#%Ntcj(;{?v+&vgN+xy^_k2C>ihn?OXg})g^yIRe zUG^tLOq@s5Ua;8Z#{kEiq-cG0wUy9oRrrZ2&DsLxf>Av^%7s-oyW+rVp+!(r0`s8X z7Z=f`DbI_JQM(Moo&0K{lKP&@vWJ=N`erF|jNM{xbhR6ZLUwnGJ*(;Sx(w3X+Kpo_ zMJijiH|NUSgXTN9tqN>)W^>@VsXeMm`F>O-WVJ8-ut=j?ms=BEinaS}fUqd%10?Xwmonm=eX?MAjKs(mBL)bj4XRkYuI?p>u8wCP@$vCuOZ-Us$FR-V7lO zS6r>(puO6nOT0pQc7#a5&3-K;E$H>5wA9^XF?n9hcK$j~jn&TRDwEZ(Mt_ z8l*}(>3SlRN=@PEH(ZZD;n|KGYdeWDvtnUkJ-hwG-(Q+zNYOCAoCR*oVY!~gJZNY^ z22xbHZAh(k%!&O$7;#e#&A(yLoi1@^ii|hr70#5-mS)eC7>HzNU~Kh=bFJjQQ=x{W zwb>lbyOXXNku$eakOfAFcFicC5!mGut?m&gWxobg6Gv;^p1$d7!=ArM;ZMC5-$(-l za9#{F1I=&iQ4$k!@!{evUByLl5n>t!^-J8n$}I;=|;yZvvbIY z@Xm_Ti^VBS)xMBJmX<^B>l=O++DLCa*2mde(p`DwJI*s1S6X&7sjJia7q4#?S1RO` zbBCkiGwPa1V24S^eLAc6Xl?MHQI4(Bizu~2NQ=F?)NgIeT`2rLIeb*MYg*7-Vs=#- zK&WdSiDJ2K)>&^;`S_0jct7I$PGe)YNIHPT>WM95(4G>3m{bdYM$t0}NWgN{vg)Hz z640M?Tg#EVJfGk;i$~0aoOQb6zG!uU`gqAp)8Df!>~<7B^gFJ>Ta(;@SLQU?nhd}OHgpy(f0@OnB8tk&E4lkcrWn(!48i_ zw2sp|=U*1p?~NB}R(3!$YRSoeVI<*ZN=GxEbU!7rpfP+VCOpVD`%;>_`Mb;3j_%G| zS5P&>vVtx4=1W`RT+>+=Y$8G?wP2U;&xpx*Y^r!;`>;B^8lAR33}*_cAi0b4wW9lo z!f3O}ygEdU97Cw=9Of!*p`O3D_g0FWRY?e|2qhkOk$iS@1c<#M9waT!1n_j05Du+8 zCF-Q`^|?dHTmE1w=DD#kenFI0o##5E7msJw%xCi7?ZtrjM#b|;#w&J%ktZvutQ2zu zvEzLae3dhN6Ig^z?T0Yp_0%E#rjO$$LoxW%fO3iNUYBuBo#zwm;Uhm|e0+Q^9ig)6 z#ouK|9=%E{r#GArByo?AFJjg!>N+OK!_#vN8@bt6JFdlLjACuR-0q||kQyFTf4O?J zmd`Jti~@G(c5(3L+6f<`t4+}TWNoU{EJ+tqs0EIVOl2UEw8|hfc?ySyrSictz+7g^W*HInTnp_G@-I?gS62^ zAX(HSOr(cG)}>abk$MleebqnTmP-=(;U`BY8=t`Z(P(tc_-qK9%HEY^qSC2NXQje8 zh7|iA33kE@xVq*yE7TronED~e`?lFA6><{{Iax-YjhgC@Kvzz4(cJ1(h-2BRp2uZv zOhR`!qyU&I2@n~OkC{gTcsb|kVf~p6+{TFfr_r$eHvF6MKjw&c(G*hCv=5Qe7fZ~H zK}0MS+rNQ78T+Y?2jWI^Zeredet#zSI7}zqJe`=?8Ei90MA`hIP(eRafe}-w{exzz zIf&dKs{(Gv(r@b-5a`9GgHl%;sX&Zh2(Qdni@S7B0;h#=&~2?O*5r`~YeL11XbMMU*la!&Ss^`0N*1#Z*$Xb-Dn2eC5nRD8P^zb~|4CqabycMRxTKQG?kCU zX9%MJNe#|cWF+kp8U8<`^w6X>@mWYE!IA~x(7n5i&{er?2i+Igl48IRS+kHC)svhk9K zPGA}Nbjpl5cKz@V-^9$5(kI}j3g&rl{C>@l^8Q}0dsD5lajrD`Jif!vf_2)^bFdoE zh4ne3hOm}{T8J+ALMewnUV$;Nf*sI|u5z!TXmknMqy5Bf%3i*y$IePo|S02&>$F@kriUUI@~V!_`Y<_JbssB0@yYzq@HiW1AHJdH2a)_!uo{6d+ql- zF5@41$zy!xB)L|}t^Mue2k#isrCA}6`b0sbsL_*zW5KN9jg^fZi6p+D+s2;Pp%(`* z1t6Ox;}Uo6zNXe_B6o6rp1!4BTP1XSEJad$mq9$}>gsuom+&dx^941H;Q@UlBFRN%zgj)m2$`25Z)gYh9C}hS%i0j*87ZJFgNM6-u&-6y<4{ z@KXt}XUoWH_sOO{9e)w8es>MaQiLBa&TUV&G$CYHTz4N83e!wk=yE!&O*! z9hu!_oT^o8BbVxV66on>mS4&;2UKo}Hpftfw=v&3D~8;-4NJf>ht(*v@9)Y#i_P(v z>cZEW3EuxbqEzXE%N(LQxAJAxXgkZD!?b6Nx~b)J&{P%Z%x8y2zh3N7Z8Z%#hAGJ? z4_+ttXGib$)ZY=AN&ZLh4~8RP(L)mHl%SX zKxPWdQ_7E+?~FTM6|b-4r*rL&e>cEodOV^5yB2?|a{NUqTiqM!_;o-w6IK$#GS~~p zG)-DkQk+l<%LH^^jqKxyWnvgjl*|0qlo=KOxjzgM*mLconT@itf z$6JV1ix1kD+iz@Pi3M%Vh{jZg+cIA>qSl0#aj28*yOqFt@Q9oDcvM`oR&=y7-Cc7k zB&AZyxggGpIE0zswa|h$0Z#7+S8n;6UjE7qF=qaUYvgsZ7zZNhuzx&U(tX_ ziZPmFik^_lVY@&+JQd6Fih3P5eE!Pm<`-st5umKM{#zdsYfCm+N)Or$3`_CeEPgVR z9ZY8GKyr&rb*S#!>PQ_vhFrg%_CkzeyI@WpQMcf`9!Nbp3Xc@HBJ^hc(C>0Cv9G0N zLhePS9dm{Bk@;nhbo^!X;~5Nz=$i4miQ|A@eNWGMY&}#~XzRrw+qY(| zOE0nTBWO$YB4-R|opuVMzmu|C@d6q01p_M6_TkZs;1=EyF3x=Hce9-R|}jkhR!1R6Y9-D8W{7`I*B;}e*=447`@Z8V!PuX~kh!9db( z81$Sq%eZ>yTFvzlpPiz7@6X>k2sd5b5}I^V=NqL~jMb!gD6&n66-jzMJ;Y>vsGZB;KW#7E@z|YC%8t*0o}z zNOMDPXxscF7wIS29lSC)i6`D18$HE>uQnajJAb?~o>(5^f}+?ZSZ-jzKZAT zMQ%h1ruj5cUK=EGNXJ=4=4rHh0EpmqzuLsXK09II7@)(q{b?oBNOaQu$p3_< zOv3mP5YW8ni{XI^c(=4Lj!1#-hgENS+Y!TFe(Tswm}_kl?HvY%HHG0(30~+}pLJXH zpZJJ~uGQCWPkeh6%}mQ-cwFb*49WyD_;c*yKM-*ZLQ{0?JpLRb*W4GTd`Tc;TTTn< z`p3`Hnd?uVLIUgynb;fi_L#3zD#ZsABBDaR`4#@aj;7^aI>dyG?@r$WziPoRP*L?}JHf&eSY_s!zx4hDgx%POv~><#k)X|%%kU?zb7Z%J;sz^Fg<%IAL`eBAUP|<5$L^lw>-QpdSUr+*M zzT$2p8Z2=>=K6u>igXApQoZ6IHB++1)kY6DMqjyjQ5Bd9jTk0<@ac`G_}TIy9C%%@T7gCtBfm7 zr;+Jd7rfa|bN~x5%|6pRYKHE2v&cfOFNa5C%wWQpKNpi20~^Ge((*C6*=UtLZE<2B zMjI0Xj`~V;EvRfV`H6z}i2>5zS?dTJ`?sCM3!7_dk6)!wvv_~E1W_wVvxQQooo^Zd46bU+!swiGxSo=u26)}^(!Aqs z!aMh`Q>qYvF=WF)wQ(xpxVikYDTXypX3%N+4==vo!TkhYJeOpAKDK((wmZl za2)woJUABD>UsZpg=1ojsy~RW0N~*f4ko-04DN5|ve8Hd0NWhn041zz-2vZFAkLh4 zexj;diN7eG7>bj>M)ik;1wkY0*&zB} z;~<8gz3sHy$nS?hdq?eFW;w)-L)m2~%nMv&O;^KZb3q<^tkD$k4+OO*WvoZD(LFs7 z7UxEXtBQGYa&oKuIhk7PrB>hGPzGvhACHT@c&lbXre8K)qnF9cXY8?_6`P(aFa&1h z7=1K)?_6g~K#N6_M>4NHjkuUtUhV8|+2{7Eb>i~Y^$!PK^MoXNl#yX!JjN%dmF~5! zhF`We2F;E~c#poXbmqQ@sB8W%3G&$d$yjkA1r+b|qZFC?S&*RROUR(lm zzMkF$m`xSr&mbigCWBv&5jkt#OYDY8_3i!RqU5mgdykw2Q({9BV6(fOGO<;|A{(;t z)oHIRSM{d$uV$(@vM}J)&D$3s;~aP^M=SI0 zm~Xu&W$??9jx@Z`b!k}X!b+3nK+=otc+=kxCj>nb!ZD3V@?{n`-+dmuyPfAeqtKYY0+PqYU`<;Mvf--|fO z6;BzXJu8kUs%%nd@^Y*LlK|>xZOzc)x7gQZU5l#{kpCK}xp84W(Kxlx<00qzE62i3 z6=Mv_h>g&vG&Pb1dH#6nqiV@)r&X&`A?;Zbqi| z`K#IcijJ2=z7CXWRERz7+fHr2X9i#Na*{V1bhfwW(ipaVMnLr=qNLi`L{0g$;JyIF zPLYIBCCz7`s_x4<=?{Wz0Y3ipga8g2#Ac8D>mS6ls=qWtc+N=)$YcNrgka`*a@C%H z6BQd9TVEs-@f{`1L~A0f`dnusPKKuaY-j-tfccs$%z^U`2xNanX*6S$`a;z-z=IhF zk@1Z8D(8y%cWA^nR{+heCi1)m-SxD(=^rP(i(=s|G($Bw%bJ`nG@G&|^Fvaa#B1ie zaCiD0<$CLP;e*J9a!a0M0k4D-oxm)~3@2vOAr`%=HhySuyl+nJgFy_pO5 z&HbxRQK?hxeb!!kt?sXT_4oDAAJ%|}qKMXUGs4~_zh*`E!>%Bn)N`|DXaSktfN9qO z3%$V;SjFQswWi4CcPQ|?A8v|*l z<8{fwtKM*O)BEb^}6B6#D=+D zpky!u_t-siiNrZ-x}xxKI)ZejT9=f;c${-qt?@?*-z9}S8Q=RHEzh7n^p=ZA!>Uo%tlEmO)QR)JHi!KYOKzI-xWBcuIseK1%2sO2c@{W@< z%TPf8po304Sto!(Zyv6|2Vs5bRokT{4WkGbS9K8nswF=RYGer~=aN;En}$Z(T^@Hh zHjo5!lOSvl%*pXl+tPe-xOW0P^gu8#4un{Su3}V~_OuW7Ccx29)OPyaQmtbI5Q_1h zo?cH+LCAZ?}hEemfzf{!&kxr;_A^ z@`?5`H=7I6z`&qtZbkm~#mmGwUaZ$vP;C!A3Orm`m#1QK4%O7#j17Hqy(3aoE!qAV zfd2l6(ai$a@#UBI59KsbuyAXOe=r{=NS`0v?-<_;HzdtPUF3NGtQehmME^Eg_9+i0 z-3pg$4*)h+4y2MPiTM&Jq;Gzk$M3D8G^Hk^E)?fZ zR=@i-&DVS=q_h9AukbLOo$CLV@J;_gUIeH&+sg|alf#TX2$N1iq5&vS@-(5_y6W6_ z$K(ujYJAK-Kq3Y+;yk!yDO#=-*6&=k65PX{#GV?`Tjau$Q=}bAZhy^~BjIB>Ys3qO zof*azGI=Kn)Ls}(Hs+y$x8EP%=rcJ|CT1Dj6}IeVTss*(rr5SkSsR4l35JZ?F*$X> zPn4;vTG`u2>~{s5KftkS#kh(X8_O*rN-WqD>@4U96bY)yn|F+%434GiJHJ zuHx_9Du^owgddx+2qj}Gn!ai@#IMOJDodKgtt`7gM=jP~$Zf+NnqcUZN$MlMn&1a% zTYg=CmFSP!hb7k8t(*^nt_u!%+}3oPtR9YK_fV<%mJOs_ya|88jQV%NRt0`u?|K$s z%E+kt60G(a$fUR#_mtvQs#C?&CDgY}%ERVMV=?!Kx(8I|t z3Oy%xqtPfts;MRG3$NLJ``x_Df=NE(W#<(s87O?GYX~$~32!b@^YD6o69X#DMZk4hp0`(wkn^l1&}!IcShwWQu!_D~+kMJy(!`6uu7-BoP_ zFRR_N@qtc?6#=HAS^o9b5Q|TGnT1IKz`2B<72M~$!r>Sc9M}GhW?dcK-5Wn-D^-9J zlbhDls++%gG0el^Y!i{-Fmz&#m|dUsEs1K|ZTCzsjAbh`F-4SXGGBVI*mc&4qrvW& zC+F9%gLtf@-;+rqud-4jzrtu1K!6CJ;*hL7(6F0$uW{K$R>f${l=j!2CW=gO*ACeJ zFh5Y-D|*NykYZ{LZb@jADunQ1bXB0?_`wwm8qGS9b+^YPppILNVuu(gRGO%i=JRxW z(BIf8ldEuIa5`D>Sm@$m#U5#!)wno3i~5A}>4)rBoA)>zc8T?uE}HXdq9CraDs{iW z%=>F(G7XTva)lem`&(@>*Xwt0vUQB$83>(UhtZ4|EQ#iWhd%)Niv& zi!~ZZMA@ z{!A@I%I`>NSESU$XuCU;>~wwSbq29f_4yOy@4)08fGTu%2$nlJT*USX)5)0=m^M$p zJhc1!9a+g=udq*4gCy?s448{x8_bI5-RqM@72oG7_Y{Xqnpo1ZN~k>KK!zm!p$a)v z9~?La;s>Z>sihUG7lWb4mFH%Y%Bs7B@XWL~ecpAAxKlm{xO9Uy}1LkUNZeiB& zCYhyj#QV{D!Hn&W7X=+*(E-n|NS*h>F}qrt1H+3sEqlpQEX0k6N3qFRV_Z+Ch_3#C zFg%}=m#c95IH~@2-=cM>kUS#Svi;7=)hQ>({Y+F$Y~n6nr6+1!Qx(T)1wYEMDe~$` z8O?;{xDlBf2=pr-7|VsXTPf)-3|yv4!W*8V|9ry@a@#8hEau2Tu;s=bcJ_ zwFyE^z{b+F+XG5lhYx-&f~#1uiaf~;Zi*%a=zWwl*q5(helyS-50R%X?2e&jeX|Gf zJ098JTIA(RQfx-V*&f6_w^k|n*E(y$oeHHS`|DfP7%<=Q{s}ptK#L{P2HglQzc3Lr z-6w}Z3K46a{!&*al613?lo|^lE;yq+spdjPD#+AK`|87CUD2&aDnP@|Q?|C$yc^9^ zmm#@puC7rdpGX~wjYl?nIMcl4nFnhr>z?hReWdMzXV|{dwsGa)z~p4bk2H;6?JY8!#d#BO-^#@*HwnZ#A01?Rc^yyKd z-bHT4=PMTJ&?B)>$GS8&6&*PPg%ON;pj8?1bA9m~D%Bd<7LVl~N3P>*R8y6T zzSNEIDx9l>C&s4f47NuGM}IUj`h#w1db^1bl8P(er6&Bfri}|6bI&J-7k-)3%79QEQcqF#5fzLg(-`=M)^BcFm#lVF z;26<00n{c}>RhTgZF`1nWCHXm?t@B`sysPXEWX-NuZmZFPPO^Zc z)_8CjDTm9&2OuTM^8(NAW9e;KffF7>D|a;#|9&%|P?5$BgRV!<)sKW4UT*=H%T3HD z1bb2;fwpXOApniMaPV|<+Hh;qiyd-NzS8%9eLeWEJm`s5*7n4x zi>Vot$`TR^#2XP4-1?)W*3FXPL6u&Cx^JJKcQVJr+!4$Z~I?@ueHH z*r)j+^kU^>E?Wwd`g_N7c1JS=?+C2wzC(e@9JYCaubsP8h?3S(Fj7nC8`e2bmx5TH z2lW=r-A9g^?m;b6R0*=l3w4|2IX*e@!CirPlGDYS(@W>SfIzC!a!DhZ#4{N%b?kN4 z(tyX^Sir8m0F(^Lj+Vy9_a(+?;Vt9do|b%a<7DtLoy? zXqU7J^YHu1iA4a&?9eF21rm#mf|@4mq7@;Uq;Mi-S(_(zQEk*OV2YayUe$YMk~AUa zldE!5DkV>6R<4ODWO3(Mz3;a*69yX90DuSKKArx5o?%g)4A^akr+CEmV$tbH!#aE`bf zFA<8N#(AXIiLKrPVjnURMg?c{ecl%%roB^Beh;uI{X}^!x6oZH?0|mIAz4o1@d1HM zpLR@cSn3^i!_|&PHmOYG34cbEx7wJ@E5PEfuEYT(lyMPhnB9@pkCl4!c1Ba#9IjkC znT$sjAzTw+pa*MEPVnJepQ(%3q|tPSZMqFoND{3p34`gP1lF}gO^sg=B?BM`mX*`| zY!}KHS#cXlt{JyQqat?C2j7FI5kqC}#%gsCJ0(e_RG-Xdf0!Mv_h}>&gKl@`6xoLO zjN%YsKfcn854)qiNX`#QAw>NUw&bsvEz}NTEN4;H{fbW0nL55&qfwj+RxkVQ?Sn~t zXCw-H$$mtXGCNp3#xx zo->Lk3Ap#&0?sDG4oR;5)IiPWn*boc$;%Za-anYYnB6;W&|^Y_{TXPSCz~%@;mw1F zDZ0J3yUUXX2`^n^&-J+u*dXz;y=$EtjMT_g--b+#0J;#nKHS#s*kclCy%u~T{MPy_ zf`o=C)-zT1utC$ep$7;noDkFHOHmxts<1;H3(-Qx6*s`3bv+lgP6RR@cTTKbVwGw2yhy*HRqMz;(I7U*oA z;9H}{E8RFBc_=oMvy)ub@g7O+SUzy@G z;||oDs7w{_GPn^VT|7N(oUiNA>T-s6$sBM%jzJ3wRR_>+rk=U9?$Z8fl0OOs*|G$x zvZ`2=)mjiWwPe4HqqB3~>e=M%Y#dL!%Ci|C^%H_-qxr);pF4!nlwvViR z@x%eWhf2`Dg}o!NjdsMeV>*4|pJHhGpW52m?ks5@&w!NbvlapZ0yof_q|)gC8=ubQ z+OgnK%oeI|OFSvSAdB*7D4Q`s4ILwbyXD|rP7-=Jn6Q}LSkZ=zOcMnJl0i#Zj%kAp zX(w@t|Ba)}sMwK$J(K0ySASn$p(*p3Qh=nVtb%BFL|C*?%lCx1pTRWm%LT(?xJaW` zClH`$PN;b5lW)&fg-=R4eyYu6zL<7+4=2lggdNF}L1VgvDsqjCl&i2=juP9gIb{Dd zCO?N^^>ymlji~$@G#u`?H=WCECQvnN?}M9l0;@>&^yGRAnIWdrd^hXOt$Xm^}V_NnnnuE@oZfnm|lFC$3jD51tIz}@4T#?jG1>Jlc4Trs#1 zK=GxU?C;;My#Jqw%;Q-J|7>p(1*Z+*Aj#4XNqZvUVLY*91F$?e9`ii&wFkfeMIkLO zv$#Tgy7w(9xokn?a5(v%ZoWup&%|_l{azDK6A1b%g!cgri_WgD-WJ=FWo>2z-{+%K zcFdG{peyL+vgR0D7AgEG(>qnLq5&MyA2+HaP0ptmpHB%`0$SoMN+URLdKQ=qe^0)X zdE`8M@fWr2(?NS_1Q0x}o=IJTJ@kyv+Kl+Pk+L+Z8#+9u+W?(fFq?@3fpX{_CgXm! ztKA5HkB(Wh1HjR9llxuO9$VjJI;fWo_Cq8ijP4l{7Sx##zD{BviY5tSG zx`3EnnGJ^1?uf64iRtO){jKp-&Tu0h899}gjjfN*@l9U!)kZ>Y7%m`$zQCUaJ6DSz zJl*VdbjSrBqy-?ROlGOJSoN9F;h|Wp!h?PIM-qy#{JGTX`dES!p)zW3?&Zj9GocC{ zSxp;n_=bBc5IeTjGJXhU99&>3v-x;-ON?(Vrb&{9iJsc*IAF`eQ4^c~qEXA%+pod6 zs3W~4@gWeq7*O zTI%4UNe7x^QsTrE6cpUti;pdXC@45xSpY~D8{yb>DJmg28h`R_Plg>!9v~oT zzCS%;elz$GtY`QX_KBY10&LOwq_UVPCeTQgHfNAH#i2R(#;0<>Z!xBR0~s$TFZ!dg zOrIWHsb4J$Ic@32MExNg2gx)4)JH@)Ye`V(sV$>eK_P3ly-1%`I}ZbPqHNZ|J}m;N zT(fk)$(IHPCc*DtT^@%J!S617rMl?CuDm6ojM6Qql!iwV& zXe-1xy;@5<98|do{>(VH3?r7)lDvhl7NQ>xxm zwQO`rOhk)Me#oE^-EPIOl9LL`@nHiph&&GgWq~MePqa83whBXtG$KZpTX<&8YnmX2 zLV4u}QAPt5s-fe%!EbYwpS=9hpi=3!X_Pr6S)kp1583~Khydq07WxXzIC;G@Skgrd z8J>S^&blVoy3B+zN@lIyP;o2;6KzO9_F6MF7SeBmgBjjZ0ZUbNp}o73^o)8@*dacv zbE=F+6yS=SBJBFEe^rP@#j2L=q$MUxAzSWvO{Kj}{mtigXH?g8c8s?@J_@8vGHGxX zUS;*geMxQNA}HT#w!1%Kj=|MapGt#Dl*Cd26Lsd7VYsIVS~PJ|t&1#oF}4u}@RC%h z4TfSpSOc`MC-eQ0q%_ix^${D9963bZ7K2WNZ(ELNIel3Ar~1_`rNpnV#PzbVG^Eol zQXf_~InobMuq;z*<`}0$WNg1_#5~1Uc_Dqp+!_Bh{?pU(YlTg6`I~=lx-?oln=P(6 z-!Ho+=lc&Zs1Z^GILjb-W~n;|luI^IY*$QlZd5N4@`-~M-bBo6WJM*`Wmz6lRBCO$ zjZ4y3+(BH!bG1e`bYXebt+Jkq2$w2-SeDB*bXi}wSdYwyW$!Jeqa$O7KcvteWE{zb zvd_VzQRC_5^9P)-+i|VFHeIw1#bp;_<)Ti>8oG4*#fKr){y30CYR>2R zdyw~se8Ov}Oa@?2Hnx6hejLMrsl()Z5B8X=@g2{RH380BsFxtA&Ne0ZYiBlSN0hCL zOI6>g!4!F}`5Iq6q*)xEU&=QGDl<>z$yTM&DWa$2tWqvIE23v-|05VES!EgdHMtt0 zpX$XS+gbO*4R;uEj#3*pD=wOZz3%$A!7cSl?QYI|^}0gJv<~YM)+-8b5$$PlI4?GofRnKmxp6G#79fCq#w88<+n<#!$9_LI2p8C z`==Q6H}La9-aMfIq^GvH>P48=kqy;)^e7U0J?s5nC9rcA+u;ZU+aJY=3OHk$VK_lO z9>|J;!xryrlu5U6OBmW(?)K)P!!;}3*gc}A8?lJSfQv7iV*Vsn@Rot>NP~S)rCcFe zjMa%k4OG#aGiZBqgORUX7T6{Sz?rc7)u>`Z>-S95>mA}zdg10BB?Z$Npw>{Q5_bk$ zxT7`p8wasN#h}4>@{EC=_Bd-1w6Y_;UG~Yu-wxUS_*8&T%0%_ZxwIVX!)O6*JML|9 z+&Rs NSsGb?pP+pVZj76tf9T=FnjULOUdMml2(>#Ti@uQ|Z0PYK1Ron)3K#{%Q8 zY!iT;r6tu1nQcDCSFg1i)Y^|;gxu+fgQ`243;M=taZp*kINr`d-X5gX9%o*=IgrfX zY?VjM5UjX>z8N1~v`q5G(1qU)Cn|{~Li6n`mmE0MDU0R$nB23;GHDD8RtOapfRM@) zPTd@bJiFUBsuNklgAad26;$50e(^L6@kz=UTvMx?wMu^LdHVLZfZ@+FaiMR)L(8^^ z>w5l`MyqpR%unv0-jG%g7EXO6%=NCQ&iq;JXixStsev0iGMv-ZsortF+HNk$NS?%C zJ94?1fdXQ57B)uDJGQfcNm@V?&kF6n7SUDo?Jqe1A6%olZd02gc9+RUdh|tpdDGd^ zC8PG>T1WLcq{XF3y^b=8!#xg{-Gxl_E8u%YaF5IYPdt*V&?3OUR`_MX9~COqT4(u1 zng*`|O?pbq&E~R8oGKy+W=2|fu&G%(D{E_E>UXbuTT&glFK~&p@N6e-FYthhuS-Vgbh?j|~FF*AQ zF`VyY(+?rLaGHb8*9NDNv^Q+yA)v_hrt7LSQVKZR9yFX1Hnp%4sc+I0jX@bnpE@sy ziQOKY3hL?Zmo0842K!dL95_|pztNwBLf`(Hb^(`!#D67*j4C(VBu@uLF1>W2>oq3_ z8v}ZraX4+y$!UHnCLGM(Lb(T&RxjoKS;>!EE98*vE5Luw#`N=@vf2(=V0`CB+e=9 zKV2){;2I4`7=~XSd!zbehy^VyPCj+gTCB8!y0QK<`Vp&Ma_IC+IHd;yp!G?b4OeY0 zcuXbokX~0RF6Rg&Jk>@ul5Q3qJwz@^ig+1_r_kNERZIVRwsWuS_ zGSH$L9Ua|(3ZW~ytoq8Y-qr_~Q!H}PwTYt&ANlbncL$&XZH2w-IlVd?F{f3MpwL7m zEnjBtwUWnhZF*n5zf9z79ng&Yk#>m4--NlD-P4s>z^$4euBJNuiHRg@s>iPR23@8{>{|B5*NTOG!K`;%D; zf3wO4+W{dK25bwQ`IVP@vOz!P50%2I0XK|7+pu{Kjs;(L6T{-QMk~-DNK~=F)nvAW z%GHEJvH;Qx?qA;Jzuoaqe|pH_f0vQUTOnLS`7?I=^S9VEKz%`Xf{ws%c>3>M{L4?Z z#>-hCTEhIp!TpDY4F*(Vg4V^qeEgqt`ghj%KOT~s0!RUhQ`Gu0L;M>9eBBL;U)pt= z9sBR-S>mI0oK7-~X^*Z**rz1Zp2 zQ=qiRvXNZ>e-qjJ?=M9N0=P&R0v$2u&!+y*->x_SNQQX{h3-$sM1S|7nP9+0nLh%2 zWnWOipKtv8w-${+NP%tckMa9q>wkZa|9MLp58xs(wXc!}r5`F`)_HX59lmzUDC>-Wg>1p}o( zgF`~*d|MV8)bTF*Mq-bt!10|GwO{0Dcbr5PP7>Wn`7<4A&yKzTbiqG=Q0_fc?k>zv z)73njT=~(T-cYf)dQR~#l#j95nq1jhro%ind!0$Kf4cc6d7JoEsM){WAVI&3}IBG*W;V zE_o~5(2@8<#f=S05eK?B;B#d^_xFDxihx1`(8={C^9O8*f4=Y>{J_VWzILB2z!MV^ z{xDmt-zL_!B7u8fd}<>hc-)li*<2DG0(0N=kQF(W;~dl%V8V9!h8790Ap;X~vh=@-i34o^ zJOzLHc0~_Ss46SnoTp_O*%GJhaSKVCUs!1Q-s8QyFH)QTK`jJX3eNl+ z9wph6J0Gr4n}+&45)ikEXD~*K`vjY%#-ior4oLg+0W>EPCZ=xiY?Q$biS~TR5rwci z{c5OE$K=hlv%6a9&>orfo~}68TAL{VaGAtM_jB3qj`7#e)4xjk-LU*=A-?Q{R#CFh zy*I`)iEoVWt`0@n><&WP2%w>%(P$tbL%qDbdR}3{4Oq$*B=;*u>Yrs-ZKoR=Dn({w zN1cO^W-T4esQET~&@eG61`8pGPdU}q)w7hNDCDsnp<@3j76ldskViBG2ot?ltpE}& zeTTC8juPN#hg(3C!%^k|TBz+Jn3gM|1-x;2DrTC}xO=QPwP?D#p9{^bZAAn(tsP|b z5tY_^&~R}j08)M?aDp~VPi1hkD#jJuccwcoF$(?99X7k52R*7%docFRXsxBLGNDnY zKPn0$qIOu!8&ML;WJ*y!7Fr9U04T59MiU8EOS)td?0PXEhNi;x$qOQ;bC&i93?^61 z+S)FcOf2hGSqa<20|2$@TxD7y23@}VKMrF7AeG09KL|0EThO(c29$UUzbNhjYa+Z# zMv!8}%hL*b7N`oz`BDWtf+>w_)VoX8x4&*==QMn=yEEh|7}-Allj80^_VAh#i+N_J z)#HsqPERO-=Q}A1g~Hg$=AGZ2`v3Dne_1RV{2ugJN*UB>klrWo28Od`x{$;~M7iR< z8Z5P4qaF-Kr0>se5ucTes?Ir|3qMc&Fj7-j_Y*a;yuzjb695dIg3!^`C8wr7$^xBS zToBRFl*F9PSV;ZlXJ2+JKmH)(R4#0%2O;)n9dcb*$f(S#uI+EswYg$(v=f=a$jTC* zs@PT@{g!N9=6lbkFpEXr;3On>HCgJ2o8u^4&(>=p50 zxUi0--jcRNMGmcR&<*xt*f8gM&jZst%3_&U_%yPI-QOr8T>IJJn0=*y zte(ux<5e0s?=eCqI>gsqoUH4mEZ?RRf^^^XR4|?6T&=Wg>Lz=HP(t4^FqkoLFznnB z=znPefFnVj48}1hxCS-GcuiP8ZXO;TOgtYAaVDN0P3j#j)KL)-#B5F#slwT+iDzo( zW3%?YLBfCi*N;#KI9Xv`f2T((5wX7rKE4PvVS0m_Q!?Ri|MNetO@S&5d$5u~8W}gI zm|Se_p*Co6kc%Y?{a=6k_tE^1Z#-g=Q%gy< z4wS-wyXn7vV=a(-mGWt<$i%ES%tIo3{T;=pKMdSM32CKeOcy$|^AF?u&s*U$g45n) zMIUXR2_^kdwq>Y-ecM;Ai+-_u={sMR7q9on3w4CQ|B6=v16ls1 z|v04+wb0TLE*872Yd8_R{)D|2qVRb!w%jGR>1(>ew(iv>5Wr^O+4u^3#n-u8Yq6n?bUG9gsEk7qOW}JFVG{Sxf=7oUm z5{wW|4>~!qsIwOASmtsK-zjN|IA!pen-4sGTv_kl>>5mv$>rwh4Q*TA--tp4 zh&_Pz;`i#QUf1lKTJb|dLp-u;M3`Bjxmi0dzq}DUy~d)P{NW@rNjRMU*kjRU21`=W zL55e+Yodh>_t%O1zf()Z2sZuEtRGk`8xNOIDfM=1R<$NtLS!kio%UN<{R%>pbC;LP zKx$fd@}b1}st;YaC2F`C^An!yRUM^zGp|`bL`uVKmM8&$t?qYYH21BRU7s_sS)2~c z_#J}5Wxzc$+S+8Y>^KZZGV8p&)S3-+-ArdJ@}!Ru<5+d4IE+0}Nj1Uf^oPU1uA?F$ z3#P*h($a+OQn%D^HqPH{00uzV4*M#2UA^Amn3Khcawhq}@);=UWqnTZf!}9`bmJm( z^z;{PPVbD^aAs-Vk_zEIK81#wo3lI0ZfQB3Z&}`-3cmy9FLfZc5W1CbFlRr%cdmUM zFk}m_zrTXilR~r2M9JumkF?5Sk@%aP-~mo5MfutDfYqA+xr!=I788At8Y2oFOVUmp z+H&j3Q6s=IlvFai(u(Bb2n<%z_RHfEl28n1(&Q_*JUnDrSlAeX_N7QXQVBb9T)E6r zN>%3JBGSa7dH1mFqWQW=o?k%kO&X2{TTAC)KcY}1sGBT5wYPq|*1J?0fVSIS;dMQZ z`F*>Kuum(_W*=zxEULaeO_7gyE!%u;zJp%ooO&RI$vph3Q8#v}*;VyzhP z?ozXMQKtAlOCaglwd)ziY?X6}T#14_+F&w4!}SrvWN!;PwNTkTpkyMfP1?LQ;-wSD zDsR*qNuFW$WHvoj=PvwM&l=*>O&-$P=qlNlEc;1^!2-%8`xqA=6_zr3YO}j5zc^EB z=DcMtg7; z1q?wHIdl-Cc7y-VzDq2o-jy_Sp=y_(8#RxRNY#9!mBCW5kI8ORMY(VJJwsALyQt=& zewoZ1nx$iIIIm{K=v_5No{P$`VI4)hf?jY2v)-Z!4d49K=hZ8F?5f*a3E@S$Kiv>R zU#O`V&t$wNOBUbZPjoR?)iKAAau>yFYvj0h>Q?`5sonj-ai@3_9*-lRpP}dC*SI81 z-*le5sL^CDbr7B*8N}Iki!q>*aT57v^#FO8lLp~%1PR__Ms2!-4(5s|3&|H&Iw)!J zD578Q$y{#R0Lbd{>DCe^#kjRsX*ac>Lc^U|+j(RyfLqqgG>_nI{D-J2Vt?KvHHP7po5U-_Sb zz}r4kog(-S+KRJhXi3TtdSpRDcF)NMv6&%ErygyXpiB{M7xb6CjO9-sA{DSrEB)|h z_>Bmo+lm)wL2K1-Nmbf*wY-mr6gjDxkJdk+eRO2oD@v`5Ji;K%psie5^cCKKm&agrswsF1{4x63q9v*w*Ua8}LuOfsP z;2eijsiwNzt$r{jIN8V>XDu1(fqz-+zIKC;>MB(x#q)9W zw()8$xLeiYzUris3B|*YuvC%3yx-0_sPTVXavCbA71N8ZPDCVlo$N_QP zDZ~4#M-o5;1NA}1>Crn#0id!63JpEGNr!X*rK7NDSDg1og+mn*n?=$^`B5osz$6j6 z<8o3qxGhpab;{C{3FWiPDF@@iMw_-gq$j7bkELqhpo_)6VKiUN-tt{gx!Fo200Jad zXo4C2q2!NBA6oKxYZ*+(gjlQ0N#mZ7)0t!L?>ETf(!uRoj%GjE%k{(*8c8=Bcf-ll z*ikKVMJx|k#_;lHO1FDkFT%LQ|uqY8FrPy_oci()IC@IwfA4bHs(GJ6GrCvbsR*rB) zRqk;-%qeSpNaD4Hr(9$RN)HqN0Q3Vdla5c?$W$-Z(3*!Bve_g)~F6Nr==QL z#aj`D%VvNS5>0PDHnVNKt{34)s5-AerS}kmY@^iWdVjrtKU$}2S7r=rTY}l(vg!YV zAWlys0MUKbYZsgAku1>|P-p&ReLV4=^Y8$RwJlDa_2$HNVw1-9F$0;`wpnlaCiP*w zbpoS#SkPWvhqZ?Rt!8uM82=!PJf53S4MqaIwYx4Hg-mU!3)>UqM}ftLL|7I7YYpK=O6wPTbg3RaElypp{i=hIk zk3gp%ON4&>`Fw``jrHM{$YDUDn#PR~d?Hlae7BRvnE?v=Czper2l|JPg>7q+<5PzR z%0-XL72ADRLHmW8Ni;G6@f`P8HA4wWv*%k0iyut+Cf6#<&NllfJjCp*b8G6XHp9n^ z2=-P|d?pB;aua3O@Su#JIBom-u1i&H?5cr2QA)xX~l8Z$?=o-$f1A8;9{*OUVa zMe56#hu%^B7f%wzdk$Nj9y03CqX4^P_iVuASue-7IT@*G=BIt`tKsbe^G5RJ!26|q zEVfSyC1KLXuK1r~C?f%hdzM7i+^;lEcO0vs-kum0Te%QBL#*rw>`HA1)(a~hZ$JZr zDLXbU>3Q(xxjy4f7pTw2ha7IRAL_DG&DmQxn&WeAJ^if6R-J}7 z4RLzrb9`Qx#K~`G+uAqp?uE=)igFWa{Wh>b3ZL&-E!P_!&os1(Bb%%Bn#$Wt>MTZl zpU6C!Jv(+O{YgK92gwOrZZS#-VRO8_#>UYv{=gcm3G1#oAgKcpY23hmE zuIfkcQB-q}N&xNLI~&t9b3cP@ z$N4L>V=iBPe6qxcb%!s%1Z0=r5u4F3h^cJYC11hZEXW3*Qzu`aay@OF;UKAz1U@SS z+>3FHsw*x)9!5HxWJq!`@n4{=dkPu-x;e&fB)?;YWRdH8gLLwvb!vr%h>~z2AaT?H zx=%sCA5=oH9~@}k8^}1K(6q*n%5-mDJ1 z1PKD0X~rE1CH>vUAyWYlWSaQy8n<`v$TlpWmI?TM_PK{_b*3O`-Btg^3IpSRfS%=^5DDgoamTh~SV0we;82VF5v*L3D-#$HL-(AzKI zjaV%6DL!z@k4}YxOs;bi+b+w8@)~`(hEromlP=6onI`HjbK2P1Zkor$vefld;3DEG zRaHkp=*f;E6@i0Qe#L_wcDTveb7Un9rGV8lG$+2|{N>zR85g!Hk9$0>>R5JOBhlWF z#6~y0aEtrHz91)MrzC~OVS~Jk5_t|Yd_(Ju{zul zA~8I#$sF2$1Yw>kY&_QJXSGHkywgE-C@;g>lK7b4rbOz>B{6Jxt}lk_;%;qV{?1)B zz-VN7ah_4x8ubj$Q8)Gq4AkeiW?XE1a*C`X=V{+|hbpSKct$+s^5dykscB9wtEPE~ z2kxgMH<$*(jFU?^dR_W35|BY*q{e?j}zk z;>K+pJXQB%#+6XKKW|1&FOO`Vc<{$SFT0aY=Cc=$mxeOCPMMsF?&r9ha##&O!Z~i| z-StJ27jaMm#6)ooZ2B42<9&&aBB%nPTovYDCDDi8othOwdXg=umi?@adAvl-2`xw) zANZQ+k%V@^WeQH5W3g6vAOey<`)c+@Q6cAiTlzq&1&#&^e^%hj-R^k0NQj}OR){I8QR9ic%0S$ zkouZzvM{ZgA1WHQx`{w*zWd8jrcS^#35PdO=NfhL9_ZXOx+H0##Xhcux4o(diA!Dj zp;_Rk++OOhN_^0}cfYs?hCLzSBF&Q6cInSw55s@p?=vFgqk{d2R-J4E9grY>a6Py3D(#)`-nX) zuvqWj=K>1BaJUfzx3MN~D)gfyxjtmHH_RUQ1N2T&paqCclwhP_Nh%?~j!cs%#yvI! zjj99Zz`6Ia&3=?G6}O+ec7XnH_?>vXVf4LQ08Cw!#Lt=ij4f`j20Ad_jc$8R_7((E zg1}@%H9q#+hgP1R^ps&sP4~3+oYfE3n7jw8vzClduVMyLbfKy4FAmbSS2-owi%RZS zKMH1rpJ{9q@!+#q-6Tw@RhX>07y|tc(WVGCuz7Q}as3amH%#4QX*Q9V9rQiCy2EPX zhv1*IemcSoeAqyvXq-wN9CO5OpRXTG^g{aB!a$S;S5fevTjh`clKZ?ugGHomow;6i zG4(SFovKl!*;ky}XEKQdn#S#QPJbVG9jyqt0Sg5+va5e;4s;ca?tYb+!sT2~oZn`t zrKNzA{w9D@iL$+$0)wTdWB5V+6^7g!t+nx6ArFFjJG;er!2Q-(XeL5A&=ygoMfGZKpf zxMnI#Fi-3@N~H4~F^x}q{n5Eyk-M`+1xuaSC@yQY!qwG4s1c^ZkgwW3#MT*rDxV&# z57)bc=k>|1otMeW>+^sf)HR67tC&{9e#(3yx6}LTe8#66tAQtx*?g5SiGJ@85xD0D zj}RvmpB4i7%wf%&d->ReiYua&uMBVyldpM?R@8Nv8iWj@obXy(--;b>9j9o#ZN6!g zm@74`fa^Bk3VB>@_h$97X>(4Ky{~4)V$UET3i;At5Rr3#ZC$rTf>-Smf?LJA<5C0; zZYLeoYp`Tk))XV=I;83gpH1$8@Gc#y0T=><>*wxXTh)3w;r-+!I(HA^AD!o(2x_0% zRrz7i&oDgBIY1P(7>KuO>UEe#j&`)$I`xA^>T0qSy|^;WqEa{6Y>*i6tg+hCp|pOzMQO&d|;ac1UO*QUq^xSIPw;(Q)Q2hP2FC7PIg z9X7~1xgKyN3qk}J%M4kO0XWqdJOalzgq?cYh%tJ1#hke9qMh;yU-oyK$T#iH^TlUW zXf)~z*+PMi1HbINih$(V9}_R3--B8;6@O((eJ^M*QH^dmdO~(uFW!z=?^UhIXe`%q zF)u)XKs9Ya<8<7MtP(ovzcF73)bT5o(G!U}%V%bvt5x+aQ7wpW)eWw|kq?mVV)Hs@ z@v?Df9M*;Fb)KZDGzV%g%2zf+dv{-H5Dg`9m9TSf*t53t0jU+t}fTJ9IUzuqjCN`_c9ZO^gyii@eaT9Jul~1#1lrac8;^v zoRs}jAn+ZMBL|4>_-CX>%v4BIIt zM_4RVYm|#ENfFH83)EShrc)~2R0xdc@v+4iP_ybM9}#R@**i}qoeS8%3lUe163lVE zhllz~&t`u-^$SIox_Hj1Qu|HJG2In{2oF#3umle(60*J*t=(&Y9qg>vJ*0U_SLxaf zx4CH)vs<1iW1X;jJ*7$5B+p>_kn8zjzVARg#{=nsMHNuj!||FM+UCHSF4PdW+O|UF zSWhlfHQB~@R$m}}EeS56xpcf6IlYStOCRnJ;iPoCee5hl{ZqX%ILUr3U3{Ar`Hoo` z#+aInm_G1VyjOG64Cmji*`(G&t|4I_;zC0?`UH^pHb8@F_<%;xMlelGv>*-ADPgNS zVuLl9DpV~&BcJYesy#8$J!nqnA1t0fY<`q}rmO$1a`I)B?;x(k5vmFVe-0WBdHh^e z3eleKU-oKKzMb-29KF|@TOgeTM94MA3wBB?;stJlhb9Q~GlNUP97*>?p<_@sMQp`*N~(0#D@@m`~wed0?f47x9>6XLo~4%)lPgq zOF`vq1{qL)T;hR{%sY|ne!dfROJr8|DdS~E|Ii4!a4pQ?X7{{h%s3;|HUVPhSoM-> z)FXFp$8kTT)mUET$QXLBe%_vhJc>kZps7n`t5(-R9jhqbBxj?wgYIO$++;HKQ8W|D zb$C*g^`gV^%=@+EUtdl-bV@$59JG%kz56kxX?HM@=2LBU&yUAP33LkBJaph#^M-={*aF4}83sN94XYfcov}8f!0gqz7anX|k&Z&{ldqaq+MWaeYE&jlq6-b^%Ss z4?(gsN>5?6D6wU@u7IuDI<$c`P5^8OoLc?4o27TPR(LlCbltmab=S8Hx4VUJ&dp<} z?pDYWX)7qu*H$rKsB6!*iWo+yW4|446u;k69lj?tWB&Jt6=2{`3L3`E%g!qKo5O@r zXCSm^`s9o%!CcL2ym|-mA+IGdu#XK)>I1O^Ms3JcT09H01)hc&0TphBP4}9~X-22a zoP|;zKgxmL05O^-AKyhPqtM8*_Nl_Tx#HluwYRN9pw+`aJT*+Jd!hHN9MizdyN#R? zSsdJ0#+*O^k_1(KDAaNzIi17>`1V5h7)alJvz%ij>`|xjL4slfNAEl98kG-huhzap z+?Hv&WTV+G4r|8JEc|?3pEtHXmn@qm70+b4hBVh(iHs0BtH(*V&2HLqckz*jncSf4 z?HQj52)<&h#Gb}*w9pTK0`4nADIg-+_jAW>Z2=>Hz$Dw?MJ^uAD$HyX7M#Uv9t50R>aB(G#5SNPSSPdA6>!_CpM3J2v^<5x1k=)a=#Y}#D zqJ!{xxcmF8m~Px;62}U;P?$cfLCJa5dSBzv9P2DUh1(TaEYRVqoub_#v!Bi#Hqcw-s!s>s5WvLB`QGbMngN|sS_USDmGa#XMl;H(K za{^+PB0e{*wv$69&Fem69vhRhtsodGT5+m!`~8Jc-5c-w{-}!l`Fhs`?j105a62}u z0b5I?Z933NOg=mpXn3z2FP5Rt_%-kUVec)Y;##)0(FAuI55e8tT>^nXu;A_x+@;YF zECd1scY?dSyIX?0OK^9)E9bm>zi00x`y1!pG48lO?il@J_3G}`wW?~)sx{~HJku}f zW{Zf%SvLxYz|TyW7YXsJc+}Jr`XlTL@azmg*q!ch)FUwm_TDO*=ey$KVqW!H3m!56^ZWGA*OBReF6gh17rPjua|TLHgaAm zu18M=nvt|d7!MR3fnR2>=b^Z}ZAVaSG`YO&9e8wCco~8ZJiWahGl+$ReYE|qigF&> z=CSWFwC{9Xu3Iil<_Ms4>YZBb#b4)@~0x zujgyJp8pcD@o#X7B~*K~xe544Jl=6RB&h+rPVM&aJhA-T=mWyNm;$o=^>x^x8{O#-d{p>t!ZqKau6RcZkOiL9|gA6aLnIuVykS8^e;wrGTvo z!T8)y15<*UTFp`%5o8_;z9gX8CpXVitjI3*-af%9H(j!ETe=2ts(6fta9jMtJ)oj9 z_rh3NFCa!eT4!q0^yv8LrNeNhdUq%YAbJR04ooh0bjo!l8iVKk$s06VBG!2P=sVo8 zmS8n1cXP#cK?lnD@+&FGQ`&KoYu`{$VLLU4In}{#_M8~$$oEW{{4+EAKt6kZ(r_da zbbBH1L?O+MFuLqx+JA=2xR9?&cXEqXTews^v*BSNU90LKZ-7U28)*wwegj)?#ZOPF z1#iYn$HejZF@SmXxu4hj3A%?`DB}{V=;Y>tz%Lo;ZQPCi=@AIv6;mx$F$3srJ_ z?ur{xpS{Q>zl9k5qN*GDLkq>7$g5CbcwC+ka<8S)`?_i>%X5m5cf1v-aIkUhm;cO38sE^^ezuL&Wi6&?eWW9>hz(?U_Wib2 zFrWr~tqD5#7>*7S@92b%RsTe(&P(7m(TnlRTOx1C2F8V|BRQ(Y4phGxUlIDR%@!`e zlfZ|G*^PnN^Hry=zyiJx*2FIxFLbHN2fN@r-#@&7gD8_tO%ZS+h^x_ccc@KLwG6p; zxCyx+981%bqZ1oHa*^ocrqHTHbPvTBpgih@cEA=&sGqkYdEY*dG@>0qb0XsCdNlH) z{zKjf97XsCuwzH|kc#HY%8I$ZS7elT>Bqh51*&=oCPDM5{FQLT_W`pU_+$92(&yVf_(M~YFS_|_OD;P!xWVud!$9Jw_~wEz^g*pjFmbV&_Jc#7 z+LzDc3>OK?)&TON&M&B3wtnVV4sV%~!;FeTT3?1X=#I%u_xZ)|AYlNU?gIUeha>?{SNP#nOcI|09>9Y<4PJU9y!?6)^vy~wr$Ew~lPx2HUM3dD>Sg29nEBf?l z_XA|h?%Lh;i8&Juw_24+a+KS$h}l9}FeZcI;tIGEOg7jm=!eqHETLSat!vKVp(GVk zlG_RAd7d{I&)T;|)NBK$Ynx}azhYK=4TMwGPL@u84ESo}b6w!pxWRq%IW~*JQMzi4U`o!1i zaC8R!v8_M_zAIgS3_Ib~j1+2LPpX95<5P({5m(61WNLWMs1t=5IKw28W~1K~v`e^% zmNAP(d-Y_Y6e|(iV6bQO;arrf9Wy18TU!fHHcW|j9S1YuFjQ*AaLvZktJaZei%Ver z;8Gf^rVk;tgZ3c_`$D*3`WB)u2`XK<*v@?p=Q$_LQ}rw7t>0f0eK2~kQ=WR9$Qj&~fh!eNP8 z)62lP_NON!No;aCWLi@z84~AS2DeXk8438f9Sh9XUZV6g6UJE_Xcdbc8}P#4(JJMo z9j*`p1vyRe+t;>I!BVL`_d%vuBQnLJ;^z+QS~#JI*wlIpa;}pfqv#6;(&%?S&^d7R zbY@!H_C>K|u)AfZF`^u@XO9@u3TAeFy>LU8h`Qbk9w}7xO!au_u>G|t5VN)*D}m9PF4{N}Cu2 zDJ=|&;W8l@Ltfr_dhYi@B)3%3E>G8W7+;@ z71($e;c>n#!8pU*Ts43#?duk5MMmbwd2r+Jphli5BJK2r<=jtW*fRWq%EuIAkc({b8Epx2D0*g_A^aX2#m66rs6`i)A@p#b3fael0;csG zyQS~<_pm4$!4p;*)#3YiQ?CG6+>XO0J{Q#p zK*B9mps(0%-i72Ms!b(kW}O7WJQcg8=SoD_^QsSxy(LYyRJtE;IEBZb@mRUFcP`A#0v$U3Y1oARAcFE@x|WeF1``dfG7HgP+|FMjc>-^7T@lzK39CApT7CXIf(Dp zbe=6!LMKg*tC)PVmCEO`JCGMib-vvnO}E6Lna=A%e#NwqY9Qi|uG}(>`>U;$Pc6mK z$o3dZzU|>+6ALYlsy}H``yIQ@b6gnG;vG|g;}?3zs}%N{_YsrUswFyDexD@iV_pRb z@>aUEe27)M`EDU}MEBMYR97Sl*~)6#Pd`&(+F-$f!=w|j+wbrcI~}6Jqze1VzJKW# zuZN}68=Ob~uli-ZikjZ3 z{8>E#U+LARhx5Co0QB|;o~M4~^&T7LCn!MW6eD<$-@D^UQ1SYbHxu=@7v}f$9S*M? zO=e#J;p!H#DcGbQe)o%c@J8B3K#F@~yxg+YW&lFfMyg=b9M6nkj{)Owv08h9Uq#wJ zpqRH)hle)8@*I4@?0VaQrpnHTe?_cI|2;t?`*3gjUIw5^BdP4hr9z_G^6-cNUb(=}i(9n** zmb=L4`DCgLCA_I+_V(B$VA=e;tMyrz(A!^eF<$t5tb<%=;Pa9fb6jpNQTj-H37XX@ z_&n0BYmHK?Sd}0&=e6Cf;z!pV_C#QN@E7jEpKpEqC~bAWrS})S`f{PQYN1=4t4mm- zSu;$>M4sCqo6L)Tr27`xX0E?bYtZz8i9M*sI4eFEf@PN$x=YDkFJEHL5?wY z*_-ZmFAt`3xd_IJLIQx<^XMpt2L1HI{~;&nz=`3!?^UEa*&HHM%#l5&wN!G$Qppet zT209ZR?MH14X)(Nhq21DQQmR@)OeXC?B1_rCH1v>rB8K4MwV=-?`quNX&QepDkO=^ zFnWRN?yA~noT;kOEEqpsUHBuJJg*#GocUsWsxfPSABaCXQF0sz zG}cGu-u4Xtj7cRYf{>94`;2f+^y&0zn(TOT(x>)>bq^;V&fkrQ*ekuMV(rzU(#^B& zG5h1yE-@Yy=Z`=29q~5kt-~Xi-A-M$b(z1J*KTd*{pseR>NouSY zBG^oaC0$)>tqC>pAFsDk?JxG!k55kzyoZ2V9lcY!-VB#Z-Yx6H$(j(5kWQZ4V>z+> z;1kINb~AEdDLWPrtCsjF)gKN8-`emR@R+QJHLB$Nq$f)S%_w9|x^8BQ4^2h{4}HU( z4c<+2(zd^c)<`ZFLs81bljbSr*d7hQnaO3EHryc-<%!nCk-0@qT6hx zzc{9-uo6pX&pf~L|1k|Me2}3yCO)2pn~RJD0U?zdC#oJX1dE6@<&ED@jX&qee;%{~ zoM^)xETa5JloWO1HXN@0?SWg0y-h40hjSZkTDi^ltErsACnhvGP4mLxk?6qaM!8P# znEaxdKP=G4U5YqYGTcuKr7p)RuD`a4tJ{)-S{EPv(^Y_5AudCgjA>6$il8k!F=_d&Vf^P!|Hp9zoR1MrVI7%E z1e}+1V$uL> zNzC1Bn&rR!r60MlzKrOo>D+Hk=#LKn+ZTdjo&YZYVzkuoZy)?0-@^Z(Sovj+RR2Rb z@9&-Zul`1702oy0`&s%uzx?UG?v`6TIRP_^XtJ0e+z#_F`Lqr zZkR`|OfOYI{nG;R@9q(P4YxO6$41$u7VvAMIN!HR|2O%M9rpiVBwLwy zP}rg~r9wOYVK4TZm1Fg@Fc4~(|IBy%AzbFa_B9d^NYK&vCA2+a|E1-FEFk(u4P^@R zN+Etb{{R#*P?MU1oqaqw={S`_G5d7{kHhAbO&r57;P}F=r5SCP|dc3lx{@=M2TOD-J75z6oS z`;OE>gF{5Uq)n}fw@yA>wo-}pa526OOy| zr+)4F-a$pc_;5t%4hMO+J8?#v^D>uTTXL23`oCxL0a z-wxrQe(Em=K4PLjwhi_q)5yR1rB9U17h7!aZ57U%^H=$hcyd zThZT`OE@W9RR3p%l-zJRdt=F6yGHKI%zi})aA~{;kX@|B-(+Eu`^(ntkM$8ApT9yl zRCk^{hv|`0A5C@rEV{)>84QW=u|@aY`p_F40Dw=CXZEr35y{`=rn(35sSWY^sAsJ_o_yVhifd{w?iO($Ax)+0hXv4-7O6t){X%GUrF zVd1UbWMKrKYVp-T2Tq+M44wLrih*#*| zjG-pMK#nj3P`4l!>EYpWkMI*}=BD-sJD{pNvtYt&bSuBWz=32w(uarbNHOpIw+#;UW_x8vb#MyQ8>F8Y*=zrI7}-QTZm*BL1pbMU z4edn15nRHnXTb+X!l>;B$q>ET|-g)C23wFI_5q%WcMAQEF^%xU5WY=TgnjUpM-r7&qRez>|l+f&X7lcFq4+IN77VzR@`e(?LEYrSZ+~@094u zUpwd4r(=4xL}nh(=$&ig3eHbA?|u9zk^WV8@+Ohl`SEm zb$PZN8J4}N3P~nwmrY=#t%X{yR*PLE65&k%zzCJ}n)4=B2!lz(z7e=D)Koy`CG@!S zW4E4p2{P$;)_t})cPJHfg2kYKJiJgK&y}tHul;Q+C=S5TMkzUb1^C!9=rw}qtw{?% zKu7?AhTUeeGe@3XkQ2*h=0%Bia831r@e3eM5R*fAn3LG*eibH!x=>ZuArWS-fXv!- zbQbyk#L0Xj0)QF+fWb@o++81PEMAlIZ?FS}FH&4Dz&>vSV_e}nH|r@=6iTURqJI$B zyET*yO#_eQPrcpyQ=;fEBY`Pq1kU27{;dUye6baF+g9KV+Y=(9-F>JhU)sNx2r^}q z3bO}iI$j{zAGJGOn_RxSR`m~-ij>M!x(JD2a){!JGI~lv2=jF6feGb#AvDd~gKYF- zaudyF`zm^!`oW#mvmhZUUpFV?WOP`k@3Sv*3>9n+?)*m!+*RAsjYquhi;mTy>;4rG zIF{5Ksz0}v1rME2YH9O3)AeyE1C_wqh!~F1a#hat`=ZGLn@3{vx%^X|oj@HsQq7u2Qa}L);&0^Zr>^-k4(8%XsGgU78xe~(rR+2U zl*7BS^jN@N$)FB>5B3-Pk{|1V@JCX4MpMe|TVcVx7@=TbrJy9M!H)$v>$?nM93txX zSsFftm=m2x#lrt0U@KqU=7j0XTsA+$9-x#9({Oa(D$*a7yf0rE8IgNVYd4fw(q!&r zFk3hSameXhpjeQtb5@aK_pfl$s;_W&2(A-bv!8rWm{%Dx`Ug6QAK7RXhQ!?+N||KJ zsgl6DqUS64e^RZ3^vnN&YHhcZ*Ino37sCrc_Z{rZd9s0d;6TFz`rSOpeAy}_W1d&+ z$6@SX66GKGI02D}k9(IXRvof>*t68hqbmm|uad9p%cNZ`D$1xEBTW*!?sKw{1z;ZD zq`R^t6M$oi)M!jcl4E})nUwFC^&`fM)n5SdIvNJ$+)s|%>5WhHKU-esE9cMC@_0Wq z8udkp+iwk1I4M0y;Bkhtn~kcS;|tk|0%gu9_?-9ATiCsTov8`#-RKjndNSYWo~h)D ztzq>=b0A?rzOPYZpPO#A8^h|c{x-SVX356>W>6hVmNc~yNKa(~Ji|A~KDQjPvJ37! zQER})vvmRf4t!O*cjHuplB)7odNnE7eoH|oW2aW>9gp7Wq?LJSZ;`*vFm6bz(M2OP ztHT9;TlDByh5-jITSKuH&fB)^~Dftwo zdY5f-AO$qOzzHr6(1`@lUf(NIDP>|TXCO8bPO{JchhaSlLTk64oClYiovI|m5Ef~$ zM_yQI0Aa`C^d1126ur^U23HJ?bjngJGhiY^uxaSYnt%$2Hf23cZ82pf@34iN++e#R znxJ@||CvyHPkC>#K~+029v$C9%X+DffkHYeJY}JtI|TN6$n*VILD!l=AX~?26NIn3 ztHQ8en2-Yr!D{h2v*F0&Nc6ph-w8+};U78Hm8c?(O|ke0VDLLoFd{ZX%rZs~1+&E$ zBjv+^dMEQ&r<9*On>lqjq)G9}(&bB7mDx5+!?ac>%4vXF-xSpX1t+Or&6oK}mZcoS?vTM#2g z%^u*a-~@+!!Mkv4Hcq0=hi-hOOk4eH=R4H=qM@4<8s&1ov+uLwCmTZe($*+A2%?yww(TK<3>U4Shv@F>lkt6&ix?S-WACN_q~qOrmS!BXcu=_vo)b$2<4f z+lqY&u)P3mCVOnUh`6J`CM4;ebgZb+UhVPZCBH2|BMggTAmGR$X-RHr*fn1yxmx5s zxFst3PqH8X~!iKWwi^%=^~9M5}Zzsw{-h|0Pb;w z&>+lvOKY@5$vtzhIgSF4kd7b>{W#R_%x3G8^M>{LEH1QWn(dO$3r@w&6)H@Z9#Fux z%N#V@Wmo~(gqd=A)TyfUi-IRRK8b2I^^VVYx9QIOu#!DrYNW=h3?19y-3teZ8tzDXL!P>5Y2uB{xH{FRR zL$!xR^<@=6SG^YZ{}QjdDWfxZQxIHg0L@?vW%F#2#UBCttAQjO zh4)OQEI`y)lc(ZOM0$Rba4-d+nkU+yD-s>>ZQUXmya$STH86{14X+(-=-7W(Vuv*y zPKmY-J9nz%lDAB&Z`m0y+#ah6%B~Z0c@BYgN*K@zFUn-fMjH2p)IZB(rhL*2jxWXI zKz#Q$5H0fm3%u$S#Z>oxyTz_k!H1qyt>zc+2mFqg%faPmAm;+;PPu<(yP+4E>6iSx$6*BICK=~W}larKD7C2Z){ZT{>{=fB2yFnoXcJmd*0ZG7Cclq z%2dyWS701l>lUKB4s+BNEf<|!3AF-1Za@QE z3v81>e19iTOWLR$b*>DLNjh#V;R?JAHV1?=ND5*f=;t^KKR*gQ78c(op~IzXyK~o6 z?Q*HT$D}W1N?=or^;w31v0-1z6@P0OxAr=Yk1XFu5~e+DZ>D0~@+bS+Bp!ap>fi^8M$%$OO5{55VDwFt~ zG+nviCQ`+!$bHS< zG-Z_D(7`I*f~_n$Fei_*-vZh4q7gi+8PpVZq{C{pNuPY?n!4B@oZRB{d~tt1zHW2) z64aEBE^!WOn}B7dl?ArUL6qHIiXw5kXMYbT~|ou8YJEzF!8PHA>(< zJKVVOP9^y25xptPsY16ILcFE;((S1}?l?!vf&}0?K zp-OTX&J|$BB%GZDXkpdE5DBG;bGYIZ>Xs=@GUyr%QGGxBI8h*@?6$j$zb+pKOTG;4 zQ`AER{!Dj6@AEK|dFrcJX`AiPB{z;LI@*9ai!EVQrwK)GnviD`GO+Pf$FkzUU@{Hn$w@RBlnliw_C_^UBS;E1zTb79J(U^!eTzf8$ff%*J(?4GDbN*D^GxDy(9 z>I5A4A@ne_=?FWWw+^`#pUZ?L@Q{(+!8ilWLk($z+kFd#{f#B?1?XuTaw7`KdI&D! z36p}pkKU22ue^2&Qi@h=1(Nbc27DW{M-Xrw(29ZDzxhHN6WPmynS|ReJ*60CW`t3}PDXIYKC3w}$ za{-{w(?&;KlG-3c^nLDFs@zO4M%&K$WU}2!Gn${J3c$ zt>jw?%ro_ta-A0aAHsRcOwBMxD5Z_O#Ja-5?_>jWVXEEsc?S%i07jHz9b|5c|13_q zl=!_kHhs*B>Qp!7<5?5-#PT!5!lrtcXsVlYmK^PB&_L~Ng?kaRKOwd5u>RA@Ob6+I zEjT~(q{krXF@+XdS}5{ajDhX01(@#Y^s9cd<)zliO#zc;`g6r>)0$#890&QMpf$>w z*^9kNaX?bent<;RlSxG>h&O?UJi{AQJdKRF077qPjwP9oTmaSgyDq4=*kxej&5jrn z5!wK>iPc8`V8_wi8VR-Z=aH}^*ThIZBAI$MODKD)`qsmeK?{4N z$;vyPPayG_s}fth-Egl~PkGG%OgS%p>OKEOAS&JtXcYR;AE3YNSRRE0g!6arrO2cl zERAd=BzjB}3c8IWq@7lwgQmqfC{w{XT^Bm6=R7tff^iqRadaO@_kbo$oweapO<8Tf zp(t{91}a*{z+sP|irTgvSz^&>^_oHrUxw!`n~1GDIBl5cZp`#01#ffKATR|TGB_(B z@ARjM%E#BO#Gy}i`lmHNml8IqsV*XG8YD)B;Qfgw9hjP$nvw|oX(rj3qC3TzFA(1x zF{spEGf56Ov?a=ucTj-XTM|&M>v4e#%#o8LkMYYg z9Y*CYK#?gg9G-kxjQDExWlmHaK{cb0=n0J2$ANZI#(^_!PyT?|j|H5DlVk3R{fCQ6 z0~$Z)1OCizB*EV~QD`AR*VYd>4{vQ>rGCXrk)@bB)2tzT;TQL`xkwaKsq$XqYCTVJ zlC-XGZRnzVh&l$2PB~kN#^$5h@uvp=tNJQ)c>Yc9IfW{2jbFA5cIP7L20(i=Bh zLt0^O0l^A2AQq0=5aaLXr*=Es4oZ3li)?yGqw=(Btie5vL{kT89*pau$z zg;#s~oukP!Q^fOnJ-DRO6i$oI&qg#iwh?^t{d5zOp3rQuT?F53xUHfGph``M#>NaK z>~Ma){3M0RW-`v__HD5_9903T@l&g9n8(%jmYc`+Xcn7te~RbrnHO~@GFs>%`G?r| z2smXY3CXYkt~2;J7emJ@M9(x9!N!-}^-G?1M@0_FxM4d~`9WBCf4RR(F|dw|^&Z(E3Vot>DX>GQ_tO>UabV)rNC2f11;Ne}gzDmO{C;78kOctpIN9`I4IJ#D|I0MK*lc{~@rH9-{Ty0^7tGFYQ zi@_;CVZ_A*^>p1s@HK;FTWPKVy)bx!8Sw=r@`~_-Ah;jj{)dN@hDheCY_Yh?oK`v< zW_zE9n$9y_t?T^usrIa+*$~ZuVMz3H<=P$^Ob(jtw)JM}A|HwAj#3`QC*9}T6BA$M z!Mn+y2@8c=eC;WH_{F zhHN1kUpZn9@ME7>1Re8e20gYX&-k+*y*ux$7#a9DVUbkPAi!ymq#@O~dBB%ACrXR9 znpaysNZS~FddcJB)C2e{RjM(`*7(+}-A8UJ9(*pEdjQ4Hqb;j@Jx8*Dzm7~zT{IBJ z5mpnLer$#0MAHvwIMi%JUN4FEis4h0w{PE0>b zfmwsSpO1W-B^xifMb&PkG!?a>Oh@aqQDrsxpm8KNpayce*wJ(I>r!v2T)bx*k*{*a zCsF}qi`DD(iU*jg(O~-NKgQA!Y%svKG^3!ltSlcxATGdqJud7pwj+K8T&IET6a6qC ze&?uahb-#c*}1nUpEQuzrDMv3q83hc+huC5Fm-?Df8DPA>`Nl8K=D2g7D5(yjFK@e z`8D6ur}5gGY!1U?7X@-c=zfv**cQY>oi8t#>F(VwBd~`O;6(R@l^_$@o$Bc|o8L^* z>yiS>tz(OCf$jVbvD7&31T1#mkSK2>lxJakD{+g{?~K3&amS~l#M$7_(wmqu?`~_=BfHC8w^=>IINzj& znhd67(6C#~s=1dQWA!Z@km&Ay1XiQZ=k7bW3{awrs1jjO2^{&as#}Ho@;1`|$=Asd zO~>=jF7Ui!jSUY%t$axZG4ARb*ULsgJ_d&WGNjUaMhooQSJdguW7K?tJ+2#My=Nj8 zqB>p?DUThw`#h3|I<33MITG6^yj0qnZx6sY6S})50GV46T5211AuF40(qfU6;b=;Y z4PPe9@T$Nb^_~=G{vb#G4LOAEgO)4`|CEZb|BaRX4Luj`2X86hr0yl)Aijf*5M|G! z?T_9@qJJ{A!CZ&6F-Q&{#<{88BPv%{p5@ewO8>0+esfm`%BG&<(0Uuv)?lZbTw;sJ_=jP3edXE_<_4Hbkpm09TYO5MCoQVSE=rmdkRZSK|?5Fofs zTjVUhumO$7F`70I-uS%a7rK;7%?_G?z&J{>F)Gb_ zaTY%WJDt652n?_Dr0z{+I1-ue$D_!OuEh$M)C;NQ@b4WW2U>NV2TjX>T+8@=I)bb0 zv-5{Q6{{brsK?}b$?JeX`a1~-KvcUbHg_9?>TL;O?{uY%`w#KeK-QPvt1UNZ_l-Nf z&{yN+n(sza*2{%V4?K9l{T%D<`5YEi!XRi`e%lttOX2Gix8OP}Aera3v=B&zN_%k9 zO^%$RZLU&M9PD*>z4gA7?qCm)gg=OIN^pR~@^kf}M!(pYwkhI~p_&#vP%(AG>feE{ zq7IdpFP;8~O+1c&dcgN)_SN{C91|Js$I%TsqmkyNv*yztK&V%15p5Wp6h@-4eW}Kj zd^Z>jndLCD==Qk%aNnr$z2s`i6M}_`|6qRTV4}&WCDawC4)K+9jTc3a1DrZc8dEcB z<=ZKR;AZ0a0;RNe0leY{=Fi<3M4PA|YLcwVPtMjYDaG(^baUlJ0>@hRg_f%c17E}2 z>Y*yDmiuK8BNMu2zfN5lEdX|{+w8W$GfKt4b!Uui$>x_%PT32p6*!}FRL412HL+Us zQAZUW^NXF+ms-AG*=wQT;Ni(To556rCWrR1TA~oK18jE(&MqDg6R2xzq2N(-Cy>!%2Ba&~M=<+|qWA+ugP2#j% z6kWQ%s;J~vlvYFfDg+iN}1=J$_!CXU*3Uq^jzA6PEQI#Q*ibA%yteOVs)b3zPfS&j$q3c<& z?Mc1e81>iaqhy!^1+OVlD>T;fX0>$$j3qDYfrktt(>f&Hu0CUk{047h&tCF@eRMQNRnIrbK<*<;MFl1Eu6Vyj=)4-p6Lo zBn&bbn%8+(WNTRWs|KKAADK7>aD~}H3#HGFzbUFpHey%oVjKt|il`Ni0di&PuqAV; z-aH=<5IAY)8=W*Y!nVhoVmC?6$7>AD%0Y}f{sK6RI_a$on+*54Hz8s4?^mn9zG^~P zio+F}a5N)H0#p@rELrGMwnl*1>f5d2g@g~3w6s!|gNNxS%K2kx3!bEOrOQRu$r>2Yo2;QWp9}C@+ipNL^_g}&`pxn95yY?|<98je6_#Cz{xp$HJTbEpN z0K{i_3lfjRe6Q_#COPl}E$n#qiE;rh+%O6Oj}*@db|#~M+rX`O^xC0r=;QZD5=!w( z+NEIr&9mb)Ky(Dp(MP<*GL5mxw>-RS(ymyifwG{*TS$!X-s4n0S_hae18X+pm?a*?Aj@|M1;?k8Pge5-7oi@Z4NM&|q3GxX&T?WrlEIqeAxhzi6-)!IN zwCE7X2>0yHjAGGM-3E1e1jiPA)pFe)Xv#ee(el+9kNaBegm&aSWKsQsJ}TZjw*)lk z*T+v^Y^M3(k{{JVGr@FGr(%5_R^hRLkv_@L_0P0VTfSHooTavMcN;92TDI z?Ir=V8wv#RlfS>ZzJJQFRY4jYcOWpmfA@p(P6(IWvqeigEN6=nYHIPZW3iH+82aL1Icmk3egDfYQ*5gmg@ z{cDXjy_CCE=VG0vY!>}AG>3H@L>sU8BdW5mpNkg0&)CfkC2}gr()X^=e|t%l_J^ z$?>RBV+xZ+CGSCUi*F~{geg24ZVhJGIN`c*!tG9*6#=a86)g$m7-sJiF(~(#hR=9$Uh@ zOzmBjN+w%AAY~?25G$uf?{d(IHpB|wlXr1-H?Y!?D>23BK?~U+u8`^?!ItVYfkQ<_ zr98OY%lMi5S&sKjUk|&>O^b%kLCb8T2}{qoHzg%NYd#$Hzd74Ui(ZM`OM#cmtEh^M z4#xTV{WDpmBX&(`6%vZ&#@f_j3&z349>wLR47xv?oAdr$W%kgn3cRY$b*0-IUi|{& zB27vSjIm&I*CK6h)9lLpj2*Ml+%!y88ZHG(r$B~w+hq>di0Mq#m;mnKiHT^`D7u`m zy@p2SsceSni%KPBT8Ofh6!SVRBGa|V0BcpU%z&g>p5*-8S?U6 zzaR7f?<=;+%+~@lU6UUq0r@mFuT@m=MjmkjX zwk?{Xyv@<`wXfband~LB$t^F=NUDG<(hrLeQ$RfM>|{oXYh>u#eJa<=KqyVj-JnAE zdrLbUkwIal@g|I8qtAJ5bLeWF*KzH}DPF6}d}6&^U3u33OF_AitHyACHgq!JlYtfC zFE1ZQD%;b^BK8UJp4xlVV|FarKv9;L)?OOblD3eaQIs=2ZULCJgepv`l+1}hpvI9w z4ca97y#MzMMTxOQ*U8bI@eAM7_a-=`cI_NbU{PIAPmcROTXK+)pnfka)oR64Sk%#( zh56D9vdLX)a#0mzIsE?Jh?6K*{}NIzg`Z@&2aji)!APGA`m(dTB6#|l7ya-LL4{KF z%tNkWkta~Bp-&pf5!|0q(zkXhTwJ!OgUwA|9rrrEKILYg(3v9##4w~ ztk`q#U0q_osn+m3N6jrUyHcqC)c9V?48Tdu?uTA#qMO@dXEf}akI$!ST029k(-q{g zkGp^9%XNR{ZKK93beG)iBTjJBTHLX>zZW?eSm)|FQ|LUr`^weT53?>V!KIn&{UMAr zy`}L-2AeF*anIphyx_@ES_Ij=7KRqqpJ$zDbSMlV zUv?!-5?ko`3T7s^)(#m{OVxTx(OiMCztT^Y_HG_(BWH;xM)hxxB@-lVSEvqZ_I}$M zdc6gjG|HY4)dl)a_@@^VoUoeVJ4l?7_*S5-%=hs;KcQ#ch_M*@`lvLNl$$)4?H&$| zB5!h>t!S0tif0EEMG@fMJ^9OPn$yQ>t0ik6CtHoZSL!-ZN>zUBvMTe7k(Ok9L7`XK z!}ymgTZg`QPC`x*w*B$6wcj~urU>D0q~dsVcKq}zi*HJr$t9vaGC4xd$p+U?mWy6=6SH|KG|bib4W!|TNl%I`u_E{fAqpT zbqGcjo$=y37xu?q;R^5>JSypnvsmm@2fXTMr@~VqaN7G z0k41V7WGhJvn5WY4BH$eJg%uBt7-FhrQIr~*lQ4fGul7imYPGL67rYsJfu1Ne6{Kq zU%=bPN-VmOjzplTKBqZ*;A%0ZIEIja{QNJD;3=q73L+4NfK=L_17IDehlf|juU7ZB zWhnl9X(m761_bY%f{lcmt{aRgv)#6~N!Sm^K0o)^zt6OuQXZ}MVSN1bDQm9AMo~#A z$}%O)!xJDf*E?*X@NlbLN_9m3y5zm{^fVj}zl49W!n5v(b;k*$YD3@oE<>E}rm7zZlOy z+Dk62cag+nWNK=|8Ww2kysB#6aUTxb$+QN-!I1{C7A&FN9DlKaf15-cx%_MmGV-8$ z>IIa{7lBw)b^20$5gFl?6wKwvr*+(}@r85PWF&=UUFuzNKilFzooPjSirvjlEvVHz zJg*}nLgM2{w?{7iQYdq7Wy**~Hw;IzDYz?~i=3~eU$;i_O7_&ZXxg?QFhBjxxZeq5leNB&FQiQvEc53`F1V6Q7llY0g%w`S^M~mhj-e-Fziz>*^-u^Ql1vPy}jf3YKEb~+qF>7 z*{TP>vHU0|ap=?Qh^*^ckL8C9O!S-Zy?ykQl9lS@Uy3Gb722GP!U-kZUWUip1Vaf zYt?#uawg(`>6EXW9;-{sFqV-bHdgng0F#I)m0U>TYGatjpCe{-jWuTkR-rSa$HN>X zo7^DDcR`T0NT3;B5L^*cy>;|z*5P}tbCGPjIKd^6-g~xF4A&0*sIQDtO8=D}^9o zz|Cg9xgf}VenBhiLqHe5{tBAo-Wk~J`sEabI*iSqz4Z43y#grW!m^3@uG*jHV`1pK zuo@g_C7P1+|BJJ?4vKSI)`xcpPLLo&a0#x#9fAdS2=4Cg7J>vPL4&)yy99TF4({%Q zJHI#k+_UdJcW2-F>Z_VRrY4!1m$iEJ>VEp^r^Dzwq_r!e4FZ3fJdZ0)HQ5u;j|_~5 zShPN%&mnx1ariOer6pFHK>PIz+K^p=QYoqRVq>~&S}UDZBp3|Ac1;!fTevRKWE}W-lkz!`7pC^^nxjiuYN!DlzgWLHS9p+eoW?`6i zk+%|$3Z>@}Ngk#Au)8x!O4ar!(ImEFX%V9WV9Unb%kPP~px{smr5SL{f4?B7o$$(~ z8f-Gw!fG)TR#d+WwhAfHK!k!j4BENhXVsd#jzFo6Xk@hdVJy?M@k|Bp*x4hWc-)4G zBN-o%ZWI_&;rjqfaXAh}_Id};zpOKrXRl2kc|Xx?h@@X?LJ6bYEU5K7>MfSjpYQJf z$2g$p$te4G!~CyLI%W`ni1&ac{5R2w8nWL#s*w3*yf*BkJ_!<%=AxGNtM%K@OU!#q zymLrl9LsZjlPO~j8UFsQnB#By9FvcdrnB+tPbTs@9=jhS!$Y%-59*bU5@;3K-oE~7 z@2+L44Q1|qMtgwX)&F;^0G_BM6*&7d{KC6Le?R*pXm(Cc8CqN|xma&pT9v8Vi2zR* zulCLmUrSr7KxKm))+Rmt{IoXrmh;5YI!V!ni1F^^Cjz(KA!|=}_rx86XQ6s4Zb}N- zCI&;+tjCDDzOm_2-7^&fL!=7Tsm2$p@C`oikzA)wJ&ppS40--{KZc<#wOrvj~ zV<}Bhk{XR7Fk!UYe2_YE9V^gK|KY;YQ-Y4>M>kdK>eBnoBX)SeSM*?8A~+YTl3nK? z=g-)#2;0-GOHjC(UK68oa3pq(1_Y)Wg_0ut<3VDk2d+%!-=`#X(!}iS@#}#qI4pYv5!)CngEoGtB0BP3J8$<-;Y|&y449z@yXZyVV0;)Zz(BjjxiwtJ+ z(C-Dv3co+9fCtm_gx0Ix`ya!g_a@|D zkAQK=1KbMj_K!{Yn$txpEF*6ip|#_@>9=*?O19M`|1^A29%(Eb1W#nrEYeUX{}n74JXyoN_b%?}O^HZ6Lajo94W9P{Oi z*awv;kKg!SVkxvw6%QUf(l)+Gxk6 zmy=rsY$fhCe6;G8#Fb~n{7^|8%ZM5 z_42|G3<^@PvMLeOXozbnWZorX_{~mrg#NlAdt&^{{>d7FBt?^&2qtDI?7)hByv9}N zoGXh+F|NY2+UtBB_H+DyK5?7I@$SF10RFU5=~m zJflP2bNuGH|6J25c0Zvx?E=p^-q=a34|&yBsh`IGZZK*XFCG||l1yHD{{{j5^9c7l zKx+{k7Km}_7O8efMYh_!u+{M0YxClZ3>k9ZeW&-EGgUzWMW9sbd&k!2IKB zdj$wR?0v9R8J23)CO}@l#7?=Y>sOLft4Q?TXV*puo1)yn|IL>t0y`2HXm=g@8Je(M zK9d>}PLzHD8@2kR!Swh1h}oc0aE-`3bu@lgE2hU=SP2N z06@+=31SM0AO;xicynN~RIb$=^Y)KLO#mP2_lG;HPM_@SGtxyvfEsx1c5%bh*wkP& z%a^3JuosuthUAV9gM=wwZo%Tsr=XyK$ymprt(C&Eq?QK8y(9ert=%Rqmz7vrs z<0!@=PBNXD;kOWW6KgBIHzhKFo$=TeYi3WGun7esbG+eDCLTn? z_R@Xx$AO{L=I3=sPA5;^j-o)gq#o4KlR;dhQ~!d^VmVq!xQp3pF+B=jv=)~&4`{PA zR>LcpbwQw0YY8~Rrk7B$n8`d14wmMTztq0D`tp*Rot=F$Qg{UdaAL>D4g2=ibBVoc z=FWl9;{6Y%W9bR*vZ?&SK2JT=w%^vfosH{GTV{S@_XNUNA2quqw68>_^P1apFy8}9 zC~s6_4kcDLmZMt__p|OiW+c=?`i0&Ll!Ub^t1XIR=;Ru;7!?ZCjei0b`n8}#-J2&e z7f`o~y$7_WN`g@v5op=BJKvIYt9x9PVQ$zF>bi6a09oASP(G^H$k?V~6_ zPr}R`8Wiymoi~z_n$zIBCRF3I#r#r=6S5AuCLdCrz&mM6CupwO&g>GF4r#*Ir{{q;f+_*&>v^vA569 zho<6PF((@uIB@|!1>)i(5#;)`Ep?%Pe7pruZgl13=z90(w`^sW4A@eQmQTQZ)x4sZ z&tL=5Ff(xC+NOJHCSz!zHam}lt82^%B}aYlGbmxsLx_)0K~Gf!XUGQ2NM+>r(qu7v4xZ#G+wC zFri$&dgds2$*REaxHHg5lr1Gnl;a+iP*K$G*XH>-kyjYqBGRb0p^tp$t~nyQ<>bg7K+uqHnx6$;rDgE&d8Z}4nfsqU(m1b~1Jm7hUS~SL}e#VqY z>disw)76!;P5X{BT-)D%1>PCPM}P>55XL^%F`PovJQjOl`pvTqx(y@Qqx? zTu(&XS07D~ylH` z175X+%WAeJ@Ye__XZxpN^Qi(s?|Fu9!PKV9SV&7@y|P-t-cojQ%SX9yo(;{Dzlz6q z&Iez!{j=?moIf?SF3S}koD4iGP7lUy!lr{l{zR(8;h;3@Pcl|LucMt+6HrEGy|8L6 zVbR*rN}}GskFbd4F_m>sFJGxi{3Wqn7n59X6Jwqtkm2F%t^*A4(V(US=a8rH`1)NP zF32q}FL!^|hdv-Vr8~Fa%YH9cMf##n+3}*c*NNy3D1!9Q=~J;W^6@Vn)Wsv}SN3X{ zKt28r9{JOID?$%$Ipq5=ZsmURn%k39Ba65_VUC!^A&a6bf?PXfetOVBo6doh>ABJk z)(EJst*@u_CNa0Yv5g-|OK;e_8c}^)Sm;)@^y7!0&g=CgMuBJPgYFj5u#nOPJ3G6I z1i6lM-kPW;r^EMc?q^@4*MD{wz|DdVJQ`X6z60` zsN(lN2%~>*L)coQKK5uhi6;v1kgRhQ&5kL2wr$b}Gqu%dU2ciP2}$CYw`Ui2UpU#> zR=;9HzwaRPdkZ$rE6&B;_%K^L1zdFD+1A^*AWJI~8YZ+~f3KT8v_XIxKPd>{$8fwf z!-1{>y`XHi+C+4Bn@MsC2mRNLY4!b6SS!IaW@l1W6N*ktkiaNPsS^%_`8ro&l) zR>F7;<@l6F!@Qk?WDQhzvJoD;Eoh5&II!+-k78aB1nT6H3fkSgk<>*DmKHS2CFR%jNOAf zD^{6yyP#u0$MNa7Ats|%n_Gy?Eim|0LQ45=tXyM*Fd#^AQdI}IkL;4zT=})zJmR=( zZN+48*q^?kOM?&vw$PMPU&u))MW7(q+VTId?l55d?>7&MMM~TolvftU-vP+@jkRY|6{qf7+$?i?$>*g zGtbbzaUpo>VwKXYqBt?B6LNnckWNKd4_5Jv{Li?d&7&qB) z`SxWtxI0NHdw!^D#ME8snxkAW5D6QfJ2tZF$^ zme79C*=^fAN-(d~cV!&|A97ReC0_!z!V)hQcblA~dP&gPu1WdK zBXiHN3UM|A_geYVYx}?AjzmJM`1IaLnyOTQrT25nSiJFVh}?jHsW-%T&J-J)UsG

          zQAS5N?X?0T%-Z18*}S~G(U6|_?cHrn@c5|UZ)tW<8kdPMMOS^O{YQ1p3yupw$Uen^bx;McOwV| zSA4_wPLx))RPu9&0WdsJ=#K{ZP?WdbNtJ;11U+i{X%d^mZ2kpAjOb1Gd5}Y&4d1U2 z2^O+=t*{cA3k-Tt`h=EkN5qfID$>-efYTU`+Z8+(WFZu*ls_ilJX(&kxy5{_XgYjz zV%}907b|C_<+$n$C~v%G1xRr2rM?@N4T4Ke^ByH~EUu#)=F^o*(I?2GW0uc@qUW`@ z8+Cm?&u_h-&&y$_A+E!^F%*-(_+3D(Vrjn5U#M6}8b_n9c(yI_6iKZ{+>R++CGYTD zcC@*3P#m{`QD?>MHoH@$Yui39hiIwn?X`llqDn`xJ5wx&9;B53;Z$^Fw0D>4I^uCH zXtrZA^Rl(Ojaz>zQf+oA+U}ijDJ3UD5}CSwhm@kWYm6TY-`j3SLZe$(5t?dKm=%(oXqM z_s4Nx-eoZfR@mKGu9P<{`+4 zfdvr6T<2GjlRO{17K9@qeAol8sJwRHgj9-K^v3$WDxuDEL1r$%#3t5z;m0S4LB&il z_&J5z6f&j|gm^!d1yDf928ONeG?7D5<)Y)~-k#1%nWPI|5d9|a{8s{RmGXz}dfoBQ zIXy?Gj{6hI1Tl+UB5&q^D*{gOE0?QHgHEW=gZTo-=rb_kqHHa%?*Dn&E&B20DUb$YjA&ASrFkLQys%wMUJ8r|3Ojm*<{g;y2u>dgk`N>pLBJ+C`sgd(^kTw z1`pk+y)_!~w*F|g5JAz+-+MYbu<8{O17`(WQhN_Y4Pr|#HHWLDau+EM$ftsq6UB-; z@MV~#n)3PFs$h-n4!g!X&!9RJfDTTe-QXs%y-~lrYqo#op=-U7q&-0}TiccK3d!_% zsa?*dQwY4vDE4z~B`PNQL5ts)U*K*dfyn%!UUx{wCem<-x)zV^+h;T#&3xIrFqGqE z34sWrp#i7IUV2>C3l@M*5eK%46ArOhJ_LWME7O%}4*2w`FFyX=(~fSA< zy7JBEQaqe5fC!cOqerW$YhuYhOWR2#0tA zO>Rk_DOD@-j(4|)Z}L)CiOI{>@Sp8`9cH0M)|LLKFUw&4+wf@fKLKWe9Wk#kuK7g}AEs%b0_hor1u%U*jmnTMzK!eV^gq!Q+ z!qc9D^4x-;drzYi2J6!Gmaeup)TMtEI&9w*xg$4uiH2I-H0$;CI@fr2X;|~EJ=rW) ziK>uC6#};s;sz8n9dX6Z86A>CZc5JrIh=DTvlyaj)5kkeUbOX;oS(~17PJyQjGUbp z7Ehmf0=NGYL;KGI^#1kg2ugI2ZRAsve)dZDAIVxW znzhqu+&XP`X->9iv}q~ZGWtGux0A1R`yC#7lNnf^9=|{psm9p1eB<;TH*m0X`YNXx zh4bt$xNMx&R%I+Hg@nYiGn@@1LKb_4d?6t+HBfjY?2+N6L#Ny2^Er}*HXxE#$ml&T zoPi%)9}?E6w9m;f{t1cz)8Ukxb#)&~=T&bmp6@f_0 zuU2TZXq?e)G-i!o!GU1U?s%Pk67Mh9hJ`EHTHX4+46|V`*QQ^z-1-Iv=)6e9nzw~g zQOgs|J&j1%-FZF|^S-AU(zY`?S_Qza6H^l)P`^<}AB*F_-nY|3)PADAnYbnrZ+T6GXpwZJYRz1*4D zZEk)VzT9jGU(VUiK%C~X7|^@RQt>@!V$$K_>MTpw_YLDx^WMpjsH3UUZPB!G9Cm;x z<8x==q@s5;^Br4gsTE{L*n9bgV+n=C;2hJ2jjKeXB^a08SEY*Ahje@^9zeq{u`G$3 zo0Xu1M#tK3Z_bC-$y~C*S`8mII@SkJ;gI8ZhF#8dF>>x%BUjl<+bY<5(+M^@+7o9O zbh8lX@2~c$!E0@{t+YEpKWLb;dT<;)GTm2vmVGJfQuTHRE;h@hkBA4eTlmfL8_v7x zU}C9ze=qffU(h8LO=`)sQz^5GdctP`Uf32HT5VQdpT`8Y&tDz||pVu1(4qZMzUbbSCl(ET4rQYg-pssl9 z1-7skUaejbFB#=7@ba=wHy&xrKxeY?!&EI|b^bH0D4W*^UP-H`Q+EB`waS1*Bwaky z<%DLbe4q}E?x^0&k3E_Wn-MvArStui^(sEg((A}p&}jYp(2IPFTX#RR<$Pt_dZD7H ztfDnKzjB1Gc%RG2C}$4>W2SYgKiUBkdT>hXwV2ndNdRU-+}?C+GVc}})$X7%Rw;p} zvv0)yR8gTeUOJ#VArj23!xp^#RB0zl1dI|348V7zH*}S|lP}N{9N8a@?08SjK9zsY zrP(qL2cl%qY?S;E@#s-QQKaBL3q&%)oE74NM6xN|)QgLY<6^mz%7*gtS`|YCPYmO5 zt>UKDH~gy|R^JQx0eoyS;|0-RL29#$l&jaB6F(7~LxZ0b_LI);L}lx6Z~XWyc@(0@ z5XDK`oWMXzv6mOGFC=SQXor!6_-B}fGXG`jRmpX9(b!G@y1%;+akro7YY&Bp!Q#7& zGV4pVCS{4EH0>&{K#I>>W2num>mBK(oq>pXxPE|D(*#FK+-UK=iuy^%Q&>|&cn*IZ z{m?ARShUvUfQYSZVckFm1pKcX+BAgT=b;`gP^cxYan|u?ivYXS-l}6h`$=w3)~D@H|YPr%Ll#CW&Gh;pVK5pjPZ6@T)kP=LmJ7F zBcdXt>|STV-qhMDbd*IXHvo+wbrNOkbX@!)vPJ_oxj+hREWt$G##H-Sw_TRNAdIVb zEo(MKafT#(ayGXM&s&!xn4co;r%63kFP;u;qO{g&kfOgy5ZUDYMZAV2IlSpGk?1yhg$XO4+dpm3=|_Y7lauPJc74wW&BxKr2DPA6&;<_1M`}k zInL*u&?Sz_Vr&6j-Ndrx@1lSv&8zNjG!gWk(hrZS)K2D)7D#ij*L?E92E9>_A8h6i zIL_2Df6RQ~JmovvC~qHvaB*=J((LU*HqLlI_aHL`tw_-6oG~h^4He54DVLFPY&6Q& zon=GwdGU9YrAw3-6ez>2;)G3JBNsVRO+N(yqo zeDB_NnI-sD1~8(TTw>ev15uhY@&q{05$&DW>c?3LM+s1$>flN&&DKfbmafl(wFeqb z7T{EJ#FBfR+jcGCEp;wlWqAJr(SGytqZ8H}fBszf32lazKH9$}h3V<(f zVuI4mflzLlrA<#+b9l&H*t_JuNAlk+~*IemQU0qR_Ef;y6klNl^R`mwqjSh1%Wj= z^hJdNfu_bRS$gh|C8yC9c`;O-3V~HfwC0BlVcN^XSjVrLo%hIKV39zKaq4%WS99E7 z$VoChkj?i<8(RQVyC?}i*ghff*0Yz(WK}a52kRs4Seb_aEj|mrs~JvwHKr#%K({D$ zD?s$>vpgoOs`0WoPv!Rh(A2fT)Y9K^jTv?mE*z47JbEF7Q}^j|=AH;wZIgu|zx|^@ z3b#;;$v#IifB92NkJ26%Z-6K5#)@O!zRwI>zjA8u%NK?K&wPb7lDWY~=MID0!JB`{ z!)=6EM;qux$f(<*ERve{(SMcNSgqR3?u?EVLrlsZ7q7lS_q^gsfve9x7$4#hR`yS1 z3?p(VaKLnuZ`4v206`a4mBTg8CST7Gz6A!8VxI-uh>9;a2>3g&873c?cRo*!^50oXE@WwQ@9%>FTF36fiUM{ly03)f)y0xUeW2Cez-22 z%&$GJ@_d1HGvMA@5X4b5L#HWp*aQQxJUUokxOh%&)B+N!mb1oU8lRVOL+#yb=Pa#y z{5Uo#Wp8BE?3r49ARhXI$nrJ8awn&Lc7YRBqUU5~smeTQX@n9pEO92sH#_A518f6o zB|mP}t#VweC)(v~EiNq_4ODsPiq_s)9(!rD>tk3iRm7j|4AGX3Tdh=#zK^A13FTPM z`G~h?MZRmg1{<_=CzHw~RZYWgwW(So)NriMZCmFTR%oG8{Ih^DD2AHDTT1{uvH^y3 zIX7jf2*d`>Jk*<(qlxJxFd*#kI~PyoZ53~al82z8qH=J}kl~1mSRCh)c4~;9PD@D? zt+`KV9nco0PGbiWd!Swbw-K$V#1-0zNwsL25d*q!x4fni{{JT%G^DaJBF4o80DdK%v zPs3=ocd8mDyY9^1;rZQ^ywL+eWWV!Ie>yEUedw!2`0TEFBE`qg%gPL@S@J^8R8*|d zWkI5fR-k7kY}<=iT1}0nhgIaR@^*avZ_`jc4K{&e#>Y_+j5a&m_yP{fas)LVwQzP;4;|(!FPMv zbgESRqQ(6D=~Gng9gvJ=-?HQ@IDlAchB;sO(S7(Nz;oWcq{O$(>E18pNCn_MJv+K4$j1xD#+J7A8@_3ydu4KK-(xO%C5bZ3Q{?s!1h=d)_ za57QdI?*|uMvd*UJ%2h9^JN)p#sr9SMJG*1GUdd=V}(8eN||QI=dt1gS_F4D6Xa48 zt}EerBt)ngH+9RU}sSjVWu=G|p6iM}6DXLX_ zjuCQ|)1|C;*sO9sy2G^oA?jN;&w=H7;F4uo-Z6sLeNxO!)2wwes@qVYtvQ4cmWRsg ze9H>C*3IeASgDsvU_4;lYSbY5i11=*;qgA{(K{h$6)95ugl!iF6>h{71SJQi$A)9{ zXuTUGTTd#Bqx@EHsn3-J_f6I8X|0}lsDGk0eVgcu#C4uL$v;+HKYdDjA1gm%1&^4i zo^PXcnjJ7Q?-`YCK6WX;c88FKYqCYW7~|$a7OduGXgiCon^;3}+U~d`{%qu+<%QqV z``tA)*Oj_6+2D|-+pRj8jV&L=BhyX_bY2{4x}bu%pd_R z$6u@xiuHyN4BMX-ic3|m!K_kHcpSEwET&@vtRUp!bT)!4+z3qB_Z?r~i?{{UptJdI zzcQcpSJJFG5C`f+>;Ot)bHHI8|M9~`2wmjuR+PYng2ZS7owh94mdv@a!u^1qdUp*9 zOSg!4s8zYGh4*Z}&goXt-DZCz1qMsWeGaDUQmqbeOJ7DbdC8gJjr zpgh}y6h_MRz+@j?mp1^vr0L+yjima~HblnW1*T_BT@;CK3jg_tLwR0&O0nFsy6S8!^{t>!UNkLJTp|jj4EFAto(?h{Wx5)mgIm@NOuRh`>{^H z@lI3CgBfK|6z{rS?*|m@0HtgivwDo0waOyUUo)8WK+Vu|v7a3N3_8j9># zl9(u^C(Q;L?C>b>&e!4H8r_nuc$q0A;mw;6Y1#UWn$W=&2b3ttq3wcC{LWik?IQwH zF%9A5Kfqmf5tTXNwL5+lz4NB?u}qW<;h# zGTB#9wI4eIl)q&Bdn4vN(-?X)n2;#a&b{8;bEoSMy=8rj76p~-sB0Vy+Fuzr1g7$* z@~I$V#Z&PTg|a#Slg^|@^a3=k<@U8gf1oUjw7Mw~cL@{Hy9s1s7EECY^!bu(7U-G` zdQ2mA1Uw-ebT9YWvL-w4J|P0U`ka+dI1h6>HG=R8ZTApUbNjsbiZ>a)XFmNqZwn0T z({wJy88&K%8z(IN|6zAK)@Q4oBdbh03_NSi4_i~3@{t6V9f zi)UwX$3CBZP1uB&Wj}|IyU; zj9L%~M8Q!`t5R%E+_dJrJ3iSi2GJPy?b>Yjt40gx;Ra?}M?0T3J>Di{@0RIhcaCV* z=U#pXMD-=4aPS587b;oR;ju3}(|{tV!m7=AypOVXuNX)W!rdTPl781dbOI8RBo|lq zwN(&8D9e`VW2kWi+Z@?40sJHbLm%w8a>dk0_}9i3!b{w>uR<#_GHvL)IQ?HWA-VA6 zh=~3wu!PdZeTqFnbs@O9Y=A`Tepr&?je5D_3*3XEh)X&rmc*PJt*C9TD(y~73HiLf z4+P3>7Hltn;50K0f2${U-W%6kW-P+@eRg;dOMk^gouzWCv&obnh010*KbwI>=V6TG zyhjilNLLq`eN}n9g8FUb=5{-iCJw!u*FVTBuhfvPdt+?e)>l?~g21>Z2wVsg7H^i$ z2ZDD+Z}%%<>hA5a5Hcsk4m0PhxJ>0(cGs=m%|G#c^l)Z`(R+Ya)h3DE zgv=VWf@r49S6gs65NNuA^c>)*Kln2Ybi- z6?W+8=FwqKhY{E^4M|_*`+ze{IuS!q8HK9r^=8#uWKr1R)prrZ1m8_wkA^ z-yALH`&MljS4tXJuGIi_w!|n7NYj;PA=g4n^|&4+x!;ydSs#*BMVTjNa7-PAUwPvQ6@&`+Og@VmTvuEgFNogv-U4+AWKTv4e63EDTqF}jPR)5Ty`iidjl?S4kk@-J}U_FBHq z1t1PtbJ)&{u%)hl;}S){W*(G$RX?<$=%>9CN1v*v(6_J<_H=V(Dzo{+rqitq7z;$+ zLt7NiWl4W`|9(qFtWLal{mrHKxNwT2=Kzcf(fOmtCbp1~yE0x0@p+=B_N93~T_@t|8CwjBU3TIpI>~GBVWK9}Tu;F8idbK#wJs zUq8ME0*_ZO+7Gt?`lvZep$O3Y9I%!2u@h^G#=*W{)@P0u(OxEt^Q8Y$-D&djqg1RVQ-0x^m1#R&ot1JA)Fd$zFg=3iHQMLZ5Fc zb$5nw*BRhhid09@`Ou40@jOHWp(neN!Blro1c(C8-w6-rqW7siF5ZRnpDc!caI%&f zqL2}CtL3%G;isU_7^d^$)Dz~zv%h4Sog+6( zOzpv_j)#4U0%uwyTr0)8P0-51SNx*L{PikHcyHV!hP<2SH64nWMWb)3Gh5u9O*?}` z6T!D3Q$p11BLx&uC$t)Ni`QjZiQ4gmfw?`?VnZVkpH>VyiZ^7ut*7Ugx!OXz&(py< zc%M^p^N$fOvP2*DZv0vugwM_G-B(Az?ksueVLHm<2P>a~kZ%K?9xf?WB3w5Ats;`& z0|@~%Kz`IVB2k)(IZ6b>y-23)INszu-RY3snTZGlN$re{_l|*#XR8p(IkMZ|$flzb zl;l!>8?qI`tTsEQ!?8U~67?p0zIB9>Nq?vxc08NHk$FE+=1e<}-H;lJMV~c2L`fIV zpI71_xl>{$)_V!jZ!_O3<5Ta;*~`_3nJ&{qBt%G-nw>KFTRqH-Z^)WWJC*jWj*Pa}Vb1gg85C{V(qpsD=YH?8mGLYmo!)HD?7vk8B)0ml>DjtQlRkb8*c0P_^Z{IPpB)Lo30Faz%QGV1G+c< zUb6n*Z^kg^Yn+Q&k&+jQUZyL#O0xqcG+qLDDWB4ih30Xix$w~8ZLdUpFKmV3QbNq< zZbsoG1nlF@S^N@vJ4VgKMMd*Qle^h+v#u1JPJ;-d2<;kn^)QNNRmOY){(ChI0i0$x zwk>M;;F*ymNikRJ>>}i3#SMla-{E)1>5xm`gO3x#mDz>oV(Ic-k>xm)0tpALcr!n3 z)4kru;k5|)`#kap&ur{4qp?IRHsOn;*I0me*VKbmB=4;10Zf*OR3t9Pul2#A#hm+h8t9#E^-Fg@8V%yR2@#1 zy-7SOV$zN4w4xQ|kL=sRHFOpCU*?~4ds5z%&1$;+OKK%o&pV-Xg!gq>omTe>gLLV@ z9a}uufaphbspK0tn|mMeV6FS_FC01I#u`!@Ep4s^%?j|5$_wZCs`210q~nm8(CE3Jo@%<9NN7cHs9Sp#sCT7({hEA&kaw+%P{T>KkYAb3v-l-sE&}kD)plj zaLnl`JhcN8+liMg^a^sk+Uy{v=CUMp!F>vt15}!;f|;VovzJ(QY9dS#uAs89h){GdT`SlQx;K!q{K{4#NHigkisIX!E}BM(wST7MO6;uVPXT_xG(xL_)@6 z%@7K#s{1;KpNx(5OvarQ&!9_^92FE7Xqpt{x_l`2AS6!UceBfjd7pvX(?@2j!RA~` zvAOL`O?Q~NoiN=H`Q39}fT<932Ab8DK9CI%$@!VfLRsh)q0u`%Xj!LGV+`SS*U9tv zV+->$63U3@RUD)Hx50Xh=9knLPkf=3uSra3zSvIB4Yg_c-vs`hi)kH^Nt}5Kfy8v&VwlB5e1mgx_dR4yBD-%;ASv##cpGNs z)9vhJw8>xbVv8D-6+IbwJ>RxRzX7IkV~-Z$#*L}@SVNg<s}U)mEU&ajgM&}YfeH~^E5m`TT> z(G~;}b^7TnT$@k-)_~ccWJ*Mz7U@|~P-CZTiW!MJ>lVm6gvj-CX{JmoR){Efr3yIT z0W`sn>|s_xQ%{A7D(tr*e?av@6Mkh8MVhR|0j>97prNMoUnc9}uxKZ(Q<4(#c}UwE z5ai~^*R*C6;Z6}yrfo}DpE7F4BVy7Df*De>TRUs48~52{_#@tU9nqvNx2t|!DKJzW znXx?O1*pn{;k+=s6n2HXof6mQfM!`d?AYUvHQN{Qh`GH5=Pf2dS5GIe5Q>St?GV zP(ao!UaPZW(t{fTnNAOXN9no$d26+dP}nI6k?@ffvtm!kkf*^TGKhmp4h|L@&?sVJ znQ{tQzFZ+R|M-1Gd!|rDiNCVObj7EMY|&Ds=mtHGT7^b}2LPb*9CyZ)ZmWy~8GkxR zOsHFRnxN(bsKJ8kajdVG;QlHE{bcC)>44n|6YmJ6v))8%@1+Ycma8)y!iReX`GZEIJAKA>kxWLH-EvXwdvRp8 z0EKLpA*C$ZeJLGK(!V;Ij*-M3EA(3|7o}mp;5*YB~K1jo+ZzOzt%= zrv1T;ZO-@EH%*Q_KQ30MaHbAPlJTNdkE@2{nZDtM27 zHKy3u3)mAlA529bh9adGPZxbu5UqK;qfRXyA_l*bx6iM1tsUsFCEYY-a6Snn(K$yv zP`SRwS4Zk~(l{0iMdVlz#*%4kYsxRwlrVkGYMS+m$EaaWi^$cj4z}(3BDiHKfepE` z#V)KT;FG=8_=u^k>>rznZwuYmHaww>j}8?Jl()Jm<;L*2-@BHxl-1ZN`i(=B&qw6Rcu)aoVhYxN zlZw@5*6MgWAys=&WKp}3YN@&#PIVGTi>gwhEf=;E^L2H>iOvpAo7X;;wEGSda{A&n zfk6y;-j#esXw1cyAJJF*OPw`(+c-hNhe_4F#qq8hk2?WOTIotpM3#mZ^z-t$+?QLp z?k6)c^Q{&*+Wej$u1I{ptxwfx+75JNbgi!|h;XLPwTp!&2z@@0&uO@NEtfT8v!rm! zegZl_dzPJiim=@49LU~0-lGo;Brk4}W(y=I<%oiAUtf&(kI8o98ovzNF`J(9rBeQG z7Lm_MqrPWsF;$4?zQyWADh1)#E=~t~J@uF^RKYmuoqISqpJPfN7Ahnho6s+vayz=+ zo6IvVUWkU&ru3<4sPz=Clqp4DHIDK2!NDA4C{a?eQ^eosY~7d46kGRq-S3?sjt2h^ zx2qoeUPES}TJxaMap$`eqho0ERjsLd=l;Ms5=DbVxBR5{$JS_~QjLA6&(kAn>EeRzMNC$j{@eDf zj3HICZc|}%U_#@W))1NOQxa=pJY$L&&;n|}iqFEVhannLKro_U&3{S{x1uc`vFC0JJPOs4ti#t`C zOjBLLoA!}_hddFfEFqAN7JCF7z#Si{eYux`_T0juho(}f{7o{Bj`{>ac8L4|_W5Ly zYrfT#5sUF-z|%sVXflt=)!=mT#T}mQ&`{&#bKG^}QyZ-=gTlKXi6A;1(jBchIbMbs zXWvuV2~SEU)X|cN_dOoSxfMZ6%&9yc!9}cQRzG{*tQlC}PrxuUWQfv|e3p2yuks%7 zny>U?x_raD_+Bl0J=y6 zBwnFWp854?JOmv5zN~i5Z~EMDxvbk#EaToZSQPfE_Y`LP&Yi&;Dnb53Ktb(Ku{2CF z!c_@sJN{o}!~gvfr}dj?vo83s_I}>eT|uK*yiO~kGc|ajV*0BeKc^Lz`ZgXIa)S@> zhMf`J#y=&T#}o^9(swYZk0Sa-)CORa6zQ+Q!huwFMcEc+%EzJcfJ!cNRG6FMu(CMy zV=5|~BuO83SI`8|{AYGPuQFBP^EnU>1b$#9QGoBdv|XrF!kDfQHw4(hHL6x0tHp!5 zN*d4iPNgn`GiB=INyf(0<>X9y8F$1 zqP~bs$O?rGZoTD_WN?sA)=8gNwz|B;(d-N&EvKaNxk)>Jjq{_$Jb8)7!@DcZ()2`u40!x zxLtP`wa{mx7>Y^f?SZD$vlJNZ+Q3{gln2|j-6D=;NiyZw_DK*9dm#?mTq zY^wh)kJtHrQ)&Nti(>)?D`8}BN6gmyk)W0TkhX}bq}5LEfChh&w;E5aKlU)#gK)BJ7MGcy^n>URy`59Hru2fA}K4kSxh`9P} zr5$;D31643oG#BmL8k8-w%-Nr`L=w9;re=JOG*R#`!y<2Yvz(LUFZ7MrLhme1tH(7 zM#iCv|Hs%j#>cs?d#|=}8mqBwPuwJpZ6}SbiQU*}Y}-1RZsV!bpuN%Z(*?f`RWT4Pb& zPIl}?&a{P0!f?W%lqoF8jbuA=xVib>D6Ji+(p&&=rCQ=Gk*Tk%%QGC1lMipiH&Vdl zu+pq!S>vM1{@gTqqra=#%G06Dvd(@Ouh762KTz$+So zL;o~gqob92|HPQ;6lbp&or~A~(hoM3%N zbH~Em8sU;8GnShQysPeF{o)VmOr?XXY4x4{}V z8EWt;U)wf~2R1eMG<}Q}?=G&9FH0>sQ8A>Jlc$O}2{8G&KfGhWy1q)nCH} zEV%Gm%N;K{jn3P&iV>w8R=GN5t@ndhcVnwNnr$8Y_|y>m%=PB$R^08@tb7F5@=`NN ztS*&=giRxxnR1%!u}jh6PvROsxkw-~JZs)mJfxsYYyJ_F6pV~!G;x}8JTf+?;>4vB)#9)dKQH`S{rYGmYeKG-ZkSs8F5h$? zOc>Oc$gdPkpxejhrs~SV*Gg@1J8F~`pw)(=PEsJ{$IT73PzLD=xpw(N;s_e#EdU~3 zfdRh7{eTxQ5Q#YWpEzww22;WO)sqLmtr1+cRUZ3)G`Dd|#3@hDDq$VU=M>P>E9N(k zynffouLkQO&{h8=fe)vnS1neMjBFKLdDd!F8Ls8eR36;CpOy z8PD%HYbOl%2CR83;Ipj8y?X9V%DW#kA`O*;hoBa+@W#d}x%3^`!SEa=HeervoZft+ z7vw{*FHrLAQOVL^vB-1BkcP4ZnVjnCmV_85j) zzsihqnA>%^p<`YW)N*&+vMDu z7kg6WJn!o|NjfSeCcti=A_4B|%KV5?Y6sMdYeNi;#+*T;Hj~(gr=~5?R5-)(qdxzj zS8VO^ma?N*)aiKF9ND9mN2<`S#UiX1loDSYv~qk_E_*mBbU3 zAeYkr`50Z5`t~~{?S_rd zExAm7x5jY{yUi`07fSeD%b7kJ!iG*Ms-7jgZoJD*U%id~pC)sQT+GofgdA$nl(wfqLlh3Q~I zZ}E{t`nb3GCJZ0e`5PJxVsU}TeNxRD1IUx*2C2rrlfM2iLYYwhX2!q6Kvf6)(Ka#~ z>YapVMbF8=WSw*b#Kjj>?s4FJu3w24!WC#FDdXVx-^K2Xj;nAi10t(o??3yT#>#RHjjgIUir zn%@`RE)boLmPL4WGs?^9P8O9vbsL0(goDlY#!jR^aW-l;=H=yK(nw~|QPIT zUPJ0N+negvXx0jTVA@z3EQnMIbtwgS*JM%ubm28d?_kuzoN8Dhu>~}mk%{yac z;LpqrR^ek?$a-2>u|)|_!^6indz_^$2nihMbXswCziLq1zr5Ir&^Ex~xwFwBrD}Ib z_J#pwJ()BSBSJfEZc`u5to-7wy=ayP(9zyG5hh^hi(~stA zUn>{aOGVYE3v;NcD_kP+aV&;@@nlJ8%&2;NuIEta_Z4I_+C;}*H*G_n{+Pz50>`&0 zix*eP!nMtM%dg6`0;0XkBU{v*ng};s zr+^QCO~NC8c8i1u+_w(HD)10HYl{@Cc+YVbm>Qw}kXCYY!(Ow0Iw@QNK>e@8{f~Eb z5V`M7CiD0W%}tM?>si5&I+}_wPlHAwV+weSpy06r5C|zQufl#iefhBA#^FR!T}jYM zVA1vntCDzYkBRD7xyKJ@-G=?@s~euN{LF|14$HEX+FnM}dhy&r0W)bCeSNe=k_e@t zsE(-ftuu|3L&Ow|v@;+ehTqM#`MV3g4UaP>KSX0=EhdsR!W&9*T9O!Jd+q0qgeh-T z=f){}8EAx*6=Tw%83A37gjbF;jiqDOD?KuA`%lFW6TC9sot-Q{8kr1sc2pR+@50aJ z?Dxi}lHRnaz+nqRCyQqiCakdpUliIu-r=+1-7Pbq+gRoke!MONm*pI0r))W2mDHWe z3lhD&nl`RoTyt4f9b*>O%eqU@>Mj0GTGnEeoOnVt5Eqynq+_oBMM>$>p*HWS7Y9Jm z8;40C!*aB$qO_JcY^pF=TxKGnkH9mZuOm(L7BgP&(u2blK;R!F|Jlr`OI2q}3H0rd zW-! zU~Zu}qZQH0D)n@Nk;h|Xc3aheUTw>`Df?{QEw5jHckk0YP)@*y-VqB+w{G9^;c&W$ zaqVe34Sl&oEYkWH#J`5sfjQW}Y1l^;Kf6CUr-K$Q@^{eFY7$WEqUH4^5XpBkll+nF z5KwaRR;eaCI0HQ*Nieq^duJWxoViIlIG9X*Xoz@d7P zoPBix{YJvWb494u=pS`FKUOSjuK=5HB*cuJVb$B!L*hAGPh0dUka3!GZ+Ev8mjC*J z{ba$##%0Z$RtH>HzO-AlpwHR0ZFoNMRp{15ag=M2Ln@$v^y7gHg_=oprTR4ylE<1? zQ7}1<8*47pSb9FfS>CUKyzI8G@b%9ND)rlKfu+T(97d;L#!%AY=2Mi`9xA-$BJ~02 z=`7Db7;(lPq}!uE7=%b*RGF%vtD%v?J3chVK71Ae&F7h3@HIw+HL)<0UzUVd8DNe1 zz9&#Dwm7?9($Ux)cTA(Q$j;cn6wMh?{|?>7R&Tj>6xn${jLV^nD_)%?u|LQSh)(>T zUIx}w&O8?{mQ{%zlV}=>I=Ke^NaBz zml0JlTCd9;6S7PgrBI zNg+7J-&6CWNVbRhUm{|Y5D@B2GYa4*@r(5>e?2ypYQ_Y{v1~BcP*r!?HKBPo1tr70 zE6PKVj^hdjlPU;KHBZ-}vSh3=(H6!QOPVg$+zbb8Q_%nYs+p5CH$7j%@}x;>duDhr zG(sASOsoI#O1&>$hED!3e-Ro!Xe8^)R|`w|iitqC7Uix=Ig-&B{)7~O$wf=Ep_nns z+vNE5Vf2rfIw_UpywUh=OtiWE0gVN36UkVPO2}|EMfK=RO$^Lkoe-Wf{4)HVKOD@S zOu`}vifgrA<{8N%z!IkBKs#VQD6VK|!Ph$NVC=~@NyX>s(ZOB-apnsku`w9+CH-+NWC6tnJp%FwqTdnuE%$i?BG*wJKRPbdx= zNKc;uK&Q>tJK}s=%S!b8AxX?GgqY?K2u9P=m-S}VJx za^AV!e(}=x&gWm?{+44rx{cZ|+`}LcBQe08h4;=S6TkA1^VTL_acW)q;bhowSwY;hyi7D`2*w-Qg-peO zQ;+{3vL>30N{gwAv{AZ6xrpnHHrQ|aq9C^VBMKS$U&Jvbnq#Q&t)^$nAjEot zK6!&CNK$=Xk3Ps~JM3D0TytE(XJ@b2se{@4{)0~h8#{$1T3EB=W&P>8%EyN;`s~LY z!{x7Oel6iO(xS=TMOU#SKvxmoH?`N`M$LjSUuoWXxD}?rAtmPJG ziG;Ofw?FM*_JCCr=@?MI|3paTJ_tiPCDYQ}Z=9g7$YHxeQNw7g!z z(!;*#T5Yn~ARbW6@+grHdDjoCM&cZ*Al>r)q`M@jhuL27gx%=0)|Y$zUjKTGQ`=VA zVmLoEHd4U^0orgN6cRDYIj>RYmT?3yVvZJ#D)-z$!n1a|pSW?mY&JXVo={<> zdEqY1)U35BbDU_lg}t)AnV&SXpTsBOu66^S=NmDkLVutE`tbO^*sj@ndl9nERC53` z9ymwyXMz#Ul!nJf^ZN*&<@=U!pt_u-W9%Xp?c1bia1*X#{jvT^J5b z2Fau~(DVc&q9D?_SPam$tDkRrKHfCVv7CY9kopUk+;p-+5^Qj+wPp+K*2gGVO;LKD zLPKVH%^5f6E4N46=$WIpd&-kFpKn1?1Y#W?BBAHP&W^u+5ifmgJK6uOLMr0SS?zxN zkQAbqK40}H()wY})aLn@fC}KQx@-h(;#uc5BR!r(__KZ5DrdMNoeb|pZnsdX!^lZ3 z+(h(V0jgfOu7bjH%j39CLys2uo z4QKjk`a!F008FC`Kt9xcGQ1<$^qAKsfCs9UKda0?+z#|P&ZHlW zMu}mXLE7SVnqRd@r;@Ll6n^;xVSa;;3Ga}YE}f8*eW=ycGQtyP$$MB@cF=aW9;;)o zUQk`E%kHeDt7~$rE%Q*yRK4x?XFuRs8A-(MP~n9;UqF9JVit)PBq1#dcN&w3*molL|V4 zL$TaA`0!->;GNg6QnoPpkuRxr7wi|xX`fN$c8>CRuyHoE)DyfPijB6DZf#}N;8trG zE!hY8Q15nN@UUrT^yp@vLfy1JSGoYhj%4*WL%zQN4u79?*~}2j4b_F8n-!Y@JnTVo zX_al{Yh!*FD_Zh}2VwC^YVty&3>Zn8EF2?GHy4gg?bVg}adDv6^P39}pl|a|Aubgq zr&ySvy7tvGE&P54ryixLg7-o6##Gz{uhTPo-mUgxIn zWo3wQPLu%oY8o28&z;~O4=xwB5+~rmW3eDi^tv@<_#9S6E4+1j?f0*I+{_{sE7PV? zC%aw{dldqYTUH~apQ~Tzu(FEcie$|hm^`~XS-wbn?e<&CqyQ8Qv(G%{BMz=N9VX<( z?I?u@Fx%_)O&{w^47AUNrrj0B+9_Wpk=9+1>_1T@9P-?yp3=@`F4qEf8(TPM+8-Fj zi&AsIjdCSXElxExxAGrVfV`|`f`Qw!LbVN7DMK(FoQ?yBjYxCeVRlUotTWHPyQID{ z=#c>Lc!VlAKRqiGQ4dcWjW0ekFxhX{+Bl&k2luG33#~~(1}){gIp$hTJ_|1iQJFE7cK81 z!gY@{ymY+CAeO^Y4fNFlT(9TRjs52orCQyDViUFpDD3&d*8Vbqs(v<&6NW9h)#**;&KqAq-Kn`7Dq4SWLH~PM=7932>LX0xeRcYlaQ4th>bOP zKweuLs~Eq~la`K^#jIo)-)7jgOr^`fz01h_PTb9jAr1we@7-+LEHeiC4x{VKxH3cu zS#6!}+K?49({IGIq%}@y4}=ki6KMz31-KM^6TL|y6{<=|jE_x9DjG)JtT}Y^)Z5+J z2|wCat$LzuY4&qA#T7a*!%serKhv~~uk+;&C35U1fy{f)j>pRZ_>w6x%!nDquHndE zH0);i^;;VH;yw4=^AdnzK1c4BQeIPV&h>-#F;#a@C|+POMP7A0BH7;jWZT2>$jmDn zxBlLVTxJjDr=5mCe=Fi_Dtc;S9uH{X6-!9<_0}%a=ZBUhWrle^(~Bh+G?L_HR3DSt zX~hz0&wjuIWbnLd`&{}KGZq%+pxYyieuQ-aQFZ0JQg@CkR40>7*8?W77 z8bD4xLn`G(>=8*lni#u#a9xGgWhrXKdF(e%>>(0bsrZlo*~vHaf?x<^3Pz9s_dTt| z8z{<@G)NBqAq!#N0@Xi{c5DaU;7%NL+2&Kv)YBK@zF6^pv?1+mmfL057!Ek~ZTFwO}^fhsz zK-Q9qbnbyHY}>cT3arx8f>rl>HmeMCvkocdg-2~%H95IWEY$z2pYjKc{jps-M;B#-$Wvsj|r7g!m6t`Cp#<|7z~ZLo63m_iF(> z>?Fmd3%k2XBxPkNeKwYRRH%q#I*b?aEG;cBQ044-%p`{y{E7?xbv>kUAvD9jcxIT32_fQ3jpX@F10N@R!!HX6#hQajA=|iObf9&UZg{Kzm4U=xU^c(AL3vhR zXX-5+t zHset+R`(Yw>Unij0X2%Q;@7$dZHj^rc5!k-O07c%Z3{dnP|hsZzj2cP=fVCH@13PX z$_e?z`g)Y7SNpc(Vgm&wXVp?szgK#j-IO>Od|0~})T5Zu79+m1gE7V*H9z?-+ya#~ zOtVLx2@3qi5Jj`=?DE0lH=om-LI9^ndvFSoq7Xd)l=A+okBP`;;C5rgsMRJGC8rwJ z<;`vU6I~@p%>h;`UP;FK1Pd!EggJlcqJFRG*iSLUV)+WPfAw>ABucf&ViAXPACva~ z?}h(a;hEw8e)T~a`u7E~!ELyZk591;2?>rBp*&fiHI}$!7^*?%at)ytv#x+I@%+;9 z!?uhoez8EwQ93KenJ(TxYy5v_!AJFW)H9>>e1)`|joCWqG@7 z0SuVm{Z^{IR%Kp{M-$s2ITd zd>*&je!5fSe}5ITGG8aN1)Z>1lyZgPEYYDYEorf%N=k%S`ZC%+7Z@9tK4>=KxgRR# ze|GUmU0zAM%@`^0+H;5uVj}8IfC^}xt`eK3W^PmGG1c6A^!468{3`sm_MK{^x|o82 zJnQ(R`~U=-VK$Otwd}8s!6=mSmWskXInymWPrkQZoSZID#U~y0& zJArItt+uK@_KS;D!Z*=`Em`lyj4y7R?UFv&YoYzlSNSgUnMxXq^Fl=Ad~u%bydh`o zWXNW=5U(ERBnW5Qf*(GlI^)yR(HA9`zn2`QHJ=#_t7RElU-K_Nf3TfdK=J<{TM^$z z$?TjT&lY7@eShyOu`B?#*GN6b@$hh$*Y)=ONUNe%w=Q)4)zVT)>$?eG)1GG(`eZZA zLP|S{ziZ%~hH{VjS4uTfeFVZi%mhnB&a^-?@Ey@LFS*_F))WWLM6C1o8l+%*d2ZLZ zfW-1r_*24B{5wu;RATIsJr3*qKq=d{R^LXjgZbj;ybt5jxX*>G8y4ByWP z5Wuhzvx`vlM}_v{_){{~1(xrj0D_@z(^RpVvg}%wChW~ldI7-fcj${6>zxCE&uM4(|o4Urv z+|NFG50{sYlwxAg)b*g3$zR!045gq08-8o#`G~1dy~PBRnG`yMsmL_Ds)OAC_ZsOid3pXTPhE0K4O(V{rP zwVFtV>Q^NtuEk!ywm@#tQ9&5y4^W7O)ip_RaZUPsV`1S1o9W9v2+la%eqeYxW!7Nv za^Xg?L#T&~(q)%de3If0&3rMG!oM=!{Kx8EliAl98!k+QE{VGZz%#e6?NBn%-<_;P z9mo)?W9(YmJhNDf>YrxoCzO5;!s-8PW5ERTpNqRwCV6Th!zjw?y9yIOeF+ zm>omQNzccXDPW@bIpfRi!8Ivmx!GKrm@jUE7<#UBIz1%XGHr#Cn>Fgk(&|(#;DiLs zQNp^)9~5nqttc!sot|b-qvmAHGMLcIjx*h&u9Y&)W2w0KDHedU z1Jny-P-1!@lDT81)nX(jjT;6)0%4PY{zXTIsX2@`tzv#&qY1l zd+-!^>tv}N2}7$d!E&2Ol|U*_Yyd(jyN%DO%CTU{W&D?9&p7+B$yLufddtqF99=&s z{=1$~N(*`Yr94gtUtah}+`jHqdy?`Q4=q$9Z0C#zD_OFdViRTK5NgcPeKdGGMBTwW z><%yU*UL}DqZf$-5-B3_T4pc@ESj?&F$z?|qAyMl8eTUP8;mGOe8yfFC^Gmn?Xwe9_{ zjN10@VaQ5a)T}&70A(ekFQz!Gbef48HQu!3MJCk>kPmPJ=_P2Q!`zy}2BsUJILBvc zyq%rBkyqYTZS&*vccL#D5nN&evVD`ELG5VE)Sp%N>RS;uPjXX?lpOys7gx8R5_KKZldmggUL(yo*+Z_=~pMz&52+KX`9)} z6?mc(k@MaENm0lE?u6e?ncJzk1u)Z$@?obvDl@DA-vbF2EgCrFE&n4EeXXo*K4=-7 z&ue`l}LuoKZBdB)M%MuqCc#9N6S07aU@A)7l{LZJL)S7JG zAAkOBj#-DkZ^DRgg<2PG+~)<`a*0Ry@uPi#3nwlFD_yC?C{?Vn`X8i$%pL9KfyhhM zv38{RHXcNI zBZ>u@1qX`KT&Ta1_PcM4sl|B}#6d>u@0_hDqx7g=H#mmchinq`?kqQ zCJBlt{b~5(-Nzkvh$A~7J5X!|-W#+b14T4((_17$GH>zu^_3ZRwcmTy+QF`|JV{>K zKr*O``u7Odp^2j$&26GlYYN~olr~V(T3Xh+0CT!yr6t#Y1b6q##Tq0;%utrJj}ieK zFRFAPl9FPGw5?Hxx>m%{=8eLT6^#QS(d)b;S1s_qtUp+%QM>k10a3b9WkWq)^N+7C zG*Q;6>8WD$vyKCPQc!}@oufq9q4W{Ht0mcN{{l(aJBzX zqBP>Ho=7EODa-~ZXuRE&pVTq;b`_6<8iMS!N@Erid%;>;XWp?*47hFos)YQ9??2Cf zon(fs4%szuhDCtEjG`2J?ndOGDXEroLF9y?zgK50RoF>{HBEiZeWe$Ej_hR}jtmlE zXB7#dVlZW(t{D|J_|Xr@~Loh#ze(CCJ^sSi4oC@xfgJ&0GNBY3UN4w{)L>;14Q zsW4VdJmt86z-l&r9l8xVrI>i5PFF)!n%?P*v=f%Mf!z^GW_3G;(dbnA)?Nr$UY`5~q zcLyA-0C0T-(dGhz9b*}U>nNh*Zki+YIFDnT&Y|90`+hD$AuVY3*U^xDsSS{=(q>pw zaXr>uBOU5YWRlko(lOkgZ#}%4ID(?YTxf=XP)Hh5Dw&x?A;bJ5CChy~X0=vc1lDww zCs-*dR84Vlab$?S7;Om_8b9eL(E-JlJhsI!Js|!)G(yfdUw^Q;HEu~U6{QCj=aP34 zwc2-ELSiQL_kEX&AZLm%Z0Y5$Rte)^@w$uCb^lhGG(mno_u(rcFRFC=()s%OxPbjZM9mvp9)~+rQDHLy?SgGWxD&vBc;O{Qm_@!DOX02o+wIO zCE44)FVq47XfyENnB##XuMpy++?=$-%Dug)3C9I|N!Yg^M-+$n*DN{&ZhSJQTw0y{ zYg7IlnFOB&j&Ws+V!=~}75G{|)U{Rm0Cu|0Pzl=Ebc<3=vIFIw0UvC9Z5iI4-_WBA zyZWi&gQH9SaAS409#FP)AFHIJ!^p4Cn$Cc^dW&!Z2N+Usm{Af0#JgTlYWz=={@y9J zW<7NK{ahj+LgLqC$#K~zpeLU95L+ZJbBMb$eB4e|2DdKS54-!?k}WZD=0Q8qE-I># zUG%SWahgb+>1cx16Yj%}I^32P?vZmD!yts1B8RI>l^V^a3?9hoQHi{vzNJugCN>kZ zdb%unJcnyp?gn-iX&9fy$Y4lD-udw^!CKc;81@3ir137tGa0oJCbeVCtsM|W0B>IY z*C0qqy51>Df{BJ1ib4CEsEF)$9Uf*yT%H&_XM-FNwz7fUkm6%*!7$c+C6?+iI(%*) z!Nsz?x;T-JzzbYTR^s;(9mW*jCRIVAF^dme8WVYyjY?%5Le@5`YKf}`VeGSum|7`vJ5X;45jG>)>G?duO;ZpgGuO@Zgv@g&%H zvcxRBaawjTT<+LkfKmLN+XT}oyh1(o#6h|oLETl!WPN}}66H9~;Cwiy5H=~GLp{)9 zKr6)D)8pp*DI32+hmkl1zZ#v8nmr98H96+I-6nHz6lN|L@iC~z{u3>ttqMgqzj5Ed zFv}~+HhNRhgP>QQ(LR;4{uE^;Ap-;BP0!o@2Tf$sk%))X z?DYn0wHZYiI7p6B+qwWSVu_B#bVCv0IT1>ffyljqyrdBe@KTg#s7CF&EigG@b0Gie zokAhc*9yQjYFi`BcbVhIxo!NVxb{{Ni*eP`tT15DUP<>CqJh071u5L9`8Ot7;F9|r z*YBdn&?Xn3nQ{6JKkR%-v8v>$nJna7%4MobEUTb_QfzWL&-^)}q2KWYOKhlTC=t9% zdGcQ53CF9**JTIedKt>JqmSdY#b{L^&E1~XLFFhnyr+-1=U@p=gg}5z00dRLvY9Onb$?K6vYe&rxi&1i^K;|yrpmU{C1YtgSboK;{ z(J{fm6h-Sx=esV$`kRRlk92unm_!G02h9OEqL~~Rlm|z4xDSwlBxFf~p1pqDEw|@|uYv%=2&A(npK#2!qR~bW56iGOsC|ab77kFnPKN4ZhvSt%~FCkx^RdH!nk{ z`vQZCR(WAO<|*R*)MN!dUWUWGfyTZYQ%!YnmkMaXf9xi5}pvSPvf$<0hQ6pm0m zJYeXW{-NYfH&;-gV4sk*Awx-w>tTANx{`H(VFbU%k&wE*w|*<~P{_?s(ef<3&LQpL zD!QJ%OH_n$%fcP?`re@`+xm~#Dr9)}motjg-dATNjtTIP2-uZ@bu1O(hW|#7*f&b% zkM2}w_ZNY64$%;caZWSmW1E?|JCVnm!Lj%_ftGm=X-M|R?nD@aOSqBZLSREf#aR*8 z-GlFGrf?7w*>R!)>8fHnKE6>BMgk%%`_0+GDMe;KBgIMJ5ItVA^%mW8Fx!F=V^zm}X4$pwX`jPl{h^?OAH!pm8aUV->f zJ?;*RVXEE&bK8QtL~tZr7$zu>H}G5{6nO2#6@floK>9N`6^+tFq0>poA4CdD`;KsNX|p}=I&C0r-Qe)%BB!$(W?M3G9CzDX`6Nnv?_&QE|u2NQqm7^ zxy%IV49Wy}N%FZbBI`<&`=&6P2K*|Dcn|%NrPN?~y^qhwEEfj}RJuij2LxCtUv{p= zJLKpu=rTStA8NaNCGDObBKsor>h*Xqu6&{i&q+`=%p|YBRh69{;1KV<3BcGf3TNI^ zSS{S3*50n$Li{(TVc@R8KG@bauV_m4)`#bnjC_YfS~*XQso_p&m<}d;d$ctJ?)qkV z=Jm2c%P5&Va|R1We@0GURe z(l^4fOcqs3@*mR`1stYW6?X6^+UPm8>M=%)1kMu~?0rNGs9r^3G4gn=CDdr)>DuY( z+w4Fzo6l1nt(?YJW@Vu;>5*>Y&G78f>N$i$tt;-ejIic6s~kwfH5jalEoz(om)&&}KCwE9n&!%`BMpbXSvp#THLO>~=5vJJqfo<fuSI10oQU5t!&vnH6oS>avB&~h{jtj>mF61)lLCn z;z>Raqv;o+I@`qgwd0|54?}mSrp6HeYZsqC#}3?d@AQj&XER~&Uf>S?7V2H>p~=j+m*cTxId|_ZDzdobE2pus#%ZbY3i3#W6!nsWzO@L$ z0T(SOZ1WSUU}jH$Ttdb}wMYZPBsr0ICd2qxPQ0*6&TJS9E7eYM7vyka4{?o@5-S>)Dmem9hMqg zhQrwS4|Uc*jWhrIqjlW3nmN&x^bevHq}A8wO09X1C!)}Dxmyxx#ntuVW&2;%B)xdv zzIYhgfRPJZTuuXksBQkEQ- zTM+c{F&)|*dwFRKPP*ozepl=)7vP(0U$2s=DhIeirgm#?l?Q6J+RtgGmNpPFL%sMr zZizaHf$;}}8@~v;y7T0)=o74B6=(9pBQ0b?{b%hfwAR|U0ki`-%b$1*h%!RuVjS+> z=Absum7E(J<6|?4pYXVf50~ebkz_fz-XXrj@Hy>(YU1HN<_70et7bBr)$%+3Gt@ud z1S{5*%90c>r(TxryZjrQ)Lp#d$2GW+xMY;9sQYH_)| z8QP@K35^z*Jhtyv85t#1JmIwlhExJv8WA&^0UD*K-Gf0i8_jxBsKIG)p8(0@wrgbR zo|4qgFE~KtN*3+3fnBQp0|p_rhwDRO32-vnw%ZG41zdLYrpi-{*a`g3WnCbLs7dG& zkhcKb-#gSt;A?ApdjqQ#ueWfFkU56@{tX1}ZxF2{xF=tqr{%k55$2ei{3uO7?DJ{t z_=;I3YB*P}Q6_t|n}*VlS!bb13p}!%NS2C1L_|kf4i!Z>5M$T`m6_x4XE(tJZi}Zm zpA;yfG?FuutI(pZ(Z=?})&%ow%>820r-dL&2jhU&=#Q5Ygvc;VN^PSn9bXMtG5}~| zA|zyzwXRExi^zLt0yG4ED=Xg*{jaz*!lC;;~`EnA^Ju-i{2shu2MT|aSfKqY3L z+ORn<{?TQUh2BWTG1cKQITdFbx@LK7g<#0WscNINbF@c()pxULuMUg<&B8xWwn>*Y zL0vg6BaO08%tD*Mrt*@z)X+*R@v}*P7?jIkZt9SN?PPT|^g)?`32udigoGY8tR=5d zHx7BZJrb<#IUudoVDCZ=nWt_$ton-(c5djpIt(fm1O*;WNuyE0s+wb#i={4_wj*t;KiXF5hrKT zfu`)?B8;*kc!*qj%=+)cO4D%{w# z70`SPJI{7Py0tDjjd+xhlt_A?oV$q%cYeizTK@^d%Fn<3S%{i|8Uqm?FIAE;)7)=2 ztsd67TtapPy*p3w^5T-nlo%{SAD{YNgq*yf78i*#3G<+?Wp7q>S&pGHdu<8o)?zd` zS~lD7Jvb#Ft}`03oc1E+9LcRY(AqB(umx+;xl9laF17p^o#4e17Q^&WsfZ}RPU5@u zD-h8t*A9ef>W!j1o;KRsr&{}}S$c&EVo_367Mgc%Wci2&FE$m-MSf zD3GgUMdNpLs5r-2EujPlvOWig`?s~B_a$>^Clh~RKkii$PN@aA?oo&f7TE@5VXmwK z&0tGTP+*+u3p*>JzMHJz@`--@4;sqkECd6EY9QE}a0MDE)rG!74mXloOS9jnM!CRT zO}3Kzr*0at9R~#%&dWFNxYdC9{`|84Ei#o++X)^HZg71(sy~`g&e!*y45w)Q-?c;V zBfdQp8RLHx@<=(oFzWH&e;gf{nimAjwKIya2No<{zpV3=f-Rl-1e#bYG}V=|xHz3O zFlXwOf%eYmh}TmoAdI`VU@)0U9@fJa~}{BJD)q=Y>&_GTUD zN&P0U7>SU2r}YX)>u%~2f(;VJ-vDH@^U#M@?rBB8Cza)AQk$0!J zi%qE~*M2=#O9R&Tg+CvR1iKMV5gPnQ_JSk*RlBJzFnOZO>V@kAe}a$z|HB-iS_;Nv ziYgr~4cl1l{U;l8%se5%e@gdRA>e2s=}ctVsmkbXmZ8EeXlRD1Sy{n~AI0ys8>g96 zEIb$g#?RujCFLXozGXY#*jrdh$r;YgHAJf&(~DrlLzc0R9n(p zuXXp6n^pPEh4YB^sDA@u`Rk7NU+ZjP)Nj>=8G6pn#Ts7E5?oR@L@P5>;kzHT$*x%7 zw+^1X?&c+Os(V|;S*ZRaKXO9(+V!z*%1+S|75>HK_C0Sha=r}sqp|6D=Aiy; zuDCaj56rf%kGQrHps!9veeTrC`H*^RZG zce5T~-jj~dNPxvTnodbQRc7NX!xBBLKyzm}!U5aMl6#Kk@{OfXsq7Op)H^Vajq}|M z`$1z4tuc8|s$;N-Wo&SR0HjNFd0X9M;-Gl0!G$9A&3TrEnvHc&YnWMpC2t105ldTt7xPB_UC+!fx#ziQ0?IeBIC``m^;pKod+L544* zj)q|ec@m~&b?ZDSFsKT-I243$O(%ioAzc`%kdugReZgYb<~qG-6ZGb4aWOsxHdgo? z3E}CI?-FD`6Ev`75sa7YdP`I~Qz zek#M@tkOT-E}*p?jd+utC097zcop<^WKl?*t?|#V=Ra;#6Q*8DUxxn5dZ8#Nm`^#c zI*4){sTSWlD;FHXAuqPuHRPWcVfUtLl<26#Sbo2;Y?Sk>mKsrg1T0Nw*G{^T%~Tmv z%*l&w9nH06XS{H)p~lswMiKz@Kl2VNGCv~`nzlCiAU|*|%>h*TU9zZHMFER+ys2L< zmIB!m`(Xd(3eBi|wky5hVw|#1xd&7Q8M=_o)Z!$3+q-EDfRvnv@HlJC3uFa-$2dBg?_FtV7!ps! z0s_Bh=!|U^ncza;fa%_5Ebj{n3eeGTDObQ&?eH2J8tfV?k3pz$u~ek2anCQ$g99sC zK5$P&Ur~IY{oaF{iB^psv$=w7wK0#KyKVtN0c^Dmw@Mww#UV5_Az(iL@@l@O1wu#s zSA(t1;^zDSA%Ee)p`oeGocf(3iwiP^>NPYfx-ry#e8TDR#Wz@HneR&vr7(aRA%CI< zs7ATz^K&h;WTqFp`V)YHF;O|Qhe!R|C@vI3t_vqZ5qMbPnW^CgCIifd!X-~R`+nU9 z2Srl+=ex?coGr>dMU51Y0NEHqA%89oA|nR>KDEOb5z;@$>oSBd7_O>`A1CWQ{%-ro z=)q^~|MB+KQBk&QzlumoC?Wz(loMzLTk(`ek>o#jkPQyUv%M8sp> zxZryf+BUK1W?wmWLI70{4}tiE1m*Gq<|c0he`v6EZgA{DPzPj2n}XL8e?3y8&GpC%L@bZQ;%dL86Zlk5#zyJBw$z&AglN>1ae<|1b()KI6 zEHx+`4Qg(L^YK?5(uXJPB+DP(%6c&HkUG@EE(tGZ=LPR#@$Qww4D^fiRZ|8a5-AEI zfCudQIW`V0I*3mj>b1Jg4ylqyEwCoyxyL9s4*a0aAz*qNV(GiJ>(vUInD_@b0(7R| z2&S#wJrF)%)N*)z%L2z>aURLN^t33>fbnn<0EFy{dUb;ey@}rt6i$=7VmxQ*G)Wn0 zUCgFl1~WRaGd_Qut%I?$Xc8#6FIBz8I%KLcH085&qq$yZkk%S%n=UB`7J_Zg9qpXtZ_2)< zm||(3o4@FgG?(H*pL=>RzH3kBx5fS|_QxI9F*1;#W(u;r_FSnau*>QKo7~?rs9$=X z`lDyOrciB{^mAVAcN>nSsp;uy7u15A>>#4m<9kGd29Q7rB!ceOnF<9G&A-(L4i>0z zTd(6Jdv|XA!k0&H<4nGOzmo~4 zU@IDP>-@r!K-Fdhnqr62l~^Sv#xo0EJxV4)vJ1>iiy6{~0GoVf@bFw5M0o2D&N+>B zX-AE50)yI=?i-KbrW_U-J=PWUAVguRMCR5g|E2*m*oe3HH^rU3?vCa-ay%z%S4E*y z;m@ILl`g`q;)J03XryoQBPzwb)hegml>>!481p{|#%3aO*ak^WY$-4tTF=rSrT35Y zhSVY364-lE^I&I1-x*L2V{V-Dfx91vnwHSbzBP*_uWx`xs{M_RbrA=Ay3}IN^s8)x z01;Hbc&UKH4~>7S_L&$JALk;>S9@JmREqcoim@uSBm;eg9da!OE-bZ6wRz&V(iKb$ zggWWA+WVA7mM&GOq;H*~%OK<7be(CIL5^iGC2t~ZH@u?SwjDIg*U0Fw*v-SIGr}J% z=yRqeGhTsfF9tE_cS12|3O74~Y86Ei)0pQrViX$0nec2!l>|oaii_e)wPw8?{FjRVpV%2% zvfD+8I~b8QRT~kbQ*o8hdb;NQ+ti0M$GoK(aomy~VR5#KO|2_e0A( z-71$xz)kUpSgxT+_Rp~~KWdMw*RU7vu4oY3r44p5Z@nud(eo5T4`Wfq2kmiN$|{M` zl=35DXElJs=5De3&2zNBDxAb6arlKOzi&-31~JL z@bHERgSt4_5r4{#&}kUhh?syk5J%YsAvnbU=@*muB0Qw9=r!o64QJTHPps{lgWJ&)-|5yE3J- z{m~ojxA}B=nV2z%GflFZna_*MY{NbqfymZ%BP66-U!4yT7RkGxD20Xv|GQYdRO%S( zNtVVjR^%|U(ETW=h-d4aYFpTxSbeoZ;!9%DcOgbeA`e7^od5ur611uk^dUqfV!Owg zMp~teFYfzyqN^bCl+vH+tJ~FVp5o(eCmLym3G1C4z4K~v8h?|0Rzw@Fg_dqRNFY!F zjW$IphN#Hx=(yE%v6*7|zQ&{8;!$l0NxL@6?n1Y}e>iWjL}3@4Pqg5Ube(L~)0(R3 zo}=%LlI6oG8!ffL{8gn}JV3`t-LPdp+vF26sCV8)bY6iY@+JLCX5&-?T2<~Ran%U6 zaM^6Scz*2M<2)M8?27vqr+^r+c}Bc#iK&z>s^|qhU?S`$xlgTxR%cHQ)c{Bs)7>lV z(ZG);MRZ}|(fJ2LZegQaH>w5Zy5hJBz7PBxXn@yASDo%PtgG{U1MiR9#TMldU#d*V4lKTRbB}Q;KD-Zu5ePGj!ehss|iKji2%G z@i%7Pey-wMauk8VuKS-CDcBo|+RYhj1KY06={!6!30ZDT4j;C{Eh8PVR%|+dRm>Tt?5LG(tPY#%BuH4X5J1#CLG$UNpID(zKx>lr&sGv+O!@ z+I~iye20Af@K8yZ=;me|$l)lKuqdBrQnl`WHf>jfNHk*M6;(pelredPevF{v`kbej zq<>^%A`2`Bxn?3{75CmenZiF)z{n!Pg-`e3l^0Z5-**SB)h)1mB7U3aJWbUxp2}c}hpF)w&Q^A9ug*CX~;p;0{MyW~2LOMu008 zJSh1byQ1)~Vy=OSR*1vrx|!QTGspP2zbs#Np4)nqM5pJ;>_&;6tlR%MDbl@jo5)LV zcX#Iv3yk66>L!j#WDr@96bE?Tz4{R&OM@D%oo=(Pu)0Eq7xi_xZBW;%2x@`x?Zh?j z8?;S2HXKdy>ic%fZaR(3$4~~sq?~s~KGmUyJ|Ej2)^5{$%lquetYriYxO}fTrGsv% z*?M*pa$a7)^p(g`qm5xMZc@E;2F=vDdl3nAfGp29)*(7ckT@o4moxcX(N?c7<#N`$S;yqwy`(#$3zC@1=3dK?B4Tu(2q7RgD z*xw!~5DK7T?^9ZHqYU-{B;5ka=zbiTe8J)VN{*4jLqi}Ax+Speg= z=Q;qdRPe4(e^_|K`i*KiTh1oN%{b%cO;FGZ6;UzeO&-^yn>*4l;Y%_jpGZwMWLPl% zE4=6x6g5zS1o_dpEPL}9nh%-`WPTe>m0w)m+*!byxD_Lazvvx4ji~Y$48sPeUeUox z&Tf=Iz>8Yp>2|goE8Iv*k=cFSQjYwkEttORQ0>&TDSH>ujTY;TVYBZ%)W)Gz@rma< zkUR2bdtzjpro2@Sje=ARkXvA4t=hj&&f;+>`va?VF|#&5lOmw zL*WcDyJ+G~xSZ4NuM~gd<51NRCgq+d8}|Ntm!KNRu(f7_b$_{C;A-(bn4f`B4LpBN zeM(9wVDVviJdbUzhWDyj7rF3#ZRWXzL~@N+22e9uJg9B>Fm|#Ba}u}VbIAgC}nvw!UKgEC@(@T^y;@git=MURO^dt z-*Mf5zpo=Ex;blwYLGT=z$#^S_eN0k3)oYA*JZDZsOxCov-qV|(kL5SeaY>%VIw=7 ziv8a5c07*@r1hfL$I-|ZF}C>C)hmT~q*sr*5%&Meo*Na#J?2PsXy5WZSiu&nxOUwc z`9ViHqmx&s4))N1Zh#l#4$iv9PD~=xUZnfnFsvFK7XKhh&L3$T-oAZEPb4C)7MSu$ z4h01>1vU>;yIPI`ddtLWoYMULYkX?g_V(y$E(=W-sfBzcgiQG`C$LdUQBmBqg1RpP zsD3F;?Pnbr58~^}j3ikl)=W9{OZY2ELJawtxVrTWwv0TGiY!Hqp4S@ZaEBLG-~@v6 z86)biQ)+=%QShk{qqzo;a7LLG?EQAMIa1Q)kFWF#Ud!hxwM4P0iJc@nI~JIdp(si0 zh=m1le0lk`dxj;5B-}<@{p@^+I$x~LHizbsFB{F_S!1H1SHN&;^a>{t+9zI1{TIzQ07E0-;<)W$XrlR7c%WWx-&&WqdbbV7ABCt_~OOi_) z2p&U2&V*jtE=i!g&v+mf--F(GBKqqs~PzTf`HJQu=^Sb2YuH7CQ=S@4s|sdm?J? z|8T0}mf1r2iwIE%)*F-8Npkzt-S*n4hF&{&yO8z9RF$#BOpl5yVk1RQW((i&2!kDN z;7R%u2{*@fwe36Vty_lPIyVcwYYXi*DRr7BFprU;L?y8zTSf0FS2GoKUGr7*`?J|4 z%ZX%-St_(NV!wyFIT!mO@kHqfq4DUa zZR-zY9^>ngz}6D#XD2MkE_aPd!@!QJ`^E(4g*7GWLW3kkSq)S^t08^6nTet_aN5yD zTD)l%L(r_bB=q@Bj4QRg@E1_^!!8rd7H8}BfU53B1;qW}^F-zThCTxK5 z6+Aq+*01ZS58|dd`Nh;8N4tz+diwdb*o`d6=Y(OwV~; z>L)`$tVl>U+^$=dg4?Nvbyy;z%;4$z&Flqb4jh+;*@9wm>ukTOi;xWQ(mMdB(4`b- z;yaxQe`QQGxQ&Shm};Nw+&ZY{u#Z4XYrZ|L(uXUxh>eelp^htGNfp3L-o-9?{H~i3 z?gccmz{6KKL`+5>8@=7j-uSh8O3Q9hZ{W~T7Oq7?4j+_pr)od@VSJ|k;l9EbVzT3= z;jk{RR~AZn!`yqCHxkvG^UM(MvjaEI{jY{GU9K~1l8x_rHtoYTn6vNU)(|tM}ffX;86LZ5^s`U6u`9}hz(&hnb^YXe~j6z0i`Z+#^ zZSZUSWZ@IMQcR;1$}N4SZcSZtp@o%-uil^vTHAIUNDs(3{u0+OURNz|`>No~)eg-* z8jDNdcZ+YqLv6D^U&*F9{G6WX3Rr~qrkpxZB7GXK=7J_IMwKD!WldW-J{+>bSiI z%qS+d{47SN;v}wPe73>ZeCGz8f_>dCpSpS(!Qgg^K_&9PT+v_NDEV!n7f;>vS~_k) zZyow2G-9WgbZ7kyqG{9^7t;;zDS$_r$m}uZ+!=W5bx7{<%+zv1iv1{c=y4a62z3#q z=~I5i<7#i8?w!$ROrU;!#6*KeB^+)(o7Sr}@^@IQig$8yGE?!b82C;$k?1+oMdWZn zG}zU(hl(jS0xe1txlBE-yo;{a?&zM9^1ZZgL$WJk_F{a^GZeadeR2mnpB-lXaBC0U z+GQROEm_&BFNPU_z-wGZ_3Yhwr-?|XM4Fl2p58)RyMet4Gz@2r$wV3&FE+5iq)3G~ zIy&gZ^$((^b|XaWU=y@V$h3h8>G6o|IXDds*497Detp(562*7@gPloU3-Pqt&?EsBx z&U1U`t%P_6*;IkkKJ|~nO6XVX5to6bw@bKwXaOsQ?r>04LJ=TnU#>^kT5t#fC9;9v z6eD0O#QLdM)uhu9{>c;uVFff5=jTiwH}>BL+Av!%xt3+>0q+x@PNz7OT-M(fx+$!s zlSbDXKmF)MAM{B9WIn{*Fz86#Ji@F(K;!k<@>yauO>c8t>er|Bh#m}c!<2LM?rn{} z1LI`US0yw1JvXbwtb9vz}(f5AGGcLZHjF>x=< z+pRXHw@cSuePs!kCr^SnsiKeG4ji1m-Tzf!SR;X9D51mEKT$>+bx-miL5*ptWqqal zK}{O<19dKOWM`k**k;)W(4c*Z#&<+fr#5!JPaYYgQH5*Q^5&E1^sy8sD(C`oWuzM? zj$u_!l8;F=F3s*s)9FIPHv{p>YOrBN_Z$Rja6+EHRNPlM?wwXVy&Ws+qHb$@fxVaK zsu)f5*~t5>iyv7&t~jv#7*i1A_M?1eKCE<(X6Ab|=8hJY{V*fokZtuaC+lc~?GKzC z^%#16XMPqxf}{4EXtx4AFnddJE*e$YZV8R5%rx`5Yf?n2m=<8)zL8-4odEC_hs#4o zUs;3kxicXVW8yfn zS_kvvZ&q;Z9~elSdl7gx&`g8S6O=rzT|HKOvdi$2RyG(uV%{7A8-5`=xF9;!dDv-BpL#`Y%*Q=kU0tfmN!v1*+a-ODrE6ErtIQd-$|+5V~W;r>uM5}x}~YRaaljnPmv zb9Ra5npkcVvy1L&AOjOa+!zX3g<5`%?ivF^+(TA+)jKxM76&V6ey~$pTZC6?-7&`iI-*Uc(yR{4#fKX>j-*~V_I2?sbBWKfROz5ROUx&KrD zj2U8;ehoQgaZg+xx@EUT5_8UGh$1f?ZpsEQoe9EXVLps72k<&B`a}bl2mOP>72fVX zJu<(YpEkVy>BSw^NhJ}K)AI6dNE_RM-a?b1kX7mflPVW}D#c+=DnrwWO}1gya-38E zh9nljc^_7M?5)bm&i3Oy)6}a=IE`(GUZ;fBkrk7PLPgz`Mc|mHV5+KguFT3Ph5&x5 zN(YtdVMk|x6RMpCw`tBNtkB4oPbR(tXDE6k=d#IX|5wVR@H>Mfm5*L0lwqypAK{I;0;|Nij z@Fdm;O5~_Xu3=M|@}cB(tE!!xyDR*Z-90~MR;sw0XP7GjCXazlkaZR+hOi8w*1bM} z0t^FkTe>8JJli@CGnMN{tXt90b2BT)=TDT(#=PVLt`PDIBwcA9cg(o&Ovj^BsX;!K z9qpbS9!!t(18@zUgT3*!#~h3^+N%*ofx>#TIspjsJ`?=Hz7T7p<5JB;2Rt+XS^ zV1rOg$7ul#DTSa<;7XFKA%Gh=x8QFRAIl!1X^`K9>Vq0>}$a8jnS=f(aPdrPJ*{#UOU z#?3Mur|)_pN2=e25i)Jilw@A;%={D@?4MCd?3W_DB&M={d&j26(!9L!Of>QC*=8sq zb^!$VXc#`p6gsNO-F^<+amlf1%^!OCQp-S8deM7J#N*;ejL+I(tC4w9rdM9OSf@p3 zp|fr}1JS&5Vu4#m7JT{)`iQEZLwoEV2Zi?8(71!*%Qf?Ay9forS0$<-Lo%#6)`inM z*o2tEU>DLM|B`umo}puZp_};_dp^&!7ILo|38!(Dlx}8&jR{-7#a^<@ZFZ2iAb2r* zVNm(4TAorh9@*u-J=ctB{IhH?=3;n%NgJUQ@8zz|d^=^j_x^pWrLss_bz&y7A?NL2 zJ$w9bvK-Y&bBoqRwccnLmg9~u0u?;*e#ML0`zJxsn6V)I^3bfRGmftlU}l=v_sAs( zx9Q{&Q|QNbkE7J0uW5V9X%?e}f?`oA?U9sVw{fv#k~mQj-)}uGq-UgCoy; z{IW4YN!^w`dr$@Z1n47=dJi`8 z?cll2wft84ygu(Gzqiq!TCCm|NJ#L0Mgy`N<~9hhMn`Q~*@lQI`IbKBFBAe=thf3* ze0}Bvwkzm{iJu%wjQsdQ0=X|7j-h0Y9S4MU-z&|zEwY%ErV>fXQ_=O+GJjJNx({DcDG~cg&b3 z)mb^8!j#T2GAUI5b}M)Z2xXfqY;l^R*x|Aa9ZY(~v*4(#)WbwzK6>j8lT6naf#lSW z8EZv6HmOCT<$~U0Ume;i2U1PkU!*Qn1z9GOvdn*4)=|ja~BvH>ADB^4%lvy z_9xcgjx}MYVsU8aQ?YM{8&cxDv^W%Q^gcHOI5WwxRQv2)qZ`Nft)YCC?U7)D(`EYT zzGjl8`cC%ZX~amrf!W}hUI_fG9SuKCubk%Tx~DBq<+PRJ(C!?-K3iwScA=PISzy-3 zCvVm}oVFAE1Fz0U^N<16G5j7rxzCuq^Gt|b$Nzv!j2*mO)OiO!*O6SF$X*N9xRYPA z{nD{XwEQ#Qt!|-%Ct{;jrE}xKm%75hbl6;OrrLt&(R7(SO~;-lzZ3~Y45BNH4rJ(i zLr&SUZ`U6jxf9aol1@aEbgQYjCu;cgSbq_@wc(;97I0d1@Z<#zeyY1YX&5_8Vr_C7 zdxN=5xE4d1C4rZ}S2Thy7TCl|1KRK75xD{zE7`Z(M*fq8evwrY&aG8`_~7U}%qh%OA#2W_2nqpx7fa%N{hMeTyR8JSa;l(VV&++Le$+tF z@bkHk=kvgE)uiSZ7z)DY+iO`6gVZcP-ufkjr9vc@Ze~ zp!;$A5-_pE*Q@DcS1|7#KWg;=W6^I3f)Sy^4s&e=)Rd?krCBFKF#Bb#ccT;UPe#|m zpIjU*mems5E#@EG&%<4Kiu(W**CUsR5!y zdzEz)e!h1HG9DDz0}`yv6EE%NW);yO_a0-$S{U(?Aw<}^wuvyJ%q+LGOI0Wn_KJ$oHa#-Hua0 zKw!P()v)HZ4)8Pp+RKo{b87kz^yLqN-fgEx-&gYG;93JJ_z5q;$ zudLYssZ~L$Dun<`*U;*4EPdO6Hg3mqscQ2^K$Bmvt4r0!&Y5IDJz@YecBikMU$Vvu zUaV2PTYU|VFUC0R%^zp^c0#D3RbF=FrG;Wo;rEbh(sVr>?POO=lnQTGsu!Jqv_8$n zJU<+JnJVb_RcaN38X+V16*q_cL)BzS#a-c%5p&u z+D5)9*Wp41F{cCJq**?{3#?z%cAq2THP7B<9zc6nS>>&a8p(O`5ntMxE;aCqPN3LB zmuY%=B{A7J%eQ)uyC6@qR2TgKtK}j2@>X^uHkd9J0VRvzJq2bdA=6>&g+)TKmm@A! zZfzMMbFa$gqIn??xvTvE>5DF17l-Wm!{1oYo-FB5Sw<(f5&N}Vjasc@zOz|vUrbE= z12Qeup7fui8FM=?2^?B3qF8w#MAru1VM3{rX|p`Jc6*ut@GMODdi?&OvCCsps_XT9 zkk(Jd`e+h@$Bw@QXqqgV?%Zz=@n%cn4yE7td6ki!@6wBvUv;OI>*YrY`3y8Po5G{0 z&~}faeKT6VTYS`tXAJrG&H$bO{o z?O6yBP34(jT;DDV`3_5;Q-9IZ&EFs)rQHQbh>e2vrQ^0E%;!K5>KGOlR(I9}6R`8~ zx92_^&Lokf+i_M35gog!z1sD@0jxKI?s+s8z?*Uk%&A;>P}Ycjulk<1T~#>0B%WYWK&m*d!IH)Dd$`U@ ziM*T~C)JsJPM=PxY2%jYSW{+P6xA$DeFBZ~eBhl3Q$HTuu8>qx9=pmTD}d5ddv=JE|-veG%t|B5c~37MkDshPAo_XI3VzjO~^Nsi}#kZniB ze5jeK+f90-`zqs10A!wqO1!U!+MHoi;3o2`mfr38!T?I~{E_ONYV&4jEY_J~+N%Mo z?*q*Xg~`K1zjQoP6r~}?N2wQg?P9R{6%2W2F$bT`3R37#)c2i@x5)AB=);xVnv>cM z)9k-7yP16odwSOdgLP;r9H*pj2^>95{|EI>OMHT%gq`o4C1_M)sp0{@&`Oi4GbtPS z)X5tjj@7L1Y-Y_=r}jD|Vm#BRW`bQ?;0F4!{;a1kJMG=(UBPBBJD(#+o>%;Z$H$l->IYzR+O-8#&jGRMu1*aoO>wbxsGF= zm`7}n7iQaKJEwwg;0dX7*@;vb-8y-5lLdwgNgJeo6Ve%NeV#9Y!*35^*0*~4HHr_s z&A1TB=CWg)z)p!m;HJ(v7_)N9cIL+xGJCIegpt6-@pBtW&u#xX)o`=;E{~PH|NWjB z4TjHTiCZA=??akduN|X>9m}he2vUpni_1g|Aw?(SWdpFwB-bC9Zu|_R&iy)DEuM3$ ztY>Xly5)YK-R7NQOY>e6l?nnX542J!E+_|T`4;yVg3_ih>-q057f^vUY`|o8?Ibwd zh_7^q)q7KXi*Zdot1andI%QLhUDaQ58Y zompaAKS72hI@5DVsonURHEjr>%4Te(4BaAds37}x1cxZJ#-Qvq^|g*ltG(n7K*gx= zu~Dxf5t0=rp|snJW+u(u*9z+u6TdVW5g%mw+?|}%0=NqwZG|=@0l6Eb=W;tWJ%N^R zmr#~cP?{G@Hm^IFV1Efb)RKJ^mS<7_@#x@@o#0O<=gmC${^UWe!GN!>JsKd0iPr(L zdU!eHwpcsy%TXeHwK0i$KYOoPKV(n0*|$|sER}Kc`fE5gjJwbRYA<@GllHN!5d}bZ zZLSNSEY~RpTvAiNy2MMlEf?Th3b1+J!^_plV?{2S=-~S?ZJF zaKZuQ%fBPymd5qUHndOr7^Xkw0JUK;%xZX(l$l!dkULHN5$ls)!WE@ z!J~35LwC)d1<&e(pDqbDZ|6`V*A*>iJ;jGFxrPOOrjR1AEBf)AkMu{YF?l?pme=dD zjN03uT`u4kZ8DEIt`yL^3OL4lvjxdVkj>S33qVN(>gDrY_Ow5V=iqKD+v(zwvNPY! z!fVLS_j@+M^v-3ACp*HNcMN(O0G(%WTLgqRD{&=QdJJQB^N*0CGIc)4#Z|Z(!bk8K zw~t7LTG4iPeYNgV@e-RMbFIx(&0eYz#r!3_e89(_BX!Lx4Sq<$)HUQhz#_;h_iDnb zL<*$i_jw{gA_(uUE}P)9ua8g{^-Bnjr1MMQf?W+#i5FCsCe)Ww-kQqJY&x^t32+y6 zqvyI$8GFs+ZmA#KFX}jKc{(K{HawFsr-Uh1O_9;91Seg$-iLBXI4}_D- zx3;@7YNHROXxlkGu{@w;md+LpMb;X{4Zx$w=8H!#@I_%#tPABm)?Ag8vrrm@i)Y63$irPskF&XK*b{m0B%wq!pkv)erT1Pjbhx&2aw3)l)yB7pJ4nFO~~zbtg`Noc>h7Rs)(g|tA*>>*WV(o^59 z7n%aa?7Xad^HIH~+B|VR|8PG$WN{I-t~PabMwK6=>gomxBUKT>u$?I`*TyVh95mWp@g?dtjAX5 z00*;n{?vFg&~$V5z7qc43D3LukE*D;ljEP3hl_UA9nDyA*5ruVa4YAT_C-{eSk@(( za!n=>c9U&;RSWie6lpywMt z1V;+rZ7ieWJ*%05@8;T(O|E-^ReHO>v(GZU z^0TI#bDPr!1w-HLk<<5FI#f4(kZ5YjXwtA;@n`7|w*vpmTO2Xl{2Gj%3d*phxMSPy`hs5?-g?lb%yc({=>g!KwEP6@^FE2`XKw`?<+w+ zn%(Jcr3v$YB1X56e<<`-{tedjJ|u#tZxtTm%+xz*DYh2#tS^6?M6La4x{&RTbkBPO^->&%U?RR}z0Rf#TDj~+X zI=k4MoM&^oK2xwIU$|nO!xH=0SSAvzFDLi8<$PRzyv9n6#i*_22fEh_l9XLv`?-1n zExOOKYJqa*OR`Ll-=?`jn*lLfm3NIHZ(n4WWhq1%4p}$jy(LTVRiuvIUIDc*W+L|% zn(t2hcHO_;#$<=R*sVsS{dADcm&ng%nlt2G74g8ZXFz=6c zd}DV#tP-=S8~Pe35^iR*DktFN(rznM(Pyub`9_09^`$i0sH)Sk=ce6qVa1$IjnYbU zmi_}J|J3liqByDIc;(t~sxJ})@#veG*wXWFwClUM|L;uaH=!ba$6N`Vk)&M4=f{)D ztb+Xq8oTAkisN!H%Ya{7`1v2>UU{xet4}H2{HI<2<7fQw822f))e4k5)pq(T|2CXI zJ^Npuoi>W2sn=3jG5#~@DJ(Y=_UG;VrvsL+O8fMV4LS%R?#HE+`=a+x%k}R|@;_tv zxrKq26_Uz|qU|rNME?=B{aqIP^;(tf}r(gfy&wkSX8fG8SYaVot zut`Iaa8sYay}vKJ_#yseRCxj%dj;o@!(K;cV-ntt?+t!J_}?x+26~z%k%sx}>)FO4 zPto{I`$3jj1F}`;=>%Ste8B?z^5KyFal}6>|)_)0x@HOZ7j{ z)~Uj;>;J`1_rBbr`!A{KO}h9S^O8c{LjTl{J>*~9YWeB^G2{QcssH|;pD;=2&j=pO zsdWgl%kMv|>2Ley7fSkTi9=g;Qy>4G7XBk4i>KqFIm%-43C?f#`cH3Z#c$9}_o6Qbkglp`<)*sp=Jkdmd)!%dj}NT+|09r>VN z%PN3mr?-gsk5l{m7cmnUnA7Vu%y7y7lEXrA(30cnDyP$f|8`UYY~t?~mBOpU{@X1M zC8n)le9BJG@m(a;N`z zt&LWpcI9{3qgblnDZsG_4^4xLXz`Q3cd_2`8#kZIygz}84W#?PbLHo%pXIq%etNr5 zYXM@t@eNWhRX5b-Ep^y?qA2@ibcxeprQYcoi_U7X#@Efr-TvJrl67dH;sdG;p$9e7Y`QrW zE_R7cMEPlVv$N-sR`4vmhcVXiFJuB{d2-%&h9WpHq25X2v_cqr;L?#{^VjuZ&yke~ zpMtO_Vw1F%X@i=USZQc$Pmc|@t)f$98g}mqKW+7pcJx2U<2B}$Q6=q5*5B1LExq5A z4axd)X4iO~nHq^UNyFx)ftP6)D20JV078%6q%AE*X^WQslVeQ zq}>Y0ww*sud?J#(iZ#tYXWbEwbuOc>`+f*sEgFk1i<(1n7imqjm7$!&OHd|iO+I@V z1pPbXjIK0FLU%L}c3m`_z&_}BgQ1;3c^5>qQ`m2}`X2gRe)(tEt%Ov;EfXPZGcPS5 z%18h5Kt9f-Hww1DCjO03ZDT^l{CDYwV}fSA?^mm%+<)gJzhlzSD7m4-)gg+tCEfg} zv!XrxZyDdX6qLi!#!gc8vQ6Xus^JcXW-2R}Umcreu-liKZxk^1n+JRad3yQNs^#W9 z%?=hcQ!ljQ`WZhlF));NwaTpcKX82-8|fS|^PoG|cp(|x;I-2HY?`XdY>u$GJifg& zHc(N|bZ~j`5CFK_PAuMm#~RaLCHXm3kiduWM=o{S~xgcdCqX)B3z)bH7p~(#!j58*?ph*OjL5B}g;A>}j72 zD}Qd0{#dCWnC4~}qG|7?Npkd5sAe*iqrDR1%q=;x#ptEzM$+L?A;LS8FHlf%^h0_wq8YEa>Wp7)6oD}7&z-W;ukYdIZISLSk$=DU@?iY>ifTY zVt?tjj%4A9HSymChpC!)fPp8#ihgWN1)yCJy#=H?O?OG5YQF4mky@IyTP@Zcei^Rt zS`B3?pU=y-&+dX#yq?X%)GSnoR@>3yW7`-`9@TQEM^Pu^+2&Sfy7JdkY%iKp|7ptQ zYkn$kPt^rRMg5(-90l=HKL+E5TG7)0E8o-|&9aG=8@?Elcw8kLV(JN;7Ji{s=EAZA zZdD8ZY(v7E^!{7+SEoVKrdLv26O#q1Dn;t7i7SA`_}n4Kf$s1}Ujjm+e}Yo#Wg)5z zt;I>wxBP7J&daqlo4OMdR_{*uTe^6D(pjw3l});wQ_`sl8ytkJn{oY}?$P#(?x&9A zSVmLqf3DZE!8)EaVm3Dsc!{^#B*QpHM?VA<$cH1s`^&Z?H5nZRxf!^{7fuvfrz&XID&EKl zJ2_#S+5A2r44e`OuRQOe&Qm=SU_3nw+-&bgu}-u5TM;^_^2_b|LXj&Z6L8vk$Ce6) zKJW=c*bI{YW`hS7caRqn>_KWvTW)R?1k5@6z0Y9}$VaQ?f3n>i$8!AQxd){22?yVS zYgM_c&&o_AsGQ`$J0Ev{XkC;ith5l`j{o{q5HpTYO6v73zkS^8V}eBiADCW&kw~M#cyVlDQLB`+;I!_3qO>lE%u1r#N@1-HlvbxtYtb` zF@-jDvu9pm;F#)(qkJJT6=U{B`2aS7E=>F_X-Jb@%08r7t3UAt6Z#Mi-4VQE1c!{@ z<*MQ#o9Z+0;aJPEvuOE+aFNE)Y&+j+mQVifV>Fc6=F*3!QlB4+YAF7^{CKuYo_v6{ z*%6FO$v1nie5y!2K8sP_rhq}r2&_Ev#q$e?<1;gmck_vqPV#XXZk{Zj`*)>Jir>?x zs$ABv8Gml_T9JsU>Vg}l6+ohphyYZ%o;dHL-_{lFk0_ymUs0X2g&O$HdT6fRO0auC zMT%&CiH?oM8*bIrU$|-)$a1NL1mR7WaSa`-lBIzSJwZ#IH`}8sio0MuO_AkOA2`v^ zO!`7p-`9A$9E`(=Ae_`5j1aY`fq8;vv#pg$@mgh;8ySVK|P@|4A~UyouwXO>9>)x z6mLOR_k{!8M$KKoNc;(Fd7HPX)Vxu^K<*foD`bGl|L%A0_%5EIligHhZRc-0S1B)Q z(4hW2k%O{EgN3Cxr>>8GVzVT#$_2tva&DJ~64(LMMKAKP;G1-6 z)HfkhQ2qC;Zuxa|_E&6RBv7W2(`@~4&f%=goWd`Z%+WudCqUXh!D&Mk1sFJ3Ti+C@ zI8vj}NTL%b>6{d*sz@TcX+2*e1~QV)-rrBvfJ@?1eV(yO_NCJ&}#4qh>ZLJ zE?{5sxiAY(+ON6!R$TVQYyg;0XQw;xRxSVMDd~&(;Dgy#J!^2$&hS=9Sc_+H`txuM zi-*Kp4(%nTEQ3ej3w00Y`Q!UnE<<*VYD0Z@@7R1ATHoN4OQDd@@e1he+FExiWavaq zrORWR*8eUgX^FMPtNS0m^h2L$Y(fLY?r3q!<3D6Z!@r~SW@{{2UDt{sp13J>KM@RK zmQ_a|6tp;l*&8i8GCsZL@$@}XOlIX< z5LK#?d^fPz3SaNC;>wXqxg3YC%G)YO8gz1?$%!`PZr)HT!$mT8q8p<^|B47mw0VMd zxH6kP{;Ua*U`TfPb6lBwrRX6GXzKc?teAtwCW%M<0(jeBuND0M;QE5MKsph5MxzA* z*1PVGz80*pd9g4e_O3|1Y`-*pr^dW(2jccg-{auo(84>9QibjvrqX89rtBR791L=t z!K;m;SVDBa0K<@wWZ2%+qSSo>#h&EQmXg$me>djE4RN2y%JEtaN6*=^55F2hMarwI z$8k}f+C=ny9i27Jgl+cLIPhRC%si2l=OBsT8oPJ5)@REeW;Ucd=2K(6$n3fiwlo~W zlDyNSmzC`^cU7-bxb$txc^tL8)ZkI<4WE#M*a=$J#znBu9Sn<3D4n6Li7F0dk-Uls zOZC^9hr-PGsQDM=NJJuTI)t8{LMsLWk0|sEcInKk z{bDO+g`#%b!Zk&+bl+v_dAwO&pMGrGDSXzo>b&`gft`JLYbgZ+A)8w->FCo3r`q9q zNz&S2Bo}UOv4PC&vWcxZ&;fb8w@Zv76cI$3fSZyBU;KD-S3jI>O=V2|M&dAO@jJ>j z3NU6KyXN{8LClT~Nw_;1ObIkI?Pk2IZ$t91+T6~6ACmakvR1k+N6%Llgui|v%e67O zLVsF|+s{I-C$S4II-H&`yIwPrzPHU{CLixYhH5k`7KShN9k#eVZL>DpnJCR3Dp)fZ z=0>YXql}M`Rn=y76`0lBZJj0t6>6Aywt6(%Q{Xe|N})&&oi|0_XjA>~D!myuLn+%P zMc?Iy51x}(&vUuMBeil>y08E@!Fy$2I27{h2vstr?pSkI^aurNphR2Eu1g>Q5wxv+ z%P;j2vnH$SRZGde%&!x6?}0e$dE!aqxw-F-3{QLXj=tUdcr?JHWqAK(@#q(NSnD8K$c#Jy)!6x-JKs~`xHRFZ%sm7J6uB#Gpt@+s7Quxn$+YBO>S}n4b5Ag=bSV4+1ve$GwyxIy<_m90##kB)~u?v z=KRm!Y^wAX$WVF{Mo1g~MJ&lIURrVKM@X(!1D@Z6NDqfvZsiW}a!tR63>+T zZU{RI&{34Lz-ylm%qfKxp7oF>v;^@H7brz<4-OM6r|`$a&`0mwH^;u;((mpEhE~pD z`OX5C7&mXNHq_Z!OsNhyJk=XI^Rn>(DMGFK8x{h&Nc**;+*;ff3UUzz6$t@sYXb=h zN6qdk4fD89lWZ}T#S(>;Yt1f!Sn5cPtN_Jx=eH!{_dYClECJvI^W{~R!%+y^U{pp= zUhXFRfzJWm=4@54YGtaJ*?PcflXv}2j3Yda3E%)#c7AubJW{0?>&P&0cGON;dL#AX z9j_B8f2_<S8dQ<(^rFM-CVDJzkMdHP^bdkm$#j>9fx zcTC86KZ^aFk*^Z5i)555QgdE>j6no!w00Ph>h| zhi1CPvw|RT{A%!7pt|2vhvqrib61O9QTUvb6VH2{tQYN51SkFiR(q}PJ>yrK%?ymp zo>kteTc{TcF>$P#v5JE{1t&sQc5yMR;Hxr7Cgpg^K#5bUP2@>ko7EPqgza&t(WAJ* z1@#Md=nd1W6ysxYxXj7 zZllNsVi!6H?$jufsoixQ?Dhs?gNttz-^?nT< zsly@_#uFdi8h_tgBFTjrM(7zPU#!-Y&3V$?JPEOemd8y}4lw~W?)=;|a+|?%y zgv2;>QLLHNHDw|o525x8zw$IR^p=N#Tc`5K#H~$_y-6`cINWpLdZQfi=AF@HaM_8d zZ;vRlkFDYwHrJryciM&FeSB~o1A!05Z;cn9m!>$pGvcK7&4X~KB^@sDj@}gg$0!#y z4?`X|`XU-2c{7g9ue-%hKDW#XS><8RxAB;MRZ2b#BG?e|+Rq%kI3sR|R8dNMroKn* z*>bs^0Xt`h5nA}?bLyjOAg&H5Od@esH%p~Be#QsVGy9MfM~`51ZMEY{YUiBi>^gRK zsa~7RFHNngVOfRL)^lz&ZW0n|Ut}*_UT4jODqGo$7nl#|0s98}3wkuWZ%#g2teMt_ zh?K$Ipx-1n)BE&fMbK7(f>Uh)K0C4*UTW?eqE1jaQn8|)^BTF)$qgFI+hYavr*s1s zCtJEshD8}d|F;MMI2hnoBci$l)9W2Ak(h> z^Szk|a{5M#ZCGO5Z+WvwMe&IUS$x_v1mD5vu-><1O*0i&q7bJe02l zm&yc`qC6xK<>sGo9o=XBw0iMTN^N_#3-I#xg$1weUH3p_(SQh}Std48h@ob?82SAM z@$<8>8i+{Bq_(Iy!B-!61necIck0)1tEd|43Y_<>mAp$>LSMh~Tr+;)8h>RQ>&S!$ zYm467_rVv{N)YzU(@$6+C+S5nNud5TO8BQMbMcsX*opH?^RjKjk(5ZOSkg0P_g?HF z_L$dw_H8x0QePq)P%tnQP?iaW?`|6+MVT*#{0ppQ-4Hj)QSOWL&b#8dVSS8?v4Qh` zC4J>bIXqM&+X4##@QD(GqOT&mO0gXJ-JnyUBXk88c(LQ{m2#r2MDQ)%w?A3J;gFin z!c9N=m@b8IOW#9m@KngUw&nKq)ub1d#%Kjn`mn2jcA&wSBP!4^ux!pR47YuBW$S2w z1yGCk6UadcPru~*n>0Y*;&J?%sZ=DYSQoq`{qS|UOFhik^_?xRoD8P8LIS5niA_EU z2cbeX3Vg1d^``h8xFk#M36z)Bte*>Dj?;i#}+oV*KWxe)VOjt(5~_l&5y$@KkndyJ?aEvIJN(~O=w z-ok@Sp*BZ#N9T~$VpR9}9o<1OW!i9x+(0IqR}t8K8@_?FWdbu-n>Cey?B4;{l<9}= zv(G@LU|-uvB&qZI##(lc9Bu?73+4my#K?!9$aIT=n zN^Sr|z1xcYW~^LuR3(r8&E zY5`EbKj{oTvs4`$B+}#EumsG1XkTw_*RL%3K&?)Jl;ZiNT1wI~(qmhxAVBmS-81&B zbIYIGFliw`&T)6!w)65SQ9Xj}QZECHfq6kyqBn0o|xxZsw7{IbSeT!*&Q}3C*#@XRg~}=J?n{_e1NKYnZxNQ%BlK3OZqN(2!Ac1| zUXcjGane%j{4Xtgs%_%DPZx72XcgLoJ!ZFjXeh^uP~eZgeREX{KWB&;n-K}f1#k6c zW9N2#sfwXtdh!_)Hc!*{DjStweKM>iCS7^VQ`*DQ4r6dDUDH`apNoMn292%|^aTOu z)oVNc?gwuJ#3*7?Po}&h*mTv>uR0EZx}^yJ^QBzekz5P5mH`jO9Bn^>1=Fw9ZtQd2 zsLvzp`WI;Dd8Z5H$RpyPWa^Lj9_;57(JH`b$n^${1C*&;OQQN-@=QO+^k@`edix4l zcJnFNIYIbyI`LrX_ZZlMd$?8=0s=Gk`A(RTe{`WVN`HFXwqneC!x=niC#OmRua79sIlbe$u&vrz2>hls9yu4hPBn=ZSF!p6n)eYITv>6;j~TFG z0#d(KFuD{;8W3$uIo-{Y&Xf{gMWUCgv;#(s~CRTZijQb4#n-F$>5_OONVN>Y>AEfLhi<}&L06sUz8=H!ZZ@*D#tc;EB zNb0Ga8o8druZuHe5h*w5IVee%2#Q^{gdLpMAD?K38M*IG+3;9R-MA;J?SH*-*Ff*M zO*5w%@yZD#&De1XnDPZQb__WlaMTbQGu5Y?Fb6wa1FHCThF#q9-E8Mw$vCo~Gy%j- z*&FETq#N8$n+pPb1D`oZZwLe5Irz%5Lch0R%SNvKLRDw`78f;OY1_$2&!`pQJ6XVn3a@PI1MV)uEOOy zbZnRJ2%0#+soYQkm}lM$J>K1YV!6qhNhkSJOBBENE7tB@>;!6g`PjYzncLJxtOb!t zZSm`1Eof7X{^?)UaQ|>(p)msYRKMCj+Z?q(!SML6Vc%CxN>swv2ml&ZCwA+>gvj3c zRwYgw*ACztUVTX$WAUw{Rt#=W^<>4o0D96BSwLvEJm%kvpEEpr6tO;}U*AZ5u0riU zo+a&Gh;f~rgxjv)It+U14NQaN9^#EvUtxZ~T8vQ=ml)kXn z;@h`L7Q7OGC$gSj{d+(RpKLg>NzUk(tA$ZDAQY75KG5!OV@!8Sgb!6nmh2Sw{nS#G z^nlORy!ji!P~@x5ikP$g=*Rp|r5e)C&?LkUbmYIr#Q2|z`cK%mYy(Q>rkhwG$tdF) z&pl@zuZ_E`9TkRl7_R90I*)~E`f{m7Yay@wD1Xrf^8oMlkn738yFO*^XN=Tad2d4Q zfZC1}Ilu^yXpz*fH3r6fH9Z3maXU=I;~L2?Sq{eb@7{EaUpUR!Aa;9UnK(oI+0ux6 zL!tQtcSu>y6E-U{fHY?n+Ofq@k_C7hHdmLnD($gXe4kQ&+Cj7G(BaCh9czhv&QZ8u z59m7&!RAdqswlFdv(c@cc#!a9#m=l^GDD8{c5Nx!yuV#Nzr)c)*~~1YV)ml+ghn8> z;3S>eF%);ycPmE7ZH`|oGo+?;nyN>i`&?G0@CJim?h;7Ngf zo6lp+8RcTr{)i2|Z1ig)P;vo8^=5|7^G%x=UaeBhSa%+j>orw7gc38a3>DY-b=^5% z>dDyg-Dsf=c&b|-FQgpLGgvcZgB(G0Gz|EHI=(RtPnA71Up64#hZ_UU-XZLOcW~x- z4_WK98%()t9;Y9~1D5NJ?Bd1veyg6b9KW7*b#17`J!V}~rt!oI?HacuTHTX|%;^1S zc7Zt3fDr4r6<6Ho`Hd#*uAsv$vC9R*B3lf*=5clg2D}iov72vXuH29I&T6i{1}Q{s zkcdn6ya}0MZd!ao#DjP{d=+>D@MUi4Rqq+V!waD6-XWd2H z*IOC)WMJFQ3KVgVLZt9k*_~x>dddk6_5K^A@lg`yt?eZO@z_WWqoGC^?(&rVzvgIw zev|+S@;b=zf9c-W>GJgVa*vj z;1iK$&QmU#;2)Ki@u+d*@-DkXmUX`J4#!4nKx7!n5Mqx^^>{dJpr+9F>m^x{}8Z6sCcRs}zj#ihoix3>%#19#>nU8ut7$Kjy}c(Jf1CA8uCM$4NZ}Xw5YPC|0L6QrAr)eu z5$%x#c!xA@61<@Z=v%}OwsY@|+#zw|C%N8D0~=kl6He1#AL2oh*g4xF7*?p**x0w7 zH>mjr+?oxnLSJl-*T^p^B2CvEbL;nC_>dj<^4I3W(LCu6O(EG`Eee{ssdojJ`Wg8~xTtj+C!^W$C@1HEapx=_6;se-H z_?`G?x_fhpJ6TUQJxnWyMmWTs7bU*ADQiR7d;8loM)A2CS0DtNpd46VN|h|z6DI09 z-OnSMVnbvb{(h!k_73|B+;&B$hwwdkEw*?|oJ}En{K3jv^4!f~)y)-yTidV9%_`cv zuUeM+dT63gccm()(oq;hh3_W+rK1Q)SRHI+|!W2Y4#tu&r1nk+=O-J~*j z(p+f(0;ANP)hF@tOj*yP%RQSHDa&|ryIS^6aa%gR0)gl~@a+^FvRvZQfB+quvx?fw zVb|#ozcE1|VnwC{L}mh}>y3rA!(+NF!V5%V-uuh0LViAW-9fmQsLWtdYVg?in%LNc zPBxxLij)Qai?p{*`*S?|J3gh!;w>9N zU*Z2BxEO=46z4&4&md0JdywnoFxSr#9$VvOW*i>9X#m+BOwepSlV3L`5R{!2&#=HA z2Yk@;sqV8)p6WIwTw;m@@2c0NSm(#=n49C)LoOQ)f=jT8cAPNn+KrmWjI;?-N3uJ= zZCNfSu1F_^FgH7_R9 za~Q=nX7laf?uj0TDWNy}{rsw#V8@HbVM0w;)qMXM$NiV_m_Ld#&$e7=*oj7JImA$h zsfpNmQj4)F3Lto-#P4Yke?S!WJ>aojb%th1rn;Vsm)E7~gIhr)!cv*mR*S$0TDZi% z2kLe$uV}GXj`Q?jIOj_^VfZo$L2c93o^Pt|=15b{5IZq7HBhBcP2}f^*UDa#xJh^L z^%c6s{A6Y{f{MSE0_Qk0ISU?aQ`Grk9o<`em?yZhvVUW=L3 z!ZwF3h(<(F`W1FR(Llgq5v4Y_hgW)22Bbk(rj?CPa6O6K_?S~cK-A$vX{wdsDhlt2 z+|MQ$;T~*h#a}m*HkJF)e;nR@oK&;xo@xA@yYN0G$hm0(<#WV7>mq2lvt5k+G;Z`v~W2yGrr#*5>6*?G+$#NRH- zkv84XPUZ$}j4kdhq`feL;9!W4&XMFg<1G*eDm=&a9U2v`!Y1k%!zVsTF)WbetFs-i9=%Y+bTabU^*FcfgK=9= z%0W#{Ua(BlyJ>Bog3f}x^JChMutaAgUFHI6`|>lB2x^ax^Qp=`J%v2Fm2Bpl%dA0I z1o`K#Q0?rrVh7Uxs4Osf5{ht(1A17xe`UBbF6smmY2bkxd7H z0NGz&6#mVIDRauwojD8eKRZLN-WmC?!bv+CkAU!}OMw%GXTq;J71*w_&%twU_Xyva z&4;lzro|T_b~rO#x2Hxh`QX{Qt4PI^LMl7UG(|;czjf2W#LQY6Zp`Zb(qoWO7`N_K z$93OZ#n1tLgi7Ur>rn!sX@PVw7B(R@Comy^({Mg}1_c=jh!>Qp4o6td3%S2xe&P?_ z9A=shAh-oJNrOI?o%Y}0IRK+*qSCs%SppsAENgl;c%~>GZ3TtV#sPrV8TfV@R3)j zB#s?9%cLg|J5nVjl3`0ZJY1EA;Lf;{PC*Uo#bu=gxM|rz9RDC(ETpj05Q*~7U#v~E z<-!iS?JDZZMj$`45+Y7<1r?u8y*Qrtm|nAKPaE5YWh?vIj2u49cw6&J{i7CF{4oIJ zi>X7-ZeX5peYCERiCuVsxYigB4>%rTY?-T>i1JX7}nn1RpuMD3Z!AeF6h)LZGETyC0J)a$R;sNfb+#kx#Kz%SClrXfLvOfPyzobGoNZ zlF?G3eYq?))aPKa7yfPN%EpsbOuU zl-@pq`>m#@W1Ey3)J=o6`8z9Y;z>Au#q=($(i!}f@9GbQD(~EV0qXi_JZ}|)Ei5R# za1Dg(;t1h}bbvrf;5&}lPVxP&@PQ*$u_a43C_c&minEAC);4f}LGv()ZN66rk@}9+ z>l1gpa;AP(VK%^d6^3J>152VL;=`T@RPDRH)9m;>`1=N233%J$@TRtA>r7i=2r z!T+II#BphZ2_m6goyzrmqDC@ZQyCXx?g&xGby|XQD9ENVZk~2pjQWkjwiVo{zmQlsqS0#mtUwj5z%on*WxW!-5x}Vx&JE#fMNs#Q6k&DwivHx}wnN|c( z0aEU3PWB`*lmvHiEBmdWePY3Wpl*CX-~kAJ2`hOWp!1J?mDZEPXBU${RShXQE9-?q z0R3dlS_(YR;qDI&%N~4Fa#QV)Z^@M{Pk4WqazxjGTYGmji#~8F10;|84_W=GI&zry zJc4WVluRHEs=}gO|9R+s&XHz`M!XPDfl!Hk!EomnaZ{0_2WR%^E*83!Jyi! zg&d**5vSHILY|d586*;@>L3@>9nl&tl{`V0y&1!lWRk@;GLC?u9_h9&@<0c%gFX>v zy&80XYQv(@Xp+gwE=8A(xvjIJCHUKAOYNx1FzO+=n&v_vO;h>*XEZ?+Uk67~4>+zTH^mBoM5bQ~7nFkyfmjUDMBO*zm?z*p!3?|g-m25H~7%js`iU=lxr>^~rl9;LT z888#nC?OIej+Wc&5aF4!zK90NLJ9 z%B;us#Xi@^n$`-7813L_%`5I}&ePI6ZaVB9u<0D#^nki{CB8ll&@x6?b^PDrSFrzo z&9B%aUI~l`KiLu}rBpWib5e~2-2etKOh{gHa1SPB(=xYfNu6fya!SlF5>*ci>Mgpe z$!NWIwi+YENc8~`SVk@A4D`hZXBNsRZflc8l~!jPGslLfEGi%mY&w+I(l^(zr zLPkzCfJBI4Ecdg5pI09lMSi+`jEJ~LjlnpU-5IwtT{m+}l;r8nhte;363n##XiM8W zEWD}6H$w{1FzF1_8P6SF3O%(9K1ycwYV&SgE#4WWY6@G$uw}gC*3rzov=&hFl%@ie z;t=bS@$qB}a_5<(N?2J?^X+1Ihhe3+=-#|PYNu(##AQP@p&qrFQKmf?iA zzGgjO>Uaj>=1g3z;zX8cw~Xy0Wz0BC3xHO^l?iK!A` z93a7yCvu0u7h_w%K1!1*l<<58Unn}U(O6AQt-7JcU{XOuPPo>IYrNz(*!(MAn0dmV z#HFT;`)ku-7E8?nFKjiBSm$beKDc(Od7nR6&+pQYO0~^v)vx#f=qh7%;bEWiu zD~iB*^a>E#eq^JtYR}4em@Bj2^-o;IMohJsmqYZwh!xz$a6|1MxrtmZZ>;YlT=V~Q zG8Nh&{sUOwNCYAzw$Ac=-TP~0iA6lmcwxR}3Divb4KNS+JB&aS6EKKq!CCtT*ngCK z3}Yy-y@n}Ismxrn$BQWrk3T;#`}dgd8>(IKc^fctbwI7WE0anIuUB_uzhw1%`l&{D zU)2^e{}M_IWYGL6rR&!!kmz5emKT*wX4@78l41DI41u6gl}yPHv61HPOal?8xdxiY zYX6{3%(tliP1db9VhIIkHLK2fK1l#lFF&s0bvOOR z7=T&+YG9DXK)ifm5TAa7W1Oh(>FRaNI{u%Uu2S?DY(;Jc9UPFW{#n;$abE1k0;p-Wvj=s~~83tkD+UsORdHLuBBOm!>eh1cH63@m)!Iq96A$W=* zcSxVGvMKM2xjQP52@Xv$v zyRUxrjH_7^xEjy^{ez5xY0sOPuN-l21VE**+&AQ2Y=7)RAH)~!r76VppZ)rKwF2Pq z`tTOJ+r7vw;Yzp0A^ypZF1tRlc7JpZ%3>x+8B}tIp;!T!I{+@fsv*~$n?eO<^p)%G zty`%)zq{Y%cYeY?B=~DpNd_&Odej->x2p{bF0hMzSS|AKNhewpG8e(#bndNi-&nC@DjKXT-nR z_W!6g00iQHc_;k!vH<-z=?Cy$=u+z(0EMwXQt0Xmb>p$2`fpqH0Pm%Fck1i$IQKjzZsaJjYriv{p6TcpeQ_4QHZBpG`7 z$AA6T?%!n3(I*@!Nf+YZKBd16RY?Fwaf6xtFT{<%>+)Za znA06)lB=x$`ZuBsgEn>?AAo0e=UX8B6&eQif&wx1|7|b72VfM;+ z@WU{Xf3o~bdgR~Sv(>U2L44lZL(so{_55ka;YZ+r^VJtnrT@jC{{!mLN(vAkoZ5sa z|7r!l>lYw?a}PKm!+<&Y2$6gpY~&hg1Kt`mLPEt?bSho8DeJ)0mexysF|F#C{J(89P*+&#;kvZw5boB?H z=lC9LpZ%0brHsIb%J)z1j00tV{`@D=%oIg$C~4v863rBf#Sh8okV7)zV*as@|C?nw zZwv}Gos~rsRTY(~+`@HJIk|py>F~erfyY69jw)kqxkTQ=R&tL=`9~x`zqxyIRJXWy z0ymqU&u*^on)r|$CO)5??FC2fE&;EizqI9lwn$7rTHG;_6;(J_n|r=jZRT<4H5@;H zTw53|gxi$VY!LkBICE|c3N4)#cJ>K#PnUcqQ&pBTAl7$upm3m$+R=R?{oI%Fr6?$N z2pT>4RmF!$8v}Dw*Zj#EL9Y}TTousy_|c<{kp1Sa_;*J9vxIlDZxhje{n8-dz21LP zJVyMIJ>fVqj@n zX&s8F3UP%(%G}_;9(4of32_iUTdAp$m{B^3*RIUx#`ShV6^iK4`$x|MIb#`{zrCT| zQ@6#n2MW8&GpSxF646r7bdMEj#<0e+m28_{wwS7BsI_p;Z7M8kPFDvIXqFkslL`8- zvyc1KMbBRQUemA|6q;O;GDKbUCA!r5%=skmPZb=4-!|OuO*`&eTDmt@@75r=qI41e z>hW(IX36ksa5Q9|H6f)ntw!(VHyfw$=N=(gDaIItzOvC|QpuKoZ%8K6pFStuZ8=0a6G*mG=!`&LC6G;c`BIhQ35j&+{d|2=Fg7tO zs9x+)i}|}(O_U36Z=n#h8fIf{#BXuGXQ8mvFL zOM3O;UGTMRLvTFKGv)WXI0`05g2(JwSQYmlrKt8o8br>|@SoiF4Hhx0!Q#;|FO8VO z=YPugkgW2|%lB(qqpoFxQXhqm;1TnxORI7vX$sv^GHc$CBRIrnG0HT#a6MG~5|zzMDBQQ){ct=x`FJWTm-~nfVEs9)$cnYU^`4nV4>N-TPc8 zt^S0T%aMAaA!P!+Pwk+y-*zbyxUAFau+ZiagPyO7L!UXYI2iC|oR(fiU_jEz9Ooj+ z9D4L|?@Q8A6XP_4r2Pu0paq6AYC3Xq)e+_gu^*3JS}bd==8DbjFiEWpFi`xZ`Djf= zD2jt}c$6uWylZsDdK_`GqZ-OI)$8+b6Jxta!vy_}!Z9w(&ros`>9~+xgn2P?a?NQC z6wSH!cvO_QLZ5JlRk3dqg=1kXdo@i>}0 z`sfN#(c}40vFbI-+qZpl?l-(c46l{I{_(-vfBJJd<2AjD2@4mVWhp`Qi?Nv5Ag6Av za$UBR&Ea~2Iy>rZ#GvG5jOg0Y0rxJr&DVX^`qHWXiKp?X-W8O^IbdWu5lZ`;FYAq< zRi@$Q4@@4+>&o+-x_Ks+lab+M98i0*c!1&0G23WWQ{XBl^d7Hhr*EN;cmBoMXeIA_ zXD-61_sW;IDo~&%o6^w%wq?B8gPZe_{8&ThaLqg%sBh?o-nf@6V)-((iaE18f&=HR zME`xkMsHDqV(k!6xj}q2fmP;&&d+l_Sh_|%h`M;TGTQxi+wuE;kgI&ri@wo& ze!Hx5PaivuXOzqYCFB-{uIQcm$29sC+13@ljI-6qa>QJ+Wo{7jeTQP7e*h~W9zvgq z<}94u!h0lDP3)C)l)RHBg-I86BS=vjyREiRX5m&#STl*B4s9Gg(#+VjH>$JdIWws5 zXHdh=kB`^vA*nQuGV(}TF>Ya%K}pw^yk)VumcWc()fro0Wr|GanB@q&`RCrbcm@8q z2}im)^o!(kVE0eRRC-r>YQ4AlmsE#>^!V*w0Q~Eip^cT9dRs|2*fN3}wj#|FCNsJN($k`MYur^6|pz5VwwI3F>h|5=_4`Dca zG<#!Z>axY!1@%)d(zxRSum<^KQMECOL&5h(cEfL*KXG$5`*48d5}Y>=NiVkdO*ik9 zsFWqw+V1)YJMXI|naw7?j(yy+ltuob`PmcLPMjHm6fGYBjd3Jt*g-umkiRb z=y!9wTxEGv^(DNrT_azEWoxqB;i2QbAF^=poUipvWSaZ#g@<>$zh7&SX88J8Wk8!C z{2C$^ws{!GrqOPo%lf)B(UCWFt|Me}>ql3(Mzgs*t9o;6d^uNwxUrbt@zH%@U-WZQ zR-LGM>a+TLcJ+z1j-4{iu6$9?XGMGGh9Ur6m@-E)|2>#u>F{pV;{MDQU+wkVAPP5| zx$36M$}yRi^jg9X)cTDZ1E#;5IgDTg`IS!5xReZ(&BUzwB~tdbRhkicEjx$AjUpScXcUJ@#cRQNq2Z=bJ0u;eA}j zlGCkTVjLMlhTRCgx_6YG+sfzR39&up&mgmt$;vBx{=Ea@Z(q=g#hzbJAGQp-*~18% z1C~;?WMq~xe|@Fw>GmN({>O43uCpJFR>YA~g{Ii+Dr%L>T!uxR;*gZ+=%P;#Jp$|z zV6Q+P)t!aMx4(6acd=?jql}ua^45}ne%_f_Q&huAX=}f2AjpVq!X57oSoP<*7vpqM zbT{iY+z|7Tw~nTgm*(eo&7F|X)*z^mGU-uev=UosRn5Q)@2ji#5|5J~g?s}>K0-QF zN+JBk5B007_|3gi2Fmy}$8;w^FU%d$jxKk7N-~gnV6z(T+*- z!pOmHCY=u|Eo+rS$*}sZ6t11d^9EXyhc9!)cyxMSpX^LFrC37F(?O1NPj0c`mbiB$ zqDhsnwy1P3htU3cjW5UR0#+Eet}gVqUd@!BIgp<0OoX(jUxZZZkoY#;#&c0cmCtQ1 zj9S&Tws!hc3R#xEPUX98e_%B{j4XO{?y3RQEzxUU*4F);2S(zuCt8}yDR4MYn)uSJEmz=!u@DHcrI2s zSvaEJQAZWsbXEIAztK9R@^^znn9-J9*+xp~JbsL9vjbkL95c($z_w zJ+p7n|L9{)H={Q&xVhmlrFE;?YJ=_=Un-_j3Qn1Q1p?(qm zwKGoaZ146#=w%5vSD?A4TR{VpQeKKSI>!!<59!Lzj#;R#pSZaLOgzj5F(ScWS0zGS zvy2X_M#(o4Ny%^Rzy=z5F6z_mJLJ_7Ro&xI}AK%Y8Sle~fgk;x0@erf!>EG;dj z1W#0Cs2)8`BiLgx{3%RTu?cvdaNd3!xZCK9gg>d%FqzO|VLCRurWq@!MLJyY-PidP8i7t>J5}=0R%ensV9;8~XuKPun4s=r8XY1{`|wBCkaENP74PdI+0HQe z0cLwXi|&S+5Wb{{{2?ZBEQzLdn%zm(Q#7(zlv# zKZ)u2!cd<~%t7;s{T>GGy5CvvYuk}x4(iFK;8ZimGXq1n-ix$1?D&0{b76Vzq~g~F z(%b@g30vdk%2w~kDceJJB*tnzM3h%~UOI2gX0<7aoWbamAKg-8bzZP*o0g-gzF{{3 z8!fWm9I5qP5c3KADc9_BR6iM@)WM$0g(YHN)UC%^Okgkh?-K6+UZCS3cCK#7p+q}s zj0}WK7`HM>^QD6cj}=tNU0uIneBy)effh-dotJT@tUO4_0v{K>%qw0^9*v2-tcv@I z`NZ`u5)JM3LE;V)0n=2R~5O290gdYT>j!{1lEc=%f2W0t} zYsUw9KGe->(IXa`{5c%@>|*Us0@Mq2Y3VqM5LFuSTp;i5b=m}VZ-Zg{H9Y>fI*a^H)uJ z9xJ(QL485WKZ?&o`F`T9EUCUI%Jw4EYmwG>tv2Df+AB+`wc2%Z-&|0)w>9SMhdGX? zD`;0(9PgyV6U|yYhhw5-HQK=?Bs65K^)QafS-Mx!DvCPum;Xn1{iHJQOPBun@Y0!%6Yr-YGwhDaGfi=nAV*X33 zF2eNbaSLSe!$MwO-mjxwNsIdJl!w6M+%X|vtPkFt6p158J8mPP!6M(e6FenoSeXP# zE37M-v$=dWkL9OZKnz$Pt)N^RLRcj1FHWXC`6-Fu+Aw)e@jzD1I&A9M)*$ee!vo{E zZVu*E$EQMTz4ToX>k~#}Ld%DFCF5gTHSUJe&k4vo?DRK&qUV-9H*YpIHsAY_^X}}5 zRgd%3GYDn5Tldr3f#CYm<1Ko={^L7GgS?$`nq^3w!Y8}h!;%OGF@gH}wB+*=J{y)0 zK6_El{aG6!?Zi{~R+rnflU-h@a@}g>aF4sjEb+dmEa`W7!y{ZnDb*J=BYkZx=AyDc zr@`n2Sg-JzZ!awMbsIrSFN&h8yV}vC?>l;} zD})OclgpL18Nw(3F&0apAsE4^lNa3R;z25)(MLU*Mi^#wFZ%eo@I*&-`&{8h>@$cC zU7*->okh;w^9SuO+0iE2N=M|J+2eK-&|acYJ2Iu?s}=wHSJ|b#l^=o!SS>ii&1Jsu zd~ls~7*5q)u#UIU@rxPl44xbrBEln6yPj{$Eqvd_*>5|TeZHX1wxp&I5^}UYJoz!k zdVNQTwSV0qN1JLm`~0X^{zKh#y)Dat(`;+pWXS#7Z5GKtLhg)!4v4gxiuv*yE#Z4@ zKklni341PO4-UM^jZ+MSPLlYpkxm)6S!8*Ob4GdVCRUq{SNxo?*I?GquO(Tpd=OGL zwKLz6kj&4IqpOjgFr{*~qwZt%Op%N^e!wuVhj6N0q<%E}Qpu+zp}sQzFk`kM zVdCm(*!%;5B+6Puc6Qlx=xn(EyiS{q;=%odgU55vLyVzYxOli(I90>DcaQK@6o+^B zsZLsZb1=9x=-*0MKKT|tO z&JNTXAgydkls5jH!_n~|-M<)HbxAKW5q(dHn3loqGapnThh^7Q?$+5Fm4 zTJUm`djdV}t8IaZnN_ScF6`rc#cLdwFPzQ`34uIu-RuUOP0q9dXZE>_7b~R(G7(v$ zQA^2p*S5}Uj=NIYJ|DWG&3r*4{fPGbD)EZ@cozW=8OWysFZ}Qw^wHtZCjuL<+avom zDjY!N6Yx>Qkr!j@JO?;+&>KvRN|6~d&Q23IT7;uZ(@|yZcb3n6N0+h2Jjc9j$Lb2= z^UGsiCmsZaaWU5yWre9Cev=<#6$~>y)BzKXdI(aVaO@ggh!8c@y!Ng}qj1CLuVha7BbG-?r@!N)NDd1-*bN zJzQ(i;sRL_tVg}H>|460-$)yy<(MmYawn@&>^XkBL;akHKsnS`d3&?Q79|p3XbEy0 z=GJM-SfJH1Nvw zS!MBEWYOKQz|V58(zM$NZ9kyu>y9i-9=Q&z%v_`Nd=T40tA#ulCfg6qHCPA%L^Ouv z|7q{5qT=ehEfWF(LXhAZ2m~)6xI=J<;10pv-Gc=wB)Ge~yA9n-VboOvS}#<6(VjXZSo+y$#}GBSz~=(bkvrs6x?g#ccd~%Npah^^BQ8j6REO z{J6+vXfp02O21sH(u92q8cxm#$6rC4fnTs{XiNsT->uI5aZ35HfbB=sow922Aq<~m z%ZJJn&+|$%aKxm*rDfUM*9k=#K#__!8iWiiJ}aP>2^i~=XB$Kd800#hRx~diz|bQ4 z7!hl0X|K`rMooKbiYucOL-|BO(jtGYSI(@Mai2{XROr!|tb_D5_IA;i{f1Rmc5@U) z;FRTup47akfJvXUyFAPpC5xrhJ_b#xsadPMS)2F2WUBUzhkmqoHLH|n9>-SZX2Vjq zcJP^ZDyaX2!y$A=1T$M63&3%6dkkS4T!})r_@BGGA_+Np4cREq(JA1u!Ig#i-I-b0 zV^)`)N5tD3dr>M~?t#cR34eP{; zFXI&E5L6_B)#NXM_hE#zI899o^{GtNLJrgj>u#6J`!&L8KHor$7)B}3oMb+6e`NG5 zm~&%b>^QkF-|j|-Mehzj82}5*Q{NLX<6vSA(H@T!#mLyTlLCJ$0k6i-?2n%wa5A$( zBbg*M(_S|SHZ47b9@CHb>9MT*4K^mD37-oOUpj=A#Z@L=j}caroe7zpUibI?Os0Wq zQt1J6+X;QfT@c^liY&&=B>}H*e)+OK3yLzR3>;09@H-w(a`V0?6kp@oL$TU3$sy)j ziWyxRos6=@q?R)<(9E(-nE2N9^nQk^SRSk+TAmG9b|`ePc1Kpm1j|jWR1BZu05_G^ zP6bxw`s5RC_+k$Y;}4YY=<>w)m;t2_-VTyaI_rmKBiXujr%dC>onRPc){uo_&b?YR z_^LwVwJnBi7f|=wjiDD0PK4={aHzT34<_qD^PE!x=J?qjeGRCJE+;RBN(#s2{hp%R zlUJ2_3LS3mT}ryJYmD*v3yexO!`dQerue^J8P!!E}3>@tx@Q zx|Oq?|LNu-oe15%tHm`ClU^K7TDspZ1@LO4(s2IW#dw-#<9iR|OS$<2r$eLrw3eGK zx8D%+ivmlgqc4wpHIP&EZI?MaNW(p^?hxj4If4ZXv~$gEBf>Yn?~3I5c{N zxzLf7tCFphqa_Lkbg$;`NfZI|jjnuEXhGd7RbO=)r8#pF`VIY(P`&jIlhBR|(TK3h zoa@T`{mG0zSRB-OW>e{{_79qhm~LN5gwO^^mrl=NZVmMWMAScjKbLye zubL%~*3V1}LMfQ7K%Go~U1PzP(R!B`m!PRiFLfhv^c+<7-*R9!3 z6DfxXrt-c+wt(%wImw2IMGm+cCH+L@NGm(43`Ej-&rcojwJsn9+u5dn{XP(4e`3M@ zJvf!t$Z(|pdKUdF?-S{#+)!E|9o9p#UtWTdrMuboeOQ#lhg^6{Wb z%gK+e0h>q4(**+VzIG>4X zyy&TF$HTNV-5DjXH~0s>&cUI_qK5;T&btu;4z?2PVm34;Y1roP47Qn$ADA8&-IS_y zO25aBBS*&ds^IZfE{eCys-gAKFWz#OcIElVnupQMGJArQl36vUEX3pN#<%Gzax~~P z2-Kw&_Cw~I8=I#H3@GKb?QC*D0IB&a=73)g?Y$Iw*NC$^|n7Uwdsn z2pAJFBATE0A zD?kG9nXfMYcqBns^3Q z$Ad23xv*1{7wd`NLAGN`32Th7_%KH^4r1-$wn;q2+NBdYoTUjZShRFi(!@i`x;*)e zk|$Oh9NNLj;h3QwEdb{YVhj&F)mrf*CeOvfsRRp9t7(rUC{PSt+L4(*;Jv;jk&~ zD&v7PK~Rk6Pg=s)KC%v^TCqUoH+2X@WQLH(dVr&vRA3o?xZFBIlAk!4Xcpi8Ra^K z${eD(#u}GpNj>VENEI3vU%zSZwJ*oG+)%&|(GWvLD?RjdMOA2JQrH$iB5}~$=PpEGrliv)vRpy`98 z9?QfczRHq#=mscWz5w-wTH9hDs`*-Wv!~sBwxnGnLXdPkvKkbueNmX%U^!W90^-=! z+TJ`q?vP6UacT9bc@k)@#7A!GHg6#@W7536n&Wl&-U92$U7Dd--c6Z!+D>$Nhgty& zsJ|?<3V5ief%t=5EaSU(PF3`U+w;M{^l^!>s9m~y+C&{4H)hL}w9OCKw`GvI99hw4 zY?DjG=&h^~u)C6T5k_)c^NK~4m2J!`nYyFeM8jrI{3ue)L|O{3`(ps32e1BlQnzplyec_UHRi!@O4rax*84+*Zzf2w^n z<$o8+q}It)MqRYPQpV02sVjT@E16er(~2A6{HMQvO{I6VJI(SyBC!@W9V{GNOiGCb zq4`j+tTSU$N^$9?p=@vP4Ii!maA%y^zAE<=MYA^vaxAU4-SbFJL@sTS{LYNjX@~8~ z>D;@~wJ<92*DsMom$$7Vbjhsb*msFY<>j2UDM<&)CBH|daG(JBG0O>LaIzUm)3%6w z!J7Z>K0bLah=&gzqHMx-{dG6iR< zBOWooY>^%(kv^59n4A`gKqCN)`^esS9;|4(nSG~Wt;6#y-O8FaIxhk2MnN!ign4|D zpT%`8wG_#MrUxYWjx+?n>7BInb^+1#eeV{UY6RCHYV{?sY@U@DKFlG3U+&Sc(Ji8$ z)P8jIr>p5*P$P&r^$=5~q@q^wZI-c- zFmk&ZO~QW7BA_g*N(6a(EO2w42qOsLleMefg#vvBbH*Y<>{lb^!e)4&K4Qjv-V6D@r3x}jhAw=g{4Ag3Q zt~yP%A`;b9CeU$Jk+-jvsP1LoqEvnnK@ud4$IQ}7d%KXFP%L*U7y=^8?;Hl}ic)8V ztrU;tO;PTHFgCb9moGyoBYyW{yhX*T{*kzdnd8upJX;J+*_(cLWV0H+Y?K~t&X*T# zjgfHx;ZQQB2cyT8M7I>ErV^HatipETI5*nOA0 zZ>qEwEbz~dK$=+Q!h=gU(u^dWwmryaXVBN@$DS@U3;!C|#)*1msk;UPu=T;*=oct9 zz#VBmQ&_(I`Hb`V<`VBeko01?XM@I1`sx*z|Z24UU@&)?K2WQFaZp&;sQV;VU1la2W#l{|>5b=ea?%2|^B0&a- zBhjr0zypXCJn3nlDYFT}$uL17{;XYAcx$d7<=)Y=FFK2*gkMkcOC4d_dWK%-MuMTc zGt~%IIRkw?jo({XL*=_&$h(JG0zhA(!IV{PQUdFInu6!2k{l<&F+kU3i#;{Y$7|ux zbHEJ2_1t%-WrgNYFhhFHVJa4LyOM-m{Wxitk(R`|Mx-`l)!wh}aYc$D(ETx&{B9O; zvUYAfo)hu7K@T_KjBuk*vjYVG7>%L0nk0C+$#(B*qG0-)TKK>LmDWDuYu}u)@Cj&Y z&+wxKKNO&lQI{#5b5KtpELRfKGO^UQs;InGP;DHm#-L9@d2Clvc{1NUQQ$F?;TEA) z`b4>VtD7t{QkNSbyK{fm)kE_E=phZKzB6QW$x*M<(2ruFD@q z0B8%bsTvyjLMc;|I9)^^BR{de(NzR&Fe5hw4s+o-3gXrOxLWQ%oe1%2k*P`Ht*>Er zEvNbfaHlTuH)c*2J^+bPNU#xeA>OD+?qTSzCqVO#B?M+9nFu@{*cO~Jz55L^K-7Xw z_V}see(=@ALVJeAM{`B@2tiycMmrnjb+)cnX8pW3q<)YXf5?(iS(Tba6ao?^j!WKl0 zHtV*>*Qv~h1TtER^^RuqHrV#1IxXq^# z4={&*s6}ZM2O5(B_=yw_O)Ph$7@MkrK8`+E zW4CeMY7a$qpZTX!c4W}RGl*FZ?g007s(enCl!^`QIA;f^+H>(|iu?8>i-j|8xYw&K zP8yhN+lzQwW!~d>x&1Ao{Hj4_tF2accfMs+d~zy^<>~M%rp*m!W$Bcv>Z|Lz04^M_ zL_3b}B!0&2eK)qn4Y@-U%q`Ju+>{THt0lMpC z4ZAfsxB6;*8&RHqr>gCuS9NoxB|J1CTHSlax!7G;lD(=a!EB>1Cmg#2*4Lcn?I=@E z4V1Fv4C}H(N~N85=|INY1Hc~3!9q+ii={MtgXJ$Mld3zuE#mmup8}vuS=z7_-_~RC#IZ~je5Xj4TN9W0Y(OEu`O(X)Ka{+dwa;jEgBoM+_w^`?{R!!(&=4$QENa#C z<~DwX3$|kBogcfhl;@T@#9bLb_ff;IX_1f^0HvHRTVIx2ocvP*=Zwb};+W*H2mob) z{D?C;iLB-wBffOtXq)!O+P%3uj=D-CH*BJPp;*^XNp#3Y*B#dBH0=w)5$}MkKJQ$< zZ6CHnGsC)MRZ8gRmYsdGXsfJ-7TSp0CaQ+3;kd=i?Ej>zB$bLJ=a+c~WJZJ_{Shn{ z5)4`H7%^kuY2e9rMN6Wt10Rty2!#GHy$~5@}yS z*N~EVU{5NzXGEZgm9I9X{Xf>}Yq?bi${@?>f+4002U@Z10M_ITl)6x|@^v0<8o+F* zb`vPUS^H6dyS^6V`toO9t|I}eo=h{Z)2vgg;)An-n!`D0nB{R(&U9!OBiD5kD(o{| z4ipHOESI5$@=qJeyOai4kCt7aD%@zvoE|7;S~c-=8iVXp`2#5~&L5^*%`g@k-H_UD z*2NT_1`T$2ETgs`dx0zmHRsb>YFlnX!D6?44O0ErwT`_NJ@nQ0Al_fb-kfQV4i6uI zHt~QLWqZj3J?H&7-}Vg9*ZTP^P1Iy&i=V~v$^z2Y&!9p$3ynr4OQ=}wKkkhEL|BC0qUN^Spk(r+66JsN(k;N#mCaf5emj+D z*_&_j!fuFHuQS~&QhK*xu1quRiap`U3ej};8Q@mXf~@8ZPuHv-GL6onVt;63cdf*H zvGr-b+NT^>PXF;Eu^whW#l~bR04h_bdX6d%(rMfCkILC{ySf|^Ax0sP1R!kM9y+6q zKG?l}a=W!zsI(7!G#SvKuZHpbTZo8HdA2)>#)W;Ec(8qysi0$rqhG=EuE65cI%ZmB ze>e-@WbWZdpt&n!tL?sh?e~p>YW;fCwUd1r)|9$Q{0lT|p;#moI)#RuQnJ15k&~Yx zz0y;*+ec>meL}>i@l!Du(Cq4R^jWs?%{p0Gb?I6Hh~!+?v$Gp4C&gFmg;Yn(F)}dv zUbFq%KfC7IT7LrY#JW|AGJ4z1=u3~j(~k3IR%eH7{^t&dF8I~49Cdy9q-91K_cr)& z^+uiuZYuASA%Rf5IrE^(yxUg*Hb4|Mc~|-*ggL(EENyE7K7DARMLnAqjK% zQ=YpbSCQ_T&D;a2uTlC+jY@bWC6Kf0DAEov*HtFJx27nt9hWljm6(flf#|aPpu1(2 zMtXs*`~kB)pw8n#TZ7L4|5&3=FjTu-hsS1`L6tE9hfY@lV@GXS4+-zhJFKj1EZT{? z9I?HliSFb*KkZ*t-=-IAcTR;c?O&`36V&2|7VYVhn%`}5A=mSTS(qGBsP@)rH*3gj z21q;iSV-3ewy7(OM*4l9Z*%E@%W!9B-DGCfv1C8~-4aCgwUs@Yvt!{qIc=n9WM zmw-Vqin%N~43yKA{mK9B!0bGXL=_WOp}|eM5-3FAd#65dTr|A)p#S*}xGPvhly*cW zPamoz^)u;N>ato9(S-0NcMk+b8a zwxG+Ch=bX3k!3EIXs2T+w@p&HRPeavn&h+<&d4q444wFZn86FnQh8?+btOUGQaj%~ z?Ov%xkIe1k1rDu<|0+TGIQ{Y$I`wwHA%v*}Hy~y~AKl_N0X>E2vTIx1%j=W{&DVf< zyvKSybb|zSa$2R?gL1mqCqU|YrQrk&nG~mTU}e6meD~->ECYyQ^)b+hJI-Pz4%^G{ z6EkuCZa<4ukh9g^74)G_ED$=yrsgBLiOKCEC?%uTZVLOD3rgq&?%)Fh#VUe%kW=bD zj}33$y2qcH(E8~QofMUBlOp{mH}U`E&O_f%a`+--CC|HWzkc%M3O)(ID}A%%fiK~+ z;`&*O9|~BXT#AVC<*0HykvSu0!+^X-ftoaPi`>CD!S7WNTp7=Le0gak=n0?NZPT3z zSI0t=ro>P*@l`IBlty`eiv|`5mU>+*OO1}cBOy-Gko`yqNFi0N zwA+{Nl5oz{l{r0?G+-M> z4)p5&Z1HZv#oTk1-tm)hr;6U-iE$;Hx8=C3nUQcWB)*sN{xqIX=J=(_?9FnEmlTot zV$6e!lmM#O7K2%3k4~m5bL?mAo#A{?DqshHA!~jU>B^m)FGpEMdY~P(L zCvvEhWbQwzsKt1dhBz5cpRR^DI(9|S zzJGOmKcv6Oz~?Y#>)Bdwe~^U=$7;#v^aqdVpzp4%)Q3cQLwt_kEybHx{9bDhOh#~$ z#Ja^AbZ!IL^*%3Lg>sTH4}+}md4rwVibaAQ6O84QSSRAHN&#q-jvrLaWrw_}?T}l% zH@<-e2$V=viJHcVha<0JjcS8kom110MR7I;qfeqqN+n#NPw7ITl^;^lEBYx^c)RP{ zi$XX@KGB}GIKZ6Xl)rxzkfDr&}1@x3Ef zzh=E*m%wR#Xn&`Q`9d9As~gK{e_*Zg(UHiZi%3%K+YA84K}z}4x1aqy^RmQ3+c6Uaz1>Ak^LP&4J$H+scS z_>s`nOQ$LgT-4#mL-^&=NJ`6b(?2+DJ*|=G@fsJW#>^|c4KiAl&a#riA*k!5Ka+iV zN|44G!tS08mBSV|PwjVT&>!lZ8w$3kE(~Cjr0U#{xpzqbVbRbrk@`K~9lk=gQUcPa zJqOjyVM?l$>BVNiA?Fq2_Tw4-CaPTgL{6&BYl8iBy$nv~P}Df$w+mAl0SC2xfAtFc zorJJ}QYt-M&Y%n zI_G6Jn>`iTjhv*@Onb}}?%yACn_+K;q3c|H zRUgFH2n}IeGFz^{0TuaRh9D--b zcMs&BsIGW2`AWzxuaTWZCV-d0eRiShKpg!rwqE zZX;skbbVq(D<+aK#B!0yodbJkwMS;k7&Z?#h4`PoBv`}4O)zIQMq)n$pv4y=n)FIJ z8p`e_KRVGP+Qaf7Ipf_AWy$Q!__P_Q?Ch%Q4SWn487}bcGB%gTIocT`2q!z^!8b+$)$_QYc`-HJTwqFG-OHE;!B<(l*%!@K_1P~Lh|^1u zM-0U2(y!5Im3MPHH@nY#hI0Dr3C`%TFtA;esdQV?(K;?O|4Bp3w{kqqpmpo#4#mt_ z0o!dRp!`xZn`nkd&oFuA)^86JsexN0OFtdH+2oc;A6@@^83{b2)Z5Aa01tzg{Pjnr z`xond{QFW(P0q0i?S+9R|K;p0^b;_?%c+cJ0w6o);d*lI?M$Iz9lqm2*vy-!r5+%N z=IrLBdp10;H~ts53(M=&7}vK?vyBWa7UYkFwcwzf+NRJzhewkIo%v)Z<(Z8;?M+y?r?WJFEEA=*d4K0 z{tcAXe&>3Vq!^3VOGV4LL?0;y=R6TB*I2mG0n^7$DI4R^_DJ`^y6aYJ`@{G?L;9D- z%ym!6t&WHLOc2WDdF$!PHeD~{NU+edGm(+UMMqaqapavd@iXERr7$W_P)*~{7fEob z%nRWhr4+5VbC*#Pln)ZPvndQVT}d880#Yr;zmS43gz&+PT>PHa&FwexsrEb(FS2RB z15hmoLjtV`oy)&Gs-(|R0yq(I6h($rW5KUl7`Hl3nv<_i7QL(FmNQ&v{ByiEr_^JjF<$g`);Qq+~WRm$}KSWU?(_i0AW zV+FTckNTsOqAk_T%xfamI~`{W>j(+yw2@wkQjE9?P2G1J*QIyiw-rAscXD^gz1l*_ z67asxO=V@Mv{m%ig|7MqtFfP|9e$~NaQ@l> z^BN~18WZ1rOt84p5AXS_TDcjumVgx+eb&;zcv&hMcx2*&7PijPv+{fqk)#k zKM}O323HM?#G7a>EgSMQKn5Rm3ssQ1v%|u|?r^EFEx1rV8XGnx;w;>UCw~)d+QySjqE*eDVR!1?m3|8)6bBd?_4NyFFeHvoV&qKbPTjTg@lQ8 zzO|Z?Zdfu7nIwm>iH8E;L~pkX`w^7xYyRxLnHupH$7HD$p5iRCro=E-IlT zn3`MObgA9qZ}_Y8i`!xEZXTwBHd7-52cbloT~o3{ z?)ZBKW{ulm8Glg!Q#e)=xrMV;0=DMw_S2_f@}M|>6jcLd4Fc(nO!G( z-u@y#3jSyrAbzW3lTN8QbxF=twl21uIOw^7JPT4hdB-kHY?dSs`T?UaggLQI%3y_ks(&SJv>YOKtW+E)!LSnXnV0W*n=rm%_L7@?XAHA)V`Id7FEc~4tF6_%$k|DU^@8iT#aEf zc_3tJN+lA^zBMIT=`bdnj;xUvcakf~PZ}7vBIe?sH}{h}6DLz`F{`D)dJ;)5+z-c6 z%fTIwjw7kWU)zxf&04ncJv?OsVRmY#LUq$)eGjja zoL<(aOXxy%{=i^Xjf89QriE4y2>@^$P96>63D}Mf@H3Bu%p)PKwcZZ9eis`J(1Jj``dk#Uld8{iRUY$ppfi+})0r_~0$Z)0*6)xn#$GJ!~IDO>JC7 zX@R4k7uGDMlOf&ZE*zDGLd0`UiD_wGsSrJC9bLAXV~8jE^HxZr+|g*dOFNt3$!e6^ z5mB|de%>ud(P8Q?yWA%w6_wKs+L#5igXSH+-Lo@sTOEZb`n1gibnT%;o zC+o%)=*%R);*i&c)&;w_hMj4VJ_m`D+&1k@0Kk<4#wX8jC$nW>dc&fRkD&!bcZ#BR zX8V~<32y6lf?ffY6rTje{{qLoMiZ}rg+`*91r#-i7U`?+J~zATq{Fgd5TjotW@l$l zjz|oWVykEktK?XESJ?mylE$*g{=D!~3$FEz4mv_+1xprah<~d!``zz=CCSbmSP%uUeGgw5T@$tax`v`j&q>_&;0BqQCwI^;3~< zWhr|hwGareN1~gAE*8K2^`}iFifB|y-<_j1%FoA_6B@_DJ`ytBzhdP3!>Io{_u^(S z45S$oz}<;U;b8sjbl#XzejjWBxzpt=cvUDHvhBOQZRN#;mLq1G#`POF96FJ)^p&kW z^E36+wLS6qHcx6`8n4mdLE@y4u*aVU?EiYDnP4|A52T0l7Mz&)`J!q?^s}vv3~Pv= zTByZmlDX;v;OA$o_|K$-V*?bPU+v4bxBCxtuAEJZ8Gl94 zlQHHP#{H`v%zq8!PfVZ(?Yo}zj~DT~o3l=Lcg*IDt}a=mC>bhVFL$9GduOQf%LC!o zhJu1dlb(RA@q4sc!@imb#=nwOp+Eka_O%$u^YSR9@=FX%C!+^x>1ys*&~Mm3?iye3 zNjm(JMre|&cHRr986cByz5XwE{;?Pd5N?%<41}x=|0=#EUIKeGY2N>v;g8eyFMsfV z9w{yZgEpH>;Z=+Lmkr^c^WcBC{4z%Tsup7`hs^c%-|d-dcYOcv_GJBMu*sJbY=1c6U(bqv=E>J&@>hB?$-Jz4xc_cX^M3}*x}Rh9 zZ~DZSMe0>oGK+`#Z^nPO=k#ajV9h7R7XP=K{-$vB=eK6@uL4-juBS5%{`~I0Zz+<1 z4t6>>vi>gxzW=Mz_it||0k07(CXb2)`v30izxDagBNbwxgDsLEw)$5K@XrPQpDnpi zaXPbllYi;Tug#=u1g=clS2$^ZU1bBpu&p%Y=9QIdF;tdR|BcYwUr#!eBif-aBg)^6 zOZ@k#l#Avo8Haweqx#MXb@cBx{1}D(Ue#x8NcGo$_-`72;UPd50Nxl=AHu)6TE8ZYW1fWhC@^8TA?#fI^t^8Xw8FHZRX6Hj)$ybju8u)jHcdH)Lf Ok`R#\n\tPort <%= port %>\n")(host); + })).join('\n')); + console.log(clr.yellow('azure_wrapper/info:'), clr.green('Saved SSH config, you can use it like so: `ssh -F ', file_name, '`')); + console.log(clr.yellow('azure_wrapper/info:'), clr.green('The hosts in this deployment are:\n'), _.map(hosts.collection, function (host) { return host.name; })); +}; + +var get_location = function () { + if (process.env['AZ_AFFINITY']) { + return '--affinity-group=' + process.env['AZ_AFFINITY']; + } else if (process.env['AZ_LOCATION']) { + return '--location=' + process.env['AZ_LOCATION']; + } else { + return '--location=West Europe'; + } +} +var get_vm_size = function () { + if (process.env['AZ_VM_SIZE']) { + return '--vm-size=' + process.env['AZ_VM_SIZE']; + } else { + return '--vm-size=Small'; + } +} + +exports.queue_default_network = function () { + task_queue.push([ + 'network', 'vnet', 'create', + get_location(), + '--address-space=172.16.0.0', + conf.resources['vnet'], + ]); +} + +exports.queue_storage_if_needed = function() { + if (!process.env['AZURE_STORAGE_ACCOUNT']) { + conf.resources['storage_account'] = util.rand_suffix; + task_queue.push([ + 'storage', 'account', 'create', + '--type=LRS', + get_location(), + conf.resources['storage_account'], + ]); + process.env['AZURE_STORAGE_ACCOUNT'] = conf.resources['storage_account']; + } else { + // Preserve it for resizing, so we don't create a new one by accedent, + // when the environment variable is unset + conf.resources['storage_account'] = process.env['AZURE_STORAGE_ACCOUNT']; + } +}; + +exports.queue_machines = function (name_prefix, coreos_update_channel, cloud_config_creator) { + var x = conf.nodes[name_prefix]; + var vm_create_base_args = [ + 'vm', 'create', + get_location(), + get_vm_size(), + '--connect=' + conf.resources['service'], + '--virtual-network-name=' + conf.resources['vnet'], + '--no-ssh-password', + '--ssh-cert=' + conf.resources['ssh_key']['pem'], + ]; + + var cloud_config = cloud_config_creator(x, conf); + + var next_host = function (n) { + hosts.ssh_port_counter += 1; + var host = { name: util.hostname(n, name_prefix), port: hosts.ssh_port_counter }; + if (cloud_config instanceof Array) { + host.cloud_config_file = cloud_config[n]; + } else { + host.cloud_config_file = cloud_config; + } + hosts.collection.push(host); + return _.map([ + "--vm-name=<%= name %>", + "--ssh=<%= port %>", + "--custom-data=<%= cloud_config_file %>", + ], function (arg) { return _.template(arg)(host); }); + }; + + task_queue = task_queue.concat(_(x).times(function (n) { + if (conf.resizing && n < conf.old_size) { + return []; + } else { + return vm_create_base_args.concat(next_host(n), [ + coreos_image_ids[coreos_update_channel], 'core', + ]); + } + })); +}; + +exports.create_config = function (name, nodes) { + conf = { + name: name, + nodes: nodes, + weave_salt: util.rand_string(), + resources: { + vnet: [name, 'internal-vnet', util.rand_suffix].join('-'), + service: [name, util.rand_suffix].join('-'), + ssh_key: create_ssh_key(name), + } + }; + +}; + +exports.destroy_cluster = function (state_file) { + load_state(state_file); + if (conf.hosts === undefined) { + console.log(clr.red('azure_wrapper/fail: Nothing to delete.')); + process.abort(); + } + + conf.destroying = true; + task_queue = _.map(conf.hosts, function (host) { + return ['vm', 'delete', '--quiet', '--blob-delete', host.name]; + }); + + task_queue.push(['network', 'vnet', 'delete', '--quiet', conf.resources['vnet']]); + task_queue.push(['storage', 'account', 'delete', '--quiet', conf.resources['storage_account']]); + + exports.run_task_queue(); +}; + +exports.load_state_for_resizing = function (state_file, node_type, new_nodes) { + load_state(state_file); + if (conf.hosts === undefined) { + console.log(clr.red('azure_wrapper/fail: Nothing to look at.')); + process.abort(); + } + conf.resizing = true; + conf.old_size = conf.nodes[node_type]; + conf.old_state_file = state_file; + conf.nodes[node_type] += new_nodes; + hosts.collection = conf.hosts; + hosts.ssh_port_counter += conf.hosts.length; + process.env['AZURE_STORAGE_ACCOUNT'] = conf.resources['storage_account']; +} diff --git a/v1.1/docs/getting-started-guides/coreos/azure/lib/cloud_config.js b/v1.1/docs/getting-started-guides/coreos/azure/lib/cloud_config.js new file mode 100644 index 0000000000000..d08b3f06aecfa --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/lib/cloud_config.js @@ -0,0 +1,58 @@ +var _ = require('underscore'); +var fs = require('fs'); +var yaml = require('js-yaml'); +var colors = require('colors/safe'); + +var write_cloud_config_from_object = function (data, output_file) { + try { + fs.writeFileSync(output_file, [ + '#cloud-config', + yaml.safeDump(data), + ].join("\n")); + return output_file; + } catch (e) { + console.log(colors.red(e)); + } +}; + +exports.generate_environment_file_entry_from_object = function (hostname, environ) { + var data = { + hostname: hostname, + environ_array: _.map(environ, function (value, key) { + return [key.toUpperCase(), JSON.stringify(value.toString())].join('='); + }), + }; + + return { + permissions: '0600', + owner: 'root', + content: _.template("<%= environ_array.join('\\n') %>\n")(data), + path: _.template("/etc/weave.<%= hostname %>.env")(data), + }; +}; + +exports.process_template = function (input_file, output_file, processor) { + var data = {}; + try { + data = yaml.safeLoad(fs.readFileSync(input_file, 'utf8')); + } catch (e) { + console.log(colors.red(e)); + } + return write_cloud_config_from_object(processor(_.clone(data)), output_file); +}; + +exports.write_files_from = function (local_dir, remote_dir) { + try { + return _.map(fs.readdirSync(local_dir), function (fn) { + return { + path: [remote_dir, fn].join('/'), + owner: 'root', + permissions: '0640', + encoding: 'base64', + content: fs.readFileSync([local_dir, fn].join('/')).toString('base64'), + }; + }); + } catch (e) { + console.log(colors.red(e)); + } +}; diff --git a/v1.1/docs/getting-started-guides/coreos/azure/lib/deployment_logic/kubernetes.js b/v1.1/docs/getting-started-guides/coreos/azure/lib/deployment_logic/kubernetes.js new file mode 100644 index 0000000000000..2002b43a53ebc --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/lib/deployment_logic/kubernetes.js @@ -0,0 +1,77 @@ +var _ = require('underscore'); +_.mixin(require('underscore.string').exports()); + +var util = require('../util.js'); +var cloud_config = require('../cloud_config.js'); + + +etcd_initial_cluster_conf_self = function (conf) { + var port = '2380'; + + var data = { + nodes: _(conf.nodes.etcd).times(function (n) { + var host = util.hostname(n, 'etcd'); + return [host, [host, port].join(':')].join('=http://'); + }), + }; + + return { + 'name': 'etcd2.service', + 'drop-ins': [{ + 'name': '50-etcd-initial-cluster.conf', + 'content': _.template("[Service]\nEnvironment=ETCD_INITIAL_CLUSTER=<%= nodes.join(',') %>\n")(data), + }], + }; +}; + +etcd_initial_cluster_conf_kube = function (conf) { + var port = '4001'; + + var data = { + nodes: _(conf.nodes.etcd).times(function (n) { + var host = util.hostname(n, 'etcd'); + return 'http://' + [host, port].join(':'); + }), + }; + + return { + 'name': 'kube-apiserver.service', + 'drop-ins': [{ + 'name': '50-etcd-initial-cluster.conf', + 'content': _.template("[Service]\nEnvironment=ETCD_SERVERS=--etcd-servers=<%= nodes.join(',') %>\n")(data), + }], + }; +}; + +exports.create_etcd_cloud_config = function (node_count, conf) { + var input_file = './cloud_config_templates/kubernetes-cluster-etcd-node-template.yml'; + var output_file = util.join_output_file_path('kubernetes-cluster-etcd-nodes', 'generated.yml'); + + return cloud_config.process_template(input_file, output_file, function(data) { + data.coreos.units.push(etcd_initial_cluster_conf_self(conf)); + return data; + }); +}; + +exports.create_node_cloud_config = function (node_count, conf) { + var elected_node = 0; + + var input_file = './cloud_config_templates/kubernetes-cluster-main-nodes-template.yml'; + var output_file = util.join_output_file_path('kubernetes-cluster-main-nodes', 'generated.yml'); + + var make_node_config = function (n) { + return cloud_config.generate_environment_file_entry_from_object(util.hostname(n, 'kube'), { + weave_password: conf.weave_salt, + weave_peers: n === elected_node ? "" : util.hostname(elected_node, 'kube'), + breakout_route: util.ipv4([10, 2, 0, 0], 16), + bridge_address_cidr: util.ipv4([10, 2, n, 1], 24), + }); + }; + + var write_files_extra = cloud_config.write_files_from('addons', '/etc/kubernetes/addons'); + return cloud_config.process_template(input_file, output_file, function(data) { + data.write_files = data.write_files.concat(_(node_count).times(make_node_config), write_files_extra); + data.coreos.units.push(etcd_initial_cluster_conf_kube(conf)); + return data; + }); +}; diff --git a/v1.1/docs/getting-started-guides/coreos/azure/lib/util.js b/v1.1/docs/getting-started-guides/coreos/azure/lib/util.js new file mode 100644 index 0000000000000..2c88b8cff351b --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/lib/util.js @@ -0,0 +1,33 @@ +var _ = require('underscore'); +_.mixin(require('underscore.string').exports()); + +exports.ipv4 = function (ocets, prefix) { + return { + ocets: ocets, + prefix: prefix, + toString: function () { + return [ocets.join('.'), prefix].join('/'); + } + } +}; + +exports.hostname = function hostname (n, prefix) { + return _.template("<%= pre %>-<%= seq %>")({ + pre: prefix || 'core', + seq: _.pad(n, 2, '0'), + }); +}; + +exports.rand_string = function () { + var crypto = require('crypto'); + var shasum = crypto.createHash('sha256'); + shasum.update(crypto.randomBytes(256)); + return shasum.digest('hex'); +}; + + +exports.rand_suffix = exports.rand_string().substring(50); + +exports.join_output_file_path = function(prefix, suffix) { + return './output/' + [prefix, exports.rand_suffix, suffix].join('_'); +}; diff --git a/v1.1/docs/getting-started-guides/coreos/azure/package.json b/v1.1/docs/getting-started-guides/coreos/azure/package.json new file mode 100644 index 0000000000000..3269b418e0cd3 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/package.json @@ -0,0 +1,19 @@ +{ + "name": "coreos-azure-weave", + "version": "1.0.0", + "description": "Small utility to bring up a woven CoreOS cluster", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Ilya Dmitrichenko ", + "license": "Apache 2.0", + "dependencies": { + "azure-cli": "^0.9.5", + "colors": "^1.0.3", + "js-yaml": "^3.2.5", + "openssl-wrapper": "^0.2.1", + "underscore": "^1.7.0", + "underscore.string": "^3.0.2" + } +} diff --git a/v1.1/docs/getting-started-guides/coreos/azure/scale-kubernetes-cluster.js b/v1.1/docs/getting-started-guides/coreos/azure/scale-kubernetes-cluster.js new file mode 100755 index 0000000000000..f606898874c06 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/azure/scale-kubernetes-cluster.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +var azure = require('./lib/azure_wrapper.js'); +var kube = require('./lib/deployment_logic/kubernetes.js'); + +azure.load_state_for_resizing(process.argv[2], 'kube', parseInt(process.argv[3] || 1)); + +azure.run_task_queue([ + azure.queue_machines('kube', 'stable', kube.create_node_cloud_config), +]); diff --git a/v1.1/docs/getting-started-guides/coreos/bare_metal_calico.md b/v1.1/docs/getting-started-guides/coreos/bare_metal_calico.md new file mode 100644 index 0000000000000..503e1d63a0755 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/bare_metal_calico.md @@ -0,0 +1,152 @@ +--- +layout: docwithnav +title: "Bare Metal CoreOS with Kubernetes and Project Calico" +--- + + + + + +Bare Metal CoreOS with Kubernetes and Project Calico +------------------------------------------ +This guide explains how to deploy a bare-metal Kubernetes cluster on CoreOS using [Calico networking](http://www.projectcalico.org). + +Specifically, this guide will have you do the following: +- Deploy a Kubernetes master node on CoreOS using cloud-config +- Deploy two Kubernetes compute nodes with Calico Networking using cloud-config + +## Prerequisites + +1. At least three bare-metal machines (or VMs) to work with. This guide will configure them as follows + - 1 Kubernetes Master + - 2 Kubernetes Nodes +2. Your nodes should have IP connectivity. + +## Cloud-config + +This guide will use [cloud-config](https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/) to configure each of the nodes in our Kubernetes cluster. + +For ease of distribution, the cloud-config files required for this demonstration can be found on [GitHub](https://github.com/projectcalico/calico-kubernetes-coreos-demo). + +This repo includes two cloud config files: +- `master-config.yaml`: Cloud-config for the Kubernetes master +- `node-config.yaml`: Cloud-config for each Kubernetes compute host + +In the next few steps you will be asked to configure these files and host them on an HTTP server where your cluster can access them. + +## Building Kubernetes + +To get the Kubernetes source, clone the GitHub repo, and build the binaries. + +``` +{% raw %} +git clone https://github.com/kubernetes/kubernetes.git +cd kubernetes +./build/release.sh +{% endraw %} +``` + +Once the binaries are built, host the entire `/_output/dockerized/bin///` folder on an accessible HTTP server so they can be accessed by the cloud-config. You'll point your cloud-config files at this HTTP server later. + +## Download CoreOS + +Let's download the CoreOS bootable ISO. We'll use this image to boot and install CoreOS on each server. + +``` +{% raw %} +wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_iso_image.iso +{% endraw %} +``` + +You can also download the ISO from the [CoreOS website](https://coreos.com/docs/running-coreos/platforms/iso/). + +## Configure the Kubernetes Master + +Once you've downloaded the image, use it to boot your Kubernetes Master server. Once booted, you should be automatically logged in as the `core` user. + +Let's get the master-config.yaml and fill in the necessary variables. Run the following commands on your HTTP server to get the cloud-config files. + +``` +{% raw %} +git clone https://github.com/Metaswitch/calico-kubernetes-demo.git +cd calico-kubernetes-demo/coreos +{% endraw %} +``` + +You'll need to replace the following variables in the `master-config.yaml` file to match your deployment. +- ``: The public key you will use for SSH access to this server. +- ``: The address used to get the kubernetes binaries over HTTP. + +> **Note:** The config will prepend `"http://"` and append `"/(kubernetes | kubectl | ...)"` to your `KUBERNETES_LOC` variable:, format accordingly + +Host the modified `master-config.yaml` file and pull it on to your Kubernetes Master server. + +The CoreOS bootable ISO comes with a tool called `coreos-install` which will allow us to install CoreOS to disk and configure the install using cloud-config. The following command will download and install stable CoreOS, using the master-config.yaml file for configuration. + +``` +{% raw %} +sudo coreos-install -d /dev/sda -C stable -c master-config.yaml +{% endraw %} +``` + +Once complete, eject the bootable ISO and restart the server. When it comes back up, you should have SSH access as the `core` user using the public key provided in the master-config.yaml file. + +## Configure the compute hosts + +>The following steps will set up a Kubernetes node for use as a compute host. This demo uses two compute hosts, so you should run the following steps on each. + +First, boot up your node using the bootable ISO we downloaded earlier. You should be automatically logged in as the `core` user. + +Let's modify the `node-config.yaml` cloud-config file on your HTTP server. Make a copy for this node, and fill in the necessary variables. + +You'll need to replace the following variables in the `node-config.yaml` file to match your deployment. +- ``: Hostname for this node (e.g. kube-node1, kube-node2) +- ``: The public key you will use for SSH access to this server. +- ``: The IPv4 address of the Kubernetes master. +- ``: The address to use in order to get the kubernetes binaries over HTTP. +- ``: The IP and subnet to use for pods on this node. By default, this should fall within the 192.168.0.0/16 subnet. + +> Note: The DOCKER_BRIDGE_IP is the range used by this Kubernetes node to assign IP addresses to pods on this node. This subnet must not overlap with the subnets assigned to the other Kubernetes nodes in your cluster. Calico expects each DOCKER_BRIDGE_IP subnet to fall within 192.168.0.0/16 by default (e.g. 192.168.1.1/24 for node 1), but if you'd like to use pod IPs within a different subnet, simply run `calicoctl pool add ` and select DOCKER_BRIDGE_IP accordingly. + +Host the modified `node-config.yaml` file and pull it on to your Kubernetes node. + +``` +{% raw %} +wget http:///node-config.yaml +{% endraw %} +``` + +Install and configure CoreOS on the node using the following command. + +``` +{% raw %} +sudo coreos-install -d /dev/sda -C stable -c node-config.yaml +{% endraw %} +``` + +Once complete, restart the server. When it comes back up, you should have SSH access as the `core` user using the public key provided in the `node-config.yaml` file. It will take some time for the node to be fully configured. Once fully configured, you can check that the node is running with the following command on the Kubernetes master. + +``` +{% raw %} +/home/core/kubectl get nodes +{% endraw %} +``` + +## Testing the Cluster + +You should now have a functional bare-metal Kubernetes cluster with one master and two compute hosts. +Try running the [guestbook demo](../../../examples/guestbook/) to test out your new cluster! + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos/bare_metal_calico.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/coreos/bare_metal_offline.md b/v1.1/docs/getting-started-guides/coreos/bare_metal_offline.md new file mode 100644 index 0000000000000..43d6a1efa52ea --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/bare_metal_offline.md @@ -0,0 +1,691 @@ +--- +layout: docwithnav +title: "Bare Metal CoreOS with Kubernetes (OFFLINE)" +--- + + + + +Bare Metal CoreOS with Kubernetes (OFFLINE) +------------------------------------------ +Deploy a CoreOS running Kubernetes environment. This particular guild is made to help those in an OFFLINE system, wither for testing a POC before the real deal, or you are restricted to be totally offline for your applications. + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [High Level Design](#high-level-design) +- [This Guides variables](#this-guides-variables) +- [Setup PXELINUX CentOS](#setup-pxelinux-centos) +- [Adding CoreOS to PXE](#adding-coreos-to-pxe) +- [DHCP configuration](#dhcp-configuration) +- [Kubernetes](#kubernetes) +- [Cloud Configs](#cloud-configs) + - [master.yml](#masteryml) + - [node.yml](#nodeyml) +- [New pxelinux.cfg file](#new-pxelinuxcfg-file) +- [Specify the pxelinux targets](#specify-the-pxelinux-targets) +- [Creating test pod](#creating-test-pod) +- [Helping commands for debugging](#helping-commands-for-debugging) + + +## Prerequisites + +1. Installed *CentOS 6* for PXE server +2. At least two bare metal nodes to work with + +## High Level Design + +1. Manage the tftp directory + * /tftpboot/(coreos)(centos)(RHEL) + * /tftpboot/pxelinux.0/(MAC) -> linked to Linux image config file +2. Update per install the link for pxelinux +3. Update the DHCP config to reflect the host needing deployment +4. Setup nodes to deploy CoreOS creating a etcd cluster. +5. Have no access to the public [etcd discovery tool](https://discovery.etcd.io/). +6. Installing the CoreOS slaves to become Kubernetes nodes. + +## This Guides variables + +| Node Description | MAC | IP | +| :---------------------------- | :---------------: | :---------: | +| CoreOS/etcd/Kubernetes Master | d0:00:67:13:0d:00 | 10.20.30.40 | +| CoreOS Slave 1 | d0:00:67:13:0d:01 | 10.20.30.41 | +| CoreOS Slave 2 | d0:00:67:13:0d:02 | 10.20.30.42 | + + +## Setup PXELINUX CentOS + +To setup CentOS PXELINUX environment there is a complete [guide here](http://docs.fedoraproject.org/en-US/Fedora/7/html/Installation_Guide/ap-pxe-server.html). This section is the abbreviated version. + +1. Install packages needed on CentOS + + sudo yum install tftp-server dhcp syslinux + +2. `vi /etc/xinetd.d/tftp` to enable tftp service and change disable to 'no' + disable = no + +3. Copy over the syslinux images we will need. + + su - + mkdir -p /tftpboot + cd /tftpboot + cp /usr/share/syslinux/pxelinux.0 /tftpboot + cp /usr/share/syslinux/menu.c32 /tftpboot + cp /usr/share/syslinux/memdisk /tftpboot + cp /usr/share/syslinux/mboot.c32 /tftpboot + cp /usr/share/syslinux/chain.c32 /tftpboot + + /sbin/service dhcpd start + /sbin/service xinetd start + /sbin/chkconfig tftp on + +4. Setup default boot menu + + mkdir /tftpboot/pxelinux.cfg + touch /tftpboot/pxelinux.cfg/default + +5. Edit the menu `vi /tftpboot/pxelinux.cfg/default` + + default menu.c32 + prompt 0 + timeout 15 + ONTIMEOUT local + display boot.msg + + MENU TITLE Main Menu + + LABEL local + MENU LABEL Boot local hard drive + LOCALBOOT 0 + +Now you should have a working PXELINUX setup to image CoreOS nodes. You can verify the services by using VirtualBox locally or with bare metal servers. + +## Adding CoreOS to PXE + +This section describes how to setup the CoreOS images to live alongside a pre-existing PXELINUX environment. + +1. Find or create the TFTP root directory that everything will be based off of. + * For this document we will assume `/tftpboot/` is our root directory. +2. Once we know and have our tftp root directory we will create a new directory structure for our CoreOS images. +3. Download the CoreOS PXE files provided by the CoreOS team. + + MY_TFTPROOT_DIR=/tftpboot + mkdir -p $MY_TFTPROOT_DIR/images/coreos/ + cd $MY_TFTPROOT_DIR/images/coreos/ + wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe.vmlinuz + wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe.vmlinuz.sig + wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe_image.cpio.gz + wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe_image.cpio.gz.sig + gpg --verify coreos_production_pxe.vmlinuz.sig + gpg --verify coreos_production_pxe_image.cpio.gz.sig + +4. Edit the menu `vi /tftpboot/pxelinux.cfg/default` again + + default menu.c32 + prompt 0 + timeout 300 + ONTIMEOUT local + display boot.msg + + MENU TITLE Main Menu + + LABEL local + MENU LABEL Boot local hard drive + LOCALBOOT 0 + + MENU BEGIN CoreOS Menu + + LABEL coreos-master + MENU LABEL CoreOS Master + KERNEL images/coreos/coreos_production_pxe.vmlinuz + APPEND initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http:///pxe-cloud-config-single-master.yml + + LABEL coreos-slave + MENU LABEL CoreOS Slave + KERNEL images/coreos/coreos_production_pxe.vmlinuz + APPEND initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http:///pxe-cloud-config-slave.yml + MENU END + +This configuration file will now boot from local drive but have the option to PXE image CoreOS. + +## DHCP configuration + +This section covers configuring the DHCP server to hand out our new images. In this case we are assuming that there are other servers that will boot alongside other images. + +1. Add the `filename` to the _host_ or _subnet_ sections. + + filename "/tftpboot/pxelinux.0"; + +2. At this point we want to make pxelinux configuration files that will be the templates for the different CoreOS deployments. + + subnet 10.20.30.0 netmask 255.255.255.0 { + next-server 10.20.30.242; + option broadcast-address 10.20.30.255; + filename ""; + + ... + # http://www.syslinux.org/wiki/index.php/PXELINUX + host core_os_master { + hardware ethernet d0:00:67:13:0d:00; + option routers 10.20.30.1; + fixed-address 10.20.30.40; + option domain-name-servers 10.20.30.242; + filename "/pxelinux.0"; + } + host core_os_slave { + hardware ethernet d0:00:67:13:0d:01; + option routers 10.20.30.1; + fixed-address 10.20.30.41; + option domain-name-servers 10.20.30.242; + filename "/pxelinux.0"; + } + host core_os_slave2 { + hardware ethernet d0:00:67:13:0d:02; + option routers 10.20.30.1; + fixed-address 10.20.30.42; + option domain-name-servers 10.20.30.242; + filename "/pxelinux.0"; + } + ... + } + +We will be specifying the node configuration later in the guide. + +## Kubernetes + +To deploy our configuration we need to create an `etcd` master. To do so we want to pxe CoreOS with a specific cloud-config.yml. There are two options we have here. +1. Is to template the cloud config file and programmatically create new static configs for different cluster setups. +2. Have a service discovery protocol running in our stack to do auto discovery. + +This demo we just make a static single `etcd` server to host our Kubernetes and `etcd` master servers. + +Since we are OFFLINE here most of the helping processes in CoreOS and Kubernetes are then limited. To do our setup we will then have to download and serve up our binaries for Kubernetes in our local environment. + +An easy solution is to host a small web server on the DHCP/TFTP host for all our binaries to make them available to the local CoreOS PXE machines. + +To get this up and running we are going to setup a simple `apache` server to serve our binaries needed to bootstrap Kubernetes. + +This is on the PXE server from the previous section: + + rm /etc/httpd/conf.d/welcome.conf + cd /var/www/html/ + wget -O kube-register https://github.com/kelseyhightower/kube-register/releases/download/v0.0.2/kube-register-0.0.2-linux-amd64 + wget -O setup-network-environment https://github.com/kelseyhightower/setup-network-environment/releases/download/v1.0.0/setup-network-environment + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubernetes --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-apiserver --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-controller-manager --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-scheduler --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubectl --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubecfg --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubelet --no-check-certificate + wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-proxy --no-check-certificate + wget -O flanneld https://storage.googleapis.com/k8s/flanneld --no-check-certificate + +This sets up our binaries we need to run Kubernetes. This would need to be enhanced to download from the Internet for updates in the future. + +Now for the good stuff! + +## Cloud Configs + +The following config files are tailored for the OFFLINE version of a Kubernetes deployment. + +These are based on the work found here: [master.yml](cloud-configs/master.yaml), [node.yml](cloud-configs/node.yaml) + +To make the setup work, you need to replace a few placeholders: + + - Replace `` with your PXE server ip address (e.g. 10.20.30.242) + - Replace `` with the Kubernetes master ip address (e.g. 10.20.30.40) + - If you run a private docker registry, replace `rdocker.example.com` with your docker registry dns name. + - If you use a proxy, replace `rproxy.example.com` with your proxy server (and port) + - Add your own SSH public key(s) to the cloud config at the end + +### master.yml + +On the PXE server make and fill in the variables `vi /var/www/html/coreos/pxe-cloud-config-master.yml`. + + + #cloud-config + --- + write_files: + - path: /opt/bin/waiter.sh + owner: root + content: | + #! /usr/bin/bash + until curl http://127.0.0.1:4001/v2/machines; do sleep 2; done + - path: /opt/bin/kubernetes-download.sh + owner: root + permissions: 0755 + content: | + #! /usr/bin/bash + /usr/bin/wget -N -P "/opt/bin" "http:///kubectl" + /usr/bin/wget -N -P "/opt/bin" "http:///kubernetes" + /usr/bin/wget -N -P "/opt/bin" "http:///kubecfg" + chmod +x /opt/bin/* + - path: /etc/profile.d/opt-path.sh + owner: root + permissions: 0755 + content: | + #! /usr/bin/bash + PATH=$PATH/opt/bin + coreos: + units: + - name: 10-eno1.network + runtime: true + content: | + [Match] + Name=eno1 + [Network] + DHCP=yes + - name: 20-nodhcp.network + runtime: true + content: | + [Match] + Name=en* + [Network] + DHCP=none + - name: get-kube-tools.service + runtime: true + command: start + content: | + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStart=/opt/bin/kubernetes-download.sh + RemainAfterExit=yes + Type=oneshot + - name: setup-network-environment.service + command: start + content: | + [Unit] + Description=Setup Network Environment + Documentation=https://github.com/kelseyhightower/setup-network-environment + Requires=network-online.target + After=network-online.target + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///setup-network-environment + ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment + ExecStart=/opt/bin/setup-network-environment + RemainAfterExit=yes + Type=oneshot + - name: etcd.service + command: start + content: | + [Unit] + Description=etcd + Requires=setup-network-environment.service + After=setup-network-environment.service + [Service] + EnvironmentFile=/etc/network-environment + User=etcd + PermissionsStartOnly=true + ExecStart=/usr/bin/etcd \ + --name ${DEFAULT_IPV4} \ + --addr ${DEFAULT_IPV4}:4001 \ + --bind-addr 0.0.0.0 \ + --cluster-active-size 1 \ + --data-dir /var/lib/etcd \ + --http-read-timeout 86400 \ + --peer-addr ${DEFAULT_IPV4}:7001 \ + --snapshot true + Restart=always + RestartSec=10s + - name: fleet.socket + command: start + content: | + [Socket] + ListenStream=/var/run/fleet.sock + - name: fleet.service + command: start + content: | + [Unit] + Description=fleet daemon + Wants=etcd.service + After=etcd.service + Wants=fleet.socket + After=fleet.socket + [Service] + Environment="FLEET_ETCD_SERVERS=http://127.0.0.1:4001" + Environment="FLEET_METADATA=role=master" + ExecStart=/usr/bin/fleetd + Restart=always + RestartSec=10s + - name: etcd-waiter.service + command: start + content: | + [Unit] + Description=etcd waiter + Wants=network-online.target + Wants=etcd.service + After=etcd.service + After=network-online.target + Before=flannel.service + Before=setup-network-environment.service + [Service] + ExecStartPre=/usr/bin/chmod +x /opt/bin/waiter.sh + ExecStart=/usr/bin/bash /opt/bin/waiter.sh + RemainAfterExit=true + Type=oneshot + - name: flannel.service + command: start + content: | + [Unit] + Wants=etcd-waiter.service + After=etcd-waiter.service + Requires=etcd.service + After=etcd.service + After=network-online.target + Wants=network-online.target + Description=flannel is an etcd backed overlay network for containers + [Service] + Type=notify + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///flanneld + ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld + ExecStartPre=-/usr/bin/etcdctl mk /coreos.com/network/config '{"Network":"10.100.0.0/16", "Backend": {"Type": "vxlan"}}' + ExecStart=/opt/bin/flanneld + - name: kube-apiserver.service + command: start + content: | + [Unit] + Description=Kubernetes API Server + Documentation=https://github.com/kubernetes/kubernetes + Requires=etcd.service + After=etcd.service + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///kube-apiserver + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-apiserver + ExecStart=/opt/bin/kube-apiserver \ + --address=0.0.0.0 \ + --port=8080 \ + --service-cluster-ip-range=10.100.0.0/16 \ + --etcd-servers=http://127.0.0.1:4001 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-controller-manager.service + command: start + content: | + [Unit] + Description=Kubernetes Controller Manager + Documentation=https://github.com/kubernetes/kubernetes + Requires=kube-apiserver.service + After=kube-apiserver.service + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///kube-controller-manager + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-controller-manager + ExecStart=/opt/bin/kube-controller-manager \ + --master=127.0.0.1:8080 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-scheduler.service + command: start + content: | + [Unit] + Description=Kubernetes Scheduler + Documentation=https://github.com/kubernetes/kubernetes + Requires=kube-apiserver.service + After=kube-apiserver.service + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///kube-scheduler + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-scheduler + ExecStart=/opt/bin/kube-scheduler --master=127.0.0.1:8080 + Restart=always + RestartSec=10 + - name: kube-register.service + command: start + content: | + [Unit] + Description=Kubernetes Registration Service + Documentation=https://github.com/kelseyhightower/kube-register + Requires=kube-apiserver.service + After=kube-apiserver.service + Requires=fleet.service + After=fleet.service + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///kube-register + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-register + ExecStart=/opt/bin/kube-register \ + --metadata=role=node \ + --fleet-endpoint=unix:///var/run/fleet.sock \ + --healthz-port=10248 \ + --api-endpoint=http://127.0.0.1:8080 + Restart=always + RestartSec=10 + update: + group: stable + reboot-strategy: off + ssh_authorized_keys: + - ssh-rsa AAAAB3NzaC1yc2EAAAAD... + + +### node.yml + +On the PXE server make and fill in the variables `vi /var/www/html/coreos/pxe-cloud-config-slave.yml`. + + #cloud-config + --- + write_files: + - path: /etc/default/docker + content: | + DOCKER_EXTRA_OPTS='--insecure-registry="rdocker.example.com:5000"' + coreos: + units: + - name: 10-eno1.network + runtime: true + content: | + [Match] + Name=eno1 + [Network] + DHCP=yes + - name: 20-nodhcp.network + runtime: true + content: | + [Match] + Name=en* + [Network] + DHCP=none + - name: etcd.service + mask: true + - name: docker.service + drop-ins: + - name: 50-insecure-registry.conf + content: | + [Service] + Environment="HTTP_PROXY=http://rproxy.example.com:3128/" "NO_PROXY=localhost,127.0.0.0/8,rdocker.example.com" + - name: fleet.service + command: start + content: | + [Unit] + Description=fleet daemon + Wants=fleet.socket + After=fleet.socket + [Service] + Environment="FLEET_ETCD_SERVERS=http://:4001" + Environment="FLEET_METADATA=role=node" + ExecStart=/usr/bin/fleetd + Restart=always + RestartSec=10s + - name: flannel.service + command: start + content: | + [Unit] + After=network-online.target + Wants=network-online.target + Description=flannel is an etcd backed overlay network for containers + [Service] + Type=notify + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///flanneld + ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld + ExecStart=/opt/bin/flanneld -etcd-endpoints http://:4001 + - name: docker.service + command: start + content: | + [Unit] + After=flannel.service + Wants=flannel.service + Description=Docker Application Container Engine + Documentation=http://docs.docker.io + [Service] + EnvironmentFile=-/etc/default/docker + EnvironmentFile=/run/flannel/subnet.env + ExecStartPre=/bin/mount --make-rprivate / + ExecStart=/usr/bin/docker -d --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} -s=overlay -H fd:// ${DOCKER_EXTRA_OPTS} + [Install] + WantedBy=multi-user.target + - name: setup-network-environment.service + command: start + content: | + [Unit] + Description=Setup Network Environment + Documentation=https://github.com/kelseyhightower/setup-network-environment + Requires=network-online.target + After=network-online.target + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///setup-network-environment + ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment + ExecStart=/opt/bin/setup-network-environment + RemainAfterExit=yes + Type=oneshot + - name: kube-proxy.service + command: start + content: | + [Unit] + Description=Kubernetes Proxy + Documentation=https://github.com/kubernetes/kubernetes + Requires=setup-network-environment.service + After=setup-network-environment.service + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///kube-proxy + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-proxy + ExecStart=/opt/bin/kube-proxy \ + --etcd-servers=http://:4001 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-kubelet.service + command: start + content: | + [Unit] + Description=Kubernetes Kubelet + Documentation=https://github.com/kubernetes/kubernetes + Requires=setup-network-environment.service + After=setup-network-environment.service + [Service] + EnvironmentFile=/etc/network-environment + ExecStartPre=/usr/bin/wget -N -P /opt/bin http:///kubelet + ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet + ExecStart=/opt/bin/kubelet \ + --address=0.0.0.0 \ + --port=10250 \ + --hostname-override=${DEFAULT_IPV4} \ + --api-servers=:8080 \ + --healthz-bind-address=0.0.0.0 \ + --healthz-port=10248 \ + --logtostderr=true + Restart=always + RestartSec=10 + update: + group: stable + reboot-strategy: off + ssh_authorized_keys: + - ssh-rsa AAAAB3NzaC1yc2EAAAAD... + + +## New pxelinux.cfg file + +Create a pxelinux target file for a _slave_ node: `vi /tftpboot/pxelinux.cfg/coreos-node-slave` + + default coreos + prompt 1 + timeout 15 + + display boot.msg + + label coreos + menu default + kernel images/coreos/coreos_production_pxe.vmlinuz + append initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http:///coreos/pxe-cloud-config-slave.yml console=tty0 console=ttyS0 coreos.autologin=tty1 coreos.autologin=ttyS0 + +And one for the _master_ node: `vi /tftpboot/pxelinux.cfg/coreos-node-master` + + default coreos + prompt 1 + timeout 15 + + display boot.msg + + label coreos + menu default + kernel images/coreos/coreos_production_pxe.vmlinuz + append initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http:///coreos/pxe-cloud-config-master.yml console=tty0 console=ttyS0 coreos.autologin=tty1 coreos.autologin=ttyS0 + +## Specify the pxelinux targets + +Now that we have our new targets setup for master and slave we want to configure the specific hosts to those targets. We will do this by using the pxelinux mechanism of setting a specific MAC addresses to a specific pxelinux.cfg file. + +Refer to the MAC address table in the beginning of this guide. Documentation for more details can be found [here](http://www.syslinux.org/wiki/index.php/PXELINUX). + + cd /tftpboot/pxelinux.cfg + ln -s coreos-node-master 01-d0-00-67-13-0d-00 + ln -s coreos-node-slave 01-d0-00-67-13-0d-01 + ln -s coreos-node-slave 01-d0-00-67-13-0d-02 + + +Reboot these servers to get the images PXEd and ready for running containers! + +## Creating test pod + +Now that the CoreOS with Kubernetes installed is up and running lets spin up some Kubernetes pods to demonstrate the system. + +See [a simple nginx example](../../../docs/user-guide/simple-nginx.html) to try out your new cluster. + +For more complete applications, please look in the [examples directory](../../../examples/). + +## Helping commands for debugging + +List all keys in etcd: + + etcdctl ls --recursive + +List fleet machines + + fleetctl list-machines + +Check system status of services on master: + + systemctl status kube-apiserver + systemctl status kube-controller-manager + systemctl status kube-scheduler + systemctl status kube-register + +Check system status of services on a node: + + systemctl status kube-kubelet + systemctl status docker.service + +List Kubernetes + + kubectl get pods + kubectl get nodes + + +Kill all pods: + + for i in `kubectl get pods | awk '{print $1}'`; do kubectl stop pod $i; done + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos/bare_metal_offline.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/coreos/cloud-configs/master.yaml b/v1.1/docs/getting-started-guides/coreos/cloud-configs/master.yaml new file mode 100644 index 0000000000000..c3b703d1d79d1 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/cloud-configs/master.yaml @@ -0,0 +1,140 @@ +#cloud-config + +--- +write-files: + - path: /etc/conf.d/nfs + permissions: '0644' + content: | + OPTS_RPC_MOUNTD="" + - path: /opt/bin/wupiao + permissions: '0755' + content: | + #!/bin/bash + # [w]ait [u]ntil [p]ort [i]s [a]ctually [o]pen + [ -n "$1" ] && \ + until curl -o /dev/null -sIf http://${1}; do \ + sleep 1 && echo .; + done; + exit $? + +hostname: master +coreos: + etcd2: + name: master + listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 + advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001 + initial-cluster-token: k8s_etcd + listen-peer-urls: http://$private_ipv4:2380,http://$private_ipv4:7001 + initial-advertise-peer-urls: http://$private_ipv4:2380 + initial-cluster: master=http://$private_ipv4:2380 + initial-cluster-state: new + fleet: + metadata: "role=master" + units: + - name: generate-serviceaccount-key.service + command: start + content: | + [Unit] + Description=Generate service-account key file + + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStart=/bin/openssl genrsa -out /opt/bin/kube-serviceaccount.key 2048 2>/dev/null + RemainAfterExit=yes + Type=oneshot + - name: setup-network-environment.service + command: start + content: | + [Unit] + Description=Setup Network Environment + Documentation=https://github.com/kelseyhightower/setup-network-environment + Requires=network-online.target + After=network-online.target + + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/curl -L -o /opt/bin/setup-network-environment -z /opt/bin/setup-network-environment https://github.com/kelseyhightower/setup-network-environment/releases/download/v1.0.0/setup-network-environment + ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment + ExecStart=/opt/bin/setup-network-environment + RemainAfterExit=yes + Type=oneshot + - name: fleet.service + command: start + - name: flanneld.service + command: start + drop-ins: + - name: 50-network-config.conf + content: | + [Unit] + Requires=etcd2.service + [Service] + ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{"Network":"10.244.0.0/16", "Backend": {"Type": "vxlan"}}' + - name: docker.service + command: start + - name: kube-apiserver.service + command: start + content: | + [Unit] + Description=Kubernetes API Server + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=setup-network-environment.service etcd2.service generate-serviceaccount-key.service + After=setup-network-environment.service etcd2.service generate-serviceaccount-key.service + + [Service] + EnvironmentFile=/etc/network-environment + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-apiserver -z /opt/bin/kube-apiserver https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kube-apiserver + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-apiserver + ExecStartPre=/opt/bin/wupiao 127.0.0.1:2379/v2/machines + ExecStart=/opt/bin/kube-apiserver \ + --service-account-key-file=/opt/bin/kube-serviceaccount.key \ + --service-account-lookup=false \ + --admission-control=NamespaceLifecycle,NamespaceAutoProvision,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota \ + --runtime-config=api/v1 \ + --allow-privileged=true \ + --insecure-bind-address=0.0.0.0 \ + --insecure-port=8080 \ + --kubelet-https=true \ + --secure-port=6443 \ + --service-cluster-ip-range=10.100.0.0/16 \ + --etcd-servers=http://127.0.0.1:2379 \ + --public-address-override=${DEFAULT_IPV4} \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-controller-manager.service + command: start + content: | + [Unit] + Description=Kubernetes Controller Manager + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=kube-apiserver.service + After=kube-apiserver.service + + [Service] + ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-controller-manager -z /opt/bin/kube-controller-manager https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kube-controller-manager + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-controller-manager + ExecStart=/opt/bin/kube-controller-manager \ + --service-account-private-key-file=/opt/bin/kube-serviceaccount.key \ + --master=127.0.0.1:8080 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-scheduler.service + command: start + content: | + [Unit] + Description=Kubernetes Scheduler + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=kube-apiserver.service + After=kube-apiserver.service + + [Service] + ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-scheduler -z /opt/bin/kube-scheduler https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kube-scheduler + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-scheduler + ExecStart=/opt/bin/kube-scheduler --master=127.0.0.1:8080 + Restart=always + RestartSec=10 + update: + group: alpha + reboot-strategy: off diff --git a/v1.1/docs/getting-started-guides/coreos/cloud-configs/node.yaml b/v1.1/docs/getting-started-guides/coreos/cloud-configs/node.yaml new file mode 100644 index 0000000000000..b9a4cafcd988b --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/cloud-configs/node.yaml @@ -0,0 +1,98 @@ +#cloud-config +write-files: + - path: /opt/bin/wupiao + permissions: '0755' + content: | + #!/bin/bash + # [w]ait [u]ntil [p]ort [i]s [a]ctually [o]pen + [ -n "$1" ] && [ -n "$2" ] && while ! curl --output /dev/null \ + --silent --head --fail \ + http://${1}:${2}; do sleep 1 && echo -n .; done; + exit $? +coreos: + etcd2: + listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 + advertise-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 + initial-cluster: master=http://:2380 + proxy: on + fleet: + metadata: "role=node" + units: + - name: fleet.service + command: start + - name: flanneld.service + command: start + drop-ins: + - name: 50-network-config.conf + content: | + [Unit] + Requires=etcd2.service + [Service] + ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{"Network":"10.244.0.0/16", "Backend": {"Type": "vxlan"}}' + - name: docker.service + command: start + - name: setup-network-environment.service + command: start + content: | + [Unit] + Description=Setup Network Environment + Documentation=https://github.com/kelseyhightower/setup-network-environment + Requires=network-online.target + After=network-online.target + + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/curl -L -o /opt/bin/setup-network-environment -z /opt/bin/setup-network-environment https://github.com/kelseyhightower/setup-network-environment/releases/download/v1.0.0/setup-network-environment + ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment + ExecStart=/opt/bin/setup-network-environment + RemainAfterExit=yes + Type=oneshot + - name: kube-proxy.service + command: start + content: | + [Unit] + Description=Kubernetes Proxy + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=setup-network-environment.service + After=setup-network-environment.service + + [Service] + ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-proxy -z /opt/bin/kube-proxy https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kube-proxy + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-proxy + # wait for kubernetes master to be up and ready + ExecStartPre=/opt/bin/wupiao 8080 + ExecStart=/opt/bin/kube-proxy \ + --master=:8080 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-kubelet.service + command: start + content: | + [Unit] + Description=Kubernetes Kubelet + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=setup-network-environment.service + After=setup-network-environment.service + + [Service] + EnvironmentFile=/etc/network-environment + ExecStartPre=/usr/bin/curl -L -o /opt/bin/kubelet -z /opt/bin/kubelet https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kubelet + ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet + # wait for kubernetes master to be up and ready + ExecStartPre=/opt/bin/wupiao 8080 + ExecStart=/opt/bin/kubelet \ + --address=0.0.0.0 \ + --port=10250 \ + --hostname-override=${DEFAULT_IPV4} \ + --api-servers=:8080 \ + --allow-privileged=true \ + --logtostderr=true \ + --cadvisor-port=4194 \ + --healthz-bind-address=0.0.0.0 \ + --healthz-port=10248 + Restart=always + RestartSec=10 + update: + group: alpha + reboot-strategy: off diff --git a/v1.1/docs/getting-started-guides/coreos/coreos_multinode_cluster.md b/v1.1/docs/getting-started-guides/coreos/coreos_multinode_cluster.md new file mode 100644 index 0000000000000..218d052ea53c3 --- /dev/null +++ b/v1.1/docs/getting-started-guides/coreos/coreos_multinode_cluster.md @@ -0,0 +1,248 @@ +--- +layout: docwithnav +title: "CoreOS Multinode Cluster" +--- + + + + + +# CoreOS Multinode Cluster + +Use the [master.yaml](cloud-configs/master.yaml) and [node.yaml](cloud-configs/node.yaml) cloud-configs to provision a multi-node Kubernetes cluster. + +> **Attention**: This requires at least CoreOS version **[695.0.0][coreos695]**, which includes `etcd2`. + +[coreos695]: https://coreos.com/releases/#695.0.0 + +## Overview + +* Provision the master node +* Capture the master node private IP address +* Edit node.yaml +* Provision one or more worker nodes + +### AWS + +*Attention:* Replace `` below for a [suitable version of CoreOS image for AWS](https://coreos.com/docs/running-coreos/cloud-providers/ec2/). + +#### Provision the Master + +{% highlight sh %} +{% raw %} +aws ec2 create-security-group --group-name kubernetes --description "Kubernetes Security Group" +aws ec2 authorize-security-group-ingress --group-name kubernetes --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-name kubernetes --protocol tcp --port 80 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-name kubernetes --source-security-group-name kubernetes +{% endraw %} +{% endhighlight %} + +{% highlight sh %} +{% raw %} +aws ec2 run-instances \ +--image-id \ +--key-name \ +--region us-west-2 \ +--security-groups kubernetes \ +--instance-type m3.medium \ +--user-data file://master.yaml +{% endraw %} +{% endhighlight %} + +#### Capture the private IP address + +{% highlight sh %} +{% raw %} +aws ec2 describe-instances --instance-id +{% endraw %} +{% endhighlight %} + +#### Edit node.yaml + +Edit `node.yaml` and replace all instances of `` with the private IP address of the master node. + +#### Provision worker nodes + +{% highlight sh %} +{% raw %} +aws ec2 run-instances \ +--count 1 \ +--image-id \ +--key-name \ +--region us-west-2 \ +--security-groups kubernetes \ +--instance-type m3.medium \ +--user-data file://node.yaml +{% endraw %} +{% endhighlight %} + +### Google Compute Engine (GCE) + +*Attention:* Replace `` below for a [suitable version of CoreOS image for Google Compute Engine](https://coreos.com/docs/running-coreos/cloud-providers/google-compute-engine/). + +#### Provision the Master + +{% highlight sh %} +{% raw %} +gcloud compute instances create master \ +--image-project coreos-cloud \ +--image \ +--boot-disk-size 200GB \ +--machine-type n1-standard-1 \ +--zone us-central1-a \ +--metadata-from-file user-data=master.yaml +{% endraw %} +{% endhighlight %} + +#### Capture the private IP address + +{% highlight sh %} +{% raw %} +gcloud compute instances list +{% endraw %} +{% endhighlight %} + +#### Edit node.yaml + +Edit `node.yaml` and replace all instances of `` with the private IP address of the master node. + +#### Provision worker nodes + +{% highlight sh %} +{% raw %} +gcloud compute instances create node1 \ +--image-project coreos-cloud \ +--image \ +--boot-disk-size 200GB \ +--machine-type n1-standard-1 \ +--zone us-central1-a \ +--metadata-from-file user-data=node.yaml +{% endraw %} +{% endhighlight %} + +#### Establish network connectivity + +Next, setup an ssh tunnel to the master so you can run kubectl from your local host. +In one terminal, run `gcloud compute ssh master --ssh-flag="-L 8080:127.0.0.1:8080"` and in a second +run `gcloud compute ssh master --ssh-flag="-R 8080:127.0.0.1:8080"`. + +### OpenStack + +These instructions are for running on the command line. Most of this you can also do through the Horizon dashboard. +These instructions were tested on the Ice House release on a Metacloud distribution of OpenStack but should be similar if not the same across other versions/distributions of OpenStack. + +#### Make sure you can connect with OpenStack + +Make sure the environment variables are set for OpenStack such as: + +{% highlight sh %} +{% raw %} +OS_TENANT_ID +OS_PASSWORD +OS_AUTH_URL +OS_USERNAME +OS_TENANT_NAME +{% endraw %} +{% endhighlight %} + +Test this works with something like: + +``` +{% raw %} +nova list +{% endraw %} +``` + +#### Get a Suitable CoreOS Image + +You'll need a [suitable version of CoreOS image for OpenStack](https://coreos.com/os/docs/latest/booting-on-openstack.html) +Once you download that, upload it to glance. An example is shown below: + +{% highlight sh %} +{% raw %} +glance image-create --name CoreOS723 \ +--container-format bare --disk-format qcow2 \ +--file coreos_production_openstack_image.img \ +--is-public True +{% endraw %} +{% endhighlight %} + +#### Create security group + +{% highlight sh %} +{% raw %} +nova secgroup-create kubernetes "Kubernetes Security Group" +nova secgroup-add-rule kubernetes tcp 22 22 0.0.0.0/0 +nova secgroup-add-rule kubernetes tcp 80 80 0.0.0.0/0 +{% endraw %} +{% endhighlight %} + +#### Provision the Master + +{% highlight sh %} +{% raw %} +nova boot \ +--image \ +--key-name \ +--flavor \ +--security-group kubernetes \ +--user-data files/master.yaml \ +kube-master +{% endraw %} +{% endhighlight %} + +`````` is the CoreOS image name. In our example we can use the image we created in the previous step and put in 'CoreOS723' + +`````` is the keypair name that you already generated to access the instance. + +`````` is the flavor ID you use to size the instance. Run ```nova flavor-list``` to get the IDs. 3 on the system this was tested with gives the m1.large size. + +The important part is to ensure you have the files/master.yml as this is what will do all the post boot configuration. This path is relevant so we are assuming in this example that you are running the nova command in a directory where there is a subdirectory called files that has the master.yml file in it. Absolute paths also work. + +Next, assign it a public IP address: + +``` +{% raw %} +nova floating-ip-list +{% endraw %} +``` + +Get an IP address that's free and run: + +``` +{% raw %} +nova floating-ip-associate kube-master +{% endraw %} +``` + +where `````` is the IP address that was available from the ```nova floating-ip-list``` command. + +#### Provision Worker Nodes + +Edit ```node.yaml``` and replace all instances of `````` with the private IP address of the master node. You can get this by running ```nova show kube-master``` assuming you named your instance kube master. This is not the floating IP address you just assigned it. + +{% highlight sh %} +{% raw %} +nova boot \ +--image \ +--key-name \ +--flavor \ +--security-group kubernetes \ +--user-data files/node.yaml \ +minion01 +{% endraw %} +{% endhighlight %} + +This is basically the same as the master nodes but with the node.yaml post-boot script instead of the master. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos/coreos_multinode_cluster.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/dcos.md b/v1.1/docs/getting-started-guides/dcos.md new file mode 100644 index 0000000000000..75bf1bf6bc9d1 --- /dev/null +++ b/v1.1/docs/getting-started-guides/dcos.md @@ -0,0 +1,189 @@ +--- +layout: docwithnav +title: "Getting started with Kubernetes on DCOS" +--- + + + + + +Getting started with Kubernetes on DCOS +---------------------------------------- + +This guide will walk you through installing [Kubernetes-Mesos](https://github.com/mesosphere/kubernetes-mesos) on [Datacenter Operating System (DCOS)](https://mesosphere.com/product/) with the [DCOS CLI](https://github.com/mesosphere/dcos-cli) and operating Kubernetes with the [DCOS Kubectl plugin](https://github.com/mesosphere/dcos-kubectl). + +**Table of Contents** + + + - [About Kubernetes on DCOS](#about-kubernetes-on-dcos) + - [Resources](#resources) + - [Prerequisites](#prerequisites) + - [Install](#install) + - [Uninstall](#uninstall) + + + + +## About Kubernetes on DCOS + +DCOS is system software that manages computer cluster hardware and software resources and provides common services for distributed applications. Among other services, it provides [Apache Mesos](http://mesos.apache.org/) as its cluster kernel and [Marathon](https://mesosphere.github.io/marathon/) as its init system. With DCOS CLI, Mesos frameworks like [Kubernetes-Mesos](https://github.com/mesosphere/kubernetes-mesos) can be installed with a single command. + +Another feature of the DCOS CLI is that it allows plugins like the [DCOS Kubectl plugin](https://github.com/mesosphere/dcos-kubectl). This allows for easy access to a version-compatible Kubectl without having to manually download or install. + +Further information about the benefits of installing Kubernetes on DCOS can be found in the [Kubernetes-Mesos documentation](https://releases.k8s.io/release-1.1/contrib/mesos/README.md). + +For more details about the Kubernetes DCOS packaging, see the [Kubernetes-Mesos project](https://github.com/mesosphere/kubernetes-mesos). + +Since Kubernetes-Mesos is still alpha, it is a good idea to familiarize yourself with the [current known issues](https://releases.k8s.io/release-1.1/contrib/mesos/docs/issues.md) which may limit or modify the behavior of Kubernetes on DCOS. + +If you have problems completing the steps below, please [file an issue against the kubernetes-mesos project](https://github.com/mesosphere/kubernetes-mesos/issues). + + +## Resources + +Explore the following resources for more information about Kubernetes, Kubernetes on Mesos/DCOS, and DCOS itself. + +- [DCOS Documentation](https://docs.mesosphere.com/) +- [Managing DCOS Services](https://docs.mesosphere.com/services/kubernetes/) +- [Kubernetes Examples](../../examples/README.html) +- [Kubernetes on Mesos Documentation](https://releases.k8s.io/release-1.1/contrib/mesos/README.md) +- [Kubernetes on Mesos Release Notes](https://github.com/mesosphere/kubernetes-mesos/releases) +- [Kubernetes on DCOS Package Source](https://github.com/mesosphere/kubernetes-mesos) + + +## Prerequisites + +- A running [DCOS cluster](https://mesosphere.com/product/) + - [DCOS Community Edition](https://docs.mesosphere.com/install/) is currently available on [AWS](https://mesosphere.com/amazon/). + - [DCOS Enterprise Edition](https://mesosphere.com/product/) can be deployed on virtual or bare metal machines. Contact sales@mesosphere.com for more info and to set up an engagement. +- [DCOS CLI](https://docs.mesosphere.com/install/cli/) installed locally + + +## Install + +1. Configure and validate the [Mesosphere Multiverse](https://github.com/mesosphere/multiverse) as a package source repository + + ``` +{% raw %} + $ dcos config prepend package.sources https://github.com/mesosphere/multiverse/archive/version-1.x.zip + $ dcos package update --validate +{% endraw %} + ``` + +2. Install etcd + + By default, the Kubernetes DCOS package starts a single-node etcd. In order to avoid state loss in the event of Kubernetes component container failure, install an HA [etcd-mesos](https://github.com/mesosphere/etcd-mesos) cluster on DCOS. + + ``` +{% raw %} + $ dcos package install etcd +{% endraw %} + ``` + +3. Verify that etcd is installed and healthy + + The etcd cluster takes a short while to deploy. Verify that `/etcd` is healthy before going on to the next step. + + ``` +{% raw %} + $ dcos marathon app list + ID MEM CPUS TASKS HEALTH DEPLOYMENT CONTAINER CMD + /etcd 128 0.2 1/1 1/1 --- DOCKER None +{% endraw %} + ``` + +4. Create Kubernetes installation configuration + + Configure Kubernetes to use the HA etcd installed on DCOS. + + ``` +{% raw %} + $ cat >/tmp/options.json < + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/dcos.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/docker-multinode.md b/v1.1/docs/getting-started-guides/docker-multinode.md new file mode 100644 index 0000000000000..4da0d3a5ea2e0 --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode.md @@ -0,0 +1,119 @@ +--- +layout: docwithnav +title: "Running Multi-Node Kubernetes Using Docker" +--- + + + + +Running Multi-Node Kubernetes Using Docker +------------------------------------------ + +_Note_: +These instructions are somewhat significantly more advanced than the [single node](docker.html) instructions. If you are +interested in just starting to explore Kubernetes, we recommend that you start there. + +_Note_: +There is a [bug](https://github.com/docker/docker/issues/14106) in Docker 1.7.0 that prevents this from working correctly. +Please install Docker 1.6.2 or Docker 1.7.1. + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Overview](#overview) + - [Bootstrap Docker](#bootstrap-docker) +- [Master Node](#master-node) +- [Adding a worker node](#adding-a-worker-node) +- [Deploy a DNS](#deploy-a-dns) +- [Testing your cluster](#testing-your-cluster) + +## Prerequisites + +1. You need a machine with docker of right version installed. + +## Overview + +This guide will set up a 2-node Kubernetes cluster, consisting of a _master_ node which hosts the API server and orchestrates work +and a _worker_ node which receives work from the master. You can repeat the process of adding worker nodes an arbitrary number of +times to create larger clusters. + +Here's a diagram of what the final result will look like: +![Kubernetes Single Node on Docker](k8s-docker.png) + +### Bootstrap Docker + +This guide also uses a pattern of running two instances of the Docker daemon + 1) A _bootstrap_ Docker instance which is used to start system daemons like `flanneld` and `etcd` + 2) A _main_ Docker instance which is used for the Kubernetes infrastructure and user's scheduled containers + +This pattern is necessary because the `flannel` daemon is responsible for setting up and managing the network that interconnects +all of the Docker containers created by Kubernetes. To achieve this, it must run outside of the _main_ Docker daemon. However, +it is still useful to use containers for deployment and management, so we create a simpler _bootstrap_ daemon to achieve this. + +You can specify k8s version on very node before install: + +``` +{% raw %} +export K8S_VERSION= +{% endraw %} +``` + +Otherwise, we'll use latest `hyperkube` image as default k8s version. + +## Master Node + +The first step in the process is to initialize the master node. + +Clone the Kubernetes repo, and run [master.sh](docker-multinode/master.sh) on the master machine with root: + +{% highlight sh %} +{% raw %} +cd kubernetes/docs/getting-started-guides/docker-multinode/ +./master.sh +{% endraw %} +{% endhighlight %} + +`Master done!` + +See [here](docker-multinode/master.html) for detailed instructions explanation. + +## Adding a worker node + +Once your master is up and running you can add one or more workers on different machines. + +Clone the Kubernetes repo, and run [worker.sh](docker-multinode/worker.sh) on the worker machine with root: + +{% highlight sh %} +{% raw %} +export MASTER_IP= +cd kubernetes/docs/getting-started-guides/docker-multinode/ +./worker.sh +{% endraw %} +{% endhighlight %} + +`Worker done!` + +See [here](docker-multinode/worker.html) for detailed instructions explanation. + +## Deploy a DNS + +See [here](docker-multinode/deployDNS.html) for instructions. + +## Testing your cluster + +Once your cluster has been created you can [test it out](docker-multinode/testing.html) + +For more complete applications, please look in the [examples directory](../../examples/) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/docker-multinode.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/docker-multinode/deployDNS.md b/v1.1/docs/getting-started-guides/docker-multinode/deployDNS.md new file mode 100644 index 0000000000000..4edbe926a10c3 --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/deployDNS.md @@ -0,0 +1,75 @@ +--- +layout: docwithnav +title: "Deploy DNS" +--- + + + + + +## Deploy DNS + +### Get the template file + +First of all, download the template dns rc and svc file from + +[skydns-rc template](skydns-rc.yaml.in) + +[skydns-svc template](skydns-svc.yaml.in) + +### Set env + +Then you need to set `DNS_REPLICAS` , `DNS_DOMAIN` , `DNS_SERVER_IP` , `KUBE_SERVER` ENV. + +``` +{% raw %} +$ export DNS_REPLICAS=1 + +$ export DNS_DOMAIN=cluster.local # specify in startup parameter `--cluster-domain` for containerized kubelet + +$ export DNS_SERVER_IP=10.0.0.10 # specify in startup parameter `--cluster-dns` for containerized kubelet + +$ export KUBE_SERVER=10.10.103.250 # your master server ip, you may change it +{% endraw %} +``` + +### Replace the corresponding value in the template. + +``` +{% raw %} +$ sed -e "s/{{ pillar\['dns_replicas'\] }}/${DNS_REPLICAS}/g;s/{{ pillar\['dns_domain'\] }}/${DNS_DOMAIN}/g;s/{kube_server_url}/${KUBE_SERVER}/g;" skydns-rc.yaml.in > ./skydns-rc.yaml + +$ sed -e "s/{{ pillar\['dns_server'\] }}/${DNS_SERVER_IP}/g" skydns-svc.yaml.in > ./skydns-svc.yaml +{% endraw %} +``` + +### Use `kubectl` to create skydns rc and service + + +``` +{% raw %} +$ kubectl -s "$KUBE_SERVER:8080" --namespace=kube-system create -f ./skydns-rc.yaml + +$ kubectl -s "$KUBE_SERVER:8080" --namespace=kube-system create -f ./skydns-svc.yaml +{% endraw %} +``` + +### Test if DNS works + +Follow [this link](https://releases.k8s.io/release-1.1/cluster/addons/dns#how-do-i-test-if-it-is-working) to check it out. + + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/docker-multinode/deployDNS.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/docker-multinode/master.md b/v1.1/docs/getting-started-guides/docker-multinode/master.md new file mode 100644 index 0000000000000..605c5083c355c --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/master.md @@ -0,0 +1,231 @@ +--- +layout: docwithnav +title: "Installing a Kubernetes Master Node via Docker" +--- + + + + + +## Installing a Kubernetes Master Node via Docker + +We'll begin by setting up the master node. For the purposes of illustration, we'll assume that the IP of this machine is `${MASTER_IP}` + +There are two main phases to installing the master: + * [Setting up `flanneld` and `etcd`](#setting-up-flanneld-and-etcd) + * [Starting the Kubernetes master components](#starting-the-kubernetes-master) + + +## Setting up flanneld and etcd + +_Note_: +There is a [bug](https://github.com/docker/docker/issues/14106) in Docker 1.7.0 that prevents this from working correctly. +Please install Docker 1.6.2 or Docker 1.7.1. + +### Setup Docker-Bootstrap + +We're going to use `flannel` to set up networking between Docker daemons. Flannel itself (and etcd on which it relies) will run inside of +Docker containers themselves. To achieve this, we need a separate "bootstrap" instance of the Docker daemon. This daemon will be started with +`--iptables=false` so that it can only run containers with `--net=host`. That's sufficient to bootstrap our system. + +Run: + +{% highlight sh %} +{% raw %} +sudo sh -c 'docker -d -H unix:///var/run/docker-bootstrap.sock -p /var/run/docker-bootstrap.pid --iptables=false --ip-masq=false --bridge=none --graph=/var/lib/docker-bootstrap 2> /var/log/docker-bootstrap.log 1> /dev/null &' +{% endraw %} +{% endhighlight %} + +_Important Note_: +If you are running this on a long running system, rather than experimenting, you should run the bootstrap Docker instance under something like SysV init, upstart or systemd so that it is restarted +across reboots and failures. + + +### Startup etcd for flannel and the API server to use + +Run: + +{% highlight sh %} +{% raw %} +sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data +{% endraw %} +{% endhighlight %} + +Next, you need to set a CIDR range for flannel. This CIDR should be chosen to be non-overlapping with any existing network you are using: + +{% highlight sh %} +{% raw %} +sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host gcr.io/google_containers/etcd:2.0.12 etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16" }' +{% endraw %} +{% endhighlight %} + + +### Set up Flannel on the master node + +Flannel is a network abstraction layer build by CoreOS, we will use it to provide simplified networking between our Pods of containers. + +Flannel re-configures the bridge that Docker uses for networking. As a result we need to stop Docker, reconfigure its networking, and then restart Docker. + +#### Bring down Docker + +To re-configure Docker to use flannel, we need to take docker down, run flannel and then restart Docker. + +Turning down Docker is system dependent, it may be: + +{% highlight sh %} +{% raw %} +sudo /etc/init.d/docker stop +{% endraw %} +{% endhighlight %} + +or + +{% highlight sh %} +{% raw %} +sudo systemctl stop docker +{% endraw %} +{% endhighlight %} + +or it may be something else. + +#### Run flannel + +Now run flanneld itself: + +{% highlight sh %} +{% raw %} +sudo docker -H unix:///var/run/docker-bootstrap.sock run -d --net=host --privileged -v /dev/net:/dev/net quay.io/coreos/flannel:0.5.0 +{% endraw %} +{% endhighlight %} + +The previous command should have printed a really long hash, copy this hash. + +Now get the subnet settings from flannel: + +{% highlight sh %} +{% raw %} +sudo docker -H unix:///var/run/docker-bootstrap.sock exec cat /run/flannel/subnet.env +{% endraw %} +{% endhighlight %} + +#### Edit the docker configuration + +You now need to edit the docker configuration to activate new flags. Again, this is system specific. + +This may be in `/etc/default/docker` or `/etc/systemd/service/docker.service` or it may be elsewhere. + +Regardless, you need to add the following to the docker command line: + +{% highlight sh %} +{% raw %} +--bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} +{% endraw %} +{% endhighlight %} + +#### Remove the existing Docker bridge + +Docker creates a bridge named `docker0` by default. You need to remove this: + +{% highlight sh %} +{% raw %} +sudo /sbin/ifconfig docker0 down +sudo brctl delbr docker0 +{% endraw %} +{% endhighlight %} + +You may need to install the `bridge-utils` package for the `brctl` binary. + +#### Restart Docker + +Again this is system dependent, it may be: + +{% highlight sh %} +{% raw %} +sudo /etc/init.d/docker start +{% endraw %} +{% endhighlight %} + +it may be: + +{% highlight sh %} +{% raw %} +systemctl start docker +{% endraw %} +{% endhighlight %} + +## Starting the Kubernetes Master + +Ok, now that your networking is set up, you can startup Kubernetes, this is the same as the single-node case, we will use the "main" instance of the Docker daemon for the Kubernetes components. + +{% highlight sh %} +{% raw %} +sudo docker run \ + --volume=/:/rootfs:ro \ + --volume=/sys:/sys:ro \ + --volume=/dev:/dev \ + --volume=/var/lib/docker/:/var/lib/docker:rw \ + --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ + --volume=/var/run:/var/run:rw \ + --net=host \ + --privileged=true \ + --pid=host \ + -d \ + gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube kubelet --api-servers=http://localhost:8080 --v=2 --address=0.0.0.0 --enable-server --hostname-override=127.0.0.1 --config=/etc/kubernetes/manifests-multi --cluster-dns=10.0.0.10 --cluster-domain=cluster.local +{% endraw %} +{% endhighlight %} + +> Note that `--cluster-dns` and `--cluster-domain` is used to deploy dns, feel free to discard them if dns is not needed. + +### Also run the service proxy + +{% highlight sh %} +{% raw %} +sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2 +{% endraw %} +{% endhighlight %} + +### Test it out + +At this point, you should have a functioning 1-node cluster. Let's test it out! + +Download the kubectl binary and make it available by editing your PATH ENV. +([OS X](http://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/darwin/amd64/kubectl)) +([linux](http://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/linux/amd64/kubectl)) + +List the nodes + +{% highlight sh %} +{% raw %} +kubectl get nodes +{% endraw %} +{% endhighlight %} + +This should print: + +{% highlight console %} +{% raw %} +NAME LABELS STATUS +127.0.0.1 kubernetes.io/hostname=127.0.0.1 Ready +{% endraw %} +{% endhighlight %} + +If the status of the node is `NotReady` or `Unknown` please check that all of the containers you created are successfully running. +If all else fails, ask questions on [Slack](../../troubleshooting.html#slack). + + +### Next steps + +Move on to [adding one or more workers](worker.html) or [deploy a dns](deployDNS.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/docker-multinode/master.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/docker-multinode/master.sh b/v1.1/docs/getting-started-guides/docker-multinode/master.sh new file mode 100755 index 0000000000000..0a247804ec89e --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/master.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +# Copyright 2015 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A scripts to install k8s worker node. +# Author @wizard_cxy @reouser + +set -e + +# Make sure docker daemon is running +if ( ! ps -ef | grep "/usr/bin/docker" | grep -v 'grep' &> /dev/null ); then + echo "Docker is not running on this machine!" + exit 1 +fi + +# Make sure k8s version env is properly set +if [ -z ${K8S_VERSION} ]; then + K8S_VERSION="1.0.3" + echo "K8S_VERSION is not set, using default: ${K8S_VERSION}" +else + echo "k8s version is set to: ${K8S_VERSION}" +fi + + +# Run as root +if [ "$(id -u)" != "0" ]; then + echo >&2 "Please run as root" + exit 1 +fi + +# Check if a command is valid +command_exists() { + command -v "$@" > /dev/null 2>&1 +} + +lsb_dist="" + +# Detect the OS distro, we support ubuntu, debian, mint, centos, fedora dist +detect_lsb() { + case "$(uname -m)" in + *64) + ;; + *) + echo "Error: We currently only support 64-bit platforms." + exit 1 + ;; + esac + + if command_exists lsb_release; then + lsb_dist="$(lsb_release -si)" + fi + if [ -z ${lsb_dist} ] && [ -r /etc/lsb-release ]; then + lsb_dist="$(. /etc/lsb-release && echo "$DISTRIB_ID")" + fi + if [ -z ${lsb_dist} ] && [ -r /etc/debian_version ]; then + lsb_dist='debian' + fi + if [ -z ${lsb_dist} ] && [ -r /etc/fedora-release ]; then + lsb_dist='fedora' + fi + if [ -z ${lsb_dist} ] && [ -r /etc/os-release ]; then + lsb_dist="$(. /etc/os-release && echo "$ID")" + fi + + lsb_dist="$(echo ${lsb_dist} | tr '[:upper:]' '[:lower:]')" +} + + +# Start the bootstrap daemon +bootstrap_daemon() { + sudo -b docker -d -H unix:///var/run/docker-bootstrap.sock -p /var/run/docker-bootstrap.pid --iptables=false --ip-masq=false --bridge=none --graph=/var/lib/docker-bootstrap 2> /var/log/docker-bootstrap.log 1> /dev/null + + sleep 5 +} + +# Start k8s components in containers +DOCKER_CONF="" + +start_k8s(){ + # Start etcd + docker -H unix:///var/run/docker-bootstrap.sock run --restart=always --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data + + sleep 5 + # Set flannel net config + docker -H unix:///var/run/docker-bootstrap.sock run --net=host gcr.io/google_containers/etcd:2.0.12 etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16", "Backend": {"Type": "vxlan"}}' + + # iface may change to a private network interface, eth0 is for default + flannelCID=$(docker -H unix:///var/run/docker-bootstrap.sock run --restart=always -d --net=host --privileged -v /dev/net:/dev/net quay.io/coreos/flannel:0.5.0 /opt/bin/flanneld -iface="eth0") + + sleep 8 + + # Copy flannel env out and source it on the host + docker -H unix:///var/run/docker-bootstrap.sock cp ${flannelCID}:/run/flannel/subnet.env . + source subnet.env + + # Configure docker net settings, then restart it + case "$lsb_dist" in + fedora|centos|amzn) + DOCKER_CONF="/etc/sysconfig/docker" + ;; + ubuntu|debian|linuxmint) + DOCKER_CONF="/etc/default/docker" + ;; + esac + + # Append the docker opts + echo "DOCKER_OPTS=\"\$DOCKER_OPTS --mtu=${FLANNEL_MTU} --bip=${FLANNEL_SUBNET}\"" | sudo tee -a ${DOCKER_CONF} + + + # sleep a little bit + ifconfig docker0 down + + case "$lsb_dist" in + fedora|centos|amzn) + yum install bridge-utils && brctl delbr docker0 && systemctl restart docker + ;; + ubuntu|debian|linuxmint) + apt-get install bridge-utils && brctl delbr docker0 && service docker restart + ;; + esac + + # sleep a little bit + sleep 5 + + # Start kubelet & proxy, then start master components as pods + docker run \ + --net=host \ + --pid=host \ + --privileged \ + --restart=always \ + -d \ + -v /sys:/sys:ro \ + -v /var/run:/var/run:rw \ + -v /:/rootfs:ro \ + -v /dev:/dev \ + -v /var/lib/docker/:/var/lib/docker:ro \ + -v /var/lib/kubelet/:/var/lib/kubelet:rw \ + gcr.io/google_containers/hyperkube:v${K8S_VERSION} \ + /hyperkube kubelet \ + --api-servers=http://localhost:8080 \ + --v=2 --address=0.0.0.0 --enable-server \ + --hostname-override=127.0.0.1 \ + --config=/etc/kubernetes/manifests-multi \ + --cluster-dns=10.0.0.10 \ + --cluster-domain=cluster.local + + docker run \ + -d \ + --net=host \ + --privileged \ + gcr.io/google_containers/hyperkube:v${K8S_VERSION} \ + /hyperkube proxy --master=http://127.0.0.1:8080 --v=2 +} + +echo "Detecting your OS distro ..." +detect_lsb + +echo "Starting bootstrap docker ..." +bootstrap_daemon + +echo "Starting k8s ..." +start_k8s + +echo "Master done!" diff --git a/v1.1/docs/getting-started-guides/docker-multinode/skydns-rc.yaml.in b/v1.1/docs/getting-started-guides/docker-multinode/skydns-rc.yaml.in new file mode 100644 index 0000000000000..845af9bf94722 --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/skydns-rc.yaml.in @@ -0,0 +1,92 @@ +apiVersion: v1 +kind: ReplicationController +metadata: + name: kube-dns-v8 + namespace: kube-system + labels: + k8s-app: kube-dns + version: v8 + kubernetes.io/cluster-service: "true" +spec: + replicas: {{ pillar['dns_replicas'] }} + selector: + k8s-app: kube-dns + version: v8 + template: + metadata: + labels: + k8s-app: kube-dns + version: v8 + kubernetes.io/cluster-service: "true" + spec: + containers: + - name: etcd + image: gcr.io/google_containers/etcd:2.0.9 + resources: + limits: + cpu: 100m + memory: 50Mi + command: + - /usr/local/bin/etcd + - -data-dir + - /var/etcd/data + - -listen-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -advertise-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -initial-cluster-token + - skydns-etcd + volumeMounts: + - name: etcd-storage + mountPath: /var/etcd/data + - name: kube2sky + image: gcr.io/google_containers/kube2sky:1.11 + resources: + limits: + cpu: 100m + memory: 50Mi + args: + # command = "/kube2sky" + - -domain={{ pillar['dns_domain'] }} + - -kube_master_url=http://{kube_server_url}:8080 + - name: skydns + image: gcr.io/google_containers/skydns:2015-03-11-001 + resources: + limits: + cpu: 100m + memory: 50Mi + args: + # command = "/skydns" + - -machines=http://localhost:4001 + - -addr=0.0.0.0:53 + - -domain={{ pillar['dns_domain'] }}. + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 5 + - name: healthz + image: gcr.io/google_containers/exechealthz:1.0 + resources: + limits: + cpu: 10m + memory: 20Mi + args: + - -cmd=nslookup kubernetes.default.svc.{{ pillar['dns_domain'] }} localhost >/dev/null + - -port=8080 + ports: + - containerPort: 8080 + protocol: TCP + volumes: + - name: etcd-storage + emptyDir: {} + dnsPolicy: Default # Don't use cluster DNS. diff --git a/v1.1/docs/getting-started-guides/docker-multinode/skydns-svc.yaml.in b/v1.1/docs/getting-started-guides/docker-multinode/skydns-svc.yaml.in new file mode 100644 index 0000000000000..242c8871eec4b --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/skydns-svc.yaml.in @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "KubeDNS" +spec: + selector: + k8s-app: kube-dns + clusterIP: {{ pillar['dns_server'] }} + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP diff --git a/v1.1/docs/getting-started-guides/docker-multinode/testing.md b/v1.1/docs/getting-started-guides/docker-multinode/testing.md new file mode 100644 index 0000000000000..60b83a969c7c1 --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/testing.md @@ -0,0 +1,107 @@ +--- +layout: docwithnav +title: "Testing your Kubernetes cluster." +--- + + + + + +## Testing your Kubernetes cluster. + +To validate that your node(s) have been added, run: + +{% highlight sh %} +{% raw %} +kubectl get nodes +{% endraw %} +{% endhighlight %} + +That should show something like: + +{% highlight console %} +{% raw %} +NAME LABELS STATUS +10.240.99.26 kubernetes.io/hostname=10.240.99.26 Ready +127.0.0.1 kubernetes.io/hostname=127.0.0.1 Ready +{% endraw %} +{% endhighlight %} + +If the status of any node is `Unknown` or `NotReady` your cluster is broken, double check that all containers are running properly, and if all else fails, contact us on [Slack](../../troubleshooting.html#slack). + +### Run an application + +{% highlight sh %} +{% raw %} +kubectl -s http://localhost:8080 run nginx --image=nginx --port=80 +{% endraw %} +{% endhighlight %} + +now run `docker ps` you should see nginx running. You may need to wait a few minutes for the image to get pulled. + +### Expose it as a service + +{% highlight sh %} +{% raw %} +kubectl expose rc nginx --port=80 +{% endraw %} +{% endhighlight %} + +Run the following command to obtain the IP of this service we just created. There are two IPs, the first one is internal (CLUSTER_IP), and the second one is the external load-balanced IP. + +{% highlight sh %} +{% raw %} +kubectl get svc nginx +{% endraw %} +{% endhighlight %} + +Alternatively, you can obtain only the first IP (CLUSTER_IP) by running: + +{% highlight sh %} +{% raw %} +kubectl get svc nginx --template={{.spec.clusterIP}} +{% endraw %} +{% endhighlight %} + +Hit the webserver with the first IP (CLUSTER_IP): + +{% highlight sh %} +{% raw %} +curl +{% endraw %} +{% endhighlight %} + +Note that you will need run this curl command on your boot2docker VM if you are running on OS X. + +### Scaling + +Now try to scale up the nginx you created before: + +{% highlight sh %} +{% raw %} +kubectl scale rc nginx --replicas=3 +{% endraw %} +{% endhighlight %} + +And list the pods + +{% highlight sh %} +{% raw %} +kubectl get pods +{% endraw %} +{% endhighlight %} + +You should see pods landing on the newly added machine. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/docker-multinode/testing.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/docker-multinode/worker.md b/v1.1/docs/getting-started-guides/docker-multinode/worker.md new file mode 100644 index 0000000000000..c94bb42e19173 --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/worker.md @@ -0,0 +1,184 @@ +--- +layout: docwithnav +title: "Adding a Kubernetes worker node via Docker." +--- + + + + + +## Adding a Kubernetes worker node via Docker. + + + +These instructions are very similar to the master set-up above, but they are duplicated for clarity. +You need to repeat these instructions for each node you want to join the cluster. +We will assume that the IP address of this node is `${NODE_IP}` and you have the IP address of the master in `${MASTER_IP}` that you created in the [master instructions](master.html). + +For each worker node, there are three steps: + * [Set up `flanneld` on the worker node](#set-up-flanneld-on-the-worker-node) + * [Start Kubernetes on the worker node](#start-kubernetes-on-the-worker-node) + * [Add the worker to the cluster](#add-the-node-to-the-cluster) + +### Set up Flanneld on the worker node + +As before, the Flannel daemon is going to provide network connectivity. + +_Note_: +There is a [bug](https://github.com/docker/docker/issues/14106) in Docker 1.7.0 that prevents this from working correctly. +Please install Docker 1.6.2 or wait for Docker 1.7.1. + + +#### Set up a bootstrap docker + +As previously, we need a second instance of the Docker daemon running to bootstrap the flannel networking. + +Run: + +{% highlight sh %} +{% raw %} +sudo sh -c 'docker -d -H unix:///var/run/docker-bootstrap.sock -p /var/run/docker-bootstrap.pid --iptables=false --ip-masq=false --bridge=none --graph=/var/lib/docker-bootstrap 2> /var/log/docker-bootstrap.log 1> /dev/null &' +{% endraw %} +{% endhighlight %} + +_Important Note_: +If you are running this on a long running system, rather than experimenting, you should run the bootstrap Docker instance under something like SysV init, upstart or systemd so that it is restarted +across reboots and failures. + +#### Bring down Docker + +To re-configure Docker to use flannel, we need to take docker down, run flannel and then restart Docker. + +Turning down Docker is system dependent, it may be: + +{% highlight sh %} +{% raw %} +sudo /etc/init.d/docker stop +{% endraw %} +{% endhighlight %} + +or + +{% highlight sh %} +{% raw %} +sudo systemctl stop docker +{% endraw %} +{% endhighlight %} + +or it may be something else. + +#### Run flannel + +Now run flanneld itself, this call is slightly different from the above, since we point it at the etcd instance on the master. + +{% highlight sh %} +{% raw %} +sudo docker -H unix:///var/run/docker-bootstrap.sock run -d --net=host --privileged -v /dev/net:/dev/net quay.io/coreos/flannel:0.5.0 /opt/bin/flanneld --etcd-endpoints=http://${MASTER_IP}:4001 +{% endraw %} +{% endhighlight %} + +The previous command should have printed a really long hash, copy this hash. + +Now get the subnet settings from flannel: + +{% highlight sh %} +{% raw %} +sudo docker -H unix:///var/run/docker-bootstrap.sock exec cat /run/flannel/subnet.env +{% endraw %} +{% endhighlight %} + + +#### Edit the docker configuration + +You now need to edit the docker configuration to activate new flags. Again, this is system specific. + +This may be in `/etc/default/docker` or `/etc/systemd/service/docker.service` or it may be elsewhere. + +Regardless, you need to add the following to the docker command line: + +{% highlight sh %} +{% raw %} +--bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} +{% endraw %} +{% endhighlight %} + +#### Remove the existing Docker bridge + +Docker creates a bridge named `docker0` by default. You need to remove this: + +{% highlight sh %} +{% raw %} +sudo /sbin/ifconfig docker0 down +sudo brctl delbr docker0 +{% endraw %} +{% endhighlight %} + +You may need to install the `bridge-utils` package for the `brctl` binary. + +#### Restart Docker + +Again this is system dependent, it may be: + +{% highlight sh %} +{% raw %} +sudo /etc/init.d/docker start +{% endraw %} +{% endhighlight %} + +it may be: + +{% highlight sh %} +{% raw %} +systemctl start docker +{% endraw %} +{% endhighlight %} + +### Start Kubernetes on the worker node + +#### Run the kubelet + +Again this is similar to the above, but the `--api-servers` now points to the master we set up in the beginning. + +{% highlight sh %} +{% raw %} +sudo docker run \ + --volume=/:/rootfs:ro \ + --volume=/sys:/sys:ro \ + --volume=/dev:/dev \ + --volume=/var/lib/docker/:/var/lib/docker:rw \ + --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ + --volume=/var/run:/var/run:rw \ + --net=host \ + --privileged=true \ + --pid=host \ + -d \ + gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube kubelet --api-servers=http://${MASTER_IP}:8080 --v=2 --address=0.0.0.0 --enable-server --hostname-override=$(hostname -i) --cluster-dns=10.0.0.10 --cluster-domain=cluster.local +{% endraw %} +{% endhighlight %} + +#### Run the service proxy + +The service proxy provides load-balancing between groups of containers defined by Kubernetes `Services` + +{% highlight sh %} +{% raw %} +sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://${MASTER_IP}:8080 --v=2 +{% endraw %} +{% endhighlight %} + +### Next steps + +Move on to [testing your cluster](testing.html) or [add another node](#adding-a-kubernetes-worker-node-via-docker) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/docker-multinode/worker.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/docker-multinode/worker.sh b/v1.1/docs/getting-started-guides/docker-multinode/worker.sh new file mode 100755 index 0000000000000..dda80b553c57d --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker-multinode/worker.sh @@ -0,0 +1,174 @@ +#!/bin/bash + +# Copyright 2015 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A scripts to install k8s worker node. +# Author @wizard_cxy @reouser + +set -e + +# Make sure docker daemon is running +if ( ! ps -ef | grep "/usr/bin/docker" | grep -v 'grep' &> /dev/null ); then + echo "Docker is not running on this machine!" + exit 1 +fi + +# Make sure k8s version env is properly set +if [ -z ${K8S_VERSION} ]; then + K8S_VERSION="1.0.3" + echo "K8S_VERSION is not set, using default: ${K8S_VERSION}" +else + echo "k8s version is set to: ${K8S_VERSION}" +fi + + + +# Run as root +if [ "$(id -u)" != "0" ]; then + echo >&2 "Please run as root" + exit 1 +fi + +# Make sure master ip is properly set +if [ -z ${MASTER_IP} ]; then + echo "Please export MASTER_IP in your env" + exit 1 +else + echo "k8s master is set to: ${MASTER_IP}" +fi + +# Check if a command is valid +command_exists() { + command -v "$@" > /dev/null 2>&1 +} + +lsb_dist="" + +# Detect the OS distro, we support ubuntu, debian, mint, centos, fedora dist +detect_lsb() { + case "$(uname -m)" in + *64) + ;; + *) + echo "Error: We currently only support 64-bit platforms." + exit 1 + ;; + esac + + if command_exists lsb_release; then + lsb_dist="$(lsb_release -si)" + fi + if [ -z ${lsb_dist} ] && [ -r /etc/lsb-release ]; then + lsb_dist="$(. /etc/lsb-release && echo "$DISTRIB_ID")" + fi + if [ -z ${lsb_dist} ] && [ -r /etc/debian_version ]; then + lsb_dist='debian' + fi + if [ -z ${lsb_dist} ] && [ -r /etc/fedora-release ]; then + lsb_dist='fedora' + fi + if [ -z ${lsb_dist} ] && [ -r /etc/os-release ]; then + lsb_dist="$(. /etc/os-release && echo "$ID")" + fi + + lsb_dist="$(echo ${lsb_dist} | tr '[:upper:]' '[:lower:]')" +} + + +# Start the bootstrap daemon +bootstrap_daemon() { + sudo -b docker -d -H unix:///var/run/docker-bootstrap.sock -p /var/run/docker-bootstrap.pid --iptables=false --ip-masq=false --bridge=none --graph=/var/lib/docker-bootstrap 2> /var/log/docker-bootstrap.log 1> /dev/null + + sleep 5 +} + +DOCKER_CONF="" + +# Start k8s components in containers +start_k8s() { + # Start flannel + flannelCID=$(sudo docker -H unix:///var/run/docker-bootstrap.sock run -d --restart=always --net=host --privileged -v /dev/net:/dev/net quay.io/coreos/flannel:0.5.0 /opt/bin/flanneld --etcd-endpoints=http://${MASTER_IP}:4001 -iface="eth0") + + sleep 8 + + # Copy flannel env out and source it on the host + sudo docker -H unix:///var/run/docker-bootstrap.sock cp ${flannelCID}:/run/flannel/subnet.env . + source subnet.env + + # Configure docker net settings, then restart it + case "$lsb_dist" in + fedora|centos|amzn) + DOCKER_CONF="/etc/sysconfig/docker" + ;; + ubuntu|debian|linuxmint) + DOCKER_CONF="/etc/default/docker" + ;; + esac + + echo "DOCKER_OPTS=\"\$DOCKER_OPTS --mtu=${FLANNEL_MTU} --bip=${FLANNEL_SUBNET}\"" | sudo tee -a ${DOCKER_CONF} + + ifconfig docker0 down + + case "$lsb_dist" in + fedora|centos) + yum install bridge-utils && brctl delbr docker0 && systemctl restart docker + ;; + ubuntu|debian|linuxmint) + apt-get install bridge-utils && brctl delbr docker0 && service docker restart + ;; + esac + + # sleep a little bit + sleep 5 + + # Start kubelet & proxy in container + docker run \ + --net=host \ + --pid=host \ + --privileged \ + --restart=always \ + -d \ + -v /sys:/sys:ro \ + -v /var/run:/var/run:rw \ + -v /dev:/dev \ + -v /var/lib/docker/:/var/lib/docker:ro \ + -v /var/lib/kubelet/:/var/lib/kubelet:rw \ + gcr.io/google_containers/hyperkube:v${K8S_VERSION} \ + /hyperkube kubelet --api-servers=http://${MASTER_IP}:8080 \ + --v=2 --address=0.0.0.0 --enable-server \ + --hostname-override=$(hostname -i) \ + --cluster-dns=10.0.0.10 \ + --cluster-domain=cluster.local + + docker run \ + -d \ + --net=host \ + --privileged \ + --restart=always \ + gcr.io/google_containers/hyperkube:v${K8S_VERSION} \ + /hyperkube proxy --master=http://${MASTER_IP}:8080 \ + --v=2 +} + +echo "Detecting your OS distro ..." +detect_lsb + +echo "Starting bootstrap docker ..." +bootstrap_daemon + +echo "Starting k8s ..." +start_k8s + +echo "Worker done!" diff --git a/v1.1/docs/getting-started-guides/docker.md b/v1.1/docs/getting-started-guides/docker.md new file mode 100644 index 0000000000000..057ab46eb5301 --- /dev/null +++ b/v1.1/docs/getting-started-guides/docker.md @@ -0,0 +1,202 @@ +--- +layout: docwithnav +title: "Running Kubernetes locally via Docker" +--- + + + + +Running Kubernetes locally via Docker +------------------------------------- + +**Table of Contents** + +- [Overview](#setting-up-a-cluster) +- [Prerequisites](#prerequisites) +- [Step One: Run etcd](#step-one-run-etcd) +- [Step Two: Run the master](#step-two-run-the-master) +- [Step Three: Run the service proxy](#step-three-run-the-service-proxy) +- [Test it out](#test-it-out) +- [Run an application](#run-an-application) +- [Expose it as a service](#expose-it-as-a-service) +- [A note on turning down your cluster](#a-note-on-turning-down-your-cluster) + +### Overview + +The following instructions show you how to set up a simple, single node Kubernetes cluster using Docker. + +Here's a diagram of what the final result will look like: +![Kubernetes Single Node on Docker](k8s-singlenode-docker.png) + +### Prerequisites + +1. You need to have docker installed on one machine. +2. Your kernel should support memory and swap accounting. Ensure that the +following configs are turned on in your linux kernel: + +{% highlight console %} +{% raw %} + CONFIG_RESOURCE_COUNTERS=y + CONFIG_MEMCG=y + CONFIG_MEMCG_SWAP=y + CONFIG_MEMCG_SWAP_ENABLED=y + CONFIG_MEMCG_KMEM=y +{% endraw %} +{% endhighlight %} + +3. Enable the memory and swap accounting in the kernel, at boot, as command line +parameters as follows: + +{% highlight console %} +{% raw %} + GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" +{% endraw %} +{% endhighlight %} + + NOTE: The above is specifically for GRUB2. + You can check the command line parameters passed to your kernel by looking at the + output of /proc/cmdline: + +{% highlight console %} +{% raw %} + $cat /proc/cmdline + BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory + swapaccount=1 +{% endraw %} +{% endhighlight %} + +### Step One: Run etcd + +{% highlight sh %} +{% raw %} +docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data +{% endraw %} +{% endhighlight %} + +### Step Two: Run the master + +{% highlight sh %} +{% raw %} +docker run \ + --volume=/:/rootfs:ro \ + --volume=/sys:/sys:ro \ + --volume=/dev:/dev \ + --volume=/var/lib/docker/:/var/lib/docker:ro \ + --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ + --volume=/var/run:/var/run:rw \ + --net=host \ + --pid=host \ + --privileged=true \ + -d \ + gcr.io/google_containers/hyperkube:v1.0.1 \ + /hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests +{% endraw %} +{% endhighlight %} + +This actually runs the kubelet, which in turn runs a [pod](../user-guide/pods.html) that contains the other master components. + +### Step Three: Run the service proxy + +{% highlight sh %} +{% raw %} +docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2 +{% endraw %} +{% endhighlight %} + +### Test it out + +At this point you should have a running Kubernetes cluster. You can test this by downloading the kubectl +binary +([OS X](https://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/darwin/amd64/kubectl)) +([linux](https://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/linux/amd64/kubectl)) + +*Note:* +On OS/X you will need to set up port forwarding via ssh: + +{% highlight sh %} +{% raw %} +boot2docker ssh -L8080:localhost:8080 +{% endraw %} +{% endhighlight %} + +List the nodes in your cluster by running: + +{% highlight sh %} +{% raw %} +kubectl get nodes +{% endraw %} +{% endhighlight %} + +This should print: + +{% highlight console %} +{% raw %} +NAME LABELS STATUS +127.0.0.1 Ready +{% endraw %} +{% endhighlight %} + +If you are running different Kubernetes clusters, you may need to specify `-s http://localhost:8080` to select the local cluster. + +### Run an application + +{% highlight sh %} +{% raw %} +kubectl -s http://localhost:8080 run nginx --image=nginx --port=80 +{% endraw %} +{% endhighlight %} + +Now run `docker ps` you should see nginx running. You may need to wait a few minutes for the image to get pulled. + +### Expose it as a service + +{% highlight sh %} +{% raw %} +kubectl expose rc nginx --port=80 +{% endraw %} +{% endhighlight %} + +Run the following command to obtain the IP of this service we just created. There are two IPs, the first one is internal (CLUSTER_IP), and the second one is the external load-balanced IP. + +{% highlight sh %} +{% raw %} +kubectl get svc nginx +{% endraw %} +{% endhighlight %} + +Alternatively, you can obtain only the first IP (CLUSTER_IP) by running: + +{% highlight sh %} +{% raw %} +kubectl get svc nginx --template={{.spec.clusterIP}} +{% endraw %} +{% endhighlight %} + +Hit the webserver with the first IP (CLUSTER_IP): + +{% highlight sh %} +{% raw %} +curl +{% endraw %} +{% endhighlight %} + +Note that you will need run this curl command on your boot2docker VM if you are running on OS X. + +### A note on turning down your cluster + +Many of these containers run under the management of the `kubelet` binary, which attempts to keep containers running, even if they fail. So, in order to turn down +the cluster, you need to first kill the kubelet container, and then any other containers. + +You may use `docker kill $(docker ps -aq)`, note this removes _all_ containers running under Docker, so use with caution. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/docker.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/es-browser.png b/v1.1/docs/getting-started-guides/es-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..f556fa8c5619b8574279eeabaa1302b12aa16331 GIT binary patch literal 40769 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 + + + + +Running Kubernetes with [Calico Networking](http://projectcalico.org) on a [Digital Ocean](http://digitalocean.com) [Fedora Host](http://fedoraproject.org) +----------------------------------------------------- + +## Table of Contents + +* [Prerequisites](#prerequisites) +* [Overview](#overview) +* [Setup Communication Between Hosts](#setup-communication-between-hosts) +* [Setup Master](#setup-master) + * [Install etcd](#install-etcd) + * [Install Kubernetes](#install-kubernetes) + * [Install Calico](#install-calico) +* [Setup Node](#setup-node) + * [Configure the Virtual Interface - cbr0](#configure-the-virtual-interface---cbr0) + * [Install Docker](#install-docker) + * [Install Calico](#install-calico-1) + * [Install Kubernetes](#install-kubernetes-1) +* [Check Running Cluster](#check-running-cluster) + +## Prerequisites + +You need two or more Fedora 22 droplets on Digital Ocean with [Private Networking](https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking) enabled. + +## Overview + +This guide will walk you through the process of getting a Kubernetes Fedora cluster running on Digital Ocean with networking powered by Calico networking. It will cover the installation and configuration of the following systemd processes on the following hosts: + +Kubernetes Master: +- `kube-apiserver` +- `kube-controller-manager` +- `kube-scheduler` +- `etcd` +- `docker` +- `calico-node` + +Kubernetes Node: +- `kubelet` +- `kube-proxy` +- `docker` +- `calico-node` + +For this demo, we will be setting up one Master and one Node with the following information: + +| Hostname | IP | +|-------------|-------------| +| kube-master |10.134.251.56| +| kube-node-1 |10.134.251.55| + +This guide is scalable to multiple nodes provided you [configure interface-cbr0 with its own subnet on each Node](#configure-the-virtual-interface---cbr0) and [add an entry to /etc/hosts for each host](#setup-communication-between-hosts). + +Ensure you substitute the IP Addresses and Hostnames used in this guide with ones in your own setup. + +## Setup Communication Between Hosts + +Digital Ocean private networking configures a private network on eth1 for each host. To simplify communication between the hosts, we will add an entry to /etc/hosts so that all hosts in the cluster can hostname-resolve one another to this interface. **It is important that the hostname resolves to this interface instead of eth0, as all Kubernetes and Calico services will be running on it.** + +``` +{% raw %} +echo "10.134.251.56 kube-master" >> /etc/hosts +echo "10.134.251.55 kube-node-1" >> /etc/hosts +{% endraw %} +``` + +>Make sure that communication works between kube-master and each kube-node by using a utility such as ping. + +## Setup Master + +### Install etcd + +* Both Calico and Kubernetes use etcd as their datastore. We will run etcd on Master and point all Kubernetes and Calico services at it. + +``` +{% raw %} +yum -y install etcd +{% endraw %} +``` + +* Edit `/etc/etcd/etcd.conf` + +``` +{% raw %} +ETCD_LISTEN_CLIENT_URLS="http://kube-master:4001" + +ETCD_ADVERTISE_CLIENT_URLS="http://kube-master:4001" +{% endraw %} +``` + +### Install Kubernetes + +* Run the following command on Master to install the latest Kubernetes (as well as docker): + +``` +{% raw %} +yum -y install kubernetes +{% endraw %} +``` + +* Edit `/etc/kubernetes/config ` + +``` +{% raw %} +# How the controller-manager, scheduler, and proxy find the apiserver +KUBE_MASTER="--master=http://kube-master:8080" +{% endraw %} +``` + +* Edit `/etc/kubernetes/apiserver` + +``` +{% raw %} +# The address on the local server to listen to. +KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" + +KUBE_ETCD_SERVERS="--etcd-servers=http://kube-master:4001" + +# Remove ServiceAccount from this line to run without API Tokens +KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" +{% endraw %} +``` + +* Create /var/run/kubernetes on master: + +``` +{% raw %} +mkdir /var/run/kubernetes +chown kube:kube /var/run/kubernetes +chmod 750 /var/run/kubernetes +{% endraw %} +``` + +* Start the appropriate services on master: + +``` +{% raw %} +for SERVICE in etcd kube-apiserver kube-controller-manager kube-scheduler; do + systemctl restart $SERVICE + systemctl enable $SERVICE + systemctl status $SERVICE +done +{% endraw %} +``` + +### Install Calico + +Next, we'll launch Calico on Master to allow communication between Pods and any services running on the Master. +* Install calicoctl, the calico configuration tool. + +``` +{% raw %} +wget https://github.com/Metaswitch/calico-docker/releases/download/v0.5.5/calicoctl +chmod +x ./calicoctl +sudo mv ./calicoctl /usr/bin +{% endraw %} +``` + +* Create `/etc/systemd/system/calico-node.service` + +``` +{% raw %} +[Unit] +Description=calicoctl node +Requires=docker.service +After=docker.service + +[Service] +User=root +Environment="ETCD_AUTHORITY=kube-master:4001" +PermissionsStartOnly=true +ExecStartPre=/usr/bin/calicoctl checksystem --fix +ExecStart=/usr/bin/calicoctl node --ip=10.134.251.56 --detach=false + +[Install] +WantedBy=multi-user.target +{% endraw %} +``` + +>Be sure to substitute `--ip=10.134.251.56` with your Master's eth1 IP Address. + +* Start Calico + +``` +{% raw %} +systemctl enable calico-node.service +systemctl start calico-node.service +{% endraw %} +``` + +>Starting calico for the first time may take a few minutes as the calico-node docker image is downloaded. + +## Setup Node + +### Configure the Virtual Interface - cbr0 + +By default, docker will create and run on a virtual interface called `docker0`. This interface is automatically assigned the address range 172.17.42.1/16. In order to set our own address range, we will create a new virtual interface called `cbr0` and then start docker on it. + +* Add a virtual interface by creating `/etc/sysconfig/network-scripts/ifcfg-cbr0`: + +``` +{% raw %} +DEVICE=cbr0 +TYPE=Bridge +IPADDR=192.168.1.1 +NETMASK=255.255.255.0 +ONBOOT=yes +BOOTPROTO=static +{% endraw %} +``` + +>**Note for Multi-Node Clusters:** Each node should be assigned an IP address on a unique subnet. In this example, node-1 is using 192.168.1.1/24, so node-2 should be assigned another pool on the 192.168.x.0/24 subnet, e.g. 192.168.2.1/24. + +* Ensure that your system has bridge-utils installed. Then, restart the networking daemon to activate the new interface + +``` +{% raw %} +systemctl restart network.service +{% endraw %} +``` + +### Install Docker + +* Install Docker + +``` +{% raw %} +yum -y install docker +{% endraw %} +``` + +* Configure docker to run on `cbr0` by editing `/etc/sysconfig/docker-network`: + +``` +{% raw %} +DOCKER_NETWORK_OPTIONS="--bridge=cbr0 --iptables=false --ip-masq=false" +{% endraw %} +``` + +* Start docker + +``` +{% raw %} +systemctl start docker +{% endraw %} +``` + +### Install Calico + +* Install calicoctl, the calico configuration tool. + +``` +{% raw %} +wget https://github.com/Metaswitch/calico-docker/releases/download/v0.5.5/calicoctl +chmod +x ./calicoctl +sudo mv ./calicoctl /usr/bin +{% endraw %} +``` + +* Create `/etc/systemd/system/calico-node.service` + +``` +{% raw %} +[Unit] +Description=calicoctl node +Requires=docker.service +After=docker.service + +[Service] +User=root +Environment="ETCD_AUTHORITY=kube-master:4001" +PermissionsStartOnly=true +ExecStartPre=/usr/bin/calicoctl checksystem --fix +ExecStart=/usr/bin/calicoctl node --ip=10.134.251.55 --detach=false --kubernetes + +[Install] +WantedBy=multi-user.target +{% endraw %} +``` + +> Note: You must replace the IP address with your node's eth1 IP Address! + +* Start Calico + +``` +{% raw %} +systemctl enable calico-node.service +systemctl start calico-node.service +{% endraw %} +``` + +* Configure the IP Address Pool + + Most Kubernetes application deployments will require communication between Pods and the kube-apiserver on Master. On a standard Digital Ocean Private Network, requests sent from Pods to the kube-apiserver will not be returned as the networking fabric will drop response packets destined for any 192.168.0.0/16 address. To resolve this, you can have calicoctl add a masquerade rule to all outgoing traffic on the node: + +``` +{% raw %} +ETCD_AUTHORITY=kube-master:4001 calicoctl pool add 192.168.0.0/16 --nat-outgoing +{% endraw %} +``` + +### Install Kubernetes + +* First, install Kubernetes. + +``` +{% raw %} +yum -y install kubernetes +{% endraw %} +``` + +* Edit `/etc/kubernetes/config` + +``` +{% raw %} +# How the controller-manager, scheduler, and proxy find the apiserver +KUBE_MASTER="--master=http://kube-master:8080" +{% endraw %} +``` + +* Edit `/etc/kubernetes/kubelet` + + We'll pass in an extra parameter - `--network-plugin=calico` to tell the Kubelet to use the Calico networking plugin. Additionally, we'll add two environment variables that will be used by the Calico networking plugin. + +``` +{% raw %} +# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces) +KUBELET_ADDRESS="--address=0.0.0.0" + +# You may leave this blank to use the actual hostname +# KUBELET_HOSTNAME="--hostname-override=127.0.0.1" + +# location of the api-server +KUBELET_API_SERVER="--api-servers=http://kube-master:8080" + +# Add your own! +KUBELET_ARGS="--network-plugin=calico" + +# The following are variables which the kubelet will pass to the calico-networking plugin +ETCD_AUTHORITY="kube-master:4001" +KUBE_API_ROOT="http://kube-master:8080/api/v1" +{% endraw %} +``` + +* Start Kubernetes on the node. + +``` +{% raw %} +for SERVICE in kube-proxy kubelet; do + systemctl restart $SERVICE + systemctl enable $SERVICE + systemctl status $SERVICE +done +{% endraw %} +``` + +## Check Running Cluster + +The cluster should be running! Check that your nodes are reporting as such: + +``` +{% raw %} +kubectl get nodes +NAME LABELS STATUS +kube-node-1 kubernetes.io/hostname=kube-node-1 Ready +{% endraw %} +``` + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/fedora/fedora-calico.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/fedora/fedora_ansible_config.md b/v1.1/docs/getting-started-guides/fedora/fedora_ansible_config.md new file mode 100644 index 0000000000000..fc237255c7b71 --- /dev/null +++ b/v1.1/docs/getting-started-guides/fedora/fedora_ansible_config.md @@ -0,0 +1,293 @@ +--- +layout: docwithnav +title: "Configuring Kubernetes on Fedora via Ansible" +--- + + + + +Configuring Kubernetes on [Fedora](http://fedoraproject.org) via [Ansible](http://www.ansible.com/home) +------------------------------------------------------------------------------------------------------- + +Configuring Kubernetes on Fedora via Ansible offers a simple way to quickly create a clustered environment with little effort. + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Architecture of the cluster](#architecture-of-the-cluster) +- [Setting up ansible access to your nodes](#setting-up-ansible-access-to-your-nodes) +- [Setting up the cluster](#setting-up-the-cluster) +- [Testing and using your new cluster](#testing-and-using-your-new-cluster) + +## Prerequisites + +1. Host able to run ansible and able to clone the following repo: [kubernetes](https://github.com/kubernetes/kubernetes.git) +2. A Fedora 21+ host to act as cluster master +3. As many Fedora 21+ hosts as you would like, that act as cluster nodes + +The hosts can be virtual or bare metal. Ansible will take care of the rest of the configuration for you - configuring networking, installing packages, handling the firewall, etc. This example will use one master and two nodes. + +## Architecture of the cluster + +A Kubernetes cluster requires etcd, a master, and n nodes, so we will create a cluster with three hosts, for example: + +{% highlight console %} +{% raw %} + master,etcd = kube-master.example.com + node1 = kube-node-01.example.com + node2 = kube-node-02.example.com +{% endraw %} +{% endhighlight %} + +**Make sure your local machine has** + + - ansible (must be 1.9.0+) + - git + - python-netaddr + +If not + +{% highlight sh %} +{% raw %} +yum install -y ansible git python-netaddr +{% endraw %} +{% endhighlight %} + +**Now clone down the Kubernetes repository** + +{% highlight sh %} +{% raw %} +git clone https://github.com/kubernetes/contrib.git +cd contrib/ansible +{% endraw %} +{% endhighlight %} + +**Tell ansible about each machine and its role in your cluster** + +Get the IP addresses from the master and nodes. Add those to the `~/contrib/ansible/inventory` file on the host running Ansible. + +{% highlight console %} +{% raw %} +[masters] +kube-master.example.com + +[etcd] +kube-master.example.com + +[nodes] +kube-node-01.example.com +kube-node-02.example.com +{% endraw %} +{% endhighlight %} + +## Setting up ansible access to your nodes + +If you already are running on a machine which has passwordless ssh access to the kube-master and kube-node-{01,02} nodes, and 'sudo' privileges, simply set the value of `ansible_ssh_user` in `~/contrib/ansible/group_vars/all.yaml` to the username which you use to ssh to the nodes (i.e. `fedora`), and proceed to the next step... + +*Otherwise* setup ssh on the machines like so (you will need to know the root password to all machines in the cluster). + +edit: ~/contrib/ansible/group_vars/all.yml + +{% highlight yaml %} +{% raw %} +ansible_ssh_user: root +{% endraw %} +{% endhighlight %} + +**Configuring ssh access to the cluster** + +If you already have ssh access to every machine using ssh public keys you may skip to [setting up the cluster](#setting-up-the-cluster) + +Make sure your local machine (root) has an ssh key pair if not + +{% highlight sh %} +{% raw %} +ssh-keygen +{% endraw %} +{% endhighlight %} + +Copy the ssh public key to **all** nodes in the cluster + +{% highlight sh %} +{% raw %} +for node in kube-master.example.com kube-node-01.example.com kube-node-02.example.com; do + ssh-copy-id ${node} +done +{% endraw %} +{% endhighlight %} + +## Setting up the cluster + +Although the default value of variables in `~/contrib/ansible/group_vars/all.yml` should be good enough, if not, change them as needed. + +edit: ~/contrib/ansible/group_vars/all.yml + +**Configure access to kubernetes packages** + +Modify `source_type` as below to access kubernetes packages through the package manager. + +{% highlight yaml %} +{% raw %} +source_type: packageManager +{% endraw %} +{% endhighlight %} + +**Configure the IP addresses used for services** + +Each Kubernetes service gets its own IP address. These are not real IPs. You need only select a range of IPs which are not in use elsewhere in your environment. + +{% highlight yaml %} +{% raw %} +kube_service_addresses: 10.254.0.0/16 +{% endraw %} +{% endhighlight %} + +**Managing flannel** + +Modify `flannel_subnet`, `flannel_prefix` and `flannel_host_prefix` only if defaults are not appropriate for your cluster. + + +**Managing add on services in your cluster** + +Set `cluster_logging` to false or true (default) to disable or enable logging with elasticsearch. + +{% highlight yaml %} +{% raw %} +cluster_logging: true +{% endraw %} +{% endhighlight %} + +Turn `cluster_monitoring` to true (default) or false to enable or disable cluster monitoring with heapster and influxdb. + +{% highlight yaml %} +{% raw %} +cluster_monitoring: true +{% endraw %} +{% endhighlight %} + +Turn `dns_setup` to true (recommended) or false to enable or disable whole DNS configuration. + +{% highlight yaml %} +{% raw %} +dns_setup: true +{% endraw %} +{% endhighlight %} + +**Tell ansible to get to work!** + +This will finally setup your whole Kubernetes cluster for you. + +{% highlight sh %} +{% raw %} +cd ~/contrib/ansible/ + +./setup.sh +{% endraw %} +{% endhighlight %} + +## Testing and using your new cluster + +That's all there is to it. It's really that easy. At this point you should have a functioning Kubernetes cluster. + +**Show kubernetes nodes** + +Run the following on the kube-master: + +{% highlight sh %} +{% raw %} +kubectl get nodes +{% endraw %} +{% endhighlight %} + +**Show services running on masters and nodes** + +{% highlight sh %} +{% raw %} +systemctl | grep -i kube +{% endraw %} +{% endhighlight %} + +**Show firewall rules on the masters and nodes** + +{% highlight sh %} +{% raw %} +iptables -nvL +{% endraw %} +{% endhighlight %} + +**Create /tmp/apache.json on the master with the following contents and deploy pod** + +{% highlight json %} +{% raw %} +{ + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "fedoraapache", + "labels": { + "name": "fedoraapache" + } + }, + "spec": { + "containers": [ + { + "name": "fedoraapache", + "image": "fedora/apache", + "ports": [ + { + "hostPort": 80, + "containerPort": 80 + } + ] + } + ] + } +} +{% endraw %} +{% endhighlight %} + +{% highlight sh %} +{% raw %} +kubectl create -f /tmp/apache.json +{% endraw %} +{% endhighlight %} + +**Check where the pod was created** + +{% highlight sh %} +{% raw %} +kubectl get pods +{% endraw %} +{% endhighlight %} + +**Check Docker status on nodes** + +{% highlight sh %} +{% raw %} +docker ps +docker images +{% endraw %} +{% endhighlight %} + +**After the pod is 'Running' Check web server access on the node** + +{% highlight sh %} +{% raw %} +curl http://localhost +{% endraw %} +{% endhighlight %} + +That's it ! + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/fedora/fedora_ansible_config.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/fedora/fedora_manual_config.md b/v1.1/docs/getting-started-guides/fedora/fedora_manual_config.md new file mode 100644 index 0000000000000..99bc8436428cc --- /dev/null +++ b/v1.1/docs/getting-started-guides/fedora/fedora_manual_config.md @@ -0,0 +1,258 @@ +--- +layout: docwithnav +title: "Getting started on Fedora" +--- + + + + +Getting started on [Fedora](http://fedoraproject.org) +----------------------------------------------------- + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Instructions](#instructions) + +## Prerequisites + +1. You need 2 or more machines with Fedora installed. + +## Instructions + +This is a getting started guide for Fedora. It is a manual configuration so you understand all the underlying packages / services / ports, etc... + +This guide will only get ONE node (previously minion) working. Multiple nodes require a functional [networking configuration](../../admin/networking.html) done outside of Kubernetes. Although the additional Kubernetes configuration requirements should be obvious. + +The Kubernetes package provides a few services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd and the configuration resides in a central location: /etc/kubernetes. We will break the services up between the hosts. The first host, fed-master, will be the Kubernetes master. This host will run the kube-apiserver, kube-controller-manager, and kube-scheduler. In addition, the master will also run _etcd_ (not needed if _etcd_ runs on a different host but this guide assumes that _etcd_ and Kubernetes master run on the same host). The remaining host, fed-node will be the node and run kubelet, proxy and docker. + +**System Information:** + +Hosts: + +``` +{% raw %} +fed-master = 192.168.121.9 +fed-node = 192.168.121.65 +{% endraw %} +``` + +**Prepare the hosts:** + +* Install Kubernetes on all hosts - fed-{master,node}. This will also pull in docker. Also install etcd on fed-master. This guide has been tested with kubernetes-0.18 and beyond. +* The [--enablerepo=updates-testing](https://fedoraproject.org/wiki/QA:Updates_Testing) directive in the yum command below will ensure that the most recent Kubernetes version that is scheduled for pre-release will be installed. This should be a more recent version than the Fedora "stable" release for Kubernetes that you would get without adding the directive. +* If you want the very latest Kubernetes release [you can download and yum install the RPM directly from Fedora Koji](http://koji.fedoraproject.org/koji/packageinfo?packageID=19202) instead of using the yum install command below. + +{% highlight sh %} +{% raw %} +yum -y install --enablerepo=updates-testing kubernetes +{% endraw %} +{% endhighlight %} + +* Install etcd and iptables + +{% highlight sh %} +{% raw %} +yum -y install etcd iptables +{% endraw %} +{% endhighlight %} + +* Add master and node to /etc/hosts on all machines (not needed if hostnames already in DNS). Make sure that communication works between fed-master and fed-node by using a utility such as ping. + +{% highlight sh %} +{% raw %} +echo "192.168.121.9 fed-master +192.168.121.65 fed-node" >> /etc/hosts +{% endraw %} +{% endhighlight %} + +* Edit /etc/kubernetes/config which will be the same on all hosts (master and node) to contain: + +{% highlight sh %} +{% raw %} +# Comma separated list of nodes in the etcd cluster +KUBE_MASTER="--master=http://fed-master:8080" + +# logging to stderr means we get it in the systemd journal +KUBE_LOGTOSTDERR="--logtostderr=true" + +# journal message level, 0 is debug +KUBE_LOG_LEVEL="--v=0" + +# Should this cluster be allowed to run privileged docker containers +KUBE_ALLOW_PRIV="--allow-privileged=false" +{% endraw %} +{% endhighlight %} + +* Disable the firewall on both the master and node, as docker does not play well with other firewall rule managers. Please note that iptables-services does not exist on default fedora server install. + +{% highlight sh %} +{% raw %} +systemctl disable iptables-services firewalld +systemctl stop iptables-services firewalld +{% endraw %} +{% endhighlight %} + +**Configure the Kubernetes services on the master.** + +* Edit /etc/kubernetes/apiserver to appear as such. The service-cluster-ip-range IP addresses must be an unused block of addresses, not used anywhere else. They do not need to be routed or assigned to anything. + +{% highlight sh %} +{% raw %} +# The address on the local server to listen to. +KUBE_API_ADDRESS="--address=0.0.0.0" + +# Comma separated list of nodes in the etcd cluster +KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:4001" + +# Address range to use for services +KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" + +# Add your own! +KUBE_API_ARGS="" +{% endraw %} +{% endhighlight %} + +* Edit /etc/etcd/etcd.conf,let the etcd to listen all the ip instead of 127.0.0.1, if not, you will get the error like "connection refused". Note that Fedora 22 uses etcd 2.0, One of the changes in etcd 2.0 is that now uses port 2379 and 2380 (as opposed to etcd 0.46 which userd 4001 and 7001). + +{% highlight sh %} +{% raw %} +ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001" +{% endraw %} +{% endhighlight %} + +* Create /var/run/kubernetes on master: + +{% highlight sh %} +{% raw %} +mkdir /var/run/kubernetes +chown kube:kube /var/run/kubernetes +chmod 750 /var/run/kubernetes +{% endraw %} +{% endhighlight %} + +* Start the appropriate services on master: + +{% highlight sh %} +{% raw %} +for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do + systemctl restart $SERVICES + systemctl enable $SERVICES + systemctl status $SERVICES +done +{% endraw %} +{% endhighlight %} + +* Addition of nodes: + +* Create following node.json file on Kubernetes master node: + +{% highlight json %} +{% raw %} +{ + "apiVersion": "v1", + "kind": "Node", + "metadata": { + "name": "fed-node", + "labels":{ "name": "fed-node-label"} + }, + "spec": { + "externalID": "fed-node" + } +} +{% endraw %} +{% endhighlight %} + +Now create a node object internally in your Kubernetes cluster by running: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./node.json + +$ kubectl get nodes +NAME LABELS STATUS +fed-node name=fed-node-label Unknown +{% endraw %} +{% endhighlight %} + +Please note that in the above, it only creates a representation for the node +_fed-node_ internally. It does not provision the actual _fed-node_. Also, it +is assumed that _fed-node_ (as specified in `name`) can be resolved and is +reachable from Kubernetes master node. This guide will discuss how to provision +a Kubernetes node (fed-node) below. + +**Configure the Kubernetes services on the node.** + +***We need to configure the kubelet on the node.*** + +* Edit /etc/kubernetes/kubelet to appear as such: + +{% highlight sh %} +{% raw %} +### +# Kubernetes kubelet (node) config + +# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces) +KUBELET_ADDRESS="--address=0.0.0.0" + +# You may leave this blank to use the actual hostname +KUBELET_HOSTNAME="--hostname-override=fed-node" + +# location of the api-server +KUBELET_API_SERVER="--api-servers=http://fed-master:8080" + +# Add your own! +#KUBELET_ARGS="" +{% endraw %} +{% endhighlight %} + +* Start the appropriate services on the node (fed-node). + +{% highlight sh %} +{% raw %} +for SERVICES in kube-proxy kubelet docker; do + systemctl restart $SERVICES + systemctl enable $SERVICES + systemctl status $SERVICES +done +{% endraw %} +{% endhighlight %} + +* Check to make sure now the cluster can see the fed-node on fed-master, and its status changes to _Ready_. + +{% highlight console %} +{% raw %} +kubectl get nodes +NAME LABELS STATUS +fed-node name=fed-node-label Ready +{% endraw %} +{% endhighlight %} + +* Deletion of nodes: + +To delete _fed-node_ from your Kubernetes cluster, one should run the following on fed-master (Please do not do it, it is just for information): + +{% highlight sh %} +{% raw %} +kubectl delete -f ./node.json +{% endraw %} +{% endhighlight %} + +*You should be finished!* + +**The cluster should be running! Launch a test pod.** + +You should have a functional cluster, check out [101](../../../docs/user-guide/walkthrough/README.html)! + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/fedora/fedora_manual_config.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md b/v1.1/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md new file mode 100644 index 0000000000000..ce57cb6f0e9f6 --- /dev/null +++ b/v1.1/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md @@ -0,0 +1,235 @@ +--- +layout: docwithnav +title: "Kubernetes multiple nodes cluster with flannel on Fedora" +--- + + + + +Kubernetes multiple nodes cluster with flannel on Fedora +-------------------------------------------------------- + +**Table of Contents** + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Master Setup](#master-setup) +- [Node Setup](#node-setup) +- [**Test the cluster and flannel configuration**](#test-the-cluster-and-flannel-configuration) + +## Introduction + +This document describes how to deploy Kubernetes on multiple hosts to set up a multi-node cluster and networking with flannel. Follow fedora [getting started guide](fedora_manual_config.html) to setup 1 master (fed-master) and 2 or more nodes. Make sure that all nodes have different names (fed-node1, fed-node2 and so on) and labels (fed-node1-label, fed-node2-label, and so on) to avoid any conflict. Also make sure that the Kubernetes master host is running etcd, kube-controller-manager, kube-scheduler, and kube-apiserver services, and the nodes are running docker, kube-proxy and kubelet services. Now install flannel on Kubernetes nodes. flannel on each node configures an overlay network that docker uses. flannel runs on each node to setup a unique class-C container network. + +## Prerequisites + +1. You need 2 or more machines with Fedora installed. + +## Master Setup + +**Perform following commands on the Kubernetes master** + +* Configure flannel by creating a `flannel-config.json` in your current directory on fed-master. flannel provides udp and vxlan among other overlay networking backend options. In this guide, we choose kernel based vxlan backend. The contents of the json are: + +{% highlight json %} +{% raw %} +{ + "Network": "18.16.0.0/16", + "SubnetLen": 24, + "Backend": { + "Type": "vxlan", + "VNI": 1 + } +} +{% endraw %} +{% endhighlight %} + +**NOTE:** Choose an IP range that is *NOT* part of the public IP address range. + +* Add the configuration to the etcd server on fed-master. + +{% highlight sh %} +{% raw %} +etcdctl set /coreos.com/network/config < flannel-config.json +{% endraw %} +{% endhighlight %} + +* Verify the key exists in the etcd server on fed-master. + +{% highlight sh %} +{% raw %} +etcdctl get /coreos.com/network/config +{% endraw %} +{% endhighlight %} + +## Node Setup + +**Perform following commands on all Kubernetes nodes** + +* Edit the flannel configuration file /etc/sysconfig/flanneld as follows: + +{% highlight sh %} +{% raw %} +# Flanneld configuration options + +# etcd url location. Point this to the server where etcd runs +FLANNEL_ETCD="http://fed-master:4001" + +# etcd config key. This is the configuration key that flannel queries +# For address range assignment +FLANNEL_ETCD_KEY="/coreos.com/network" + +# Any additional options that you want to pass +FLANNEL_OPTIONS="" +{% endraw %} +{% endhighlight %} + +**Note:** By default, flannel uses the interface for the default route. If you have multiple interfaces and would like to use an interface other than the default route one, you could add "-iface=" to FLANNEL_OPTIONS. For additional options, run `flanneld --help` on command line. + +* Enable the flannel service. + +{% highlight sh %} +{% raw %} +systemctl enable flanneld +{% endraw %} +{% endhighlight %} + +* If docker is not running, then starting flannel service is enough and skip the next step. + +{% highlight sh %} +{% raw %} +systemctl start flanneld +{% endraw %} +{% endhighlight %} + +* If docker is already running, then stop docker, delete docker bridge (docker0), start flanneld and restart docker as follows. Another alternative is to just reboot the system (`systemctl reboot`). + +{% highlight sh %} +{% raw %} +systemctl stop docker +ip link delete docker0 +systemctl start flanneld +systemctl start docker +{% endraw %} +{% endhighlight %} + +*** + +## **Test the cluster and flannel configuration** + +* Now check the interfaces on the nodes. Notice there is now a flannel.1 interface, and the ip addresses of docker0 and flannel.1 interfaces are in the same network. You will notice that docker0 is assigned a subnet (18.16.29.0/24 as shown below) on each Kubernetes node out of the IP range configured above. A working output should look like this: + +{% highlight console %} +{% raw %} +# ip -4 a|grep inet + inet 127.0.0.1/8 scope host lo + inet 192.168.122.77/24 brd 192.168.122.255 scope global dynamic eth0 + inet 18.16.29.0/16 scope global flannel.1 + inet 18.16.29.1/24 scope global docker0 +{% endraw %} +{% endhighlight %} + +* From any node in the cluster, check the cluster members by issuing a query to etcd server via curl (only partial output is shown using `grep -E "\{|\}|key|value"`). If you set up a 1 master and 3 nodes cluster, you should see one block for each node showing the subnets they have been assigned. You can associate those subnets to each node by the MAC address (VtepMAC) and IP address (Public IP) that is listed in the output. + +{% highlight sh %} +{% raw %} +curl -s http://fed-master:4001/v2/keys/coreos.com/network/subnets | python -mjson.tool +{% endraw %} +{% endhighlight %} + +{% highlight json %} +{% raw %} +{ + "node": { + "key": "/coreos.com/network/subnets", + { + "key": "/coreos.com/network/subnets/18.16.29.0-24", + "value": "{\"PublicIP\":\"192.168.122.77\",\"BackendType\":\"vxlan\",\"BackendData\":{\"VtepMAC\":\"46:f1:d0:18:d0:65\"}}" + }, + { + "key": "/coreos.com/network/subnets/18.16.83.0-24", + "value": "{\"PublicIP\":\"192.168.122.36\",\"BackendType\":\"vxlan\",\"BackendData\":{\"VtepMAC\":\"ca:38:78:fc:72:29\"}}" + }, + { + "key": "/coreos.com/network/subnets/18.16.90.0-24", + "value": "{\"PublicIP\":\"192.168.122.127\",\"BackendType\":\"vxlan\",\"BackendData\":{\"VtepMAC\":\"92:e2:80:ba:2d:4d\"}}" + } + } +} +{% endraw %} +{% endhighlight %} + +* From all nodes, review the `/run/flannel/subnet.env` file. This file was generated automatically by flannel. + +{% highlight console %} +{% raw %} +# cat /run/flannel/subnet.env +FLANNEL_SUBNET=18.16.29.1/24 +FLANNEL_MTU=1450 +FLANNEL_IPMASQ=false +{% endraw %} +{% endhighlight %} + +* At this point, we have etcd running on the Kubernetes master, and flannel / docker running on Kubernetes nodes. Next steps are for testing cross-host container communication which will confirm that docker and flannel are configured properly. + +* Issue the following commands on any 2 nodes: + +{% highlight console %} +{% raw %} +# docker run -it fedora:latest bash +bash-4.3# +{% endraw %} +{% endhighlight %} + +* This will place you inside the container. Install iproute and iputils packages to install ip and ping utilities. Due to a [bug](https://bugzilla.redhat.com/show_bug.cgi?id=1142311), it is required to modify capabilities of ping binary to work around "Operation not permitted" error. + +{% highlight console %} +{% raw %} +bash-4.3# yum -y install iproute iputils +bash-4.3# setcap cap_net_raw-ep /usr/bin/ping +{% endraw %} +{% endhighlight %} + +* Now note the IP address on the first node: + +{% highlight console %} +{% raw %} +bash-4.3# ip -4 a l eth0 | grep inet + inet 18.16.29.4/24 scope global eth0 +{% endraw %} +{% endhighlight %} + +* And also note the IP address on the other node: + +{% highlight console %} +{% raw %} +bash-4.3# ip a l eth0 | grep inet + inet 18.16.90.4/24 scope global eth0 +{% endraw %} +{% endhighlight %} + +* Now ping from the first node to the other node: + +{% highlight console %} +{% raw %} +bash-4.3# ping 18.16.90.4 +PING 18.16.90.4 (18.16.90.4) 56(84) bytes of data. +64 bytes from 18.16.90.4: icmp_seq=1 ttl=62 time=0.275 ms +64 bytes from 18.16.90.4: icmp_seq=2 ttl=62 time=0.372 ms +{% endraw %} +{% endhighlight %} + +* Now Kubernetes multi-node cluster is set up with overlay networking set up by flannel. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/gce.md b/v1.1/docs/getting-started-guides/gce.md new file mode 100644 index 0000000000000..4f2187455b24f --- /dev/null +++ b/v1.1/docs/getting-started-guides/gce.md @@ -0,0 +1,273 @@ +--- +layout: docwithnav +title: "Getting started on Google Compute Engine" +--- + + + + +Getting started on Google Compute Engine +---------------------------------------- + +**Table of Contents** + +- [Before you start](#before-you-start) +- [Prerequisites](#prerequisites) +- [Starting a cluster](#starting-a-cluster) +- [Installing the Kubernetes command line tools on your workstation](#installing-the-kubernetes-command-line-tools-on-your-workstation) +- [Getting started with your cluster](#getting-started-with-your-cluster) + - [Inspect your cluster](#inspect-your-cluster) + - [Run some examples](#run-some-examples) +- [Tearing down the cluster](#tearing-down-the-cluster) +- [Customizing](#customizing) +- [Troubleshooting](#troubleshooting) + - [Project settings](#project-settings) + - [Cluster initialization hang](#cluster-initialization-hang) + - [SSH](#ssh) + - [Networking](#networking) + + +The example below creates a Kubernetes cluster with 4 worker node Virtual Machines and a master Virtual Machine (i.e. 5 VMs in your cluster). This cluster is set up and controlled from your workstation (or wherever you find convenient). + +### Before you start + +If you want a simplified getting started experience and GUI for managing clusters, please consider trying [Google Container Engine](https://cloud.google.com/container-engine/) (GKE) for hosted cluster installation and management. + +If you want to use custom binaries or pure open source Kubernetes, please continue with the instructions below. + +### Prerequisites + +1. You need a Google Cloud Platform account with billing enabled. Visit the [Google Developers Console](http://cloud.google.com/console) for more details. +1. Install `gcloud` as necessary. `gcloud` can be installed as a part of the [Google Cloud SDK](https://cloud.google.com/sdk/). +1. Then, make sure you have the `gcloud preview` command line component installed. Run `gcloud preview` at the command line - if it asks to install any components, go ahead and install them. If it simply shows help text, you're good to go. This is required as the cluster setup script uses GCE [Instance Groups](https://cloud.google.com/compute/docs/instance-groups/), which are in the gcloud preview namespace. You will also need to **enable [`Compute Engine Instance Group Manager API`](https://developers.google.com/console/help/new/#activatingapis)** in the developers console. +1. Make sure that gcloud is set to use the Google Cloud Platform project you want. You can check the current project using `gcloud config list project` and change it via `gcloud config set project `. +1. Make sure you have credentials for GCloud by running ` gcloud auth login`. +1. Make sure you can start up a GCE VM from the command line. At least make sure you can do the [Create an instance](https://cloud.google.com/compute/docs/instances/#startinstancegcloud) part of the GCE Quickstart. +1. Make sure you can ssh into the VM without interactive prompts. See the [Log in to the instance](https://cloud.google.com/compute/docs/instances/#sshing) part of the GCE Quickstart. + +### Starting a cluster + +You can install a client and start a cluster with either one of these commands (we list both in case only one is installed on your machine): + + +{% highlight bash %} +{% raw %} + curl -sS https://get.k8s.io | bash +{% endraw %} +{% endhighlight %} + +or + +{% highlight bash %} +{% raw %} +wget -q -O - https://get.k8s.io | bash +{% endraw %} +{% endhighlight %} + +Once this command completes, you will have a master VM and four worker VMs, running as a Kubernetes cluster. + +By default, some containers will already be running on your cluster. Containers like `kibana` and `elasticsearch` provide [logging](logging.html), while `heapster` provides [monitoring](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/README.md) services. + +The script run by the commands above creates a cluster with the name/prefix "kubernetes". It defines one specific cluster config, so you can't run it more than once. + +Alternately, you can download and install the latest Kubernetes release from [this page](https://github.com/kubernetes/kubernetes/releases), then run the `/cluster/kube-up.sh` script to start the cluster: + +{% highlight bash %} +{% raw %} +cd kubernetes +cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +If you want more than one cluster running in your project, want to use a different name, or want a different number of worker nodes, see the `/cluster/gce/config-default.sh` file for more fine-grained configuration before you start up your cluster. + +If you run into trouble, please see the section on [troubleshooting](gce.html#troubleshooting), post to the +[google-containers group](https://groups.google.com/forum/#!forum/google-containers), or come ask questions on [Slack](../troubleshooting.html#slack). + +The next few steps will show you: + +1. how to set up the command line client on your workstation to manage the cluster +1. examples of how to use the cluster +1. how to delete the cluster +1. how to start clusters with non-default options (like larger clusters) + +### Installing the Kubernetes command line tools on your workstation + +The cluster startup script will leave you with a running cluster and a `kubernetes` directory on your workstation. +The next step is to make sure the `kubectl` tool is in your path. + +The [kubectl](../user-guide/kubectl/kubectl.html) tool controls the Kubernetes cluster manager. It lets you inspect your cluster resources, create, delete, and update components, and much more. +You will use it to look at your new cluster and bring up example apps. + +Add the appropriate binary folder to your `PATH` to access kubectl: + +{% highlight bash %} +{% raw %} +# OS X +export PATH=/platforms/darwin/amd64:$PATH + +# Linux +export PATH=/platforms/linux/amd64:$PATH +{% endraw %} +{% endhighlight %} + +**Note**: gcloud also ships with `kubectl`, which by default is added to your path. +However the gcloud bundled kubectl version may be older than the one downloaded by the +get.k8s.io install script. We recommend you use the downloaded binary to avoid +potential issues with client/server version skew. + +#### Enabling bash completion of the Kubernetes command line tools + +You may find it useful to enable `kubectl` bash completion: + +``` +{% raw %} +$ source ./contrib/completions/bash/kubectl +{% endraw %} +``` + +**Note**: This will last for the duration of your bash session. If you want to make this permanent you need to add this line in your bash profile. + +Alternatively, on most linux distributions you can also move the completions file to your bash_completions.d like this: + +``` +{% raw %} +$ cp ./contrib/completions/bash/kubectl /etc/bash_completion.d/ +{% endraw %} +``` + +but then you have to update it when you update kubectl. + +### Getting started with your cluster + +#### Inspect your cluster + +Once `kubectl` is in your path, you can use it to look at your cluster. E.g., running: + +{% highlight console %} +{% raw %} +$ kubectl get --all-namespaces services +{% endraw %} +{% endhighlight %} + +should show a set of [services](../user-guide/services.html) that look something like this: + +{% highlight console %} +{% raw %} +NAMESPACE NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +default kubernetes 10.0.0.1 443/TCP 1d +kube-system kube-dns 10.0.0.2 53/TCP,53/UDP k8s-app=kube-dns 1d +kube-system kube-ui 10.0.0.3 80/TCP k8s-app=kube-ui 1d +... +{% endraw %} +{% endhighlight %} + +Similarly, you can take a look at the set of [pods](../user-guide/pods.html) that were created during cluster startup. +You can do this via the + +{% highlight console %} +{% raw %} +$ kubectl get --all-namespaces pods +{% endraw %} +{% endhighlight %} + +command. + +You'll see a list of pods that looks something like this (the name specifics will be different): + +{% highlight console %} +{% raw %} +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system fluentd-cloud-logging-kubernetes-minion-63uo 1/1 Running 0 14m +kube-system fluentd-cloud-logging-kubernetes-minion-c1n9 1/1 Running 0 14m +kube-system fluentd-cloud-logging-kubernetes-minion-c4og 1/1 Running 0 14m +kube-system fluentd-cloud-logging-kubernetes-minion-ngua 1/1 Running 0 14m +kube-system kube-dns-v5-7ztia 3/3 Running 0 15m +kube-system kube-ui-v1-curt1 1/1 Running 0 15m +kube-system monitoring-heapster-v5-ex4u3 1/1 Running 1 15m +kube-system monitoring-influx-grafana-v1-piled 2/2 Running 0 15m +{% endraw %} +{% endhighlight %} + +Some of the pods may take a few seconds to start up (during this time they'll show `Pending`), but check that they all show as `Running` after a short period. + +#### Run some examples + +Then, see [a simple nginx example](../../docs/user-guide/simple-nginx.html) to try out your new cluster. + +For more complete applications, please look in the [examples directory](../../examples/). The [guestbook example](../../examples/guestbook/) is a good "getting started" walkthrough. + +### Tearing down the cluster + +To remove/delete/teardown the cluster, use the `kube-down.sh` script. + +{% highlight bash %} +{% raw %} +cd kubernetes +cluster/kube-down.sh +{% endraw %} +{% endhighlight %} + +Likewise, the `kube-up.sh` in the same directory will bring it back up. You do not need to rerun the `curl` or `wget` command: everything needed to setup the Kubernetes cluster is now on your workstation. + +### Customizing + +The script above relies on Google Storage to stage the Kubernetes release. It +then will start (by default) a single master VM along with 4 worker VMs. You +can tweak some of these parameters by editing `kubernetes/cluster/gce/config-default.sh` +You can view a transcript of a successful cluster creation +[here](https://gist.github.com/satnam6502/fc689d1b46db9772adea). + +### Troubleshooting + +#### Project settings + +You need to have the Google Cloud Storage API, and the Google Cloud Storage +JSON API enabled. It is activated by default for new projects. Otherwise, it +can be done in the Google Cloud Console. See the [Google Cloud Storage JSON +API Overview](https://cloud.google.com/storage/docs/json_api/) for more +details. + +Also ensure that-- as listed in the [Prerequsites section](#prerequisites)-- you've enabled the `Compute Engine Instance Group Manager API`, and can start up a GCE VM from the command line as in the [GCE Quickstart](https://cloud.google.com/compute/docs/quickstart) instructions. + +#### Cluster initialization hang + +If the Kubernetes startup script hangs waiting for the API to be reachable, you can troubleshoot by SSHing into the master and node VMs and looking at logs such as `/var/log/startupscript.log`. + +**Once you fix the issue, you should run `kube-down.sh` to cleanup** after the partial cluster creation, before running `kube-up.sh` to try again. + +#### SSH + +If you're having trouble SSHing into your instances, ensure the GCE firewall +isn't blocking port 22 to your VMs. By default, this should work but if you +have edited firewall rules or created a new non-default network, you'll need to +expose it: `gcloud compute firewall-rules create default-ssh --network= +--description "SSH allowed from anywhere" --allow tcp:22` + +Additionally, your GCE SSH key must either have no passcode or you need to be +using `ssh-agent`. + +#### Networking + +The instances must be able to connect to each other using their private IP. The +script uses the "default" network which should have a firewall rule called +"default-allow-internal" which allows traffic on any port on the private IPs. +If this rule is missing from the default network or if you change the network +being used in `cluster/config-default.sh` create a new rule with the following +field values: + +* Source Ranges: `10.0.0.0/8` +* Allowed Protocols and Port: `tcp:1-65535;udp:1-65535;icmp` + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/gce.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/index.md b/v1.1/docs/getting-started-guides/index.md new file mode 100644 index 0000000000000..6f66790888d4f --- /dev/null +++ b/v1.1/docs/getting-started-guides/index.md @@ -0,0 +1,215 @@ +--- +layout: docwithnav +title: "Creating a Kubernetes Cluster" +--- + + + + + +Creating a Kubernetes Cluster +---------------------------------------- + +Kubernetes can run on a range of platforms, from your laptop, to VMs on a cloud provider, to rack of +bare metal servers. The effort required to set up a cluster varies from running a single command to +crafting your own customized cluster. We'll guide you in picking a solution that fits for your needs. + +**Table of Contents** + + + - [Picking the Right Solution](#picking-the-right-solution) + - [Local-machine Solutions](#local-machine-solutions) + - [Hosted Solutions](#hosted-solutions) + - [Turn-key Cloud Solutions](#turn-key-cloud-solutions) + - [Custom Solutions](#custom-solutions) + - [Cloud](#cloud) + - [On-Premises VMs](#on-premises-vms) + - [Bare Metal](#bare-metal) + - [Integrations](#integrations) + - [Table of Solutions](#table-of-solutions) + + + + +## Picking the Right Solution + +If you just want to "kick the tires" on Kubernetes, we recommend the [local Docker-based](docker.html) solution. + +The local Docker-based solution is one of several [Local cluster](#local-machine-solutions) solutions +that are quick to set up, but are limited to running on one machine. + +When you are ready to scale up to more machines and higher availability, a [Hosted](#hosted-solutions) +solution is the easiest to create and maintain. + +[Turn-key cloud solutions](#turn-key-cloud-solutions) require only a few commands to create +and cover a wider range of cloud providers. + +[Custom solutions](#custom-solutions) require more effort to setup but cover and even +they vary from step-by-step instructions to general advice for setting up +a Kubernetes cluster from scratch. + +### Local-machine Solutions + +Local-machine solutions create a single cluster with one or more Kubernetes nodes on a single +physical machine. Setup is completely automated and doesn't require a cloud provider account. +But their size and availability is limited to that of a single machine. + +The local-machine solutions are: + +- [Local Docker-based](docker.html) (recommended starting point) +- [Vagrant](vagrant.html) (works on any platform with Vagrant: Linux, MacOS, or Windows.) +- [No-VM local cluster](locally.html) (Linux only) + + +### Hosted Solutions + +[Google Container Engine](https://cloud.google.com/container-engine) offers managed Kubernetes +clusters. + +### Turn-key Cloud Solutions + +These solutions allow you to create Kubernetes clusters on a range of Cloud IaaS providers with only a +few commands, and have active community support. + +- [GCE](gce.html) +- [AWS](aws.html) +- [Azure](coreos/azure/README.html) + +### Custom Solutions + +Kubernetes can run on a wide range of Cloud providers and bare-metal environments, and with many +base operating systems. + +If you can find a guide below that matches your needs, use it. It may be a little out of date, but +it will be easier than starting from scratch. If you do want to start from scratch because you +have special requirements or just because you want to understand what is underneath a Kubernetes +cluster, try the [Getting Started from Scratch](scratch.html) guide. + +If you are interested in supporting Kubernetes on a new platform, check out our [advice for +writing a new solution](../../docs/devel/writing-a-getting-started-guide.html). + +#### Cloud + +These solutions are combinations of cloud provider and OS not covered by the above solutions. + +- [AWS + coreos](coreos.html) +- [GCE + CoreOS](coreos.html) +- [AWS + Ubuntu](juju.html) +- [Joyent + Ubuntu](juju.html) +- [Rackspace + CoreOS](rackspace.html) + +#### On-Premises VMs + +- [Vagrant](coreos.html) (uses CoreOS and flannel) +- [CloudStack](cloudstack.html) (uses Ansible, CoreOS and flannel) +- [Vmware](vsphere.html) (uses Debian) +- [juju.md](juju.html) (uses Juju, Ubuntu and flannel) +- [Vmware](coreos.html) (uses CoreOS and flannel) +- [libvirt-coreos.md](libvirt-coreos.html) (uses CoreOS) +- [oVirt](ovirt.html) +- [libvirt](fedora/flannel_multi_node_cluster.html) (uses Fedora and flannel) +- [KVM](fedora/flannel_multi_node_cluster.html) (uses Fedora and flannel) + +#### Bare Metal + +- [Offline](coreos/bare_metal_offline.html) (no internet required. Uses CoreOS and Flannel) +- [fedora/fedora_ansible_config.md](fedora/fedora_ansible_config.html) +- [Fedora single node](fedora/fedora_manual_config.html) +- [Fedora multi node](fedora/flannel_multi_node_cluster.html) +- [Centos](centos/centos_manual_config.html) +- [Ubuntu](ubuntu.html) +- [Docker Multi Node](docker-multinode.html) + +#### Integrations + +These solutions provide integration with 3rd party schedulers, resource managers, and/or lower level platforms. + +- [Kubernetes on Mesos](mesos.html) + - Instructions specify GCE, but are generic enough to be adapted to most existing Mesos clusters +- [Kubernetes on DCOS](dcos.html) + - Community Edition DCOS uses AWS + - Enterprise Edition DCOS supports cloud hosting, on-premise VMs, and bare metal + +## Table of Solutions + +Here are all the solutions mentioned above in table form. + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +GKE | | | GCE | [docs](https://cloud.google.com/container-engine) | [✓][3] | Commercial +Vagrant | Saltstack | Fedora | flannel | [docs](vagrant.html) | [✓][2] | Project +GCE | Saltstack | Debian | GCE | [docs](gce.html) | [✓][1] | Project +Azure | CoreOS | CoreOS | Weave | [docs](coreos/azure/README.html) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin)) +Docker Single Node | custom | N/A | local | [docs](docker.html) | | Project ([@brendandburns](https://github.com/brendandburns)) +Docker Multi Node | Flannel | N/A | local | [docs](docker-multinode.html) | | Project ([@brendandburns](https://github.com/brendandburns)) +Bare-metal | Ansible | Fedora | flannel | [docs](fedora/fedora_ansible_config.html) | | Project +Digital Ocean | custom | Fedora | Calico | [docs](fedora/fedora-calico.html) | | Community (@djosborne) +Bare-metal | custom | Fedora | _none_ | [docs](fedora/fedora_manual_config.html) | | Project +Bare-metal | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.html) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +libvirt | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.html) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +KVM | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.html) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +Mesos/Docker | custom | Ubuntu | Docker | [docs](mesos-docker.html) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +Mesos/GCE | | | | [docs](mesos.html) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +DCOS | Marathon | CoreOS/Alpine | custom | [docs](dcos.html) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +AWS | CoreOS | CoreOS | flannel | [docs](coreos.html) | | Community +GCE | CoreOS | CoreOS | flannel | [docs](coreos.html) | | Community ([@pires](https://github.com/pires)) +Vagrant | CoreOS | CoreOS | flannel | [docs](coreos.html) | | Community ([@pires](https://github.com/pires), [@AntonioMeireles](https://github.com/AntonioMeireles)) +Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](coreos/bare_metal_offline.html) | | Community ([@jeffbean](https://github.com/jeffbean)) +Bare-metal | CoreOS | CoreOS | Calico | [docs](coreos/bare_metal_calico.html) | | Community ([@caseydavenport](https://github.com/caseydavenport)) +CloudStack | Ansible | CoreOS | flannel | [docs](cloudstack.html) | | Community ([@runseb](https://github.com/runseb)) +Vmware | | Debian | OVS | [docs](vsphere.html) | | Community ([@pietern](https://github.com/pietern)) +Bare-metal | custom | CentOS | _none_ | [docs](centos/centos_manual_config.html) | | Community ([@coolsvap](https://github.com/coolsvap)) +AWS | Juju | Ubuntu | flannel | [docs](juju.html) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +OpenStack/HPCloud | Juju | Ubuntu | flannel | [docs](juju.html) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +Joyent | Juju | Ubuntu | flannel | [docs](juju.html) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +AWS | Saltstack | Ubuntu | OVS | [docs](aws.html) | | Community ([@justinsb](https://github.com/justinsb)) +Bare-metal | custom | Ubuntu | Calico | [docs](ubuntu-calico.html) | | Community ([@djosborne](https://github.com/djosborne)) +Bare-metal | custom | Ubuntu | flannel | [docs](ubuntu.html) | | Community ([@resouer](https://github.com/resouer), [@WIZARD-CXY](https://github.com/WIZARD-CXY)) +Local | | | _none_ | [docs](locally.html) | | Community ([@preillyme](https://github.com/preillyme)) +libvirt/KVM | CoreOS | CoreOS | libvirt/KVM | [docs](libvirt-coreos.html) | | Community ([@lhuard1A](https://github.com/lhuard1A)) +oVirt | | | | [docs](ovirt.html) | | Community ([@simon3z](https://github.com/simon3z)) +Rackspace | CoreOS | CoreOS | flannel | [docs](rackspace.html) | | Community ([@doublerr](https://github.com/doublerr)) +any | any | any | any | [docs](scratch.html) | | Community ([@erictune](https://github.com/erictune)) + + +*Note*: The above table is ordered by version test/used in notes followed by support level. + +Definition of columns: + +- **IaaS Provider** is who/what provides the virtual or physical machines (nodes) that Kubernetes runs on. +- **OS** is the base operating system of the nodes. +- **Config. Mgmt** is the configuration management system that helps install and maintain Kubernetes software on the + nodes. +- **Networking** is what implements the [networking model](../../docs/admin/networking.html). Those with networking type + _none_ may not support more than one node, or may support multiple VM nodes only in the same physical node. +- **Conformance** indicates whether a cluster created with this configuration has passed the project's conformance + tests for supporting the API and base features of Kubernetes v1.0.0. +- Support Levels + - **Project**: Kubernetes Committers regularly use this configuration, so it usually works with the latest release + of Kubernetes. + - **Commercial**: A commercial offering with its own support arrangements. + - **Community**: Actively supported by community contributions. May not work with more recent releases of Kubernetes. + - **Inactive**: No active maintainer. Not recommended for first-time Kubernetes users, and may be deleted soon. +- **Notes** is relevant information such as the version of Kubernetes used. + + + + +[1]: https://gist.github.com/erictune/4cabc010906afbcc5061 + +[2]: https://gist.github.com/derekwaynecarr/505e56036cdf010bf6b6 + +[3]: https://gist.github.com/erictune/2f39b22f72565365e59b + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/README.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/juju.md b/v1.1/docs/getting-started-guides/juju.md new file mode 100644 index 0000000000000..51ca9d6f8a782 --- /dev/null +++ b/v1.1/docs/getting-started-guides/juju.md @@ -0,0 +1,259 @@ +--- +layout: docwithnav +title: "Getting started with Juju" +--- + + + + + +Getting started with Juju +------------------------- + +[Juju](https://jujucharms.com/docs/stable/about-juju) makes it easy to deploy +Kubernetes by provisioning, installing and configuring all the systems in +the cluster. Once deployed the cluster can easily scale up with one command +to increase the cluster size. + + +**Table of Contents** + +- [Prerequisites](#prerequisites) + - [On Ubuntu](#on-ubuntu) + - [With Docker](#with-docker) +- [Launch Kubernetes cluster](#launch-kubernetes-cluster) +- [Exploring the cluster](#exploring-the-cluster) +- [Run some containers!](#run-some-containers) +- [Scale out cluster](#scale-out-cluster) +- [Launch the "k8petstore" example app](#launch-the-k8petstore-example-app) +- [Tear down cluster](#tear-down-cluster) +- [More Info](#more-info) + - [Cloud compatibility](#cloud-compatibility) + + +## Prerequisites + +> Note: If you're running kube-up, on Ubuntu - all of the dependencies +> will be handled for you. You may safely skip to the section: +> [Launch Kubernetes Cluster](#launch-kubernetes-cluster) + +### On Ubuntu + +[Install the Juju client](https://jujucharms.com/get-started) on your +local Ubuntu system: + + sudo add-apt-repository ppa:juju/stable + sudo apt-get update + sudo apt-get install juju-core juju-quickstart + + +### With Docker + +If you are not using Ubuntu or prefer the isolation of Docker, you may +run the following: + + mkdir ~/.juju + sudo docker run -v ~/.juju:/home/ubuntu/.juju -ti jujusolutions/jujubox:latest + +At this point from either path you will have access to the `juju +quickstart` command. + +To set up the credentials for your chosen cloud run: + + juju quickstart --constraints="mem=3.75G" -i + +> The `constraints` flag is optional, it changes the size of virtual machines +> that Juju will generate when it requests a new machine. Larger machines +> will run faster but cost more money than smaller machines. + +Follow the dialogue and choose `save` and `use`. Quickstart will now +bootstrap the juju root node and setup the juju web based user +interface. + + +## Launch Kubernetes cluster + +You will need to export the `KUBERNETES_PROVIDER` environment variable before +bringing up the cluster. + + export KUBERNETES_PROVIDER=juju + cluster/kube-up.sh + +If this is your first time running the `kube-up.sh` script, it will install +the required dependencies to get started with Juju, additionally it will +launch a curses based configuration utility allowing you to select your cloud +provider and enter the proper access credentials. + +Next it will deploy the kubernetes master, etcd, 2 nodes with flannel based +Software Defined Networking (SDN) so containers on different hosts can +communicate with each other. + + +## Exploring the cluster + +The `juju status` command provides information about each unit in the cluster: + + $ juju status --format=oneline + - docker/0: 52.4.92.78 (started) + - flannel-docker/0: 52.4.92.78 (started) + - kubernetes/0: 52.4.92.78 (started) + - docker/1: 52.6.104.142 (started) + - flannel-docker/1: 52.6.104.142 (started) + - kubernetes/1: 52.6.104.142 (started) + - etcd/0: 52.5.216.210 (started) 4001/tcp + - juju-gui/0: 52.5.205.174 (started) 80/tcp, 443/tcp + - kubernetes-master/0: 52.6.19.238 (started) 8080/tcp + +You can use `juju ssh` to access any of the units: + + juju ssh kubernetes-master/0 + + +## Run some containers! + +`kubectl` is available on the Kubernetes master node. We'll ssh in to +launch some containers, but one could use `kubectl` locally by setting +`KUBERNETES_MASTER` to point at the ip address of "kubernetes-master/0". + +No pods will be available before starting a container: + + kubectl get pods + NAME READY STATUS RESTARTS AGE + + kubectl get replicationcontrollers + CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS + +We'll follow the aws-coreos example. Create a pod manifest: `pod.json` + +{% highlight json %} +{% raw %} +{ + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "hello", + "labels": { + "name": "hello", + "environment": "testing" + } + }, + "spec": { + "containers": [{ + "name": "hello", + "image": "quay.io/kelseyhightower/hello", + "ports": [{ + "containerPort": 80, + "hostPort": 80 + }] + }] + } +} +{% endraw %} +{% endhighlight %} + +Create the pod with kubectl: + + kubectl create -f pod.json + + +Get info on the pod: + + kubectl get pods + + +To test the hello app, we need to locate which node is hosting +the container. Better tooling for using Juju to introspect container +is in the works but we can use `juju run` and `juju status` to find +our hello app. + +Exit out of our ssh session and run: + + juju run --unit kubernetes/0 "docker ps -n=1" + ... + juju run --unit kubernetes/1 "docker ps -n=1" + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 02beb61339d8 quay.io/kelseyhightower/hello:latest /hello About an hour ago Up About an hour k8s_hello.... + + +We see "kubernetes/1" has our container, we can open port 80: + + juju run --unit kubernetes/1 "open-port 80" + juju expose kubernetes + sudo apt-get install curl + curl $(juju status --format=oneline kubernetes/1 | cut -d' ' -f3) + +Finally delete the pod: + + juju ssh kubernetes-master/0 + kubectl delete pods hello + + +## Scale out cluster + +We can add node units like so: + + juju add-unit docker # creates unit docker/2, kubernetes/2, docker-flannel/2 + +## Launch the "k8petstore" example app + +The [k8petstore example](../../examples/k8petstore/) is available as a +[juju action](https://jujucharms.com/docs/devel/actions). + + juju action do kubernetes-master/0 + +> Note: this example includes curl statements to exercise the app, which +> automatically generates "petstore" transactions written to redis, and allows +> you to visualize the throughput in your browser. + +## Tear down cluster + + ./kube-down.sh + +or destroy your current Juju environment (using the `juju env` command): + + juju destroy-environment --force `juju env` + + +## More Info + +The Kubernetes charms and bundles can be found in the `kubernetes` project on +github.com: + + - [Bundle Repository](http://releases.k8s.io/release-1.1/cluster/juju/bundles) + * [Kubernetes master charm](https://releases.k8s.io/release-1.1/cluster/juju/charms/trusty/kubernetes-master) + * [Kubernetes node charm](https://releases.k8s.io/release-1.1/cluster/juju/charms/trusty/kubernetes) + - [More about Juju](https://jujucharms.com) + + +### Cloud compatibility + +Juju runs natively against a variety of public cloud providers. Juju currently +works with [Amazon Web Service](https://jujucharms.com/docs/stable/config-aws), +[Windows Azure](https://jujucharms.com/docs/stable/config-azure), +[DigitalOcean](https://jujucharms.com/docs/stable/config-digitalocean), +[Google Compute Engine](https://jujucharms.com/docs/stable/config-gce), +[HP Public Cloud](https://jujucharms.com/docs/stable/config-hpcloud), +[Joyent](https://jujucharms.com/docs/stable/config-joyent), +[LXC](https://jujucharms.com/docs/stable/config-LXC), any +[OpenStack](https://jujucharms.com/docs/stable/config-openstack) deployment, +[Vagrant](https://jujucharms.com/docs/stable/config-vagrant), and +[Vmware vSphere](https://jujucharms.com/docs/stable/config-vmware). + +If you do not see your favorite cloud provider listed many clouds can be +configured for [manual provisioning](https://jujucharms.com/docs/stable/config-manual). + +The Kubernetes bundle has been tested on GCE and AWS and found to work with +version 1.0.0. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/juju.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/k8s-docker.png b/v1.1/docs/getting-started-guides/k8s-docker.png new file mode 100644 index 0000000000000000000000000000000000000000..6795e35e83d5bf1350903e1a0a0a0028b99ad6ac GIT binary patch literal 52545 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

          W5r- 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/getting-started-guides/k8s-singlenode-docker.png b/v1.1/docs/getting-started-guides/k8s-singlenode-docker.png new file mode 100644 index 0000000000000000000000000000000000000000..5ebf812682d27e325cabf532f6a67f7bd69cf86d GIT binary patch literal 31801 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/getting-started-guides/kibana-logs.png b/v1.1/docs/getting-started-guides/kibana-logs.png new file mode 100644 index 0000000000000000000000000000000000000000..15b2f6759b3e0e4d3c1b18bc0328e9992e640040 GIT binary patch literal 183775 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 + + + +Getting started with libvirt CoreOS +----------------------------------- + +**Table of Contents** + +- [Highlights](#highlights) +- [Warnings about `libvirt-coreos` use case](#warnings-about-libvirt-coreos-use-case) +- [Prerequisites](#prerequisites) +- [Setup](#setup) +- [Interacting with your Kubernetes cluster with the `kube-*` scripts.](#interacting-with-your-kubernetes-cluster-with-the-kube--scripts) +- [Troubleshooting](#troubleshooting) + - [!!! Cannot find kubernetes-server-linux-amd64.tar.gz](#-cannot-find-kubernetes-server-linux-amd64targz) + - [Can't find virsh in PATH, please fix and retry.](#cant-find-virsh-in-path-please-fix-and-retry) + - [error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory](#error-failed-to-connect-socket-to-varrunlibvirtlibvirt-sock-no-such-file-or-directory) + - [error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied](#error-failed-to-connect-socket-to-varrunlibvirtlibvirt-sock-permission-denied) + - [error: Out of memory initializing network (virsh net-create...)](#error-out-of-memory-initializing-network-virsh-net-create) + +### Highlights + +* Super-fast cluster boot-up (few seconds instead of several minutes for vagrant) +* Reduced disk usage thanks to [COW](https://en.wikibooks.org/wiki/QEMU/Images#Copy_on_write) +* Reduced memory footprint thanks to [KSM](https://www.kernel.org/doc/Documentation/vm/ksm.txt) + +### Warnings about `libvirt-coreos` use case + +The primary goal of the `libvirt-coreos` cluster provider is to deploy a multi-node Kubernetes cluster on local VMs as fast as possible and to be as light as possible in term of resources used. + +In order to achieve that goal, its deployment is very different from the “standard production deployment” method used on other providers. This was done on purpose in order to implement some optimizations made possible by the fact that we know that all VMs will be running on the same physical machine. + +The `libvirt-coreos` cluster provider doesn’t aim at being production look-alike. + +Another difference is that no security is enforced on `libvirt-coreos` at all. For example, + +* Kube API server is reachable via a clear-text connection (no SSL); +* Kube API server requires no credentials; +* etcd access is not protected; +* Kubernetes secrets are not protected as securely as they are on production environments; +* etc. + +So, an k8s application developer should not validate its interaction with Kubernetes on `libvirt-coreos` because he might technically succeed in doing things that are prohibited on a production environment like: + +* un-authenticated access to Kube API server; +* Access to Kubernetes private data structures inside etcd; +* etc. + +On the other hand, `libvirt-coreos` might be useful for people investigating low level implementation of Kubernetes because debugging techniques like sniffing the network traffic or introspecting the etcd content are easier on `libvirt-coreos` than on a production deployment. + +### Prerequisites + +1. Install [dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html) +2. Install [ebtables](http://ebtables.netfilter.org/) +3. Install [qemu](http://wiki.qemu.org/Main_Page) +4. Install [libvirt](http://libvirt.org/) +5. Enable and start the libvirt daemon, e.g: + * ``systemctl enable libvirtd`` + * ``systemctl start libvirtd`` +6. [Grant libvirt access to your user¹](https://libvirt.org/aclpolkit.html) +7. Check that your $HOME is accessible to the qemu user² + +#### ¹ Depending on your distribution, libvirt access may be denied by default or may require a password at each access. + +You can test it with the following command: + +{% highlight sh %} +{% raw %} +virsh -c qemu:///system pool-list +{% endraw %} +{% endhighlight %} + +If you have access error messages, please read https://libvirt.org/acl.html and https://libvirt.org/aclpolkit.html . + +In short, if your libvirt has been compiled with Polkit support (ex: Arch, Fedora 21), you can create `/etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules` as follows to grant full access to libvirt to `$USER` + +{% highlight sh %} +{% raw %} +sudo /bin/sh -c "cat - > /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules" << EOF +polkit.addRule(function(action, subject) { + if (action.id == "org.libvirt.unix.manage" && + subject.user == "$USER") { + return polkit.Result.YES; + polkit.log("action=" + action); + polkit.log("subject=" + subject); + } +}); +EOF +{% endraw %} +{% endhighlight %} + +If your libvirt has not been compiled with Polkit (ex: Ubuntu 14.04.1 LTS), check the permissions on the libvirt unix socket: + +{% highlight console %} +{% raw %} +$ ls -l /var/run/libvirt/libvirt-sock +srwxrwx--- 1 root libvirtd 0 févr. 12 16:03 /var/run/libvirt/libvirt-sock + +$ usermod -a -G libvirtd $USER +# $USER needs to logout/login to have the new group be taken into account +{% endraw %} +{% endhighlight %} + +(Replace `$USER` with your login name) + +#### ² Qemu will run with a specific user. It must have access to the VMs drives + +All the disk drive resources needed by the VM (CoreOS disk image, Kubernetes binaries, cloud-init files, etc.) are put inside `./cluster/libvirt-coreos/libvirt_storage_pool`. + +As we’re using the `qemu:///system` instance of libvirt, qemu will run with a specific `user:group` distinct from your user. It is configured in `/etc/libvirt/qemu.conf`. That qemu user must have access to that libvirt storage pool. + +If your `$HOME` is world readable, everything is fine. If your $HOME is private, `cluster/kube-up.sh` will fail with an error message like: + +{% highlight console %} +{% raw %} +error: Cannot access storage file '$HOME/.../kubernetes/cluster/libvirt-coreos/libvirt_storage_pool/kubernetes_master.img' (as uid:99, gid:78): Permission denied +{% endraw %} +{% endhighlight %} + +In order to fix that issue, you have several possibilities: +* set `POOL_PATH` inside `cluster/libvirt-coreos/config-default.sh` to a directory: + * backed by a filesystem with a lot of free disk space + * writable by your user; + * accessible by the qemu user. +* Grant the qemu user access to the storage pool. + +On Arch: + +{% highlight sh %} +{% raw %} +setfacl -m g:kvm:--x ~ +{% endraw %} +{% endhighlight %} + +### Setup + +By default, the libvirt-coreos setup will create a single Kubernetes master and 3 Kubernetes nodes. Because the VM drives use Copy-on-Write and because of memory ballooning and KSM, there is a lot of resource over-allocation. + +To start your local cluster, open a shell and run: + +{% highlight sh %} +{% raw %} +cd kubernetes + +export KUBERNETES_PROVIDER=libvirt-coreos +cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +The `KUBERNETES_PROVIDER` environment variable tells all of the various cluster management scripts which variant to use. If you forget to set this, the assumption is you are running on Google Compute Engine. + +The `NUM_MINIONS` environment variable may be set to specify the number of nodes to start. If it is not set, the number of nodes defaults to 3. + +The `KUBE_PUSH` environment variable may be set to specify which Kubernetes binaries must be deployed on the cluster. Its possible values are: + +* `release` (default if `KUBE_PUSH` is not set) will deploy the binaries of `_output/release-tars/kubernetes-server-….tar.gz`. This is built with `make release` or `make release-skip-tests`. +* `local` will deploy the binaries of `_output/local/go/bin`. These are built with `make`. + +You can check that your machines are there and running with: + +{% highlight console %} +{% raw %} +$ virsh -c qemu:///system list + Id Name State +---------------------------------------------------- + 15 kubernetes_master running + 16 kubernetes_minion-01 running + 17 kubernetes_minion-02 running + 18 kubernetes_minion-03 running +{% endraw %} +{% endhighlight %} + +You can check that the Kubernetes cluster is working with: + +{% highlight console %} +{% raw %} +$ kubectl get nodes +NAME LABELS STATUS +192.168.10.2 Ready +192.168.10.3 Ready +192.168.10.4 Ready +{% endraw %} +{% endhighlight %} + +The VMs are running [CoreOS](https://coreos.com/). +Your ssh keys have already been pushed to the VM. (It looks for ~/.ssh/id_*.pub) +The user to use to connect to the VM is `core`. +The IP to connect to the master is 192.168.10.1. +The IPs to connect to the nodes are 192.168.10.2 and onwards. + +Connect to `kubernetes_master`: + +{% highlight sh %} +{% raw %} +ssh core@192.168.10.1 +{% endraw %} +{% endhighlight %} + +Connect to `kubernetes_minion-01`: + +{% highlight sh %} +{% raw %} +ssh core@192.168.10.2 +{% endraw %} +{% endhighlight %} + +### Interacting with your Kubernetes cluster with the `kube-*` scripts. + +All of the following commands assume you have set `KUBERNETES_PROVIDER` appropriately: + +{% highlight sh %} +{% raw %} +export KUBERNETES_PROVIDER=libvirt-coreos +{% endraw %} +{% endhighlight %} + +Bring up a libvirt-CoreOS cluster of 5 nodes + +{% highlight sh %} +{% raw %} +NUM_MINIONS=5 cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +Destroy the libvirt-CoreOS cluster + +{% highlight sh %} +{% raw %} +cluster/kube-down.sh +{% endraw %} +{% endhighlight %} + +Update the libvirt-CoreOS cluster with a new Kubernetes release produced by `make release` or `make release-skip-tests`: + +{% highlight sh %} +{% raw %} +cluster/kube-push.sh +{% endraw %} +{% endhighlight %} + +Update the libvirt-CoreOS cluster with the locally built Kubernetes binaries produced by `make`: + +{% highlight sh %} +{% raw %} +KUBE_PUSH=local cluster/kube-push.sh +{% endraw %} +{% endhighlight %} + +Interact with the cluster + +{% highlight sh %} +{% raw %} +kubectl ... +{% endraw %} +{% endhighlight %} + +### Troubleshooting + +#### !!! Cannot find kubernetes-server-linux-amd64.tar.gz + +Build the release tarballs: + +{% highlight sh %} +{% raw %} +make release +{% endraw %} +{% endhighlight %} + +#### Can't find virsh in PATH, please fix and retry. + +Install libvirt + +On Arch: + +{% highlight sh %} +{% raw %} +pacman -S qemu libvirt +{% endraw %} +{% endhighlight %} + +On Ubuntu 14.04.1: + +{% highlight sh %} +{% raw %} +aptitude install qemu-system-x86 libvirt-bin +{% endraw %} +{% endhighlight %} + +On Fedora 21: + +{% highlight sh %} +{% raw %} +yum install qemu libvirt +{% endraw %} +{% endhighlight %} + +#### error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory + +Start the libvirt daemon + +On Arch: + +{% highlight sh %} +{% raw %} +systemctl start libvirtd +{% endraw %} +{% endhighlight %} + +On Ubuntu 14.04.1: + +{% highlight sh %} +{% raw %} +service libvirt-bin start +{% endraw %} +{% endhighlight %} + +#### error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied + +Fix libvirt access permission (Remember to adapt `$USER`) + +On Arch and Fedora 21: + +{% highlight sh %} +{% raw %} +cat > /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules < + + + +Getting started locally +----------------------- + +**Table of Contents** + +- [Requirements](#requirements) + - [Linux](#linux) + - [Docker](#docker) + - [etcd](#etcd) + - [go](#go) +- [Starting the cluster](#starting-the-cluster) +- [Running a container](#running-a-container) +- [Running a user defined pod](#running-a-user-defined-pod) +- [Troubleshooting](#troubleshooting) + - [I cannot reach service IPs on the network.](#i-cannot-reach-service-ips-on-the-network) + - [I cannot create a replication controller with replica size greater than 1! What gives?](#i-cannot-create-a-replication-controller-with-replica-size-greater-than-1--what-gives) + - [I changed Kubernetes code, how do I run it?](#i-changed-kubernetes-code-how-do-i-run-it) + - [kubectl claims to start a container but `get pods` and `docker ps` don't show it.](#kubectl-claims-to-start-a-container-but-get-pods-and-docker-ps-dont-show-it) + - [The pods fail to connect to the services by host names](#the-pods-fail-to-connect-to-the-services-by-host-names) + +### Requirements + +#### Linux + +Not running Linux? Consider running Linux in a local virtual machine with [Vagrant](vagrant.html), or on a cloud provider like [Google Compute Engine](gce.html) + +#### Docker + +At least [Docker](https://docs.docker.com/installation/#installation) +1.3+. Ensure the Docker daemon is running and can be contacted (try `docker +ps`). Some of the Kubernetes components need to run as root, which normally +works fine with docker. + +#### etcd + +You need an [etcd](https://github.com/coreos/etcd/releases) in your path, please make sure it is installed and in your ``$PATH``. + +#### go + +You need [go](https://golang.org/doc/install) at least 1.3+ in your path, please make sure it is installed and in your ``$PATH``. + +### Starting the cluster + +In a separate tab of your terminal, run the following (since one needs sudo access to start/stop Kubernetes daemons, it is easier to run the entire script as root): + +{% highlight sh %} +{% raw %} +cd kubernetes +hack/local-up-cluster.sh +{% endraw %} +{% endhighlight %} + +This will build and start a lightweight local cluster, consisting of a master +and a single node. Type Control-C to shut it down. + +You can use the cluster/kubectl.sh script to interact with the local cluster. hack/local-up-cluster.sh will +print the commands to run to point kubectl at the local cluster. + + +### Running a container + +Your cluster is running, and you want to start running containers! + +You can now use any of the cluster/kubectl.sh commands to interact with your local setup. + +{% highlight sh %} +{% raw %} +cluster/kubectl.sh get pods +cluster/kubectl.sh get services +cluster/kubectl.sh get replicationcontrollers +cluster/kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 + + +## begin wait for provision to complete, you can monitor the docker pull by opening a new terminal + sudo docker images + ## you should see it pulling the nginx image, once the above command returns it + sudo docker ps + ## you should see your container running! + exit +## end wait + +## introspect Kubernetes! +cluster/kubectl.sh get pods +cluster/kubectl.sh get services +cluster/kubectl.sh get replicationcontrollers +{% endraw %} +{% endhighlight %} + + +### Running a user defined pod + +Note the difference between a [container](../user-guide/containers.html) +and a [pod](../user-guide/pods.html). Since you only asked for the former, Kubernetes will create a wrapper pod for you. +However you cannot view the nginx start page on localhost. To verify that nginx is running you need to run `curl` within the docker container (try `docker exec`). + +You can control the specifications of a pod via a user defined manifest, and reach nginx through your browser on the port specified therein: + +{% highlight sh %} +{% raw %} +cluster/kubectl.sh create -f docs/user-guide/pod.yaml +{% endraw %} +{% endhighlight %} + +Congratulations! + +### Troubleshooting + +#### I cannot reach service IPs on the network. + +Some firewall software that uses iptables may not interact well with +kubernetes. If you have trouble around networking, try disabling any +firewall or other iptables-using systems, first. Also, you can check +if SELinux is blocking anything by running a command such as `journalctl --since yesterday | grep avc`. + +By default the IP range for service cluster IPs is 10.0.*.* - depending on your +docker installation, this may conflict with IPs for containers. If you find +containers running with IPs in this range, edit hack/local-cluster-up.sh and +change the service-cluster-ip-range flag to something else. + +#### I cannot create a replication controller with replica size greater than 1! What gives? + +You are running a single node setup. This has the limitation of only supporting a single replica of a given pod. If you are interested in running with larger replica sizes, we encourage you to try the local vagrant setup or one of the cloud providers. + +#### I changed Kubernetes code, how do I run it? + +{% highlight sh %} +{% raw %} +cd kubernetes +hack/build-go.sh +hack/local-up-cluster.sh +{% endraw %} +{% endhighlight %} + +#### kubectl claims to start a container but `get pods` and `docker ps` don't show it. + +One or more of the KUbernetes daemons might've crashed. Tail the logs of each in /tmp. + +#### The pods fail to connect to the services by host names + +The local-up-cluster.sh script doesn't start a DNS service. Similar situation can be found [here](http://issue.k8s.io/6667). You can start a manually. Related documents can be found [here](https://releases.k8s.io/release-1.1/cluster/addons/dns#how-do-i-configure-it) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/locally.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/logging-elasticsearch.md b/v1.1/docs/getting-started-guides/logging-elasticsearch.md new file mode 100644 index 0000000000000..fd78d152f85b2 --- /dev/null +++ b/v1.1/docs/getting-started-guides/logging-elasticsearch.md @@ -0,0 +1,274 @@ +--- +layout: docwithnav +title: "Cluster Level Logging with Elasticsearch and Kibana" +--- + + + + + +# Cluster Level Logging with Elasticsearch and Kibana + +On the Google Compute Engine (GCE) platform the default cluster level logging support targets +[Google Cloud Logging](https://cloud.google.com/logging/docs/) as described at the [Logging](logging.html) getting +started page. Here we describe how to set up a cluster to ingest logs into Elasticsearch and view them using Kibana as an +alternative to Google Cloud Logging. + +To use Elasticsearch and Kibana for cluster logging you should set the following environment variable as shown below: + +{% highlight console %} +{% raw %} +KUBE_LOGGING_DESTINATION=elasticsearch +{% endraw %} +{% endhighlight %} + +You should also ensure that `KUBE_ENABLE_NODE_LOGGING=true` (which is the default for the GCE platform). + +Now when you create a cluster a message will indicate that the Fluentd node-level log collectors +will target Elasticsearch: + +{% highlight console %} +{% raw %} +$ cluster/kube-up.sh +... +Project: kubernetes-satnam +Zone: us-central1-b +... calling kube-up +Project: kubernetes-satnam +Zone: us-central1-b ++++ Staging server tars to Google Storage: gs://kubernetes-staging-e6d0e81793/devel ++++ kubernetes-server-linux-amd64.tar.gz uploaded (sha1 = 6987c098277871b6d69623141276924ab687f89d) ++++ kubernetes-salt.tar.gz uploaded (sha1 = bdfc83ed6b60fa9e3bff9004b542cfc643464cd0) +Looking for already existing resources +Starting master and configuring firewalls +Created [https://www.googleapis.com/compute/v1/projects/kubernetes-satnam/zones/us-central1-b/disks/kubernetes-master-pd]. +NAME ZONE SIZE_GB TYPE STATUS +kubernetes-master-pd us-central1-b 20 pd-ssd READY +Created [https://www.googleapis.com/compute/v1/projects/kubernetes-satnam/regions/us-central1/addresses/kubernetes-master-ip]. ++++ Logging using Fluentd to elasticsearch +{% endraw %} +{% endhighlight %} + +The node level Fluentd collector pods and the Elasticsearech pods used to ingest cluster logs and the pod for the Kibana +viewer should be running in the kube-system namespace soon after the cluster comes to life. + +{% highlight console %} +{% raw %} +$ kubectl get pods --namespace=kube-system +NAME READY REASON RESTARTS AGE +elasticsearch-logging-v1-78nog 1/1 Running 0 2h +elasticsearch-logging-v1-nj2nb 1/1 Running 0 2h +fluentd-elasticsearch-kubernetes-minion-5oq0 1/1 Running 0 2h +fluentd-elasticsearch-kubernetes-minion-6896 1/1 Running 0 2h +fluentd-elasticsearch-kubernetes-minion-l1ds 1/1 Running 0 2h +fluentd-elasticsearch-kubernetes-minion-lz9j 1/1 Running 0 2h +kibana-logging-v1-bhpo8 1/1 Running 0 2h +kube-dns-v3-7r1l9 3/3 Running 0 2h +monitoring-heapster-v4-yl332 1/1 Running 1 2h +monitoring-influx-grafana-v1-o79xf 2/2 Running 0 2h +{% endraw %} +{% endhighlight %} + +Here we see that for a four node cluster there is a `fluent-elasticsearch` pod running which gathers +the Docker container logs and sends them to Elasticsearch. The Fluentd collector communicates to +a Kubernetes service that maps requests to specific Elasticsearch pods. Similarly, Kibana can also be +accessed via a Kubernetes service definition. + + +{% highlight console %} +{% raw %} +$ kubectl get services --namespace=kube-system +NAME LABELS SELECTOR IP(S) PORT(S) +elasticsearch-logging k8s-app=elasticsearch-logging,kubernetes.io/cluster-service=true,kubernetes.io/name=Elasticsearch k8s-app=elasticsearch-logging 10.0.222.57 9200/TCP +kibana-logging k8s-app=kibana-logging,kubernetes.io/cluster-service=true,kubernetes.io/name=Kibana k8s-app=kibana-logging 10.0.193.226 5601/TCP +kube-dns k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS k8s-app=kube-dns 10.0.0.10 53/UDP + 53/TCP +kubernetes component=apiserver,provider=kubernetes 10.0.0.1 443/TCP +monitoring-grafana kubernetes.io/cluster-service=true,kubernetes.io/name=Grafana k8s-app=influxGrafana 10.0.167.139 80/TCP +monitoring-heapster kubernetes.io/cluster-service=true,kubernetes.io/name=Heapster k8s-app=heapster 10.0.208.221 80/TCP +monitoring-influxdb kubernetes.io/cluster-service=true,kubernetes.io/name=InfluxDB k8s-app=influxGrafana 10.0.188.57 8083/TCP +{% endraw %} +{% endhighlight %} + +By default two Elasticsearch replicas are created and one Kibana replica is created. + +{% highlight console %} +{% raw %} +$ kubectl get rc --namespace=kube-system +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +elasticsearch-logging-v1 elasticsearch-logging gcr.io/google_containers/elasticsearch:1.4 k8s-app=elasticsearch-logging,version=v1 2 +kibana-logging-v1 kibana-logging gcr.io/google_containers/kibana:1.3 k8s-app=kibana-logging,version=v1 1 +kube-dns-v3 etcd gcr.io/google_containers/etcd:2.0.9 k8s-app=kube-dns,version=v3 1 + kube2sky gcr.io/google_containers/kube2sky:1.9 + skydns gcr.io/google_containers/skydns:2015-03-11-001 +monitoring-heapster-v4 heapster gcr.io/google_containers/heapster:v0.14.3 k8s-app=heapster,version=v4 1 +monitoring-influx-grafana-v1 influxdb gcr.io/google_containers/heapster_influxdb:v0.3 k8s-app=influxGrafana,version=v1 1 + grafana gcr.io/google_containers/heapster_grafana:v0.7 +{% endraw %} +{% endhighlight %} + +The Elasticsearch and Kibana services are not directly exposed via a publicly reachable IP address. Instead, +they can be accessed via the service proxy running at the master. The URLs for accessing Elasticsearch +and Kibana via the service proxy can be found using the `kubectl cluster-info` command. + +{% highlight console %} +{% raw %} +$ kubectl cluster-info +Kubernetes master is running at https://146.148.94.154 +Elasticsearch is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging +Kibana is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/kibana-logging +KubeDNS is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/kube-dns +KubeUI is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/kube-ui +Grafana is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana +Heapster is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/monitoring-heapster +InfluxDB is running at https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb +{% endraw %} +{% endhighlight %} + +Before accessing the logs ingested into Elasticsearch using a browser and the service proxy URL we need to find out +the `admin` password for the cluster using `kubectl config view`. + +{% highlight console %} +{% raw %} +$ kubectl config view +... +- name: kubernetes-satnam_kubernetes-basic-auth + user: + password: 7GlspJ9Q43OnGIJO + username: admin +... +{% endraw %} +{% endhighlight %} + +The first time you try to access the cluster from a browser a dialog box appears asking for the username and password. +Use the username `admin` and provide the basic auth password reported by `kubectl config view` for the +cluster you are trying to connect to. Connecting to the Elasticsearch URL should then give the +status page for Elasticsearch. + +![Elasticsearch Status](es-browser.png) + +You can now type Elasticsearch queries directly into the browser. Alternatively you can query Elasticsearch +from your local machine using `curl` but first you need to know what your bearer token is: + +{% highlight console %} +{% raw %} +$ kubectl config view --minify +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: REDACTED + server: https://146.148.94.154 + name: kubernetes-satnam_kubernetes +contexts: +- context: + cluster: kubernetes-satnam_kubernetes + user: kubernetes-satnam_kubernetes + name: kubernetes-satnam_kubernetes +current-context: kubernetes-satnam_kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-satnam_kubernetes + user: + client-certificate-data: REDACTED + client-key-data: REDACTED + token: JsUe2Z3cXqa17UQqQ8qWGGf4nOSLwSnp +{% endraw %} +{% endhighlight %} + +Now you can issue requests to Elasticsearch: + +{% highlight console %} +{% raw %} +$ curl --header "Authorization: Bearer JsUe2Z3cXqa17UQqQ8qWGGf4nOSLwSnp" --insecure https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/ +{ + "status" : 200, + "name" : "Vance Astrovik", + "cluster_name" : "kubernetes-logging", + "version" : { + "number" : "1.5.2", + "build_hash" : "62ff9868b4c8a0c45860bebb259e21980778ab1c", + "build_timestamp" : "2015-04-27T09:21:06Z", + "build_snapshot" : false, + "lucene_version" : "4.10.4" + }, + "tagline" : "You Know, for Search" +} +{% endraw %} +{% endhighlight %} + +Note that you need the trailing slash at the end of the service proxy URL. Here is an example of a search: + +{% highlight console %} +{% raw %} +$ curl --header "Authorization: Bearer JsUe2Z3cXqa17UQqQ8qWGGf4nOSLwSnp" --insecure https://146.148.94.154/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/_search?pretty=true +{ + "took" : 7, + "timed_out" : false, + "_shards" : { + "total" : 6, + "successful" : 6, + "failed" : 0 + }, + "hits" : { + "total" : 123711, + "max_score" : 1.0, + "hits" : [ { + "_index" : ".kibana", + "_type" : "config", + "_id" : "4.0.2", + "_score" : 1.0, + "_source":{"buildNum":6004,"defaultIndex":"logstash-*"} + }, { +... + "_index" : "logstash-2015.06.22", + "_type" : "fluentd", + "_id" : "AU4c_GvFZL5p_gZ8dxtx", + "_score" : 1.0, + "_source":{"log":"synthetic-logger-10lps-pod: 31: 2015-06-22 20:35:33.597918073+00:00\n","stream":"stdout","tag":"kubernetes.synthetic-logger-10lps-pod_default_synth-lgr","@timestamp":"2015-06-22T20:35:33+00:00"} + }, { + "_index" : "logstash-2015.06.22", + "_type" : "fluentd", + "_id" : "AU4c_GvFZL5p_gZ8dxt2", + "_score" : 1.0, + "_source":{"log":"synthetic-logger-10lps-pod: 36: 2015-06-22 20:35:34.108780133+00:00\n","stream":"stdout","tag":"kubernetes.synthetic-logger-10lps-pod_default_synth-lgr","@timestamp":"2015-06-22T20:35:34+00:00"} + } ] + } +} +{% endraw %} +{% endhighlight %} + +The Elasticsearch website contains information about [URI search queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html) which can be used to extract the required logs. + +Alternatively you can view the ingested logs using Kibana. The first time you visit the Kibana URL you will be +presented with a page that asks you to configure your view of the ingested logs. Select the option for +timeseries values and select `@timestamp`. On the following page select the `Discover` tab and then you +should be able to see the ingested logs. You can set the refresh interval to 5 seconds to have the logs +regulary refreshed. Here is a typical view of ingested logs from the Kibana viewer. + +![Kibana logs](kibana-logs.png) + +Another way to access Elasticsearch and Kibana in the cluster is to use `kubectl proxy` which will serve +a local proxy to the remote master: + +{% highlight console %} +{% raw %} +$ kubectl proxy +Starting to serve on localhost:8001 +{% endraw %} +{% endhighlight %} + +Now you can visit the URL [http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging](http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging) to contact Elasticsearch and [http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/kibana-logging](http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/kibana-logging) to access the Kibana viewer. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/logging-elasticsearch.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/logging.md b/v1.1/docs/getting-started-guides/logging.md new file mode 100644 index 0000000000000..57378e7309948 --- /dev/null +++ b/v1.1/docs/getting-started-guides/logging.md @@ -0,0 +1,265 @@ +--- +layout: docwithnav +title: "Cluster Level Logging to Google Cloud Logging" +--- + + + + + +# Cluster Level Logging to Google Cloud Logging + +A Kubernetes cluster will typically be humming along running many system and application pods. How does the system administrator collect, manage and query the logs of the system pods? How does a user query the logs of their application which is composed of many pods which may be restarted or automatically generated by the Kubernetes system? These questions are addressed by the Kubernetes **cluster level logging** services. + +Cluster level logging for Kubernetes allows us to collect logs which persist beyond the lifetime of the pod’s container images or the lifetime of the pod or even cluster. In this article we assume that a Kubernetes cluster has been created with cluster level logging support for sending logs to Google Cloud Logging. After a cluster has been created you will have a collection of system pods running in the `kube-system` namespace that support monitoring, +logging and DNS resolution for names of Kubernetes services: + +{% highlight console %} +{% raw %} +$ kubectl get pods --namespace=kube-system +NAME READY REASON RESTARTS AGE +fluentd-cloud-logging-kubernetes-minion-0f64 1/1 Running 0 32m +fluentd-cloud-logging-kubernetes-minion-27gf 1/1 Running 0 32m +fluentd-cloud-logging-kubernetes-minion-pk22 1/1 Running 0 31m +fluentd-cloud-logging-kubernetes-minion-20ej 1/1 Running 0 31m +kube-dns-v3-pk22 3/3 Running 0 32m +monitoring-heapster-v1-20ej 0/1 Running 9 32m +{% endraw %} +{% endhighlight %} + +Here is the same information in a picture which shows how the pods might be placed on specific nodes. + +![Cluster](../../examples/blog-logging/diagrams/cloud-logging.png) + +This diagram shows four nodes created on a Google Compute Engine cluster with the name of each VM node on a purple background. The internal and public IPs of each node are shown on gray boxes and the pods running in each node are shown in green boxes. Each pod box shows the name of the pod and the namespace it runs in, the IP address of the pod and the images which are run as part of the pod’s execution. Here we see that every node is running a fluentd-cloud-logging pod which is collecting the log output of the containers running on the same node and sending them to Google Cloud Logging. A pod which provides the +[cluster DNS service](../admin/dns.html) runs on one of the nodes and a pod which provides monitoring support runs on another node. + +To help explain how cluster level logging works let’s start off with a synthetic log generator pod specification [counter-pod.yaml](../../examples/blog-logging/counter-pod.yaml): + + + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: counter +spec: + containers: + - name: count + image: ubuntu:14.04 + args: [bash, -c, + 'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 1; done'] +{% endraw %} +{% endhighlight %} + +[Download example](../../examples/blog-logging/counter-pod.yaml) + + +This pod specification has one container which runs a bash script when the container is born. This script simply writes out the value of a counter and the date once per second and runs indefinitely. Let’s create the pod in the default +namespace. + +{% highlight console %} +{% raw %} + $ kubectl create -f examples/blog-logging/counter-pod.yaml + pods/counter +{% endraw %} +{% endhighlight %} + +We can observe the running pod: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +counter 1/1 Running 0 5m +{% endraw %} +{% endhighlight %} + +This step may take a few minutes to download the ubuntu:14.04 image during which the pod status will be shown as `Pending`. + +One of the nodes is now running the counter pod: + +![Counter Pod](../../examples/blog-logging/diagrams/27gf-counter.png) + +When the pod status changes to `Running` we can use the kubectl logs command to view the output of this counter pod. + +{% highlight console %} +{% raw %} +$ kubectl logs counter +0: Tue Jun 2 21:37:31 UTC 2015 +1: Tue Jun 2 21:37:32 UTC 2015 +2: Tue Jun 2 21:37:33 UTC 2015 +3: Tue Jun 2 21:37:34 UTC 2015 +4: Tue Jun 2 21:37:35 UTC 2015 +5: Tue Jun 2 21:37:36 UTC 2015 +... +{% endraw %} +{% endhighlight %} + +This command fetches the log text from the Docker log file for the image that is running in this container. We can connect to the running container and observe the running counter bash script. + +{% highlight console %} +{% raw %} +$ kubectl exec -i counter bash +ps aux +USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND +root 1 0.0 0.0 17976 2888 ? Ss 00:02 0:00 bash -c for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 1; done +root 468 0.0 0.0 17968 2904 ? Ss 00:05 0:00 bash +root 479 0.0 0.0 4348 812 ? S 00:05 0:00 sleep 1 +root 480 0.0 0.0 15572 2212 ? R 00:05 0:00 ps aux +{% endraw %} +{% endhighlight %} + +What happens if for any reason the image in this pod is killed off and then restarted by Kubernetes? Will we still see the log lines from the previous invocation of the container followed by the log lines for the started container? Or will we lose the log lines from the original container’s execution and only see the log lines for the new container? Let’s find out. First let’s stop the currently running counter. + +{% highlight console %} +{% raw %} +$ kubectl stop pod counter +pods/counter +{% endraw %} +{% endhighlight %} + +Now let’s restart the counter. + +{% highlight console %} +{% raw %} +$ kubectl create -f examples/blog-logging/counter-pod.yaml +pods/counter +{% endraw %} +{% endhighlight %} + +Let’s wait for the container to restart and get the log lines again. + +{% highlight console %} +{% raw %} +$ kubectl logs counter +0: Tue Jun 2 21:51:40 UTC 2015 +1: Tue Jun 2 21:51:41 UTC 2015 +2: Tue Jun 2 21:51:42 UTC 2015 +3: Tue Jun 2 21:51:43 UTC 2015 +4: Tue Jun 2 21:51:44 UTC 2015 +5: Tue Jun 2 21:51:45 UTC 2015 +6: Tue Jun 2 21:51:46 UTC 2015 +7: Tue Jun 2 21:51:47 UTC 2015 +8: Tue Jun 2 21:51:48 UTC 2015 +{% endraw %} +{% endhighlight %} + +We’ve lost the log lines from the first invocation of the container in this pod! Ideally, we want to preserve all the log lines from each invocation of each container in the pod. Furthermore, even if the pod is restarted we would still like to preserve all the log lines that were ever emitted by the containers in the pod. But don’t fear, this is the functionality provided by cluster level logging in Kubernetes. When a cluster is created, the standard output and standard error output of each container can be ingested using a [Fluentd](http://www.fluentd.org/) agent running on each node into either [Google Cloud Logging](https://cloud.google.com/logging/docs/) or into Elasticsearch and viewed with Kibana. + +When a Kubernetes cluster is created with logging to Google Cloud Logging enabled, the system creates a pod called `fluentd-cloud-logging` on each node of the cluster to collect Docker container logs. These pods were shown at the start of this blog article in the response to the first get pods command. + +This log collection pod has a specification which looks something like this: + + + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: fluentd-cloud-logging + namespace: kube-system +spec: + containers: + - name: fluentd-cloud-logging + image: gcr.io/google_containers/fluentd-gcp:1.14 + resources: + limits: + cpu: 100m + memory: 200Mi + env: + - name: FLUENTD_ARGS + value: -q + volumeMounts: + - name: varlog + mountPath: /var/log + - name: varlibdockercontainers + mountPath: /var/lib/docker/containers + readOnly: true + terminationGracePeriodSeconds: 30 + volumes: + - name: varlog + hostPath: + path: /var/log + - name: varlibdockercontainers + hostPath: + path: /var/lib/docker/containers +{% endraw %} +{% endhighlight %} + +[Download example](https://releases.k8s.io/release-1.1/cluster/saltbase/salt/fluentd-gcp/fluentd-gcp.yaml) + + +This pod specification maps the directory on the host containing the Docker log files, `/var/lib/docker/containers`, to a directory inside the container which has the same path. The pod runs one image, `gcr.io/google_containers/fluentd-gcp:1.6`, which is configured to collect the Docker log files from the logs directory and ingest them into Google Cloud Logging. One instance of this pod runs on each node of the cluster. Kubernetes will notice if this pod fails and automatically restart it. + +We can click on the Logs item under the Monitoring section of the Google Developer Console and select the logs for the counter container, which will be called kubernetes.counter_default_count. This identifies the name of the pod (counter), the namespace (default) and the name of the container (count) for which the log collection occurred. Using this name we can select just the logs for our counter container from the drop down menu: + +![Cloud Logging Console](cloud-logging-console.png) + +When we view the logs in the Developer Console we observe the logs for both invocations of the container. + +![Both Logs](all-lines.png) + +Note the first container counted to 108 and then it was terminated. When the next container image restarted the counting process resumed from 0. Similarly if we deleted the pod and restarted it we would capture the logs for all instances of the containers in the pod whenever the pod was running. + + Logs ingested into Google Cloud Logging may be exported to various other destinations including [Google Cloud Storage](https://cloud.google.com/storage/) buckets and [BigQuery](https://cloud.google.com/bigquery/). Use the Exports tab in the Cloud Logging console to specify where logs should be streamed to. You can also follow this link to the + [settings tab](https://pantheon.corp.google.com/project/_/logs/settings). + + We could query the ingested logs from BigQuery using the SQL query which reports the counter log lines showing the newest lines first: + +{% highlight console %} +{% raw %} + SELECT metadata.timestamp, structPayload.log + FROM [mylogs.kubernetes_counter_default_count_20150611] + ORDER BY metadata.timestamp DESC +{% endraw %} +{% endhighlight %} + +Here is some sample output: + +![BigQuery](bigquery-logging.png) + +We could also fetch the logs from Google Cloud Storage buckets to our desktop or laptop and then search them locally. The following command fetches logs for the counter pod running in a cluster which is itself in a Compute Engine project called `myproject`. Only logs for the date 2015-06-11 are fetched. + + +{% highlight console %} +{% raw %} +$ gsutil -m cp -r gs://myproject/kubernetes.counter_default_count/2015/06/11 . +{% endraw %} +{% endhighlight %} + +Now we can run queries over the ingested logs. The example below uses the [jq](http://stedolan.github.io/jq/) program to extract just the log lines. + +{% highlight console %} +{% raw %} +$ cat 21\:00\:00_21\:59\:59_S0.json | jq '.structPayload.log' +"0: Thu Jun 11 21:39:38 UTC 2015\n" +"1: Thu Jun 11 21:39:39 UTC 2015\n" +"2: Thu Jun 11 21:39:40 UTC 2015\n" +"3: Thu Jun 11 21:39:41 UTC 2015\n" +"4: Thu Jun 11 21:39:42 UTC 2015\n" +"5: Thu Jun 11 21:39:43 UTC 2015\n" +"6: Thu Jun 11 21:39:44 UTC 2015\n" +"7: Thu Jun 11 21:39:45 UTC 2015\n" +... +{% endraw %} +{% endhighlight %} + +This page has touched briefly on the underlying mechanisms that support gathering cluster level logs on a Kubernetes deployment. The approach here only works for gathering the standard output and standard error output of the processes running in the pod’s containers. To gather other logs that are stored in files one can use a sidecar container to gather the required files as described at the page [Collecting log files within containers with Fluentd](http://releases.k8s.io/release-1.1/contrib/logging/fluentd-sidecar-gcp/README.md) and sending them to the Google Cloud Logging service. + +Some of the material in this section also appears in the blog article [Cluster Level Logging with Kubernetes](http://blog.kubernetes.io/2015/06/cluster-level-logging-with-kubernetes.html). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/logging.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/mesos-docker.md b/v1.1/docs/getting-started-guides/mesos-docker.md new file mode 100644 index 0000000000000..f988caeeddbe0 --- /dev/null +++ b/v1.1/docs/getting-started-guides/mesos-docker.md @@ -0,0 +1,370 @@ +--- +layout: docwithnav +title: "Getting Started With Kubernetes on Mesos on Docker" +--- + + + + + +Getting Started With Kubernetes on Mesos on Docker +---------------------------------------- + +The mesos/docker provider uses docker-compose to launch Kubernetes as a Mesos framework, running in docker with its +dependencies (etcd & mesos). + +**Table of Contents** + + + - [Cluster Goals](#cluster-goals) + - [Cluster Topology](#cluster-topology) + - [Prerequisites](#prerequisites) + - [Install on Mac (Homebrew)](#install-on-mac-homebrew) + - [Install on Linux](#install-on-linux) + - [Boot2Docker Config (Mac)](#boot2docker-config-mac) + - [Walkthrough](#walkthrough) + - [Addons](#addons) + - [KubeUI](#kubeui) + - [End To End Testing](#end-to-end-testing) + - [Kubernetes CLI](#kubernetes-cli) + - [Helpful scripts](#helpful-scripts) + - [Build Locally](#build-locally) + + + + +## Cluster Goals + +- kubernetes development +- pod/service development +- demoing +- fast deployment +- minimal hardware requirements +- minimal configuration +- entry point for exploration +- simplified networking +- fast end-to-end tests +- local deployment + +Non-Goals: +- high availability +- fault tolerance +- remote deployment +- production usage +- monitoring +- long running +- state persistence across restarts + +## Cluster Topology + +The cluster consists of several docker containers linked together by docker-managed hostnames: + +| Component | Hostname | Description | +|-------------------------------|-----------------------------|-----------------------------------------------------------------------------------------| +| docker-grand-ambassador | | Proxy to allow circular hostname linking in docker | +| etcd | etcd | Key/Value store used by Mesos | +| Mesos Master | mesosmaster1 | REST endpoint for interacting with Mesos | +| Mesos Slave (x2) | mesosslave1
            mesosslave2 | Mesos agents that offer resources and run framework executors (e.g. Kubernetes Kublets) | +| Kubernetes API Server | apiserver | REST endpoint for interacting with Kubernetes | +| Kubernetes Controller Manager | controller | | +| Kubernetes Scheduler | scheduler | Schedules container deployment by accepting Mesos offers | + +## Prerequisites + +Required: +- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - version control system +- [Docker CLI](https://docs.docker.com/) - container management command line client +- [Docker Engine](https://docs.docker.com/) - container management daemon + - On Mac, use [Boot2Docker](http://boot2docker.io/) or [Docker Machine](https://docs.docker.com/machine/install-machine/) +- [Docker Compose](https://docs.docker.com/compose/install/) - multi-container application orchestration + +Optional: +- [Virtual Box](https://www.virtualbox.org/wiki/Downloads) - x86 hardware virtualizer + - Required by Boot2Docker and Docker Machine +- [Golang](https://golang.org/doc/install) - Go programming language + - Required to build Kubernetes locally +- [Make](https://en.wikipedia.org/wiki/Make_(software)) - Utility for building executables from source + - Required to build Kubernetes locally with make + +### Install on Mac (Homebrew) + +It's possible to install all of the above via [Homebrew](http://brew.sh/) on a Mac. + +Some steps print instructions for configuring or launching. Make sure each is properly set up before continuing to the next step. + +``` +{% raw %} +brew install git +brew install caskroom/cask/brew-cask +brew cask install virtualbox +brew install docker +brew install boot2docker +boot2docker init +boot2docker up +brew install docker-compose +{% endraw %} +``` + +### Install on Linux + +Most of the above are available via apt and yum, but depending on your distribution, you may have to install via other +means to get the latest versions. + +It is recommended to use Ubuntu, simply because it best supports AUFS, used by docker to mount volumes. Alternate file +systems may not fully support docker-in-docker. + +In order to build Kubernetes, the current user must be in a docker group with sudo privileges. +See the docker docs for [instructions](https://docs.docker.com/installation/ubuntulinux/#create-a-docker-group). + + +### Boot2Docker Config (Mac) + +If on a mac using boot2docker, the following steps will make the docker IPs (in the virtualbox VM) reachable from the +host machine (mac). + +1. Set the VM's host-only network to "promiscuous mode": + + ``` +{% raw %} + boot2docker stop + VBoxManage modifyvm boot2docker-vm --nicpromisc2 allow-all + boot2docker start +{% endraw %} + ``` + + This allows the VM to accept packets that were sent to a different IP. + + Since the host-only network routes traffic between VMs and the host, other VMs will also be able to access the docker + IPs, if they have the following route. + +1. Route traffic to docker through the boot2docker IP: + + ``` +{% raw %} + sudo route -n add -net 172.17.0.0 $(boot2docker ip) +{% endraw %} + ``` + + Since the boot2docker IP can change when the VM is restarted, this route may need to be updated over time. + To delete the route later: `sudo route delete 172.17.0.0` + + +## Walkthrough + +1. Checkout source + + ``` +{% raw %} + git clone https://github.com/kubernetes/kubernetes + cd kubernetes +{% endraw %} + ``` + + By default, that will get you the bleeding edge of master branch. + You may want a [release branch](https://github.com/kubernetes/kubernetes/releases) instead, + if you have trouble with master. + +1. Build binaries + + You'll need to build kubectl (CLI) for your local architecture and operating system and the rest of the server binaries for linux/amd64. + + Building a new release covers both cases: + + ``` +{% raw %} + KUBERNETES_CONTRIB=mesos build/release.sh +{% endraw %} + ``` + + For developers, it may be faster to [build locally](#build-locally). + +1. [Optional] Build docker images + + The following docker images are built as part of `./cluster/kube-up.sh`, but it may make sense to build them manually the first time because it may take a while. + + 1. Test image includes all the dependencies required for running e2e tests. + + ``` +{% raw %} + ./cluster/mesos/docker/test/build.sh +{% endraw %} + ``` + + In the future, this image may be available to download. It doesn't contain anything specific to the current release, except its build dependencies. + + 1. Kubernetes-Mesos image includes the compiled linux binaries. + + ``` +{% raw %} + ./cluster/mesos/docker/km/build.sh +{% endraw %} + ``` + + This image needs to be built every time you recompile the server binaries. + +1. [Optional] Configure Mesos resources + + By default, the mesos-slaves are configured to offer a fixed amount of resources (cpus, memory, disk, ports). + If you want to customize these values, update the `MESOS_RESOURCES` environment variables in `./cluster/mesos/docker/docker-compose.yml`. + If you delete the `MESOS_RESOURCES` environment variables, the resource amounts will be auto-detected based on the host resources, which will over-provision by > 2x. + + If the configured resources are not available on the host, you may want to increase the resources available to Docker Engine. + You may have to increase you VM disk, memory, or cpu allocation in VirtualBox, + [Docker Machine](https://docs.docker.com/machine/#oracle-virtualbox), or + [Boot2Docker](https://ryanfb.github.io/etc/2015/01/28/increasing_boot2docker_allocations_on_os_x.html). + +1. Configure provider + + ``` +{% raw %} + export KUBERNETES_PROVIDER=mesos/docker +{% endraw %} + ``` + + This tells cluster scripts to use the code within `cluster/mesos/docker`. + +1. Create cluster + + ``` +{% raw %} + ./cluster/kube-up.sh +{% endraw %} + ``` + + If you manually built all the above docker images, you can skip that step during kube-up: + + ``` +{% raw %} + MESOS_DOCKER_SKIP_BUILD=true ./cluster/kube-up.sh +{% endraw %} + ``` + + After deploying the cluster, `~/.kube/config` will be created or updated to configure kubectl to target the new cluster. + +1. Explore examples + + To learn more about Pods, Volumes, Labels, Services, and Replication Controllers, start with the + [Kubernetes Walkthrough](../user-guide/walkthrough/). + + To skip to a more advanced example, see the [Guestbook Example](../../examples/guestbook/) + +1. Destroy cluster + + ``` +{% raw %} + ./cluster/kube-down.sh +{% endraw %} + ``` + +## Addons + +The `kube-up` for the mesos/docker provider will automatically deploy KubeDNS and KubeUI addons as pods/services. + +Check their status with: + +``` +{% raw %} +./cluster/kubectl.sh get pods --namespace=kube-system +{% endraw %} +``` + +### KubeUI + +The web-based Kubernetes UI is accessible in a browser through the API Server proxy: `https://:6443/ui/`. + +By default, basic-auth is configured with user `admin` and password `admin`. + +The IP of the API Server can be found using `./cluster/kubectl.sh cluster-info`. + + +## End To End Testing + +Warning: e2e tests can take a long time to run. You may not want to run them immediately if you're just getting started. + +While your cluster is up, you can run the end-to-end tests: + +``` +{% raw %} +./cluster/test-e2e.sh +{% endraw %} +``` + +Notable parameters: +- Increase the logging verbosity: `-v=2` +- Run only a subset of the tests (regex matching): `-ginkgo.focus=` + +To build, deploy, test, and destroy, all in one command (plus unit & integration tests): + +``` +{% raw %} +make test_e2e +{% endraw %} +``` + + +## Kubernetes CLI + +When compiling from source, it's simplest to use the `./cluster/kubectl.sh` script, which detects your platform & +architecture and proxies commands to the appropriate `kubectl` binary. + +ex: `./cluster/kubectl.sh get pods` + + +## Helpful scripts + +- Kill all docker containers + + ``` +{% raw %} + docker ps -q -a | xargs docker rm -f +{% endraw %} + ``` + +- Clean up unused docker volumes + + ``` +{% raw %} + docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes +{% endraw %} + ``` + +## Build Locally + +The steps above tell you how to build in a container, for minimal local dependencies. But if you have Go and Make installed you can build locally much faster: + +``` +{% raw %} +KUBERNETES_CONTRIB=mesos make +{% endraw %} +``` + +However, if you're not on linux, you'll still need to compile the linux/amd64 server binaries: + +``` +{% raw %} +KUBERNETES_CONTRIB=mesos build/run.sh hack/build-go.sh +{% endraw %} +``` + +The above two steps should be significantly faster than cross-compiling a whole new release for every supported platform (which is what `./build/release.sh` does). + +Breakdown: + +- `KUBERNETES_CONTRIB=mesos` - enables building of the contrib/mesos binaries +- `hack/build-go.sh` - builds the Go binaries for the current architecture (linux/amd64 when in a docker container) +- `make` - delegates to `hack/build-go.sh` +- `build/run.sh` - executes a command in the build container +- `build/release.sh` - cross compiles Kubernetes for all supported architectures and operating systems (slow) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/mesos-docker.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/mesos.md b/v1.1/docs/getting-started-guides/mesos.md new file mode 100644 index 0000000000000..96d2058cf748f --- /dev/null +++ b/v1.1/docs/getting-started-guides/mesos.md @@ -0,0 +1,420 @@ +--- +layout: docwithnav +title: "Getting started with Kubernetes on Mesos" +--- + + + + + +Getting started with Kubernetes on Mesos +---------------------------------------- + +**Table of Contents** + + + - [About Kubernetes on Mesos](#about-kubernetes-on-mesos) + - [Prerequisites](#prerequisites) + - [Deploy Kubernetes-Mesos](#deploy-kubernetes-mesos) + - [Deploy etcd](#deploy-etcd) + - [Start Kubernetes-Mesos Services](#start-kubernetes-mesos-services) + - [Validate KM Services](#validate-km-services) + - [Spin up a pod](#spin-up-a-pod) + - [Launching kube-dns](#launching-kube-dns) + - [What next?](#what-next) + + + + +## About Kubernetes on Mesos + + + +Mesos allows dynamic sharing of cluster resources between Kubernetes and other first-class Mesos frameworks such as [Hadoop][1], [Spark][2], and [Chronos][3]. +Mesos also ensures applications from different frameworks running on your cluster are isolated and that resources are allocated fairly among them. + +Mesos clusters can be deployed on nearly every IaaS cloud provider infrastructure or in your own physical datacenter. Kubernetes on Mesos runs on-top of that and therefore allows you to easily move Kubernetes workloads from one of these environments to the other. + +This tutorial will walk you through setting up Kubernetes on a Mesos cluster. +It provides a step by step walk through of adding Kubernetes to a Mesos cluster and starting your first pod with an nginx webserver. + +**NOTE:** There are [known issues with the current implementation][7] and support for centralized logging and monitoring is not yet available. +Please [file an issue against the kubernetes-mesos project][8] if you have problems completing the steps below. + +Further information is available in the Kubernetes on Mesos [contrib directory][13]. + +### Prerequisites + +- Understanding of [Apache Mesos][6] +- A running [Mesos cluster on Google Compute Engine][5] +- A [VPN connection][10] to the cluster +- A machine in the cluster which should become the Kubernetes *master node* with: + - GoLang > 1.2 + - make (i.e. build-essential) + - Docker + +**Note**: You *can*, but you *don't have to* deploy Kubernetes-Mesos on the same machine the Mesos master is running on. + +### Deploy Kubernetes-Mesos + +Log into the future Kubernetes *master node* over SSH, replacing the placeholder below with the correct IP address. + +{% highlight bash %} +{% raw %} +ssh jclouds@${ip_address_of_master_node} +{% endraw %} +{% endhighlight %} + +Build Kubernetes-Mesos. + +{% highlight bash %} +{% raw %} +git clone https://github.com/kubernetes/kubernetes +cd kubernetes +export KUBERNETES_CONTRIB=mesos +make +{% endraw %} +{% endhighlight %} + +Set some environment variables. +The internal IP address of the master may be obtained via `hostname -i`. + +{% highlight bash %} +{% raw %} +export KUBERNETES_MASTER_IP=$(hostname -i) +export KUBERNETES_MASTER=http://${KUBERNETES_MASTER_IP}:8888 +{% endraw %} +{% endhighlight %} + +Note that KUBERNETES_MASTER is used as the api endpoint. If you have existing `~/.kube/config` and point to another endpoint, you need to add option `--server=${KUBERNETES_MASTER}` to kubectl in later steps. + +### Deploy etcd + +Start etcd and verify that it is running: + +{% highlight bash %} +{% raw %} +sudo docker run -d --hostname $(uname -n) --name etcd \ + -p 4001:4001 -p 7001:7001 quay.io/coreos/etcd:v2.0.12 \ + --listen-client-urls http://0.0.0.0:4001 \ + --advertise-client-urls http://${KUBERNETES_MASTER_IP}:4001 +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +fd7bac9e2301 quay.io/coreos/etcd:v2.0.12 "/etcd" 5s ago Up 3s 2379/tcp, 2380/... etcd +{% endraw %} +{% endhighlight %} + +It's also a good idea to ensure your etcd instance is reachable by testing it + +{% highlight bash %} +{% raw %} +curl -L http://${KUBERNETES_MASTER_IP}:4001/v2/keys/ +{% endraw %} +{% endhighlight %} + +If connectivity is OK, you will see an output of the available keys in etcd (if any). + +### Start Kubernetes-Mesos Services + +Update your PATH to more easily run the Kubernetes-Mesos binaries: + +{% highlight bash %} +{% raw %} +export PATH="$(pwd)/_output/local/go/bin:$PATH" +{% endraw %} +{% endhighlight %} + +Identify your Mesos master: depending on your Mesos installation this is either a `host:port` like `mesos-master:5050` or a ZooKeeper URL like `zk://zookeeper:2181/mesos`. +In order to let Kubernetes survive Mesos master changes, the ZooKeeper URL is recommended for production environments. + +{% highlight bash %} +{% raw %} +export MESOS_MASTER= +{% endraw %} +{% endhighlight %} + +Create a cloud config file `mesos-cloud.conf` in the current directory with the following contents: + +{% highlight console %} +{% raw %} +$ cat <mesos-cloud.conf +[mesos-cloud] + mesos-master = ${MESOS_MASTER} +EOF +{% endraw %} +{% endhighlight %} + +Now start the kubernetes-mesos API server, controller manager, and scheduler on the master node: + +{% highlight console %} +{% raw %} +$ km apiserver \ + --address=${KUBERNETES_MASTER_IP} \ + --etcd-servers=http://${KUBERNETES_MASTER_IP}:4001 \ + --service-cluster-ip-range=10.10.10.0/24 \ + --port=8888 \ + --cloud-provider=mesos \ + --cloud-config=mesos-cloud.conf \ + --secure-port=0 \ + --v=1 >apiserver.log 2>&1 & + +$ km controller-manager \ + --master=${KUBERNETES_MASTER_IP}:8888 \ + --cloud-provider=mesos \ + --cloud-config=./mesos-cloud.conf \ + --v=1 >controller.log 2>&1 & + +$ km scheduler \ + --address=${KUBERNETES_MASTER_IP} \ + --mesos-master=${MESOS_MASTER} \ + --etcd-servers=http://${KUBERNETES_MASTER_IP}:4001 \ + --mesos-user=root \ + --api-servers=${KUBERNETES_MASTER_IP}:8888 \ + --cluster-dns=10.10.10.10 \ + --cluster-domain=cluster.local \ + --v=2 >scheduler.log 2>&1 & +{% endraw %} +{% endhighlight %} + +Disown your background jobs so that they'll stay running if you log out. + +{% highlight bash %} +{% raw %} +disown -a +{% endraw %} +{% endhighlight %} + +#### Validate KM Services + +Add the appropriate binary folder to your `PATH` to access kubectl: + +{% highlight bash %} +{% raw %} +export PATH=/platforms/linux/amd64:$PATH +{% endraw %} +{% endhighlight %} + +Interact with the kubernetes-mesos framework via `kubectl`: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +# NOTE: your service IPs will likely differ +$ kubectl get services +NAME LABELS SELECTOR IP(S) PORT(S) +k8sm-scheduler component=scheduler,provider=k8sm 10.10.10.113 10251/TCP +kubernetes component=apiserver,provider=kubernetes 10.10.10.1 443/TCP +{% endraw %} +{% endhighlight %} + +Lastly, look for Kubernetes in the Mesos web GUI by pointing your browser to +`http://`. Make sure you have an active VPN connection. +Go to the Frameworks tab, and look for an active framework named "Kubernetes". + +## Spin up a pod + +Write a JSON pod description to a local file: + +{% highlight bash %} +{% raw %} +$ cat <nginx.yaml +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: nginx +spec: + containers: + - name: nginx + image: nginx + ports: + - containerPort: 80 +EOPOD +{% endraw %} +{% endhighlight %} + +Send the pod description to Kubernetes using the `kubectl` CLI: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./nginx.yaml +pods/nginx +{% endraw %} +{% endhighlight %} + +Wait a minute or two while `dockerd` downloads the image layers from the internet. +We can use the `kubectl` interface to monitor the status of our pod: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +nginx 1/1 Running 0 14s +{% endraw %} +{% endhighlight %} + +Verify that the pod task is running in the Mesos web GUI. Click on the +Kubernetes framework. The next screen should show the running Mesos task that +started the Kubernetes pod. + +## Launching kube-dns + +Kube-dns is an addon for Kubernetes which adds DNS-based service discovery to the cluster. For a detailed explanation see [DNS in Kubernetes][4]. + +The kube-dns addon runs as a pod inside the cluster. The pod consists of three co-located containers: + +- a local etcd instance +- the [skydns][11] DNS server +- the kube2sky process to glue skydns to the state of the Kubernetes cluster. + +The skydns container offers DNS service via port 53 to the cluster. The etcd communication works via local 127.0.0.1 communication + +We assume that kube-dns will use + +- the service IP `10.10.10.10` +- and the `cluster.local` domain. + +Note that we have passed these two values already as parameter to the apiserver above. + +A template for an replication controller spinning up the pod with the 3 containers can be found at [cluster/addons/dns/skydns-rc.yaml.in][11] in the repository. The following steps are necessary in order to get a valid replication controller yaml file: + +- replace `{{ pillar['dns_replicas'] }}` with `1` +- replace `{{ pillar['dns_domain'] }}` with `cluster.local.` +- add `--kube_master_url=${KUBERNETES_MASTER}` parameter to the kube2sky container command. + +In addition the service template at [cluster/addons/dns/skydns-svc.yaml.in][12] needs the following replacement: + +- `{{ pillar['dns_server'] }}` with `10.10.10.10`. + +To do this automatically: + +{% highlight bash %} +{% raw %} +sed -e "s/{{ pillar\['dns_replicas'\] }}/1/g;"\ +"s,\(command = \"/kube2sky\"\),\\1\\"$'\n'" - --kube_master_url=${KUBERNETES_MASTER},;"\ +"s/{{ pillar\['dns_domain'\] }}/cluster.local/g" \ + cluster/addons/dns/skydns-rc.yaml.in > skydns-rc.yaml +sed -e "s/{{ pillar\['dns_server'\] }}/10.10.10.10/g" \ + cluster/addons/dns/skydns-svc.yaml.in > skydns-svc.yaml +{% endraw %} +{% endhighlight %} + +Now the kube-dns pod and service are ready to be launched: + +{% highlight bash %} +{% raw %} +kubectl create -f ./skydns-rc.yaml +kubectl create -f ./skydns-svc.yaml +{% endraw %} +{% endhighlight %} + +Check with `kubectl get pods --namespace=kube-system` that 3/3 containers of the pods are eventually up and running. Note that the kube-dns pods run in the `kube-system` namespace, not in `default`. + +To check that the new DNS service in the cluster works, we start a busybox pod and use that to do a DNS lookup. First create the `busybox.yaml` pod spec: + +{% highlight bash %} +{% raw %} +cat <busybox.yaml +{% endraw %} +{% endhighlight %} + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: busybox + namespace: default +spec: + containers: + - image: busybox + command: + - sleep + - "3600" + imagePullPolicy: IfNotPresent + name: busybox + restartPolicy: Always +EOF +{% endraw %} +{% endhighlight %} + +Then start the pod: + +{% highlight bash %} +{% raw %} +kubectl create -f ./busybox.yaml +{% endraw %} +{% endhighlight %} + +When the pod is up and running, start a lookup for the Kubernetes master service, made available on 10.10.10.1 by default: + +{% highlight bash %} +{% raw %} +kubectl exec busybox -- nslookup kubernetes +{% endraw %} +{% endhighlight %} + +If everything works fine, you will get this output: + +{% highlight console %} +{% raw %} +Server: 10.10.10.10 +Address 1: 10.10.10.10 + +Name: kubernetes +Address 1: 10.10.10.1 +{% endraw %} +{% endhighlight %} + +## What next? + +Try out some of the standard [Kubernetes examples][9]. + +Read about Kubernetes on Mesos' architecture in the [contrib directory][13]. + +**NOTE:** Some examples require Kubernetes DNS to be installed on the cluster. +Future work will add instructions to this guide to enable support for Kubernetes DNS. + +**NOTE:** Please be aware that there are [known issues with the current Kubernetes-Mesos implementation][7]. + +[1]: http://mesosphere.com/docs/tutorials/run-hadoop-on-mesos-using-installer +[2]: http://mesosphere.com/docs/tutorials/run-spark-on-mesos +[3]: http://mesosphere.com/docs/tutorials/run-chronos-on-mesos +[4]: https://releases.k8s.io/release-1.1/cluster/addons/dns/README.md +[5]: http://open.mesosphere.com/getting-started/cloud/google/mesosphere/ +[6]: http://mesos.apache.org/ +[7]: https://releases.k8s.io/release-1.1/contrib/mesos/docs/issues.md +[8]: https://github.com/mesosphere/kubernetes-mesos/issues +[9]: ../../examples/ +[10]: http://open.mesosphere.com/getting-started/cloud/google/mesosphere/#vpn-setup +[11]: https://releases.k8s.io/release-1.1/cluster/addons/dns/skydns-rc.yaml.in +[12]: https://releases.k8s.io/release-1.1/cluster/addons/dns/skydns-svc.yaml.in +[13]: https://releases.k8s.io/release-1.1/contrib/mesos/README.md + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/mesos.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/mesos/k8s-firewall.png b/v1.1/docs/getting-started-guides/mesos/k8s-firewall.png new file mode 100755 index 0000000000000000000000000000000000000000..ed1c57ca7d0980056b9d088b4d3822c4dc0fd223 GIT binary patch literal 88722 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 Km2wm>-T8lGZ)9Kq literal 0 HcmV?d00001 diff --git a/v1.1/docs/getting-started-guides/mesos/k8s-guestbook.png b/v1.1/docs/getting-started-guides/mesos/k8s-guestbook.png new file mode 100755 index 0000000000000000000000000000000000000000..07d2458b3b54fd0975f35f0a6f78fb0e48e287ef GIT binary patch literal 44000 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
            NdlsC{ZEfuA7bbgvz`f(d;eP*7 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 + + + +Getting started on oVirt +------------------------ + +**Table of Contents** + +- [What is oVirt](#what-is-ovirt) +- [oVirt Cloud Provider Deployment](#ovirt-cloud-provider-deployment) +- [Using the oVirt Cloud Provider](#using-the-ovirt-cloud-provider) +- [oVirt Cloud Provider Screencast](#ovirt-cloud-provider-screencast) + +## What is oVirt + +oVirt is a virtual datacenter manager that delivers powerful management of multiple virtual machines on multiple hosts. Using KVM and libvirt, oVirt can be installed on Fedora, CentOS, or Red Hat Enterprise Linux hosts to set up and manage your virtual data center. + +## oVirt Cloud Provider Deployment + +The oVirt cloud provider allows to easily discover and automatically add new VM instances as nodes to your Kubernetes cluster. +At the moment there are no community-supported or pre-loaded VM images including Kubernetes but it is possible to [import] or [install] Project Atomic (or Fedora) in a VM to [generate a template]. Any other distribution that includes Kubernetes may work as well. + +It is mandatory to [install the ovirt-guest-agent] in the guests for the VM ip address and hostname to be reported to ovirt-engine and ultimately to Kubernetes. + +Once the Kubernetes template is available it is possible to start instantiating VMs that can be discovered by the cloud provider. + +[import]: http://ovedou.blogspot.it/2014/03/importing-glance-images-as-ovirt.html +[install]: http://www.ovirt.org/Quick_Start_Guide#Create_Virtual_Machines +[generate a template]: http://www.ovirt.org/Quick_Start_Guide#Using_Templates +[install the ovirt-guest-agent]: http://www.ovirt.org/How_to_install_the_guest_agent_in_Fedora + +## Using the oVirt Cloud Provider + +The oVirt Cloud Provider requires access to the oVirt REST-API to gather the proper information, the required credential should be specified in the `ovirt-cloud.conf` file: + + [connection] + uri = https://localhost:8443/ovirt-engine/api + username = admin@internal + password = admin + +In the same file it is possible to specify (using the `filters` section) what search query to use to identify the VMs to be reported to Kubernetes: + + [filters] + # Search query used to find nodes + vms = tag=kubernetes + +In the above example all the VMs tagged with the `kubernetes` label will be reported as nodes to Kubernetes. + +The `ovirt-cloud.conf` file then must be specified in kube-controller-manager: + + kube-controller-manager ... --cloud-provider=ovirt --cloud-config=/path/to/ovirt-cloud.conf ... + +## oVirt Cloud Provider Screencast + +This short screencast demonstrates how the oVirt Cloud Provider can be used to dynamically add VMs to your Kubernetes cluster. + +[![Screencast](http://img.youtube.com/vi/JyyST4ZKne8/0.jpg)](http://www.youtube.com/watch?v=JyyST4ZKne8) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/ovirt.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/rackspace.md b/v1.1/docs/getting-started-guides/rackspace.md new file mode 100644 index 0000000000000..d23cfaca06423 --- /dev/null +++ b/v1.1/docs/getting-started-guides/rackspace.md @@ -0,0 +1,92 @@ +--- +layout: docwithnav +title: "Getting started on Rackspace" +--- + + + + +Getting started on Rackspace +---------------------------- + +**Table of Contents** + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Provider: Rackspace](#provider-rackspace) +- [Build](#build) +- [Cluster](#cluster) +- [Some notes:](#some-notes) +- [Network Design](#network-design) + +## Introduction + +* Supported Version: v0.18.1 + +In general, the dev-build-and-up.sh workflow for Rackspace is the similar to Google Compute Engine. The specific implementation is different due to the use of CoreOS, Rackspace Cloud Files and the overall network design. + +These scripts should be used to deploy development environments for Kubernetes. If your account leverages RackConnect or non-standard networking, these scripts will most likely not work without modification. + +NOTE: The rackspace scripts do NOT rely on `saltstack` and instead rely on cloud-init for configuration. + +The current cluster design is inspired by: +- [corekube](https://github.com/metral/corekube) +- [Angus Lees](https://github.com/anguslees/kube-openstack) + +## Prerequisites + +1. Python2.7 +2. You need to have both `nova` and `swiftly` installed. It's recommended to use a python virtualenv to install these packages into. +3. Make sure you have the appropriate environment variables set to interact with the OpenStack APIs. See [Rackspace Documentation](http://docs.rackspace.com/servers/api/v2/cs-gettingstarted/content/section_gs_install_nova.html) for more details. + +## Provider: Rackspace + +- To build your own released version from source use `export KUBERNETES_PROVIDER=rackspace` and run the `bash hack/dev-build-and-up.sh` +- Note: The get.k8s.io install method is not working yet for our scripts. + * To install the latest released version of Kubernetes use `export KUBERNETES_PROVIDER=rackspace; wget -q -O - https://get.k8s.io | bash` + +## Build + +1. The Kubernetes binaries will be built via the common build scripts in `build/`. +2. If you've set the ENV `KUBERNETES_PROVIDER=rackspace`, the scripts will upload `kubernetes-server-linux-amd64.tar.gz` to Cloud Files. +2. A cloud files container will be created via the `swiftly` CLI and a temp URL will be enabled on the object. +3. The built `kubernetes-server-linux-amd64.tar.gz` will be uploaded to this container and the URL will be passed to master/nodes when booted. + +## Cluster + +There is a specific `cluster/rackspace` directory with the scripts for the following steps: + +1. A cloud network will be created and all instances will be attached to this network. + - flanneld uses this network for next hop routing. These routes allow the containers running on each node to communicate with one another on this private network. +2. A SSH key will be created and uploaded if needed. This key must be used to ssh into the machines (we do not capture the password). +3. The master server and additional nodes will be created via the `nova` CLI. A `cloud-config.yaml` is generated and provided as user-data with the entire configuration for the systems. +4. We then boot as many nodes as defined via `$NUM_MINIONS`. + +## Some notes + +- The scripts expect `eth2` to be the cloud network that the containers will communicate across. +- A number of the items in `config-default.sh` are overridable via environment variables. +- For older versions please either: + * Sync back to `v0.9` with `git checkout v0.9` + * Download a [snapshot of `v0.9`](https://github.com/kubernetes/kubernetes/archive/v0.9.tar.gz) + * Sync back to `v0.3` with `git checkout v0.3` + * Download a [snapshot of `v0.3`](https://github.com/kubernetes/kubernetes/archive/v0.3.tar.gz) + +## Network Design + +- eth0 - Public Interface used for servers/containers to reach the internet +- eth1 - ServiceNet - Intra-cluster communication (k8s, etcd, etc) communicate via this interface. The `cloud-config` files use the special CoreOS identifier `$private_ipv4` to configure the services. +- eth2 - Cloud Network - Used for k8s pods to communicate with one another. The proxy service will pass traffic via this interface. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/rackspace.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/rkt/README.md b/v1.1/docs/getting-started-guides/rkt/README.md new file mode 100644 index 0000000000000..20fe95729b33a --- /dev/null +++ b/v1.1/docs/getting-started-guides/rkt/README.md @@ -0,0 +1,180 @@ +--- +layout: docwithnav +title: "Run Kubernetes with rkt" +--- + + + + + +# Run Kubernetes with rkt + +This document describes how to run Kubernetes using [rkt](https://github.com/coreos/rkt) as a container runtime. +We still have [a bunch of work](http://issue.k8s.io/8262) to do to make the experience with rkt wonderful, please stay tuned! + +### **Prerequisite** + +- [systemd](http://www.freedesktop.org/wiki/Software/systemd/) should be installed on the machine and should be enabled. The minimum version required at this moment (2015/09/01) is 219 + *(Note that systemd is not required by rkt itself, we are using it here to monitor and manage the pods launched by kubelet.)* + +- Install the latest rkt release according to the instructions [here](https://github.com/coreos/rkt). + The minimum version required for now is [v0.8.0](https://github.com/coreos/rkt/releases/tag/v0.8.0). + +- Note that for rkt version later than v0.7.0, `metadata service` is not required for running pods in private networks. So now rkt pods will not register the metadata service be default. + +### Local cluster + +To use rkt as the container runtime, we need to supply `--container-runtime=rkt` and `--rkt-path=$PATH_TO_RKT_BINARY` to kubelet. Additionally we can provide `--rkt-stage1-image` flag +as well to select which [stage1 image](https://github.com/coreos/rkt/blob/master/Documentation/running-lkvm-stage1.md) we want to use. + +If you are using the [hack/local-up-cluster.sh](https://releases.k8s.io/release-1.1/hack/local-up-cluster.sh) script to launch the local cluster, then you can edit the environment variable `CONTAINER_RUNTIME`, `RKT_PATH` and `RKT_STAGE1_IMAGE` to +set these flags: + +{% highlight console %} +{% raw %} +$ export CONTAINER_RUNTIME=rkt +$ export RKT_PATH=$PATH_TO_RKT_BINARY +$ export RKT_STAGE1_IMAGE=PATH=$PATH_TO_STAGE1_IMAGE +{% endraw %} +{% endhighlight %} + +Then we can launch the local cluster using the script: + +{% highlight console %} +{% raw %} +$ hack/local-up-cluster.sh +{% endraw %} +{% endhighlight %} + +### CoreOS cluster on Google Compute Engine (GCE) + +To use rkt as the container runtime for your CoreOS cluster on GCE, you need to specify the OS distribution, project, image: + +{% highlight console %} +{% raw %} +$ export KUBE_OS_DISTRIBUTION=coreos +$ export KUBE_GCE_MINION_IMAGE= +$ export KUBE_GCE_MINION_PROJECT=coreos-cloud +$ export KUBE_CONTAINER_RUNTIME=rkt +{% endraw %} +{% endhighlight %} + +You can optionally choose the version of rkt used by setting `KUBE_RKT_VERSION`: + +{% highlight console %} +{% raw %} +$ export KUBE_RKT_VERSION=0.8.0 +{% endraw %} +{% endhighlight %} + +Then you can launch the cluster by: + +{% highlight console %} +{% raw %} +$ kube-up.sh +{% endraw %} +{% endhighlight %} + +Note that we are still working on making all containerized the master components run smoothly in rkt. Before that we are not able to run the master node with rkt yet. + +### CoreOS cluster on AWS + +To use rkt as the container runtime for your CoreOS cluster on AWS, you need to specify the provider and OS distribution: + +{% highlight console %} +{% raw %} +$ export KUBERNETES_PROVIDER=aws +$ export KUBE_OS_DISTRIBUTION=coreos +$ export KUBE_CONTAINER_RUNTIME=rkt +{% endraw %} +{% endhighlight %} + +You can optionally choose the version of rkt used by setting `KUBE_RKT_VERSION`: + +{% highlight console %} +{% raw %} +$ export KUBE_RKT_VERSION=0.8.0 +{% endraw %} +{% endhighlight %} + +You can optionally choose the CoreOS channel by setting `COREOS_CHANNEL`: + +{% highlight console %} +{% raw %} +$ export COREOS_CHANNEL=stable +{% endraw %} +{% endhighlight %} + +Then you can launch the cluster by: + +{% highlight console %} +{% raw %} +$ kube-up.sh +{% endraw %} +{% endhighlight %} + +Note: CoreOS is not supported as the master using the automated launch +scripts. The master node is always Ubuntu. + +### Getting started with your cluster + +See [a simple nginx example](../../../docs/user-guide/simple-nginx.html) to try out your new cluster. + +For more complete applications, please look in the [examples directory](../../../examples/). + + +### Debugging + +Here are severals tips for you when you run into any issues. + +##### Check logs + +By default, the log verbose level is 2. In order to see more logs related to rkt, we can set the verbose level to 4. +For local cluster, we can set the environment variable: `LOG_LEVEL=4`. +If the cluster is using salt, we can edit the [logging.sls](https://releases.k8s.io/release-1.1/cluster/saltbase/pillar/logging.sls) in the saltbase. + +##### Check rkt pod status + +To check the pods' status, we can use rkt command, such as `rkt list`, `rkt status`, `rkt image list`, etc. +More information about rkt command line can be found [here](https://github.com/coreos/rkt/blob/master/Documentation/commands.md) + +##### Check journal logs + +As we use systemd to launch rkt pods(by creating service files which will run `rkt run-prepared`, we can check the pods' log +using `journalctl`: + +- Check the running state of the systemd service: + +{% highlight console %} +{% raw %} +$ sudo journalctl -u $SERVICE_FILE +{% endraw %} +{% endhighlight %} + +where `$SERVICE_FILE` is the name of the service file created for the pod, you can find it in the kubelet logs. + +##### Check the log of the container in the pod: + +{% highlight console %} +{% raw %} +$ sudo journalctl -M rkt-$UUID -u $CONTAINER_NAME +{% endraw %} +{% endhighlight %} + +where `$UUID` is the rkt pod's UUID, which you can find via `rkt list --full`, and `$CONTAINER_NAME` is the container's name. + +##### Check Kubernetes events, logs. + +Besides above tricks, Kubernetes also provides us handy tools for debugging the pods. More information can be found [here](../../../docs/user-guide/application-troubleshooting.html) + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/rkt/README.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/rkt/index.md b/v1.1/docs/getting-started-guides/rkt/index.md new file mode 100644 index 0000000000000..20fe95729b33a --- /dev/null +++ b/v1.1/docs/getting-started-guides/rkt/index.md @@ -0,0 +1,180 @@ +--- +layout: docwithnav +title: "Run Kubernetes with rkt" +--- + + + + + +# Run Kubernetes with rkt + +This document describes how to run Kubernetes using [rkt](https://github.com/coreos/rkt) as a container runtime. +We still have [a bunch of work](http://issue.k8s.io/8262) to do to make the experience with rkt wonderful, please stay tuned! + +### **Prerequisite** + +- [systemd](http://www.freedesktop.org/wiki/Software/systemd/) should be installed on the machine and should be enabled. The minimum version required at this moment (2015/09/01) is 219 + *(Note that systemd is not required by rkt itself, we are using it here to monitor and manage the pods launched by kubelet.)* + +- Install the latest rkt release according to the instructions [here](https://github.com/coreos/rkt). + The minimum version required for now is [v0.8.0](https://github.com/coreos/rkt/releases/tag/v0.8.0). + +- Note that for rkt version later than v0.7.0, `metadata service` is not required for running pods in private networks. So now rkt pods will not register the metadata service be default. + +### Local cluster + +To use rkt as the container runtime, we need to supply `--container-runtime=rkt` and `--rkt-path=$PATH_TO_RKT_BINARY` to kubelet. Additionally we can provide `--rkt-stage1-image` flag +as well to select which [stage1 image](https://github.com/coreos/rkt/blob/master/Documentation/running-lkvm-stage1.md) we want to use. + +If you are using the [hack/local-up-cluster.sh](https://releases.k8s.io/release-1.1/hack/local-up-cluster.sh) script to launch the local cluster, then you can edit the environment variable `CONTAINER_RUNTIME`, `RKT_PATH` and `RKT_STAGE1_IMAGE` to +set these flags: + +{% highlight console %} +{% raw %} +$ export CONTAINER_RUNTIME=rkt +$ export RKT_PATH=$PATH_TO_RKT_BINARY +$ export RKT_STAGE1_IMAGE=PATH=$PATH_TO_STAGE1_IMAGE +{% endraw %} +{% endhighlight %} + +Then we can launch the local cluster using the script: + +{% highlight console %} +{% raw %} +$ hack/local-up-cluster.sh +{% endraw %} +{% endhighlight %} + +### CoreOS cluster on Google Compute Engine (GCE) + +To use rkt as the container runtime for your CoreOS cluster on GCE, you need to specify the OS distribution, project, image: + +{% highlight console %} +{% raw %} +$ export KUBE_OS_DISTRIBUTION=coreos +$ export KUBE_GCE_MINION_IMAGE= +$ export KUBE_GCE_MINION_PROJECT=coreos-cloud +$ export KUBE_CONTAINER_RUNTIME=rkt +{% endraw %} +{% endhighlight %} + +You can optionally choose the version of rkt used by setting `KUBE_RKT_VERSION`: + +{% highlight console %} +{% raw %} +$ export KUBE_RKT_VERSION=0.8.0 +{% endraw %} +{% endhighlight %} + +Then you can launch the cluster by: + +{% highlight console %} +{% raw %} +$ kube-up.sh +{% endraw %} +{% endhighlight %} + +Note that we are still working on making all containerized the master components run smoothly in rkt. Before that we are not able to run the master node with rkt yet. + +### CoreOS cluster on AWS + +To use rkt as the container runtime for your CoreOS cluster on AWS, you need to specify the provider and OS distribution: + +{% highlight console %} +{% raw %} +$ export KUBERNETES_PROVIDER=aws +$ export KUBE_OS_DISTRIBUTION=coreos +$ export KUBE_CONTAINER_RUNTIME=rkt +{% endraw %} +{% endhighlight %} + +You can optionally choose the version of rkt used by setting `KUBE_RKT_VERSION`: + +{% highlight console %} +{% raw %} +$ export KUBE_RKT_VERSION=0.8.0 +{% endraw %} +{% endhighlight %} + +You can optionally choose the CoreOS channel by setting `COREOS_CHANNEL`: + +{% highlight console %} +{% raw %} +$ export COREOS_CHANNEL=stable +{% endraw %} +{% endhighlight %} + +Then you can launch the cluster by: + +{% highlight console %} +{% raw %} +$ kube-up.sh +{% endraw %} +{% endhighlight %} + +Note: CoreOS is not supported as the master using the automated launch +scripts. The master node is always Ubuntu. + +### Getting started with your cluster + +See [a simple nginx example](../../../docs/user-guide/simple-nginx.html) to try out your new cluster. + +For more complete applications, please look in the [examples directory](../../../examples/). + + +### Debugging + +Here are severals tips for you when you run into any issues. + +##### Check logs + +By default, the log verbose level is 2. In order to see more logs related to rkt, we can set the verbose level to 4. +For local cluster, we can set the environment variable: `LOG_LEVEL=4`. +If the cluster is using salt, we can edit the [logging.sls](https://releases.k8s.io/release-1.1/cluster/saltbase/pillar/logging.sls) in the saltbase. + +##### Check rkt pod status + +To check the pods' status, we can use rkt command, such as `rkt list`, `rkt status`, `rkt image list`, etc. +More information about rkt command line can be found [here](https://github.com/coreos/rkt/blob/master/Documentation/commands.md) + +##### Check journal logs + +As we use systemd to launch rkt pods(by creating service files which will run `rkt run-prepared`, we can check the pods' log +using `journalctl`: + +- Check the running state of the systemd service: + +{% highlight console %} +{% raw %} +$ sudo journalctl -u $SERVICE_FILE +{% endraw %} +{% endhighlight %} + +where `$SERVICE_FILE` is the name of the service file created for the pod, you can find it in the kubelet logs. + +##### Check the log of the container in the pod: + +{% highlight console %} +{% raw %} +$ sudo journalctl -M rkt-$UUID -u $CONTAINER_NAME +{% endraw %} +{% endhighlight %} + +where `$UUID` is the rkt pod's UUID, which you can find via `rkt list --full`, and `$CONTAINER_NAME` is the container's name. + +##### Check Kubernetes events, logs. + +Besides above tricks, Kubernetes also provides us handy tools for debugging the pods. More information can be found [here](../../../docs/user-guide/application-troubleshooting.html) + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/rkt/README.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/scratch.md b/v1.1/docs/getting-started-guides/scratch.md new file mode 100644 index 0000000000000..08ddaacf143c8 --- /dev/null +++ b/v1.1/docs/getting-started-guides/scratch.md @@ -0,0 +1,883 @@ +--- +layout: docwithnav +title: "Getting started from Scratch" +--- + + + + +Getting started from Scratch +---------------------------- + +This guide is for people who want to craft a custom Kubernetes cluster. If you +can find an existing Getting Started Guide that meets your needs on [this +list](README.html), then we recommend using it, as you will be able to benefit +from the experience of others. However, if you have specific IaaS, networking, +configuration management, or operating system requirements not met by any of +those guides, then this guide will provide an outline of the steps you need to +take. Note that it requires considerably more effort than using one of the +pre-defined guides. + +This guide is also useful for those wanting to understand at a high level some of the +steps that existing cluster setup scripts are making. + +**Table of Contents** + + + + - [Designing and Preparing](#designing-and-preparing) + - [Learning](#learning) + - [Cloud Provider](#cloud-provider) + - [Nodes](#nodes) + - [Network](#network) + - [Cluster Naming](#cluster-naming) + - [Software Binaries](#software-binaries) + - [Downloading and Extracting Kubernetes Binaries](#downloading-and-extracting-kubernetes-binaries) + - [Selecting Images](#selecting-images) + - [Security Models](#security-models) + - [Preparing Certs](#preparing-certs) + - [Preparing Credentials](#preparing-credentials) + - [Configuring and Installing Base Software on Nodes](#configuring-and-installing-base-software-on-nodes) + - [Docker](#docker) + - [rkt](#rkt) + - [kubelet](#kubelet) + - [kube-proxy](#kube-proxy) + - [Networking](#networking) + - [Other](#other) + - [Using Configuration Management](#using-configuration-management) + - [Bootstrapping the Cluster](#bootstrapping-the-cluster) + - [etcd](#etcd) + - [Apiserver, Controller Manager, and Scheduler](#apiserver-controller-manager-and-scheduler) + - [Apiserver pod template](#apiserver-pod-template) + - [Cloud Providers](#cloud-providers) + - [Scheduler pod template](#scheduler-pod-template) + - [Controller Manager Template](#controller-manager-template) + - [Starting and Verifying Apiserver, Scheduler, and Controller Manager](#starting-and-verifying-apiserver-scheduler-and-controller-manager) + - [Logging](#logging) + - [Monitoring](#monitoring) + - [DNS](#dns) + - [Troubleshooting](#troubleshooting) + - [Running validate-cluster](#running-validate-cluster) + - [Inspect pods and services](#inspect-pods-and-services) + - [Try Examples](#try-examples) + - [Running the Conformance Test](#running-the-conformance-test) + - [Networking](#networking) + - [Getting Help](#getting-help) + + + +## Designing and Preparing + +### Learning + + 1. You should be familiar with using Kubernetes already. We suggest you set + up a temporary cluster by following one of the other Getting Started Guides. + This will help you become familiar with the CLI ([kubectl](../user-guide/kubectl/kubectl.html)) and concepts ([pods](../user-guide/pods.html), [services](../user-guide/services.html), etc.) first. + 1. You should have `kubectl` installed on your desktop. This will happen as a side + effect of completing one of the other Getting Started Guides. If not, follow the instructions + [here](../user-guide/prereqs.html). + +### Cloud Provider + +Kubernetes has the concept of a Cloud Provider, which is a module which provides +an interface for managing TCP Load Balancers, Nodes (Instances) and Networking Routes. +The interface is defined in `pkg/cloudprovider/cloud.go`. It is possible to +create a custom cluster without implementing a cloud provider (for example if using +bare-metal), and not all parts of the interface need to be implemented, depending +on how flags are set on various components. + +### Nodes + +- You can use virtual or physical machines. +- While you can build a cluster with 1 machine, in order to run all the examples and tests you + need at least 4 nodes. +- Many Getting-started-guides make a distinction between the master node and regular nodes. This + is not strictly necessary. +- Nodes will need to run some version of Linux with the x86_64 architecture. It may be possible + to run on other OSes and Architectures, but this guide does not try to assist with that. +- Apiserver and etcd together are fine on a machine with 1 core and 1GB RAM for clusters with 10s of nodes. + Larger or more active clusters may benefit from more cores. +- Other nodes can have any reasonable amount of memory and any number of cores. They need not + have identical configurations. + +### Network + +Kubernetes has a distinctive [networking model](../admin/networking.html). + +Kubernetes allocates an IP address to each pod. When creating a cluster, you +need to allocate a block of IPs for Kubernetes to use as Pod IPs. The simplest +approach is to allocate a different block of IPs to each node in the cluster as +the node is added. A process in one pod should be able to communicate with +another pod using the IP of the second pod. This connectivity can be +accomplished in two ways: +- Configure network to route Pod IPs + - Harder to setup from scratch. + - Google Compute Engine ([GCE](gce.html)) and [AWS](aws.html) guides use this approach. + - Need to make the Pod IPs routable by programming routers, switches, etc. + - Can be configured external to Kubernetes, or can implement in the "Routes" interface of a Cloud Provider module. + - Generally highest performance. +- Create an Overlay network + - Easier to setup + - Traffic is encapsulated, so per-pod IPs are routable. + - Examples: + - [Flannel](https://github.com/coreos/flannel) + - [Weave](http://weave.works/) + - [Open vSwitch (OVS)](http://openvswitch.org/) + - Does not require "Routes" portion of Cloud Provider module. + - Reduced performance (exactly how much depends on your solution). + +You need to select an address range for the Pod IPs. +- Various approaches: + - GCE: each project has its own `10.0.0.0/8`. Carve off a `/16` for each + Kubernetes cluster from that space, which leaves room for several clusters. + Each node gets a further subdivision of this space. + - AWS: use one VPC for whole organization, carve off a chunk for each + cluster, or use different VPC for different clusters. + - IPv6 is not supported yet. +- Allocate one CIDR subnet for each node's PodIPs, or a single large CIDR + from which smaller CIDRs are automatically allocated to each node (if nodes + are dynamically added). + - You need max-pods-per-node * max-number-of-nodes IPs in total. A `/24` per + node supports 254 pods per machine and is a common choice. If IPs are + scarce, a `/26` (62 pods per machine) or even a `/27` (30 pods) may be sufficient. + - e.g. use `10.10.0.0/16` as the range for the cluster, with up to 256 nodes + using `10.10.0.0/24` through `10.10.255.0/24`, respectively. + - Need to make these routable or connect with overlay. + +Kubernetes also allocates an IP to each [service](../user-guide/services.html). However, +service IPs do not necessarily need to be routable. The kube-proxy takes care +of translating Service IPs to Pod IPs before traffic leaves the node. You do +need to Allocate a block of IPs for services. Call this +`SERVICE_CLUSTER_IP_RANGE`. For example, you could set +`SERVICE_CLUSTER_IP_RANGE="10.0.0.0/16"`, allowing 65534 distinct services to +be active at once. Note that you can grow the end of this range, but you +cannot move it without disrupting the services and pods that already use it. + +Also, you need to pick a static IP for master node. +- Call this `MASTER_IP`. +- Open any firewalls to allow access to the apiserver ports 80 and/or 443. +- Enable ipv4 forwarding sysctl, `net.ipv4.ip_forward = 1` + +### Cluster Naming + +You should pick a name for your cluster. Pick a short name for each cluster +which is unique from future cluster names. This will be used in several ways: + - by kubectl to distinguish between various clusters you have access to. You will probably want a + second one sometime later, such as for testing new Kubernetes releases, running in a different +region of the world, etc. + - Kubernetes clusters can create cloud provider resources (e.g. AWS ELBs) and different clusters + need to distinguish which resources each created. Call this `CLUSTERNAME`. + +### Software Binaries + +You will need binaries for: + - etcd + - A container runner, one of: + - docker + - rkt + - Kubernetes + - kubelet + - kube-proxy + - kube-apiserver + - kube-controller-manager + - kube-scheduler + +#### Downloading and Extracting Kubernetes Binaries + +A Kubernetes binary release includes all the Kubernetes binaries as well as the supported release of etcd. +You can use a Kubernetes binary release (recommended) or build your Kubernetes binaries following the instructions in the +[Developer Documentation](../devel/README.html). Only using a binary release is covered in this guide. + +Download the [latest binary release](https://github.com/kubernetes/kubernetes/releases/latest) and unzip it. +Then locate `./kubernetes/server/kubernetes-server-linux-amd64.tar.gz` and unzip *that*. +Then, within the second set of unzipped files, locate `./kubernetes/server/bin`, which contains +all the necessary binaries. + +#### Selecting Images + +You will run docker, kubelet, and kube-proxy outside of a container, the same way you would run any system daemon, so +you just need the bare binaries. For etcd, kube-apiserver, kube-controller-manager, and kube-scheduler, +we recommend that you run these as containers, so you need an image to be built. + +You have several choices for Kubernetes images: +- Use images hosted on Google Container Registry (GCR): + - e.g `gcr.io/google_containers/hyperkube:$TAG`, where `TAG` is the latest + release tag, which can be found on the [latest releases page](https://github.com/kubernetes/kubernetes/releases/latest). + - Ensure $TAG is the same tag as the release tag you are using for kubelet and kube-proxy. + - The [hyperkube](https://releases.k8s.io/release-1.1/cmd/hyperkube) binary is an all in one binary + - `hyperkube kubelet ...` runs the kublet, `hyperkube apiserver ...` runs an apiserver, etc. +- Build your own images. + - Useful if you are using a private registry. + - The release contains files such as `./kubernetes/server/bin/kube-apiserver.tar` which + can be converted into docker images using a command like + `docker load -i kube-apiserver.tar` + - You can verify if the image is loaded successfully with the right repository and tag using + command like `docker images` + +For etcd, you can: +- Use images hosted on Google Container Registry (GCR), such as `gcr.io/google_containers/etcd:2.0.12` +- Use images hosted on [Docker Hub](https://hub.docker.com/search/?q=etcd) or [Quay.io](https://quay.io/repository/coreos/etcd), such as `quay.io/coreos/etcd:v2.2.0` +- Use etcd binary included in your OS distro. +- Build your own image + - You can do: `cd kubernetes/cluster/images/etcd; make` + +We recommend that you use the etcd version which is provided in the Kubernetes binary distribution. The Kubernetes binaries in the release +were tested extensively with this version of etcd and not with any other version. +The recommended version number can also be found as the value of `ETCD_VERSION` in `kubernetes/cluster/images/etcd/Makefile`. + +The remainder of the document assumes that the image identifiers have been chosen and stored in corresponding env vars. Examples (replace with latest tags and appropriate registry): + - `HYPERKUBE_IMAGE==gcr.io/google_containers/hyperkube:$TAG` + - `ETCD_IMAGE=gcr.io/google_containers/etcd:$ETCD_VERSION` + +### Security Models + +There are two main options for security: +- Access the apiserver using HTTP. + - Use a firewall for security. + - This is easier to setup. +- Access the apiserver using HTTPS + - Use https with certs, and credentials for user. + - This is the recommended approach. + - Configuring certs can be tricky. + +If following the HTTPS approach, you will need to prepare certs and credentials. + +#### Preparing Certs + +You need to prepare several certs: +- The master needs a cert to act as an HTTPS server. +- The kubelets optionally need certs to identify themselves as clients of the master, and when + serving its own API over HTTPS. + +Unless you plan to have a real CA generate your certs, you will need to generate a root cert and use that to sign the master, kubelet, and kubectl certs. +- see function `create-certs` in `cluster/gce/util.sh` +- see also `cluster/saltbase/salt/generate-cert/make-ca-cert.sh` and + `cluster/saltbase/salt/generate-cert/make-cert.sh` + +You will end up with the following files (we will use these variables later on) +- `CA_CERT` + - put in on node where apiserver runs, in e.g. `/srv/kubernetes/ca.crt`. +- `MASTER_CERT` + - signed by CA_CERT + - put in on node where apiserver runs, in e.g. `/srv/kubernetes/server.crt` +- `MASTER_KEY ` + - put in on node where apiserver runs, in e.g. `/srv/kubernetes/server.key` +- `KUBELET_CERT` + - optional +- `KUBELET_KEY` + - optional + +#### Preparing Credentials + +The admin user (and any users) need: + - a token or a password to identify them. + - tokens are just long alphanumeric strings, e.g. 32 chars. See + - `TOKEN=$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null)` + +Your tokens and passwords need to be stored in a file for the apiserver +to read. This guide uses `/var/lib/kube-apiserver/known_tokens.csv`. +The format for this file is described in the [authentication documentation](../admin/authentication.html). + +For distributing credentials to clients, the convention in Kubernetes is to put the credentials +into a [kubeconfig file](../user-guide/kubeconfig-file.html). + +The kubeconfig file for the administrator can be created as follows: + - If you have already used Kubernetes with a non-custom cluster (for example, used a Getting Started + Guide), you will already have a `$HOME/.kube/config` file. + - You need to add certs, keys, and the master IP to the kubeconfig file: + - If using the firewall-only security option, set the apiserver this way: + - `kubectl config set-cluster $CLUSTER_NAME --server=http://$MASTER_IP --insecure-skip-tls-verify=true` + - Otherwise, do this to set the apiserver ip, client certs, and user credentials. + - `kubectl config set-cluster $CLUSTER_NAME --certificate-authority=$CA_CERT --embed-certs=true --server=https://$MASTER_IP` + - `kubectl config set-credentials $USER --client-certificate=$CLI_CERT --client-key=$CLI_KEY --embed-certs=true --token=$TOKEN` + - Set your cluster as the default cluster to use: + - `kubectl config set-context $CONTEXT_NAME --cluster=$CLUSTER_NAME --user=$USER` + - `kubectl config use-context $CONTEXT_NAME` + +Next, make a kubeconfig file for the kubelets and kube-proxy. There are a couple of options for how +many distinct files to make: + 1. Use the same credential as the admin + - This is simplest to setup. + 1. One token and kubeconfig file for all kubelets, one for all kube-proxy, one for admin. + - This mirrors what is done on GCE today + 1. Different credentials for every kubelet, etc. + - We are working on this but all the pieces are not ready yet. + +You can make the files by copying the `$HOME/.kube/config`, by following the code +in `cluster/gce/configure-vm.sh` or by using the following template: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Config +users: +- name: kubelet + user: + token: ${KUBELET_TOKEN} +clusters: +- name: local + cluster: + certificate-authority-data: ${CA_CERT_BASE64_ENCODED} +contexts: +- context: + cluster: local + user: kubelet + name: service-account-context +current-context: service-account-context +{% endraw %} +{% endhighlight %} + +Put the kubeconfig(s) on every node. The examples later in this +guide assume that there are kubeconfigs in `/var/lib/kube-proxy/kubeconfig` and +`/var/lib/kubelet/kubeconfig`. + +## Configuring and Installing Base Software on Nodes + +This section discusses how to configure machines to be Kubernetes nodes. + +You should run three daemons on every node: + - docker or rkt + - kubelet + - kube-proxy + +You will also need to do assorted other configuration on top of a +base OS install. + +Tip: One possible starting point is to setup a cluster using an existing Getting +Started Guide. After getting a cluster running, you can then copy the init.d scripts or systemd unit files from that +cluster, and then modify them for use on your custom cluster. + +### Docker + +The minimum required Docker version will vary as the kubelet version changes. The newest stable release is a good choice. Kubelet will log a warning and refuse to start pods if the version is too old, so pick a version and try it. + +If you previously had Docker installed on a node without setting Kubernetes-specific +options, you may have a Docker-created bridge and iptables rules. You may want to remove these +as follows before proceeding to configure Docker for Kubernetes. + +{% highlight sh %} +{% raw %} +iptables -t nat -F +ifconfig docker0 down +brctl delbr docker0 +{% endraw %} +{% endhighlight %} + +The way you configure docker will depend in whether you have chosen the routable-vip or overlay-network approaches for your network. +Some suggested docker options: + - create your own bridge for the per-node CIDR ranges, call it cbr0, and set `--bridge=cbr0` option on docker. + - set `--iptables=false` so docker will not manipulate iptables for host-ports (too coarse on older docker versions, may be fixed in newer versions) +so that kube-proxy can manage iptables instead of docker. + - `--ip-masq=false` + - if you have setup PodIPs to be routable, then you want this false, otherwise, docker will + rewrite the PodIP source-address to a NodeIP. + - some environments (e.g. GCE) still need you to masquerade out-bound traffic when it leaves the cloud environment. This is very environment specific. + - if you are using an overlay network, consult those instructions. + - `--mtu=` + - may be required when using Flannel, because of the extra packet size due to udp encapsulation + - `--insecure-registry $CLUSTER_SUBNET` + - to connect to a private registry, if you set one up, without using SSL. + +You may want to increase the number of open files for docker: + - `DOCKER_NOFILE=1000000` + +Where this config goes depends on your node OS. For example, GCE's Debian-based distro uses `/etc/default/docker`. + +Ensure docker is working correctly on your system before proceeding with the rest of the +installation, by following examples given in the Docker documentation. + +### rkt + +[rkt](https://github.com/coreos/rkt) is an alternative to Docker. You only need to install one of Docker or rkt. +The minimum version required is [v0.5.6](https://github.com/coreos/rkt/releases/tag/v0.5.6). + +[systemd](http://www.freedesktop.org/wiki/Software/systemd/) is required on your node to run rkt. The +minimum version required to match rkt v0.5.6 is +[systemd 215](http://lists.freedesktop.org/archives/systemd-devel/2014-July/020903.html). + +[rkt metadata service](https://github.com/coreos/rkt/blob/master/Documentation/networking.md) is also required +for rkt networking support. You can start rkt metadata service by using command like +`sudo systemd-run rkt metadata-service` + +Then you need to configure your kubelet with flag: + - `--container-runtime=rkt` + +### kubelet + +All nodes should run kubelet. See [Selecting Binaries](#selecting-binaries). + +Arguments to consider: + - If following the HTTPS security approach: + - `--api-servers=https://$MASTER_IP` + - `--kubeconfig=/var/lib/kubelet/kubeconfig` + - Otherwise, if taking the firewall-based security approach + - `--api-servers=http://$MASTER_IP` + - `--config=/etc/kubernetes/manifests` + - `--cluster-dns=` to the address of the DNS server you will setup (see [Starting Addons](#starting-addons).) + - `--cluster-domain=` to the dns domain prefix to use for cluster DNS addresses. + - `--docker-root=` + - `--root-dir=` + - `--configure-cbr0=` (described above) + - `--register-node` (described in [Node](../admin/node.html) documentation.) + +### kube-proxy + +All nodes should run kube-proxy. (Running kube-proxy on a "master" node is not +strictly required, but being consistent is easier.) Obtain a binary as described for +kubelet. + +Arguments to consider: + - If following the HTTPS security approach: + - `--api-servers=https://$MASTER_IP` + - `--kubeconfig=/var/lib/kube-proxy/kubeconfig` + - Otherwise, if taking the firewall-based security approach + - `--api-servers=http://$MASTER_IP` + +### Networking + +Each node needs to be allocated its own CIDR range for pod networking. +Call this `NODE_X_POD_CIDR`. + +A bridge called `cbr0` needs to be created on each node. The bridge is explained +further in the [networking documentation](../admin/networking.html). The bridge itself +needs an address from `$NODE_X_POD_CIDR` - by convention the first IP. Call +this `NODE_X_BRIDGE_ADDR`. For example, if `NODE_X_POD_CIDR` is `10.0.0.0/16`, +then `NODE_X_BRIDGE_ADDR` is `10.0.0.1/16`. NOTE: this retains the `/16` suffix +because of how this is used later. + +- Recommended, automatic approach: + 1. Set `--configure-cbr0=true` option in kubelet init script and restart kubelet service. Kubelet will configure cbr0 automatically. + It will wait to do this until the node controller has set Node.Spec.PodCIDR. Since you have not setup apiserver and node controller + yet, the bridge will not be setup immediately. +- Alternate, manual approach: + 1. Set `--configure-cbr0=false` on kubelet and restart. + 1. Create a bridge + - e.g. `brctl addbr cbr0`. + 1. Set appropriate MTU + - `ip link set dev cbr0 mtu 1460` (NOTE: the actual value of MTU will depend on your network environment) + 1. Add the clusters network to the bridge (docker will go on other side of bridge). + - e.g. `ip addr add $NODE_X_BRIDGE_ADDR dev eth0` + 1. Turn it on + - e.g. `ip link set dev cbr0 up` + +If you have turned off Docker's IP masquerading to allow pods to talk to each +other, then you may need to do masquerading just for destination IPs outside +the cluster network. For example: + +{% highlight sh %} +{% raw %} +iptables -w -t nat -A POSTROUTING -o eth0 -j MASQUERADE \! -d ${CLUSTER_SUBNET} +{% endraw %} +{% endhighlight %} + +This will rewrite the source address from +the PodIP to the Node IP for traffic bound outside the cluster, and kernel +[connection tracking](http://www.iptables.info/en/connection-state.html) +will ensure that responses destined to the node still reach +the pod. + +NOTE: This is environment specific. Some environments will not need +any masquerading at all. Others, such as GCE, will not allow pod IPs to send +traffic to the internet, but have no problem with them inside your GCE Project. + +### Other + +- Enable auto-upgrades for your OS package manager, if desired. +- Configure log rotation for all node components (e.g. using [logrotate](http://linux.die.net/man/8/logrotate)). +- Setup liveness-monitoring (e.g. using [supervisord](http://supervisord.org/)). +- Setup volume plugin support (optional) + - Install any client binaries for optional volume types, such as `glusterfs-client` for GlusterFS + volumes. + +### Using Configuration Management + +The previous steps all involved "conventional" system administration techniques for setting up +machines. You may want to use a Configuration Management system to automate the node configuration +process. There are examples of [Saltstack](../admin/salt.html), Ansible, Juju, and CoreOS Cloud Config in the +various Getting Started Guides. + +## Bootstrapping the Cluster + +While the basic node services (kubelet, kube-proxy, docker) are typically started and managed using +traditional system administration/automation approaches, the remaining *master* components of Kubernetes are +all configured and managed *by Kubernetes*: + - their options are specified in a Pod spec (yaml or json) rather than an /etc/init.d file or + systemd unit. + - they are kept running by Kubernetes rather than by init. + +### etcd + +You will need to run one or more instances of etcd. + - Recommended approach: run one etcd instance, with its log written to a directory backed + by durable storage (RAID, GCE PD) + - Alternative: run 3 or 5 etcd instances. + - Log can be written to non-durable storage because storage is replicated. + - run a single apiserver which connects to one of the etc nodes. + See [cluster-troubleshooting](../admin/cluster-troubleshooting.html) for more discussion on factors affecting cluster +availability. + +To run an etcd instance: + +1. copy `cluster/saltbase/salt/etcd/etcd.manifest` +1. make any modifications needed +1. start the pod by putting it into the kubelet manifest directory + +### Apiserver, Controller Manager, and Scheduler + +The apiserver, controller manager, and scheduler will each run as a pod on the master node. + +For each of these components, the steps to start them running are similar: + +1. Start with a provided template for a pod. +1. Set the `HYPERKUBE_IMAGE` to the values chosen in [Selecting Images](#selecting-images). +1. Determine which flags are needed for your cluster, using the advice below each template. +1. Set the flags to be individual strings in the command array (e.g. $ARGN below) +1. Start the pod by putting the completed template into the kubelet manifest directory. +1. Verify that the pod is started. + +#### Apiserver pod template + +{% highlight json %} +{% raw %} +{ + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "kube-apiserver" + }, + "spec": { + "hostNetwork": true, + "containers": [ + { + "name": "kube-apiserver", + "image": "${HYPERKUBE_IMAGE}", + "command": [ + "/hyperkube", + "apiserver", + "$ARG1", + "$ARG2", + ... + "$ARGN" + ], + "ports": [ + { + "name": "https", + "hostPort": 443, + "containerPort": 443 + }, + { + "name": "local", + "hostPort": 8080, + "containerPort": 8080 + } + ], + "volumeMounts": [ + { + "name": "srvkube", + "mountPath": "/srv/kubernetes", + "readOnly": true + }, + { + "name": "etcssl", + "mountPath": "/etc/ssl", + "readOnly": true + } + ], + "livenessProbe": { + "httpGet": { + "path": "/healthz", + "port": 8080 + }, + "initialDelaySeconds": 15, + "timeoutSeconds": 15 + } + } + ], + "volumes": [ + { + "name": "srvkube", + "hostPath": { + "path": "/srv/kubernetes" + } + }, + { + "name": "etcssl", + "hostPath": { + "path": "/etc/ssl" + } + } + ] + } +} +{% endraw %} +{% endhighlight %} + +Here are some apiserver flags you may need to set: + +- `--cloud-provider=` see [cloud providers](#cloud-providers) +- `--cloud-config=` see [cloud providers](#cloud-providers) +- `--address=${MASTER_IP}` *or* `--bind-address=127.0.0.1` and `--address=127.0.0.1` if you want to run a proxy on the master node. +- `--cluster-name=$CLUSTER_NAME` +- `--service-cluster-ip-range=$SERVICE_CLUSTER_IP_RANGE` +- `--etcd-servers=http://127.0.0.1:4001` +- `--tls-cert-file=/srv/kubernetes/server.cert` +- `--tls-private-key-file=/srv/kubernetes/server.key` +- `--admission-control=$RECOMMENDED_LIST` + - See [admission controllers](../admin/admission-controllers.html) for recommended arguments. +- `--allow-privileged=true`, only if you trust your cluster user to run pods as root. + +If you are following the firewall-only security approach, then use these arguments: + +- `--token-auth-file=/dev/null` +- `--insecure-bind-address=$MASTER_IP` +- `--advertise-address=$MASTER_IP` + +If you are using the HTTPS approach, then set: +- `--client-ca-file=/srv/kubernetes/ca.crt` +- `--token-auth-file=/srv/kubernetes/known_tokens.csv` +- `--basic-auth-file=/srv/kubernetes/basic_auth.csv` + +This pod mounts several node file system directories using the `hostPath` volumes. Their purposes are: +- The `/etc/ssl` mount allows the apiserver to find the SSL root certs so it can + authenticate external services, such as a cloud provider. + - This is not required if you do not use a cloud provider (e.g. bare-metal). +- The `/srv/kubernetes` mount allows the apiserver to read certs and credentials stored on the + node disk. These could instead be stored on a persistent disk, such as a GCE PD, or baked into the image. +- Optionally, you may want to mount `/var/log` as well and redirect output there (not shown in template). + - Do this if you prefer your logs to be accessible from the root filesystem with tools like journalctl. + +*TODO* document proxy-ssh setup. + +##### Cloud Providers + +Apiserver supports several cloud providers. + +- options for `--cloud-provider` flag are `aws`, `gce`, `mesos`, `openshift`, `ovirt`, `rackspace`, `vagrant`, or unset. +- unset used for e.g. bare metal setups. +- support for new IaaS is added by contributing code [here](https://releases.k8s.io/release-1.1/pkg/cloudprovider/providers) + +Some cloud providers require a config file. If so, you need to put config file into apiserver image or mount through hostPath. + +- `--cloud-config=` set if cloud provider requires a config file. +- Used by `aws`, `gce`, `mesos`, `openshift`, `ovirt` and `rackspace`. +- You must put config file into apiserver image or mount through hostPath. +- Cloud config file syntax is [Gcfg](https://code.google.com/p/gcfg/). +- AWS format defined by type [AWSCloudConfig](https://releases.k8s.io/release-1.1/pkg/cloudprovider/providers/aws/aws.go) +- There is a similar type in the corresponding file for other cloud providers. +- GCE example: search for `gce.conf` in [this file](https://releases.k8s.io/release-1.1/cluster/gce/configure-vm.sh) + +#### Scheduler pod template + +Complete this template for the scheduler pod: + +{% highlight json %} +{% raw %} + +{ + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "kube-scheduler" + }, + "spec": { + "hostNetwork": true, + "containers": [ + { + "name": "kube-scheduler", + "image": "$HYBERKUBE_IMAGE", + "command": [ + "/hyperkube", + "scheduler", + "--master=127.0.0.1:8080", + "$SCHEDULER_FLAG1", + ... + "$SCHEDULER_FLAGN" + ], + "livenessProbe": { + "httpGet": { + "host" : "127.0.0.1", + "path": "/healthz", + "port": 10251 + }, + "initialDelaySeconds": 15, + "timeoutSeconds": 15 + } + } + ] + } +} + +{% endraw %} +{% endhighlight %} + +Typically, no additional flags are required for the scheduler. + +Optionally, you may want to mount `/var/log` as well and redirect output there. + +#### Controller Manager Template + +Template for controller manager pod: + +{% highlight json %} +{% raw %} + +{ + "kind": "Pod", + "apiVersion": "v1", + "metadata": { + "name": "kube-controller-manager" + }, + "spec": { + "hostNetwork": true, + "containers": [ + { + "name": "kube-controller-manager", + "image": "$HYPERKUBE_IMAGE", + "command": [ + "/hyperkube", + "controller-manager", + "$CNTRLMNGR_FLAG1", + ... + "$CNTRLMNGR_FLAGN" + ], + "volumeMounts": [ + { + "name": "srvkube", + "mountPath": "/srv/kubernetes", + "readOnly": true + }, + { + "name": "etcssl", + "mountPath": "/etc/ssl", + "readOnly": true + } + ], + "livenessProbe": { + "httpGet": { + "host": "127.0.0.1", + "path": "/healthz", + "port": 10252 + }, + "initialDelaySeconds": 15, + "timeoutSeconds": 15 + } + } + ], + "volumes": [ + { + "name": "srvkube", + "hostPath": { + "path": "/srv/kubernetes" + } + }, + { + "name": "etcssl", + "hostPath": { + "path": "/etc/ssl" + } + } + ] + } +} + +{% endraw %} +{% endhighlight %} + +Flags to consider using with controller manager: + - `--cluster-name=$CLUSTER_NAME` + - `--cluster-cidr=` + - *TODO*: explain this flag. + - `--allocate-node-cidrs=` + - *TODO*: explain when you want controller to do this and when you want to do it another way. + - `--cloud-provider=` and `--cloud-config` as described in apiserver section. + - `--service-account-private-key-file=/srv/kubernetes/server.key`, used by the [service account](../user-guide/service-accounts.html) feature. + - `--master=127.0.0.1:8080` + +#### Starting and Verifying Apiserver, Scheduler, and Controller Manager + +Place each completed pod template into the kubelet config dir +(whatever `--config=` argument of kubelet is set to, typically +`/etc/kubernetes/manifests`). The order does not matter: scheduler and +controller manager will retry reaching the apiserver until it is up. + +Use `ps` or `docker ps` to verify that each process has started. For example, verify that kubelet has started a container for the apiserver like this: + +{% highlight console %} +{% raw %} +$ sudo docker ps | grep apiserver: +5783290746d5 gcr.io/google_containers/kube-apiserver:e36bf367342b5a80d7467fd7611ad873 "/bin/sh -c '/usr/lo'" 10 seconds ago Up 9 seconds k8s_kube-apiserver.feb145e7_kube-apiserver-kubernetes-master_default_eaebc600cf80dae59902b44225f2fc0a_225a4695 +{% endraw %} +{% endhighlight %} + +Then try to connect to the apiserver: + +{% highlight console %} +{% raw %} +$ echo $(curl -s http://localhost:8080/healthz) +ok +$ curl -s http://localhost:8080/api +{ + "versions": [ + "v1" + ] +} +{% endraw %} +{% endhighlight %} + +If you have selected the `--register-node=true` option for kubelets, they will now begin self-registering with the apiserver. +You should soon be able to see all your nodes by running the `kubectl get nodes` command. +Otherwise, you will need to manually create node objects. + +### Logging + +**TODO** talk about starting Logging. + +### Monitoring + +**TODO** talk about starting Monitoring. + +### DNS + +**TODO** talk about starting DNS. + +## Troubleshooting + +### Running validate-cluster + +**TODO** explain how to use `cluster/validate-cluster.sh` + +### Inspect pods and services + +Try to run through the "Inspect your cluster" section in one of the other Getting Started Guides, such as [GCE](gce.html#inspect-your-cluster). +You should see some services. You should also see "mirror pods" for the apiserver, scheduler and controller-manager, plus any add-ons you started. + +### Try Examples + +At this point you should be able to run through one of the basic examples, such as the [nginx example](../../examples/simple-nginx.html). + +### Running the Conformance Test + +You may want to try to run the [Conformance test](http://releases.k8s.io/release-1.1/hack/conformance-test.sh). Any failures may give a hint as to areas that need more attention. + +### Networking + +The nodes must be able to connect to each other using their private IP. Verify this by +pinging or SSH-ing from one node to another. + +### Getting Help + +If you run into trouble, please see the section on [troubleshooting](gce.html#troubleshooting), post to the +[google-containers group](https://groups.google.com/forum/#!forum/google-containers), or come ask questions on [Slack](../troubleshooting.html#slack). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/scratch.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/ubuntu-calico.md b/v1.1/docs/getting-started-guides/ubuntu-calico.md new file mode 100644 index 0000000000000..e02e11f6d2fa1 --- /dev/null +++ b/v1.1/docs/getting-started-guides/ubuntu-calico.md @@ -0,0 +1,327 @@ +--- +layout: docwithnav +title: "Kubernetes Deployment On Bare-metal Ubuntu Nodes with Calico Networking" +--- + + + + +Kubernetes Deployment On Bare-metal Ubuntu Nodes with Calico Networking +------------------------------------------------ + +## Introduction + +This document describes how to deploy Kubernetes on Ubuntu bare metal nodes with Calico Networking plugin. See [projectcalico.org](http://projectcalico.org) for more information on what Calico is, and [the calicoctl github](https://github.com/projectcalico/calico-docker) for more information on the command-line tool, `calicoctl`. + +This guide will set up a simple Kubernetes cluster with a master and two nodes. We will start the following processes with systemd: + +On the Master: +- `etcd` +- `kube-apiserver` +- `kube-controller-manager` +- `kube-scheduler` +- `calico-node` + +On each Node: +- `kube-proxy` +- `kube-kubelet` +- `calico-node` + +## Prerequisites + +1. This guide uses `systemd` and thus uses Ubuntu 15.04 which supports systemd natively. +2. All machines should have the latest docker stable version installed. At the time of writing, that is Docker 1.7.0. + - To install docker, follow [these instructions](https://docs.docker.com/installation/ubuntulinux/) +3. All hosts should be able to communicate with each other, as well as the internet, to download the necessary files. +4. This demo assumes that none of the hosts have been configured with any Kubernetes or Calico software yet. + +## Setup Master + +First, get the sample configurations for this tutorial + +``` +{% raw %} +wget https://github.com/Metaswitch/calico-kubernetes-ubuntu-demo/archive/master.tar.gz +tar -xvf master.tar.gz +{% endraw %} +``` + +### Setup environment variables for systemd services on Master + +Many of the sample systemd services provided rely on environment variables on a per-node basis. Here we'll edit those environment variables and move them into place. + +1.) Copy the network-environment-template from the `master` directory for editing. + +``` +{% raw %} +cp calico-kubernetes-ubuntu-demo-master/master/network-environment-template network-environment +{% endraw %} +``` + +2.) Edit `network-environment` to represent your current host's settings. + +3.) Move the `network-environment` into `/etc` + +``` +{% raw %} +sudo mv -f network-environment /etc +{% endraw %} +``` + +### Install Kubernetes on Master + +1.) Build & Install Kubernetes binaries + +``` +{% raw %} +# Get the Kubernetes Source +wget https://github.com/kubernetes/kubernetes/releases/download/v1.0.3/kubernetes.tar.gz + +# Untar it +tar -xf kubernetes.tar.gz +tar -xf kubernetes/server/kubernetes-server-linux-amd64.tar.gz +kubernetes/cluster/ubuntu/build.sh + +# Add binaries to /usr/bin +sudo cp -f binaries/master/* /usr/bin +sudo cp -f binaries/kubectl /usr/bin +{% endraw %} +``` + +2.) Install the sample systemd processes settings for launching kubernetes services + +``` +{% raw %} +sudo cp -f calico-kubernetes-ubuntu-demo-master/master/*.service /etc/systemd +sudo systemctl enable /etc/systemd/etcd.service +sudo systemctl enable /etc/systemd/kube-apiserver.service +sudo systemctl enable /etc/systemd/kube-controller-manager.service +sudo systemctl enable /etc/systemd/kube-scheduler.service +{% endraw %} +``` + +3.) Launch the processes. + +``` +{% raw %} +sudo systemctl start etcd.service +sudo systemctl start kube-apiserver.service +sudo systemctl start kube-controller-manager.service +sudo systemctl start kube-scheduler.service +{% endraw %} +``` + +### Install Calico on Master + +In order to allow the master to route to pods on our nodes, we will launch the calico-node daemon on our master. This will allow it to learn routes over BGP from the other calico-node daemons in the cluster. The docker daemon should already be running before calico is started. + +``` +{% raw %} +# Install the calicoctl binary, which will be used to launch calico +wget https://github.com/projectcalico/calico-docker/releases/download/v0.5.5/calicoctl +chmod +x calicoctl +sudo cp -f calicoctl /usr/bin + +# Install and start the calico service +sudo cp -f calico-kubernetes-ubuntu-demo-master/master/calico-node.service /etc/systemd +sudo systemctl enable /etc/systemd/calico-node.service +sudo systemctl start calico-node.service +{% endraw %} +``` + +>Note: calico-node may take a few minutes on first boot while it downloads the calico-node docker image. + +## Setup Nodes + +Perform these steps **once on each node**, ensuring you appropriately set the environment variables on each node + +### Setup environment variables for systemd services on the Node + +1.) Get the sample configurations for this tutorial + +``` +{% raw %} +wget https://github.com/Metaswitch/calico-kubernetes-ubuntu-demo/archive/master.tar.gz +tar -xvf master.tar.gz +{% endraw %} +``` + +2.) Copy the network-environment-template from the `node` directory + +``` +{% raw %} +cp calico-kubernetes-ubuntu-demo-master/node/network-environment-template network-environment +{% endraw %} +``` + +3.) Edit `network-environment` to represent your current host's settings. + +4.) Move `network-environment` into `/etc` + +``` +{% raw %} +sudo mv -f network-environment /etc +{% endraw %} +``` + +### Configure Docker on the Node + +#### Create the veth + +Instead of using docker's default interface (docker0), we will configure a new one to use desired IP ranges + +``` +{% raw %} +sudo apt-get install -y bridge-utils +sudo brctl addbr cbr0 +sudo ifconfig cbr0 up +sudo ifconfig cbr0 /24 +{% endraw %} +``` + +> Replace \ with the subnet for this host's containers. Example topology: + + Node | cbr0 IP +-------- | ------------- +node-1 | 192.168.1.1/24 +node-2 | 192.168.2.1/24 +node-X | 192.168.X.1/24 + +#### Start docker on cbr0 + +The Docker daemon must be started and told to use the already configured cbr0 instead of using the usual docker0, as well as disabling ip-masquerading and modification of the ip-tables. + +1.) Edit the ubuntu-15.04 docker.service for systemd at: `/lib/systemd/system/docker.service` + +2.) Find the line that reads `ExecStart=/usr/bin/docker -d -H fd://` and append the following flags: `--bridge=cbr0 --iptables=false --ip-masq=false` + +3.) Reload systemctl and restart docker. + +``` +{% raw %} +sudo systemctl daemon-reload +sudo systemctl restart docker +{% endraw %} +``` + +### Install Calico on the Node + +1.) Install Calico + +``` +{% raw %} +# Get the calicoctl binary +wget https://github.com/projectcalico/calico-docker/releases/download/v0.5.5/calicoctl +chmod +x calicoctl +sudo cp -f calicoctl /usr/bin + +# Start calico on this node +sudo cp calico-kubernetes-ubuntu-demo-master/node/calico-node.service /etc/systemd +sudo systemctl enable /etc/systemd/calico-node.service +sudo systemctl start calico-node.service +{% endraw %} +``` + +>The calico-node service will automatically get the kubernetes-calico plugin binary and install it on the host system. + +2.) Use calicoctl to add an IP pool. We must specify the IP and port that the master's etcd is listening on. +**NOTE: This step only needs to be performed once per Kubernetes deployment, as it covers all the node's IP ranges.** + +``` +{% raw %} +ETCD_AUTHORITY=:4001 calicoctl pool add 192.168.0.0/16 +{% endraw %} +``` + +### Install Kubernetes on the Node + +1.) Build & Install Kubernetes binaries + +``` +{% raw %} +# Get the Kubernetes Source +wget https://github.com/kubernetes/kubernetes/releases/download/v1.0.3/kubernetes.tar.gz + +# Untar it +tar -xf kubernetes.tar.gz +tar -xf kubernetes/server/kubernetes-server-linux-amd64.tar.gz +kubernetes/cluster/ubuntu/build.sh + +# Add binaries to /usr/bin +sudo cp -f binaries/minion/* /usr/bin + +# Get the iptables based kube-proxy reccomended for this demo +wget https://github.com/projectcalico/calico-kubernetes/releases/download/v0.1.1/kube-proxy +sudo cp kube-proxy /usr/bin/ +sudo chmod +x /usr/bin/kube-proxy +{% endraw %} +``` + +2.) Install and launch the sample systemd processes settings for launching Kubernetes services + +``` +{% raw %} +sudo cp calico-kubernetes-ubuntu-demo-master/node/kube-proxy.service /etc/systemd/ +sudo cp calico-kubernetes-ubuntu-demo-master/node/kube-kubelet.service /etc/systemd/ +sudo systemctl enable /etc/systemd/kube-proxy.service +sudo systemctl enable /etc/systemd/kube-kubelet.service +sudo systemctl start kube-proxy.service +sudo systemctl start kube-kubelet.service +{% endraw %} +``` + +>*You may want to consider checking their status after to ensure everything is running* + +## Install the DNS Addon + +Most Kubernetes deployments will require the DNS addon for service discovery. For more on DNS service discovery, check [here](https://releases.k8s.io/release-1.1/cluster/addons/dns). + +The config repository for this guide comes with manifest files to start the DNS addon. To install DNS, do the following on your Master node. + +Replace `` in `calico-kubernetes-ubuntu-demo-master/dns/skydns-rc.yaml` with your Master's IP address. Then, create `skydns-rc.yaml` and `skydns-svc.yaml` using `kubectl create -f `. + +## Launch other Services With Calico-Kubernetes + +At this point, you have a fully functioning cluster running on kubernetes with a master and 2 nodes networked with Calico. You can now follow any of the [standard documentation](../../examples/) to set up other services on your cluster. + +## Connectivity to outside the cluster + +With this sample configuration, because the containers have private `192.168.0.0/16` IPs, you will need NAT to allow connectivity between containers and the internet. However, in a full datacenter deployment, NAT is not always necessary, since Calico can peer with the border routers over BGP. + +### NAT on the nodes + +The simplest method for enabling connectivity from containers to the internet is to use an iptables masquerade rule. This is the standard mechanism [recommended](../../docs/admin/networking.html#google-compute-engine-gce) in the Kubernetes GCE environment. + +We need to NAT traffic that has a destination outside of the cluster. Internal traffic includes the master/nodes, and the container IP pools. A suitable masquerade chain would follow the pattern below, replacing the following variables: +- `CONTAINER_SUBNET`: The cluster-wide subnet from which container IPs are chosen. All cbr0 bridge subnets fall within this range. The above example uses `192.168.0.0/16`. +- `KUBERNETES_HOST_SUBNET`: The subnet from which Kubernetes node / master IP addresses have been chosen. +- `HOST_INTERFACE`: The interface on the Kubernetes node which is used for external connectivity. The above example uses `eth0` + +``` +{% raw %} +sudo iptables -t nat -N KUBE-OUTBOUND-NAT +sudo iptables -t nat -A KUBE-OUTBOUND-NAT -d -o -j RETURN +sudo iptables -t nat -A KUBE-OUTBOUND-NAT -d -o -j RETURN +sudo iptables -t nat -A KUBE-OUTBOUND-NAT -j MASQUERADE +sudo iptables -t nat -A POSTROUTING -j KUBE-OUTBOUND-NAT +{% endraw %} +``` + +This chain should be applied on the master and all nodes. In production, these rules should be persisted, e.g. with `iptables-persistent`. + +### NAT at the border router + +In a datacenter environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the datacenter, and so NAT is not needed on the nodes (though it may be enabled at the datacenter edge to allow outbound-only internet connectivity). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/ubuntu-calico.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/ubuntu.md b/v1.1/docs/getting-started-guides/ubuntu.md new file mode 100644 index 0000000000000..f374dc0d03ac5 --- /dev/null +++ b/v1.1/docs/getting-started-guides/ubuntu.md @@ -0,0 +1,310 @@ +--- +layout: docwithnav +title: "Kubernetes Deployment On Bare-metal Ubuntu Nodes" +--- + + + + +Kubernetes Deployment On Bare-metal Ubuntu Nodes +------------------------------------------------ + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Starting a Cluster](#starting-a-cluster) + - [Download binaries](#download-binaries) + - [Configure and start the kubernetes cluster](#configure-and-start-the-kubernetes-cluster) + - [Test it out](#test-it-out) + - [Deploy addons](#deploy-addons) + - [Trouble shooting](#trouble-shooting) +- [Upgrading a Cluster](#upgrading-a-cluster) + +## Introduction + +This document describes how to deploy kubernetes on ubuntu nodes, 1 master and 3 nodes involved +in the given examples. You can scale to **any number of nodes** by changing some settings with ease. +The original idea was heavily inspired by @jainvipin 's ubuntu single node +work, which has been merge into this document. + +[Cloud team from Zhejiang University](https://github.com/ZJU-SEL) will maintain this work. + +## Prerequisites + +1. The nodes have installed docker version 1.2+ and bridge-utils to manipulate linux bridge. +2. All machines can communicate with each other. Master node needs to connect the Internet to download the necessary files, while working nodes do not. +3. These guide is tested OK on Ubuntu 14.04 LTS 64bit server, but it can not work with +Ubuntu 15 which use systemd instead of upstart. We are working around fixing this. +4. Dependencies of this guide: etcd-2.0.12, flannel-0.4.0, k8s-1.0.3, may work with higher versions. +5. All the remote servers can be ssh logged in without a password by using key authentication. + + +## Starting a Cluster + +### Download binaries + +First clone the kubernetes github repo + +{% highlight console %} +{% raw %} +$ git clone https://github.com/kubernetes/kubernetes.git +{% endraw %} +{% endhighlight %} + +Then download all the needed binaries into given directory (cluster/ubuntu/binaries) + +{% highlight console %} +{% raw %} +$ cd kubernetes/cluster/ubuntu +$ ./build.sh +{% endraw %} +{% endhighlight %} + +You can customize your etcd version, flannel version, k8s version by changing corresponding variables +`ETCD_VERSION` , `FLANNEL_VERSION` and `KUBE_VERSION` in build.sh, by default etcd version is 2.0.12, +flannel version is 0.4.0 and k8s version is 1.0.3. + +Make sure that the involved binaries are located properly in the binaries/master +or binaries/minion directory before you go ahead to the next step . + +Note that we use flannel here to set up overlay network, yet it's optional. Actually you can build up k8s +cluster natively, or use flannel, Open vSwitch or any other SDN tool you like. + +#### Configure and start the Kubernetes cluster + +An example cluster is listed below: + +| IP Address | Role | +|-------------|----------| +|10.10.103.223| node | +|10.10.103.162| node | +|10.10.103.250| both master and node| + +First configure the cluster information in cluster/ubuntu/config-default.sh, below is a simple sample. + +{% highlight sh %} +{% raw %} +export nodes="vcap@10.10.103.250 vcap@10.10.103.162 vcap@10.10.103.223" + +export role="ai i i" + +export NUM_MINIONS=${NUM_MINIONS:-3} + +export SERVICE_CLUSTER_IP_RANGE=192.168.3.0/24 + +export FLANNEL_NET=172.16.0.0/16 +{% endraw %} +{% endhighlight %} + +The first variable `nodes` defines all your cluster nodes, MASTER node comes first and +separated with blank space like ` ` + +Then the `role` variable defines the role of above machine in the same order, "ai" stands for machine +acts as both master and node, "a" stands for master, "i" stands for node. + +The `NUM_MINIONS` variable defines the total number of nodes. + +The `SERVICE_CLUSTER_IP_RANGE` variable defines the kubernetes service IP range. Please make sure +that you do have a valid private ip range defined here, because some IaaS provider may reserve private ips. +You can use below three private network range according to rfc1918. Besides you'd better not choose the one +that conflicts with your own private network range. + + 10.0.0.0 - 10.255.255.255 (10/8 prefix) + + 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) + + 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) + +The `FLANNEL_NET` variable defines the IP range used for flannel overlay network, +should not conflict with above `SERVICE_CLUSTER_IP_RANGE`. + +**Note:** When deploying, master needs to connect the Internet to download the necessary files. If your machines locate in a private network that need proxy setting to connect the Internet, you can set the config `PROXY_SETTING` in cluster/ubuntu/config-default.sh such as: + + PROXY_SETTING="http_proxy=http://server:port https_proxy=https://server:port" + +After all the above variables being set correctly, we can use following command in cluster/ directory to bring up the whole cluster. + +`$ KUBERNETES_PROVIDER=ubuntu ./kube-up.sh` + +The scripts automatically scp binaries and config files to all the machines and start the k8s service on them. +The only thing you need to do is to type the sudo password when promoted. + +{% highlight console %} +{% raw %} +Deploying minion on machine 10.10.103.223 +... +[sudo] password to copy files and start minion: +{% endraw %} +{% endhighlight %} + +If all things goes right, you will see the below message from console indicating the k8s is up. + +{% highlight console %} +{% raw %} +Cluster validation succeeded +{% endraw %} +{% endhighlight %} + +### Test it out + +You can use `kubectl` command to check if the newly created k8s is working correctly. +The `kubectl` binary is under the `cluster/ubuntu/binaries` directory. +You can make it available via PATH, then you can use the below command smoothly. + +For example, use `$ kubectl get nodes` to see if all of your nodes are ready. + +{% highlight console %} +{% raw %} +$ kubectl get nodes +NAME LABELS STATUS +10.10.103.162 kubernetes.io/hostname=10.10.103.162 Ready +10.10.103.223 kubernetes.io/hostname=10.10.103.223 Ready +10.10.103.250 kubernetes.io/hostname=10.10.103.250 Ready +{% endraw %} +{% endhighlight %} + +Also you can run Kubernetes [guest-example](../../examples/guestbook/) to build a redis backend cluster on the k8s. + + +### Deploy addons + +Assuming you have a starting cluster now, this section will tell you how to deploy addons like DNS +and UI onto the existing cluster. + +The configuration of DNS is configured in cluster/ubuntu/config-default.sh. + +{% highlight sh %} +{% raw %} +ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}" + +DNS_SERVER_IP="192.168.3.10" + +DNS_DOMAIN="cluster.local" + +DNS_REPLICAS=1 +{% endraw %} +{% endhighlight %} + +The `DNS_SERVER_IP` is defining the ip of dns server which must be in the `SERVICE_CLUSTER_IP_RANGE`. +The `DNS_REPLICAS` describes how many dns pod running in the cluster. + +By default, we also take care of kube-ui addon. + +{% highlight sh %} +{% raw %} +ENABLE_CLUSTER_UI="${KUBE_ENABLE_CLUSTER_UI:-true}" +{% endraw %} +{% endhighlight %} + +After all the above variables have been set, just type the following command. + +{% highlight console %} +{% raw %} +$ cd cluster/ubuntu +$ KUBERNETES_PROVIDER=ubuntu ./deployAddons.sh +{% endraw %} +{% endhighlight %} + +After some time, you can use `$ kubectl get pods --namespace=kube-system` to see the DNS and UI pods are running in the cluster. + +### On going + +We are working on these features which we'd like to let everybody know: + +1. Run kubernetes binaries in Docker using [kube-in-docker](https://github.com/ZJU-SEL/kube-in-docker/tree/baremetal-kube), +to eliminate OS-distro differences. +2. Tearing Down scripts: clear and re-create the whole stack by one click. + +### Trouble shooting + +Generally, what this approach does is quite simple: + +1. Download and copy binaries and configuration files to proper directories on every node +2. Configure `etcd` using IPs based on input from user +3. Create and start flannel network + +So if you encounter a problem, **check etcd configuration first** + +Please try: + +1. Check `/var/log/upstart/etcd.log` for suspicious etcd log +2. Check `/etc/default/etcd`, as we do not have much input validation, a right config should be like: + + ```sh + ETCD_OPTS="-name infra1 -initial-advertise-peer-urls -listen-peer-urls -initial-cluster-token etcd-cluster-1 -initial-cluster infra1=,infra2=,infra3= -initial-cluster-state new" + ``` + +3. You may find following commands useful, the former one to bring down the cluster, while +the latter one could start it again. + +{% highlight console %} +{% raw %} + $ KUBERNETES_PROVIDER=ubuntu ./kube-down.sh + $ KUBERNETES_PROVIDER=ubuntu ./kube-up.sh +{% endraw %} +{% endhighlight %} + +4. You can also customize your own settings in `/etc/default/{component_name}`. + + +### Upgrading a Cluster + +If you already have a kubernetes cluster, and want to upgrade to a new version, +you can use following command in cluster/ directory to update the whole cluster or a specified node to a new version. + +{% highlight console %} +{% raw %} +$ KUBERNETES_PROVIDER=ubuntu ./kube-push.sh [-m|-n ] +{% endraw %} +{% endhighlight %} + +It can be done for all components (by default), master(`-m`) or specified node(`-n`). +If the version is not specified, the script will try to use local binaries.You should ensure all the binaries are well prepared in path `cluster/ubuntu/binaries`. + +{% highlight console %} +{% raw %} +$ tree cluster/ubuntu/binaries +binaries/ +├── kubectl +├── master +│   ├── etcd +│   ├── etcdctl +│   ├── flanneld +│   ├── kube-apiserver +│   ├── kube-controller-manager +│   └── kube-scheduler +└── minion + ├── flanneld + ├── kubelet + └── kube-proxy +{% endraw %} +{% endhighlight %} + +Upgrading single node is experimental now. You can use following command to get a help. + +{% highlight console %} +{% raw %} +$ KUBERNETES_PROVIDER=ubuntu ./kube-push.sh -h +{% endraw %} +{% endhighlight %} + +Some examples are as follows: + +* upgrade master to version 1.0.5: `$ KUBERNETES_PROVIDER=ubuntu ./kube-push.sh -m 1.0.5` +* upgrade node 10.10.103.223 to version 1.0.5 : `$ KUBERNETES_PROVIDER=ubuntu ./kube-push.sh -n 10.10.103.223 1.0.5` +* upgrade master and all nodes to version 1.0.5: `$ KUBERNETES_PROVIDER=ubuntu ./kube-push.sh 1.0.5` + +The script will not delete any resources of your cluster, it just replaces the binaries. +You can use `kubectl` command to check if the newly upgraded k8s is working correctly. +For example, use `$ kubectl get nodes` to see if all of your nodes are ready.Or refer to [test-it-out](ubuntu.html#test-it-out) + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/ubuntu.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/vagrant.md b/v1.1/docs/getting-started-guides/vagrant.md new file mode 100644 index 0000000000000..5169a98bbcc61 --- /dev/null +++ b/v1.1/docs/getting-started-guides/vagrant.md @@ -0,0 +1,432 @@ +--- +layout: docwithnav +title: "Getting started with Vagrant" +--- + + + + + +## Getting started with Vagrant + +Running Kubernetes with Vagrant (and VirtualBox) is an easy way to run/test/develop on your local machine (Linux, Mac OS X). + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Setup](#setup) +- [Interacting with your Kubernetes cluster with Vagrant.](#interacting-with-your-kubernetes-cluster-with-vagrant) +- [Authenticating with your master](#authenticating-with-your-master) +- [Running containers](#running-containers) +- [Troubleshooting](#troubleshooting) + - [I keep downloading the same (large) box all the time!](#i-keep-downloading-the-same-large-box-all-the-time) + - [I just created the cluster, but I am getting authorization errors!](#i-just-created-the-cluster-but-i-am-getting-authorization-errors) + - [I just created the cluster, but I do not see my container running!](#i-just-created-the-cluster-but-i-do-not-see-my-container-running) + - [I want to make changes to Kubernetes code!](#i-want-to-make-changes-to-kubernetes-code) + - [I have brought Vagrant up but the nodes cannot validate!](#i-have-brought-vagrant-up-but-the-nodes-cannot-validate) + - [I want to change the number of nodes!](#i-want-to-change-the-number-of-nodes) + - [I want my VMs to have more memory!](#i-want-my-vms-to-have-more-memory) + - [I ran vagrant suspend and nothing works!](#i-ran-vagrant-suspend-and-nothing-works) + - [I want vagrant to sync folders via nfs!](#i-want-vagrant-to-sync-folders-via-nfs) + +### Prerequisites + +1. Install latest version >= 1.6.2 of vagrant from http://www.vagrantup.com/downloads.html +2. Install one of: + 1. Version 4.3.28 of Virtual Box from https://www.virtualbox.org/wiki/Download_Old_Builds_4_3 + 2. [VMWare Fusion](https://www.vmware.com/products/fusion/) version 5 or greater as well as the appropriate [Vagrant VMWare Fusion provider](https://www.vagrantup.com/vmware) + 3. [VMWare Workstation](https://www.vmware.com/products/workstation/) version 9 or greater as well as the [Vagrant VMWare Workstation provider](https://www.vagrantup.com/vmware) + 4. [Parallels Desktop](https://www.parallels.com/products/desktop/) version 9 or greater as well as the [Vagrant Parallels provider](https://parallels.github.io/vagrant-parallels/) + 5. libvirt with KVM and enable support of hardware virtualisation. [Vagrant-libvirt](https://github.com/pradels/vagrant-libvirt). For fedora provided official rpm, and possible to use `yum install vagrant-libvirt` + +### Setup + +Setting up a cluster is as simple as running: + +{% highlight sh %} +{% raw %} +export KUBERNETES_PROVIDER=vagrant +curl -sS https://get.k8s.io | bash +{% endraw %} +{% endhighlight %} + +Alternatively, you can download [Kubernetes release](https://github.com/kubernetes/kubernetes/releases) and extract the archive. To start your local cluster, open a shell and run: + +{% highlight sh %} +{% raw %} +cd kubernetes + +export KUBERNETES_PROVIDER=vagrant +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +The `KUBERNETES_PROVIDER` environment variable tells all of the various cluster management scripts which variant to use. If you forget to set this, the assumption is you are running on Google Compute Engine. + +By default, the Vagrant setup will create a single master VM (called kubernetes-master) and one node (called kubernetes-minion-1). Each VM will take 1 GB, so make sure you have at least 2GB to 4GB of free memory (plus appropriate free disk space). + +Vagrant will provision each machine in the cluster with all the necessary components to run Kubernetes. The initial setup can take a few minutes to complete on each machine. + +If you installed more than one Vagrant provider, Kubernetes will usually pick the appropriate one. However, you can override which one Kubernetes will use by setting the [`VAGRANT_DEFAULT_PROVIDER`](https://docs.vagrantup.com/v2/providers/default.html) environment variable: + +{% highlight sh %} +{% raw %} +export VAGRANT_DEFAULT_PROVIDER=parallels +export KUBERNETES_PROVIDER=vagrant +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +By default, each VM in the cluster is running Fedora. + +To access the master or any node: + +{% highlight sh %} +{% raw %} +vagrant ssh master +vagrant ssh minion-1 +{% endraw %} +{% endhighlight %} + +If you are running more than one node, you can access the others by: + +{% highlight sh %} +{% raw %} +vagrant ssh minion-2 +vagrant ssh minion-3 +{% endraw %} +{% endhighlight %} + +Each node in the cluster installs the docker daemon and the kubelet. + +The master node instantiates the Kubernetes master components as pods on the machine. + +To view the service status and/or logs on the kubernetes-master: + +{% highlight console %} +{% raw %} +[vagrant@kubernetes-master ~] $ vagrant ssh master +[vagrant@kubernetes-master ~] $ sudo su + +[root@kubernetes-master ~] $ systemctl status kubelet +[root@kubernetes-master ~] $ journalctl -ru kubelet + +[root@kubernetes-master ~] $ systemctl status docker +[root@kubernetes-master ~] $ journalctl -ru docker + +[root@kubernetes-master ~] $ tail -f /var/log/kube-apiserver.log +[root@kubernetes-master ~] $ tail -f /var/log/kube-controller-manager.log +[root@kubernetes-master ~] $ tail -f /var/log/kube-scheduler.log +{% endraw %} +{% endhighlight %} + +To view the services on any of the nodes: + +{% highlight console %} +{% raw %} +[vagrant@kubernetes-master ~] $ vagrant ssh minion-1 +[vagrant@kubernetes-master ~] $ sudo su + +[root@kubernetes-master ~] $ systemctl status kubelet +[root@kubernetes-master ~] $ journalctl -ru kubelet + +[root@kubernetes-master ~] $ systemctl status docker +[root@kubernetes-master ~] $ journalctl -ru docker +{% endraw %} +{% endhighlight %} + +### Interacting with your Kubernetes cluster with Vagrant. + +With your Kubernetes cluster up, you can manage the nodes in your cluster with the regular Vagrant commands. + +To push updates to new Kubernetes code after making source changes: + +{% highlight sh %} +{% raw %} +./cluster/kube-push.sh +{% endraw %} +{% endhighlight %} + +To stop and then restart the cluster: + +{% highlight sh %} +{% raw %} +vagrant halt +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +To destroy the cluster: + +{% highlight sh %} +{% raw %} +vagrant destroy +{% endraw %} +{% endhighlight %} + +Once your Vagrant machines are up and provisioned, the first thing to do is to check that you can use the `kubectl.sh` script. + +You may need to build the binaries first, you can do this with `make` + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get nodes + +NAME LABELS +10.245.1.4 +10.245.1.5 +10.245.1.3 +{% endraw %} +{% endhighlight %} + +### Authenticating with your master + +When using the vagrant provider in Kubernetes, the `cluster/kubectl.sh` script will cache your credentials in a `~/.kubernetes_vagrant_auth` file so you will not be prompted for them in the future. + +{% highlight sh %} +{% raw %} +cat ~/.kubernetes_vagrant_auth +{% endraw %} +{% endhighlight %} + +{% highlight json %} +{% raw %} +{ "User": "vagrant", + "Password": "vagrant", + "CAFile": "/home/k8s_user/.kubernetes.vagrant.ca.crt", + "CertFile": "/home/k8s_user/.kubecfg.vagrant.crt", + "KeyFile": "/home/k8s_user/.kubecfg.vagrant.key" +} +{% endraw %} +{% endhighlight %} + +You should now be set to use the `cluster/kubectl.sh` script. For example try to list the nodes that you have started with: + +{% highlight sh %} +{% raw %} +./cluster/kubectl.sh get nodes +{% endraw %} +{% endhighlight %} + +### Running containers + +Your cluster is running, you can list the nodes in your cluster: + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get nodes + +NAME LABELS +10.245.2.4 +10.245.2.3 +10.245.2.2 +{% endraw %} +{% endhighlight %} + +Now start running some containers! + +You can now use any of the `cluster/kube-*.sh` commands to interact with your VM machines. +Before starting a container there will be no pods, services and replication controllers. + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE + +$ ./cluster/kubectl.sh get services +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE + +$ ./cluster/kubectl.sh get replicationcontrollers +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +{% endraw %} +{% endhighlight %} + +Start a container running nginx with a replication controller and three replicas + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh run my-nginx --image=nginx --replicas=3 --port=80 +{% endraw %} +{% endhighlight %} + +When listing the pods, you will see that three containers have been started and are in Waiting state: + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE +my-nginx-5kq0g 0/1 Pending 0 10s +my-nginx-gr3hh 0/1 Pending 0 10s +my-nginx-xql4j 0/1 Pending 0 10s +{% endraw %} +{% endhighlight %} + +You need to wait for the provisioning to complete, you can monitor the nodes by doing: + +{% highlight console %} +{% raw %} +$ vagrant ssh minion-1 -c 'sudo docker images' +kubernetes-minion-1: + REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE + 96864a7d2df3 26 hours ago 204.4 MB + google/cadvisor latest e0575e677c50 13 days ago 12.64 MB + kubernetes/pause latest 6c4579af347b 8 weeks ago 239.8 kB +{% endraw %} +{% endhighlight %} + +Once the docker image for nginx has been downloaded, the container will start and you can list it: + +{% highlight console %} +{% raw %} +$ vagrant ssh minion-1 -c 'sudo docker ps' +kubernetes-minion-1: + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + dbe79bf6e25b nginx:latest "nginx" 21 seconds ago Up 19 seconds k8s--mynginx.8c5b8a3a--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1.etcd--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1--fcfa837f + fa0e29c94501 kubernetes/pause:latest "/pause" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp k8s--net.a90e7ce4--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1.etcd--7813c8bd_-_3ffe_-_11e4_-_9036_-_0800279696e1--baf5b21b + aa2ee3ed844a google/cadvisor:latest "/usr/bin/cadvisor" 38 minutes ago Up 38 minutes k8s--cadvisor.9e90d182--cadvisor_-_agent.file--4626b3a2 + 65a3a926f357 kubernetes/pause:latest "/pause" 39 minutes ago Up 39 minutes 0.0.0.0:4194->8080/tcp k8s--net.c5ba7f0e--cadvisor_-_agent.file--342fd561 +{% endraw %} +{% endhighlight %} + +Going back to listing the pods, services and replicationcontrollers, you now have: + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE +my-nginx-5kq0g 1/1 Running 0 1m +my-nginx-gr3hh 1/1 Running 0 1m +my-nginx-xql4j 1/1 Running 0 1m + +$ ./cluster/kubectl.sh get services +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +my-nginx 10.0.0.1 80/TCP run=my-nginx 1h +{% endraw %} +{% endhighlight %} + +We did not start any services, hence there are none listed. But we see three replicas displayed properly. +Check the [guestbook](../../examples/guestbook/README.html) application to learn how to create a service. +You can already play with scaling the replicas with: + +{% highlight console %} +{% raw %} +$ ./cluster/kubectl.sh scale rc my-nginx --replicas=2 +$ ./cluster/kubectl.sh get pods +NAME READY STATUS RESTARTS AGE +my-nginx-5kq0g 1/1 Running 0 2m +my-nginx-gr3hh 1/1 Running 0 2m +{% endraw %} +{% endhighlight %} + +Congratulations! + +### Troubleshooting + +#### I keep downloading the same (large) box all the time! + +By default the Vagrantfile will download the box from S3. You can change this (and cache the box locally) by providing a name and an alternate URL when calling `kube-up.sh` + +{% highlight sh %} +{% raw %} +export KUBERNETES_BOX_NAME=choose_your_own_name_for_your_kuber_box +export KUBERNETES_BOX_URL=path_of_your_kuber_box +export KUBERNETES_PROVIDER=vagrant +./cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +#### I just created the cluster, but I am getting authorization errors! + +You probably have an incorrect ~/.kubernetes_vagrant_auth file for the cluster you are attempting to contact. + +{% highlight sh %} +{% raw %} +rm ~/.kubernetes_vagrant_auth +{% endraw %} +{% endhighlight %} + +After using kubectl.sh make sure that the correct credentials are set: + +{% highlight sh %} +{% raw %} +cat ~/.kubernetes_vagrant_auth +{% endraw %} +{% endhighlight %} + +{% highlight json %} +{% raw %} +{ + "User": "vagrant", + "Password": "vagrant" +} +{% endraw %} +{% endhighlight %} + +#### I just created the cluster, but I do not see my container running! + +If this is your first time creating the cluster, the kubelet on each node schedules a number of docker pull requests to fetch prerequisite images. This can take some time and as a result may delay your initial pod getting provisioned. + +#### I want to make changes to Kubernetes code! + +To set up a vagrant cluster for hacking, follow the [vagrant developer guide](../devel/developer-guides/vagrant.html). + +#### I have brought Vagrant up but the nodes cannot validate! + +Log on to one of the nodes (`vagrant ssh minion-1`) and inspect the salt minion log (`sudo cat /var/log/salt/minion`). + +#### I want to change the number of nodes! + +You can control the number of nodes that are instantiated via the environment variable `NUM_MINIONS` on your host machine. If you plan to work with replicas, we strongly encourage you to work with enough nodes to satisfy your largest intended replica size. If you do not plan to work with replicas, you can save some system resources by running with a single node. You do this, by setting `NUM_MINIONS` to 1 like so: + +{% highlight sh %} +{% raw %} +export NUM_MINIONS=1 +{% endraw %} +{% endhighlight %} + +#### I want my VMs to have more memory! + +You can control the memory allotted to virtual machines with the `KUBERNETES_MEMORY` environment variable. +Just set it to the number of megabytes you would like the machines to have. For example: + +{% highlight sh %} +{% raw %} +export KUBERNETES_MEMORY=2048 +{% endraw %} +{% endhighlight %} + +If you need more granular control, you can set the amount of memory for the master and nodes independently. For example: + +{% highlight sh %} +{% raw %} +export KUBERNETES_MASTER_MEMORY=1536 +export KUBERNETES_MINION_MEMORY=2048 +{% endraw %} +{% endhighlight %} + +#### I ran vagrant suspend and nothing works! + +`vagrant suspend` seems to mess up the network. This is not supported at this time. + +#### I want vagrant to sync folders via nfs! + +You can ensure that vagrant uses nfs to sync folders with virtual machines by setting the KUBERNETES_VAGRANT_USE_NFS environment variable to 'true'. nfs is faster than virtualbox or vmware's 'shared folders' and does not require guest additions. See the [vagrant docs](http://docs.vagrantup.com/v2/synced-folders/nfs.html) for details on configuring nfs on the host. This setting will have no effect on the libvirt provider, which uses nfs by default. For example: + +{% highlight sh %} +{% raw %} +export KUBERNETES_VAGRANT_USE_NFS=true +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/vagrant.md?pixel)]() + + diff --git a/v1.1/docs/getting-started-guides/vsphere.md b/v1.1/docs/getting-started-guides/vsphere.md new file mode 100644 index 0000000000000..e737a8584de7d --- /dev/null +++ b/v1.1/docs/getting-started-guides/vsphere.md @@ -0,0 +1,121 @@ +--- +layout: docwithnav +title: "Getting started with vSphere" +--- + + + + +Getting started with vSphere +------------------------------- + +The example below creates a Kubernetes cluster with 4 worker node Virtual +Machines and a master Virtual Machine (i.e. 5 VMs in your cluster). This +cluster is set up and controlled from your workstation (or wherever you find +convenient). + +**Table of Contents** + +- [Prerequisites](#prerequisites) +- [Setup](#setup) +- [Starting a cluster](#starting-a-cluster) +- [Extra: debugging deployment failure](#extra-debugging-deployment-failure) + +### Prerequisites + +1. You need administrator credentials to an ESXi machine or vCenter instance. +2. You must have Go (version 1.2 or later) installed: [www.golang.org](http://www.golang.org). +3. You must have your `GOPATH` set up and include `$GOPATH/bin` in your `PATH`. + +{% highlight sh %} +{% raw %} + export GOPATH=$HOME/src/go + mkdir -p $GOPATH + export PATH=$PATH:$GOPATH/bin +{% endraw %} +{% endhighlight %} + +4. Install the govc tool to interact with ESXi/vCenter: + +{% highlight sh %} +{% raw %} + go get github.com/vmware/govmomi/govc +{% endraw %} +{% endhighlight %} + +5. Get or build a [binary release](binary_release.html) + +### Setup + +Download a prebuilt Debian 7.7 VMDK that we'll use as a base image: + +{% highlight sh %} +{% raw %} +curl --remote-name-all https://storage.googleapis.com/govmomi/vmdk/2014-11-11/kube.vmdk.gz{,.md5} +md5sum -c kube.vmdk.gz.md5 +gzip -d kube.vmdk.gz +{% endraw %} +{% endhighlight %} + +Import this VMDK into your vSphere datastore: + +{% highlight sh %} +{% raw %} +export GOVC_URL='user:pass@hostname' +export GOVC_INSECURE=1 # If the host above uses a self-signed cert +export GOVC_DATASTORE='target datastore' +export GOVC_RESOURCE_POOL='resource pool or cluster with access to datastore' + +govc import.vmdk kube.vmdk ./kube/ +{% endraw %} +{% endhighlight %} + +Verify that the VMDK was correctly uploaded and expanded to ~3GiB: + +{% highlight sh %} +{% raw %} +govc datastore.ls ./kube/ +{% endraw %} +{% endhighlight %} + +Take a look at the file `cluster/vsphere/config-common.sh` fill in the required +parameters. The guest login for the image that you imported is `kube:kube`. + +### Starting a cluster + +Now, let's continue with deploying Kubernetes. +This process takes about ~10 minutes. + +{% highlight sh %} +{% raw %} +cd kubernetes # Extracted binary release OR repository root +export KUBERNETES_PROVIDER=vsphere +cluster/kube-up.sh +{% endraw %} +{% endhighlight %} + +Refer to the top level README and the getting started guide for Google Compute +Engine. Once you have successfully reached this point, your vSphere Kubernetes +deployment works just as any other one! + +**Enjoy!** + +### Extra: debugging deployment failure + +The output of `kube-up.sh` displays the IP addresses of the VMs it deploys. You +can log into any VM as the `kube` user to poke around and figure out what is +going on (find yourself authorized with your SSH key, or use the password +`kube` otherwise). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/vsphere.md?pixel)]() + + diff --git a/v1.1/docs/index.md b/v1.1/docs/index.md new file mode 100644 index 0000000000000..df574178325d5 --- /dev/null +++ b/v1.1/docs/index.md @@ -0,0 +1,49 @@ +--- +layout: docwithnav +title: "Kubernetes Documentation: releases.k8s.io/release-1.1" +--- + + + + + +# Kubernetes Documentation: releases.k8s.io/release-1.1 + +* The [User's guide](user-guide/README.html) is for anyone who wants to run programs and + services on an existing Kubernetes cluster. + +* The [Cluster Admin's guide](admin/README.html) is for anyone setting up + a Kubernetes cluster or administering it. + +* The [Developer guide](devel/README.html) is for anyone wanting to write + programs that access the Kubernetes API, write plugins or extensions, or + modify the core code of Kubernetes. + +* The [Kubectl Command Line Interface](user-guide/kubectl/kubectl.html) is a detailed reference on + the `kubectl` CLI. + +* The [API object documentation](http://kubernetes.io/third_party/swagger-ui/) + is a detailed description of all fields found in core API objects. + +* An overview of the [Design of Kubernetes](design/) + +* There are example files and walkthroughs in the [examples](../examples/) + folder. + +* If something went wrong, see the [troubleshooting](troubleshooting.html) document for how to debug. +You should also check the [known issues](user-guide/known-issues.html) for the release you're using. + +* To report a security issue, see [Reporting a Security Issue](reporting-security-issues.html). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/README.md?pixel)]() + + diff --git a/v1.1/docs/reporting-security-issues.md b/v1.1/docs/reporting-security-issues.md new file mode 100644 index 0000000000000..857235dbf19e1 --- /dev/null +++ b/v1.1/docs/reporting-security-issues.md @@ -0,0 +1,41 @@ +--- +layout: docwithnav +title: "Security" +--- + + + + + +# Security + +If you believe you have discovered a vulnerability or a have a security incident to report, please follow the steps below. This applies to Kubernetes releases v1.0 or later. + +To watch for security and major API announcements, please join our [kubernetes-announce](https://groups.google.com/forum/#!forum/kubernetes-announce) group. + +## Reporting a security issue + +To report an issue, please: +- Submit a bug report [here](http://goo.gl/vulnz). + - Select “I want to report a technical security bug in a Google product (SQLi, XSS, etc.).” + - Select “Other” as the Application Type. +- Under reproduction steps, please additionally include + - the words "Kubernetes Security issue" + - Description of the issue + - Kubernetes release (e.g. output of `kubectl version` command, which includes server version.) + - Environment setup (e.g. which "Getting Started Guide" you followed, if any; what node operating system used; what service or software creates your virtual machines, if any) + +An online submission will have the fastest response; however, if you prefer email, please send mail to security@google.com. If you feel the need, please use the [PGP public key](https://services.google.com/corporate/publickey.txt) to encrypt communications. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/reporting-security-issues.md?pixel)]() + + diff --git a/v1.1/docs/roadmap.md b/v1.1/docs/roadmap.md new file mode 100644 index 0000000000000..27117d3fc2946 --- /dev/null +++ b/v1.1/docs/roadmap.md @@ -0,0 +1,66 @@ +--- +layout: docwithnav +title: "Kubernetes Roadmap" +--- + + + + + +# Kubernetes Roadmap + +## Kubernetes 1.1 + +### Timeline + +We are targetting late October for our 1.1 release of Kubernetes. We plan on cutting a first release candidate +in early October. We will enter feature freeze for the 1.1 release on September 21st. Note this does not mean +that the master branch is fully frozen, but all 1.1 features *must* be in by September 21st and large-scale +refactors of the codebase will be blocked until the 1.1 release is finalized to ensure easy cherry-picks. + +### Scope + +The 1.1 release of Kubernetes will be a purely additive releases, the `v1` API will be maintained, with a set +of newly added features. + +#### Blocking Features + +The following features are considered blocking for the 1.1 release: + * Docker 1.8.x + * Graceful pod termination + * IPtables based kube-proxy (tbd if this is the default for all platforms) + * Improvements to kubectl usability and features + * Support for 250 node clusters + * Horizontal Pod autoscaling + * Support for experimental APIs and API groups. + * Job objects + +#### Nice to have features + +The following features will be part of 1.1 if complete, but will not block the release: + * Deployment API + * ScheduledJob API + * Daemon Controller + * ConfigData API + * HTTP(S) load balancer support + * Rolling update improvements + * Third party CRUD resources + +## Post 1.1 + +We're in the process of prioritizing changes to be made after 1.1. + +Please watch the [Github milestones] (https://github.com/kubernetes/kubernetes/milestones) for our future plans. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/roadmap.md?pixel)]() + + diff --git a/v1.1/docs/troubleshooting.md b/v1.1/docs/troubleshooting.md new file mode 100644 index 0000000000000..1c28e029baacd --- /dev/null +++ b/v1.1/docs/troubleshooting.md @@ -0,0 +1,70 @@ +--- +layout: docwithnav +title: "Troubleshooting" +--- + + + + + +# Troubleshooting + +Sometimes things go wrong. This guide is aimed at making them right. It has two sections: + * [Troubleshooting your application](user-guide/application-troubleshooting.html) - Useful for users who are deploying code into Kubernetes and wondering why it is not working. + * [Troubleshooting your cluster](admin/cluster-troubleshooting.html) - Useful for cluster administrators and people whose Kubernetes cluster is unhappy. + +You should also check the [known issues](user-guide/known-issues.html) for the release you're using. + +# Getting help + +If your problem isn't answered by any of the guides above, there are variety of ways for you to get help from the Kubernetes team. + +## Questions + +If you aren't familiar with it, many of your questions may be answered by the [user guide](user-guide/README.html). + +We also have a number of FAQ pages: + * [User FAQ](https://github.com/kubernetes/kubernetes/wiki/User-FAQ) + * [Debugging FAQ](https://github.com/kubernetes/kubernetes/wiki/Debugging-FAQ) + * [Services FAQ](https://github.com/kubernetes/kubernetes/wiki/Services-FAQ) + +You may also find the Stack Overflow topics relevant: + * [Kubernetes](http://stackoverflow.com/questions/tagged/kubernetes) + * [Google Container Engine - GKE](http://stackoverflow.com/questions/tagged/google-container-engine) + +# Help! My question isn't covered! I need help now! + +## Stack Overflow + +Someone else from the community may have already asked a similar question or may be able to help with your problem. The Kubernetes team will also monitor [posts tagged kubernetes](http://stackoverflow.com/questions/tagged/kubernetes). If there aren't any existing questions that help, please [ask a new one](http://stackoverflow.com/questions/ask?tags=kubernetes)! + +## Slack + +The Kubernetes team hangs out on Slack in the `#kubernetes-users` channel. You can participate in the Kubernetes team [here](https://kubernetes.slack.com). Slack requires registration, but the Kubernetes team is open invitation to anyone to register [here](http://slack.kubernetes.io). Feel free to come and ask any and all questions. + +## Mailing List + +The Google Container Engine mailing list is [google-containers@googlegroups.com](https://groups.google.com/forum/#!forum/google-containers) + +## Bugs and Feature requests + +If you have what looks like a bug, or you would like to make a feature request, please use the [Github issue tracking system](https://github.com/kubernetes/kubernetes/issues). + +Before you file an issue, please search existing issues to see if your issue is already covered. + +If filing a bug, please include detailed information about how to reproduce the problem, such as: +* Kubernetes version: `kubectl version` +* Cloud provider, OS distro, network configuration, and Docker version +* Steps to reproduce the problem + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/troubleshooting.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/README.md b/v1.1/docs/user-guide/README.md new file mode 100644 index 0000000000000..bdc2d3a2a9763 --- /dev/null +++ b/v1.1/docs/user-guide/README.md @@ -0,0 +1,119 @@ +--- +layout: docwithnav +title: "Kubernetes User Guide: Managing Applications" +--- + + + + + +# Kubernetes User Guide: Managing Applications + +**Table of Contents** + + +- [Kubernetes User Guide: Managing Applications](#kubernetes-user-guide-managing-applications) + - [Quick walkthrough](#quick-walkthrough) + - [Thorough walkthrough](#thorough-walkthrough) + - [Concept guide](#concept-guide) + - [Further reading](#further-reading) + + + +The user guide is intended for anyone who wants to run programs and services on an existing Kubernetes cluster. Setup and administration of a Kubernetes cluster is described in the [Cluster Admin Guide](../../docs/admin/README.html). The [Developer Guide](../../docs/devel/README.html) is for anyone wanting to either write code which directly accesses the Kubernetes API, or to contribute directly to the Kubernetes project. + +Please ensure you have completed the [prerequisites for running examples from the user guide](prereqs.html). + +## Quick walkthrough + +1. [Kubernetes 101](walkthrough/README.html) +1. [Kubernetes 201](walkthrough/k8s201.html) + +## Thorough walkthrough + +If you don't have much familiarity with Kubernetes, we recommend you read the following sections in order: + +1. [Quick start: launch and expose an application](quick-start.html) +1. [Configuring and launching containers: configuring common container parameters](configuring-containers.html) +1. [Deploying continuously running applications](deploying-applications.html) +1. [Connecting applications: exposing applications to clients and users](connecting-applications.html) +1. [Working with containers in production](production-pods.html) +1. [Managing deployments](managing-deployments.html) +1. [Application introspection and debugging](introspection-and-debugging.html) + 1. [Using the Kubernetes web user interface](ui.html) + 1. [Logging](logging.html) + 1. [Monitoring](monitoring.html) + 1. [Getting into containers via `exec`](getting-into-containers.html) + 1. [Connecting to containers via proxies](connecting-to-applications-proxy.html) + 1. [Connecting to containers via port forwarding](connecting-to-applications-port-forward.html) + +## Concept guide + +[**Overview**](overview.html) +: A brief overview of Kubernetes concepts. + +[**Cluster**](../admin/README.html) +: A cluster is a set of physical or virtual machines and other infrastructure resources used by Kubernetes to run your applications. + +[**Node**](../admin/node.html) +: A node is a physical or virtual machine running Kubernetes, onto which pods can be scheduled. + +[**Pod**](pods.html) +: A pod is a co-located group of containers and volumes. + +[**Label**](labels.html) +: A label is a key/value pair that is attached to a resource, such as a pod, to convey a user-defined identifying attribute. Labels can be used to organize and to select subsets of resources. + +[**Selector**](labels.html#label-selectors) +: A selector is an expression that matches labels in order to identify related resources, such as which pods are targeted by a load-balanced service. + +[**Replication Controller**](replication-controller.html) +: A replication controller ensures that a specified number of pod replicas are running at any one time. It both allows for easy scaling of replicated systems and handles re-creation of a pod when the machine it is on reboots or otherwise fails. + +[**Service**](services.html) +: A service defines a set of pods and a means by which to access them, such as single stable IP address and corresponding DNS name. + +[**Volume**](volumes.html) +: A volume is a directory, possibly with some data in it, which is accessible to a Container as part of its filesystem. Kubernetes volumes build upon [Docker Volumes](https://docs.docker.com/userguide/dockervolumes/), adding provisioning of the volume directory and/or device. + +[**Secret**](secrets.html) +: A secret stores sensitive data, such as authentication tokens, which can be made available to containers upon request. + +[**Name**](identifiers.html) +: A user- or client-provided name for a resource. + +[**Namespace**](namespaces.html) +: A namespace is like a prefix to the name of a resource. Namespaces help different projects, teams, or customers to share a cluster, such as by preventing name collisions between unrelated teams. + +[**Annotation**](annotations.html) +: A key/value pair that can hold larger (compared to a label), and possibly not human-readable, data, intended to store non-identifying auxiliary data, especially data manipulated by tools and system extensions. Efficient filtering by annotation values is not supported. + +## Further reading + +* API resources + * [Working with resources](working-with-resources.html) + +* Pods and containers + * [Pod lifecycle and restart policies](pod-states.html) + * [Lifecycle hooks](container-environment.html) + * [Compute resources, such as cpu and memory](compute-resources.html) + * [Specifying commands and requesting capabilities](containers.html) + * [Downward API: accessing system configuration from a pod](downward-api.html) + * [Images and registries](images.html) + * [Migrating from docker-cli to kubectl](docker-cli-to-kubectl.html) + * [Tips and tricks when working with config](config-best-practices.html) + * [Assign pods to selected nodes](node-selection/) + * [Perform a rolling update on a running group of pods](update-demo/) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/accessing-the-cluster.md b/v1.1/docs/user-guide/accessing-the-cluster.md new file mode 100644 index 0000000000000..ecc6eae9f2ad1 --- /dev/null +++ b/v1.1/docs/user-guide/accessing-the-cluster.md @@ -0,0 +1,319 @@ +--- +layout: docwithnav +title: "User Guide to Accessing the Cluster" +--- + + + + + +# User Guide to Accessing the Cluster + +**Table of Contents** + + +- [User Guide to Accessing the Cluster](#user-guide-to-accessing-the-cluster) + - [Accessing the cluster API](#accessing-the-cluster-api) + - [Accessing for the first time with kubectl](#accessing-for-the-first-time-with-kubectl) + - [Directly accessing the REST API](#directly-accessing-the-rest-api) + - [Using kubectl proxy](#using-kubectl-proxy) + - [Without kubectl proxy](#without-kubectl-proxy) + - [Programmatic access to the API](#programmatic-access-to-the-api) + - [Accessing the API from a Pod](#accessing-the-api-from-a-pod) + - [Accessing services running on the cluster](#accessing-services-running-on-the-cluster) + - [Ways to connect](#ways-to-connect) + - [Discovering builtin services](#discovering-builtin-services) + - [Manually constructing apiserver proxy URLs](#manually-constructing-apiserver-proxy-urls) + - [Examples](#examples) + - [Using web browsers to access services running on the cluster](#using-web-browsers-to-access-services-running-on-the-cluster) + - [Requesting redirects](#requesting-redirects) + - [So Many Proxies](#so-many-proxies) + + + +## Accessing the cluster API + +### Accessing for the first time with kubectl + +When accessing the Kubernetes API for the first time, we suggest using the +Kubernetes CLI, `kubectl`. + +To access a cluster, you need to know the location of the cluster and have credentials +to access it. Typically, this is automatically set-up when you work through +though a [Getting started guide](../getting-started-guides/README.html), +or someone else setup the cluster and provided you with credentials and a location. + +Check the location and credentials that kubectl knows about with this command: + +{% highlight console %} +{% raw %} +$ kubectl config view +{% endraw %} +{% endhighlight %} + +Many of the [examples](../../examples/) provide an introduction to using +kubectl and complete documentation is found in the [kubectl manual](kubectl/kubectl.html). + +### Directly accessing the REST API + +Kubectl handles locating and authenticating to the apiserver. +If you want to directly access the REST API with an http client like +curl or wget, or a browser, there are several ways to locate and authenticate: + - Run kubectl in proxy mode. + - Recommended approach. + - Uses stored apiserver location. + - Verifies identity of apiserver using self-signed cert. No MITM possible. + - Authenticates to apiserver. + - In future, may do intelligent client-side load-balancing and failover. + - Provide the location and credentials directly to the http client. + - Alternate approach. + - Works with some types of client code that are confused by using a proxy. + - Need to import a root cert into your browser to protect against MITM. + +#### Using kubectl proxy + +The following command runs kubectl in a mode where it acts as a reverse proxy. It handles +locating the apiserver and authenticating. +Run it like this: + +{% highlight console %} +{% raw %} +$ kubectl proxy --port=8080 & +{% endraw %} +{% endhighlight %} + +See [kubectl proxy](kubectl/kubectl_proxy.html) for more details. + +Then you can explore the API with curl, wget, or a browser, like so: + +{% highlight console %} +{% raw %} +$ curl http://localhost:8080/api/ +{ + "versions": [ + "v1" + ] +} +{% endraw %} +{% endhighlight %} + +#### Without kubectl proxy + +It is also possible to avoid using kubectl proxy by passing an authentication token +directly to the apiserver, like this: + +{% highlight console %} +{% raw %} +$ APISERVER=$(kubectl config view | grep server | cut -f 2- -d ":" | tr -d " ") +$ TOKEN=$(kubectl config view | grep token | cut -f 2 -d ":" | tr -d " ") +$ curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure +{ + "versions": [ + "v1" + ] +} +{% endraw %} +{% endhighlight %} + +The above example uses the `--insecure` flag. This leaves it subject to MITM +attacks. When kubectl accesses the cluster it uses a stored root certificate +and client certificates to access the server. (These are installed in the +`~/.kube` directory). Since cluster certificates are typically self-signed, it +make take special configuration to get your http client to use root +certificate. + +On some clusters, the apiserver does not require authentication; it may serve +on localhost, or be protected by a firewall. There is not a standard +for this. [Configuring Access to the API](../admin/accessing-the-api.html) +describes how a cluster admin can configure this. Such approaches may conflict +with future high-availability support. + +### Programmatic access to the API + +There are [client libraries](../devel/client-libraries.html) for accessing the API +from several languages. The Kubernetes project-supported +[Go](http://releases.k8s.io/release-1.1/pkg/client/) +client library can use the same [kubeconfig file](kubeconfig-file.html) +as the kubectl CLI does to locate and authenticate to the apiserver. + +See documentation for other libraries for how they authenticate. + +### Accessing the API from a Pod + +When accessing the API from a pod, locating and authenticating +to the api server are somewhat different. + +The recommended way to locate the apiserver within the pod is with +the `kubernetes` DNS name, which resolves to a Service IP which in turn +will be routed to an apiserver. + +The recommended way to authenticate to the apiserver is with a +[service account](service-accounts.html) credential. By kube-system, a pod +is associated with a service account, and a credential (token) for that +service account is placed into the filesystem tree of each container in that pod, +at `/var/run/secrets/kubernetes.io/serviceaccount/token`. + +From within a pod the recommended ways to connect to API are: + - run a kubectl proxy as one of the containers in the pod, or as a background + process within a container. This proxies the + Kubernetes API to the localhost interface of the pod, so that other processes + in any container of the pod can access it. See this [example of using kubectl proxy + in a pod](../../examples/kubectl-container/). + - use the Go client library, and create a client using the `client.NewInCluster()` factory. + This handles locating and authenticating to the apiserver. +In each case, the credentials of the pod are used to communicate securely with the apiserver. + + +## Accessing services running on the cluster + +The previous section was about connecting the Kubernetes API server. This section is about +connecting to other services running on Kubernetes cluster. In Kubernetes, the +[nodes](../admin/node.html), [pods](pods.html) and [services](services.html) all have +their own IPs. In many cases, the node IPs, pod IPs, and some service IPs on a cluster will not be +routable, so they will not be reachable from a machine outside the cluster, +such as your desktop machine. + +### Ways to connect + +You have several options for connecting to nodes, pods and services from outside the cluster: + - Access services through public IPs. + - Use a service with type `NodePort` or `LoadBalancer` to make the service reachable outside + the cluster. See the [services](services.html) and + [kubectl expose](kubectl/kubectl_expose.html) documentation. + - Depending on your cluster environment, this may just expose the service to your corporate network, + or it may expose it to the internet. Think about whether the service being exposed is secure. + Does it do its own authentication? + - Place pods behind services. To access one specific pod from a set of replicas, such as for debugging, + place a unique label on the pod it and create a new service which selects this label. + - In most cases, it should not be necessary for application developer to directly access + nodes via their nodeIPs. + - Access services, nodes, or pods using the Proxy Verb. + - Does apiserver authentication and authorization prior to accessing the remote service. + Use this if the services are not secure enough to expose to the internet, or to gain + access to ports on the node IP, or for debugging. + - Proxies may cause problems for some web applications. + - Only works for HTTP/HTTPS. + - Described [here](#discovering-builtin-services). + - Access from a node or pod in the cluster. + - Run a pod, and then connect to a shell in it using [kubectl exec](kubectl/kubectl_exec.html). + Connect to other nodes, pods, and services from that shell. + - Some clusters may allow you to ssh to a node in the cluster. From there you may be able to + access cluster services. This is a non-standard method, and will work on some clusters but + not others. Browsers and other tools may or may not be installed. Cluster DNS may not work. + +### Discovering builtin services + +Typically, there are several services which are started on a cluster by kube-system. Get a list of these +with the `kubectl cluster-info` command: + +{% highlight console %} +{% raw %} +$ kubectl cluster-info + + Kubernetes master is running at https://104.197.5.247 + elasticsearch-logging is running at https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging + kibana-logging is running at https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/kibana-logging + kube-dns is running at https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/kube-dns + grafana is running at https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana + heapster is running at https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/monitoring-heapster +{% endraw %} +{% endhighlight %} + +This shows the proxy-verb URL for accessing each service. +For example, this cluster has cluster-level logging enabled (using Elasticsearch), which can be reached +at `https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/` if suitable credentials are passed, or through a kubectl proxy at, for example: +`http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/`. +(See [above](#accessing-the-cluster-api) for how to pass credentials or use kubectl proxy.) + +#### Manually constructing apiserver proxy URLs + +As mentioned above, you use the `kubectl cluster-info` command to retrieve the service's proxy URL. To create proxy URLs that include service endpoints, suffixes, and parameters, you simply append to the service's proxy URL: +`http://`*`kubernetes_master_address`*`/`*`service_path`*`/`*`service_name`*`/`*`service_endpoint-suffix-parameter`* + + +##### Examples + + * To access the Elasticsearch service endpoint `_search?q=user:kimchy`, you would use: `http://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy` + * To access the Elasticsearch cluster health information `_cluster/health?pretty=true`, you would use: `https://104.197.5.247/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/_cluster/health?pretty=true` + +{% highlight json %} +{% raw %} + { + "cluster_name" : "kubernetes_logging", + "status" : "yellow", + "timed_out" : false, + "number_of_nodes" : 1, + "number_of_data_nodes" : 1, + "active_primary_shards" : 5, + "active_shards" : 5, + "relocating_shards" : 0, + "initializing_shards" : 0, + "unassigned_shards" : 5 + } +{% endraw %} +{% endhighlight %} + +#### Using web browsers to access services running on the cluster + +You may be able to put an apiserver proxy url into the address bar of a browser. However: + - Web browsers cannot usually pass tokens, so you may need to use basic (password) auth. Apiserver can be configured to accept basic auth, + but your cluster may not be configured to accept basic auth. + - Some web apps may not work, particularly those with client side javascript that construct urls in a + way that is unaware of the proxy path prefix. + +## Requesting redirects + +The redirect capabilities have been deprecated and removed. Please use a proxy (see below) instead. + +## So Many Proxies + +There are several different proxies you may encounter when using Kubernetes: + 1. The [kubectl proxy](#directly-accessing-the-rest-api): + - runs on a user's desktop or in a pod + - proxies from a localhost address to the Kubernetes apiserver + - client to proxy uses HTTP + - proxy to apiserver uses HTTPS + - locates apiserver + - adds authentication headers + 1. The [apiserver proxy](#discovering-builtin-services): + - is a bastion built into the apiserver + - connects a user outside of the cluster to cluster IPs which otherwise might not be reachable + - runs in the apiserver processes + - client to proxy uses HTTPS (or http if apiserver so configured) + - proxy to target may use HTTP or HTTPS as chosen by proxy using available information + - can be used to reach a Node, Pod, or Service + - does load balancing when used to reach a Service + 1. The [kube proxy](services.html#ips-and-vips): + - runs on each node + - proxies UDP and TCP + - does not understand HTTP + - provides load balancing + - is just used to reach services + 1. A Proxy/Load-balancer in front of apiserver(s): + - existence and implementation varies from cluster to cluster (e.g. nginx) + - sits between all clients and one or more apiservers + - acts as load balancer if there are several apiservers. + 1. Cloud Load Balancers on external services: + - are provided by some cloud providers (e.g. AWS ELB, Google Cloud Load Balancer) + - are created automatically when the Kubernetes service has type `LoadBalancer` + - use UDP/TCP only + - implementation varies by cloud provider. + + + +Kubernetes users will typically not need to worry about anything other than the first two types. The cluster admin +will typically ensure that the latter types are setup correctly. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/accessing-the-cluster.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/annotations.md b/v1.1/docs/user-guide/annotations.md new file mode 100644 index 0000000000000..ff4da839be8e5 --- /dev/null +++ b/v1.1/docs/user-guide/annotations.md @@ -0,0 +1,50 @@ +--- +layout: docwithnav +title: "Annotations" +--- + + + + + +# Annotations + +We have [labels](labels.html) for identifying metadata. + +It is also useful to be able to attach arbitrary non-identifying metadata, for retrieval by API clients such as tools, libraries, etc. This information may be large, may be structured or unstructured, may include characters not permitted by labels, etc. Such information would not be used for object selection and therefore doesn't belong in labels. + +Like labels, annotations are key-value maps. + +{% highlight json %} +{% raw %} +"annotations": { + "key1" : "value1", + "key2" : "value2" +} +{% endraw %} +{% endhighlight %} + +Possible information that could be recorded in annotations: + +* fields managed by a declarative configuration layer, to distinguish them from client- and/or server-set default values and other auto-generated fields, fields set by auto-sizing/auto-scaling systems, etc., in order to facilitate merging +* build/release/image information (timestamps, release ids, git branch, PR numbers, image hashes, registry address, etc.) +* pointers to logging/monitoring/analytics/audit repos +* client library/tool information (e.g. for debugging purposes -- name, version, build info) +* other user and/or tool/system provenance info, such as URLs of related objects from other ecosystem components +* lightweight rollout tool metadata (config and/or checkpoints) +* phone/pager number(s) of person(s) responsible, or directory entry where that info could be found, such as a team website + +Yes, this information could be stored in an external database or directory, but that would make it much harder to produce shared client libraries and tools for deployment, management, introspection, etc. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/annotations.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/application-troubleshooting.md b/v1.1/docs/user-guide/application-troubleshooting.md new file mode 100644 index 0000000000000..e79c90a0d52b7 --- /dev/null +++ b/v1.1/docs/user-guide/application-troubleshooting.md @@ -0,0 +1,244 @@ +--- +layout: docwithnav +title: "Application Troubleshooting" +--- + + + + + +# Application Troubleshooting + +This guide is to help users debug applications that are deployed into Kubernetes and not behaving correctly. +This is *not* a guide for people who want to debug their cluster. For that you should check out +[this guide](../admin/cluster-troubleshooting.html) + +**Table of Contents** + + +- [Application Troubleshooting](#application-troubleshooting) + - [FAQ](#faq) + - [Diagnosing the problem](#diagnosing-the-problem) + - [Debugging Pods](#debugging-pods) + - [My pod stays pending](#my-pod-stays-pending) + - [My pod stays waiting](#my-pod-stays-waiting) + - [My pod is crashing or otherwise unhealthy](#my-pod-is-crashing-or-otherwise-unhealthy) + - [My pod is running but not doing what I told it to do](#my-pod-is-running-but-not-doing-what-i-told-it-to-do) + - [Debugging Replication Controllers](#debugging-replication-controllers) + - [Debugging Services](#debugging-services) + - [My service is missing endpoints](#my-service-is-missing-endpoints) + - [Network traffic is not forwarded](#network-traffic-is-not-forwarded) + - [More information](#more-information) + + + +## FAQ + +Users are highly encouraged to check out our [FAQ](https://github.com/kubernetes/kubernetes/wiki/User-FAQ) + +## Diagnosing the problem + +The first step in troubleshooting is triage. What is the problem? Is it your Pods, your Replication Controller or +your Service? + * [Debugging Pods](#debugging-pods) + * [Debugging Replication Controllers](#debugging-replication-controllers) + * [Debugging Services](#debugging-services) + +### Debugging Pods + +The first step in debugging a Pod is taking a look at it. Check the current state of the Pod and recent events with the following command: + +{% highlight console %} +{% raw %} +$ kubectl describe pods ${POD_NAME} +{% endraw %} +{% endhighlight %} + +Look at the state of the containers in the pod. Are they all `Running`? Have there been recent restarts? + +Continue debugging depending on the state of the pods. + +#### My pod stays pending + +If a Pod is stuck in `Pending` it means that it can not be scheduled onto a node. Generally this is because +there are insufficient resources of one type or another that prevent scheduling. Look at the output of the +`kubectl describe ...` command above. There should be messages from the scheduler about why it can not schedule +your pod. Reasons include: + +* **You don't have enough resources**: You may have exhausted the supply of CPU or Memory in your cluster, in this case +you need to delete Pods, adjust resource requests, or add new nodes to your cluster. See [Compute Resources document](compute-resources.html#my-pods-are-pending-with-event-message-failedscheduling) for more information. + +* **You are using `hostPort`**: When you bind a Pod to a `hostPort` there are a limited number of places that pod can be +scheduled. In most cases, `hostPort` is unnecessary, try using a Service object to expose your Pod. If you do require +`hostPort` then you can only schedule as many Pods as there are nodes in your Kubernetes cluster. + + +#### My pod stays waiting + +If a Pod is stuck in the `Waiting` state, then it has been scheduled to a worker node, but it can't run on that machine. +Again, the information from `kubectl describe ...` should be informative. The most common cause of `Waiting` pods is a failure to pull the image. There are three things to check: +* Make sure that you have the name of the image correct +* Have you pushed the image to the repository? +* Run a manual `docker pull ` on your machine to see if the image can be pulled. + +#### My pod is crashing or otherwise unhealthy + +First, take a look at the logs of +the current container: + +{% highlight console %} +{% raw %} +$ kubectl logs ${POD_NAME} ${CONTAINER_NAME} +{% endraw %} +{% endhighlight %} + +If your container has previously crashed, you can access the previous container's crash log with: + +{% highlight console %} +{% raw %} +$ kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME} +{% endraw %} +{% endhighlight %} + +Alternately, you can run commands inside that container with `exec`: + +{% highlight console %} +{% raw %} +$ kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN} +{% endraw %} +{% endhighlight %} + +Note that `-c ${CONTAINER_NAME}` is optional and can be omitted for Pods that only contain a single container. + +As an example, to look at the logs from a running Cassandra pod, you might run + +{% highlight console %} +{% raw %} +$ kubectl exec cassandra -- cat /var/log/cassandra/system.log +{% endraw %} +{% endhighlight %} + + +If none of these approaches work, you can find the host machine that the pod is running on and SSH into that host, +but this should generally not be necessary given tools in the Kubernetes API. Therefore, if you find yourself needing to ssh into a machine, please file a +feature request on GitHub describing your use case and why these tools are insufficient. + +#### My pod is running but not doing what I told it to do + +If your pod is not behaving as you expected, it may be that there was an error in your +pod description (e.g. `mypod.yaml` file on your local machine), and that the error +was silently ignored when you created the pod. Often a section of the pod description +is nested incorrectly, or a key name is typed incorrectly, and so the key is ignored. +For example, if you misspelled `command` as `commnd` then the pod will be created but +will not use the command line you intended it to use. + +The first thing to do is to delete your pod and try creating it again with the `--validate` option. +For example, run `kubectl create --validate -f mypod.yaml`. +If you misspelled `command` as `commnd` then will give an error like this: + +``` +{% raw %} +I0805 10:43:25.129850 46757 schema.go:126] unknown field: commnd +I0805 10:43:25.129973 46757 schema.go:129] this may be a false alarm, see https://github.com/kubernetes/kubernetes/issues/6842 +pods/mypod +{% endraw %} +``` + + + +The next thing to check is whether the pod on the apiserver +matches the pod you meant to create (e.g. in a yaml file on your local machine). +For example, run `kubectl get pods/mypod -o yaml > mypod-on-apiserver.yaml` and then +manually compare the original pod description, `mypod.yaml` with the one you got +back from apiserver, `mypod-on-apiserver.yaml`. There will typically be some +lines on the "apiserver" version that are not on the original version. This is +expected. However, if there are lines on the original that are not on the apiserver +version, then this may indicate a problem with your pod spec. + +### Debugging Replication Controllers + +Replication controllers are fairly straightforward. They can either create Pods or they can't. If they can't +create pods, then please refer to the [instructions above](#debugging-pods) to debug your pods. + +You can also use `kubectl describe rc ${CONTROLLER_NAME}` to introspect events related to the replication +controller. + +### Debugging Services + +Services provide load balancing across a set of pods. There are several common problems that can make Services +not work properly. The following instructions should help debug Service problems. + +First, verify that there are endpoints for the service. For every Service object, the apiserver makes an `endpoints` resource available. + +You can view this resource with: + +{% highlight console %} +{% raw %} +$ kubectl get endpoints ${SERVICE_NAME} +{% endraw %} +{% endhighlight %} + +Make sure that the endpoints match up with the number of containers that you expect to be a member of your service. +For example, if your Service is for an nginx container with 3 replicas, you would expect to see three different +IP addresses in the Service's endpoints. + +#### My service is missing endpoints + +If you are missing endpoints, try listing pods using the labels that Service uses. Imagine that you have +a Service where the labels are: + +{% highlight yaml %} +{% raw %} +... +spec: + - selector: + name: nginx + type: frontend +{% endraw %} +{% endhighlight %} + +You can use: + +{% highlight console %} +{% raw %} +$ kubectl get pods --selector=name=nginx,type=frontend +{% endraw %} +{% endhighlight %} + +to list pods that match this selector. Verify that the list matches the Pods that you expect to provide your Service. + +If the list of pods matches expectations, but your endpoints are still empty, it's possible that you don't +have the right ports exposed. If your service has a `containerPort` specified, but the Pods that are +selected don't have that port listed, then they won't be added to the endpoints list. + +Verify that the pod's `containerPort` matches up with the Service's `containerPort` + +#### Network traffic is not forwarded + +If you can connect to the service, but the connection is immediately dropped, and there are endpoints +in the endpoints list, it's likely that the proxy can't contact your pods. + +There are three things to +check: + * Are your pods working correctly? Look for restart count, and [debug pods](#debugging-pods) + * Can you connect to your pods directly? Get the IP address for the Pod, and try to connect directly to that IP + * Is your application serving on the port that you configured? Kubernetes doesn't do port remapping, so if your application serves on 8080, the `containerPort` field needs to be 8080. + +#### More information + +If none of the above solves your problem, follow the instructions in [Debugging Service document](debugging-services.html) to make sure that your `Service` is running, has `Endpoints`, and your `Pods` are actually serving; you have DNS working, iptables rules installed, and kube-proxy does not seem to be misbehaving. + +You may also visit [troubleshooting document](../troubleshooting.html) for more information. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/application-troubleshooting.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/cadvisor.png b/v1.1/docs/user-guide/cadvisor.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5d863db1b79fdfdbf5464626e902cc15f9ca0f GIT binary patch literal 60222 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í^33)6yA=Yg;!XrOLw+%XJNG29y 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 jo_cm5BbJjGQu7uF_x5Fig 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 + + + + +# Compute Resources + +**Table of Contents** + + +- [Compute Resources](#compute-resources) + - [Resource Requests and Limits of Pod and Container](#resource-requests-and-limits-of-pod-and-container) + - [How Pods with Resource Requests are Scheduled](#how-pods-with-resource-requests-are-scheduled) + - [How Pods with Resource Limits are Run](#how-pods-with-resource-limits-are-run) + - [Monitoring Compute Resource Usage](#monitoring-compute-resource-usage) + - [Troubleshooting](#troubleshooting) + - [My pods are pending with event message failedScheduling](#my-pods-are-pending-with-event-message-failedscheduling) + - [My container is terminated](#my-container-is-terminated) + - [Planned Improvements](#planned-improvements) + + + +When specifying a [pod](pods.html), you can optionally specify how much CPU and memory (RAM) each +container needs. When containers have their resource requests specified, the scheduler is +able to make better decisions about which nodes to place pods on; and when containers have their +limits specified, contention for resources on a node can be handled in a specified manner. For +more details about the difference between requests and limits, please refer to +[Resource QoS](../proposals/resource-qos.html). + +*CPU* and *memory* are each a *resource type*. A resource type has a base unit. CPU is specified +in units of cores. Memory is specified in units of bytes. + +CPU and RAM are collectively referred to as *compute resources*, or just *resources*. Compute +resources are measureable quantities which can be requested, allocated, and consumed. They are +distinct from [API resources](working-with-resources.html). API resources, such as pods and +[services](services.html) are objects that can be written to and retrieved from the Kubernetes API +server. + +## Resource Requests and Limits of Pod and Container + +Each container of a Pod can optionally specify `spec.container[].resources.limits.cpu` and/or +`spec.container[].resources.limits.memory` and/or `spec.container[].resources.requests.cpu` +and/or `spec.container[].resources.requests.memory`. + +Specifying resource requests and/or limits is optional. In some clusters, unset limits or requests +may be replaced with default values when a pod is created or updated. The default value depends on +how the cluster is configured. If value of requests is not specified, they are set to be equal +to limits by default. Please note that resource limits must be greater than or equal to resource +requests. + +Although requests/limits can only be specified on individual containers, it is convenient to talk +about pod resource requests/limits. A *pod resource request/limit* for a particular resource +type is the sum of the resource requests/limits of that type for each container in the pod, with +unset values treated as zero (or equal to default values in some cluster configurations). + +The following pod has two containers. Each has a request of 0.25 core of cpu and 64MiB +(220 bytes) of memory and a limit of 0.5 core of cpu and 128MiB of memory. The pod can +be said to have a request of 0.5 core and 128 MiB of memory and a limit of 1 core and 256MiB of +memory. + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: frontend +spec: + containers: + - name: db + image: mysql + resources: + requests: + memory: "64Mi" + cpu: "250m" + limits: + memory: "128Mi" + cpu: "500m" + - name: wp + image: wordpress + resources: + requests: + memory: "64Mi" + cpu: "250m" + limits: + memory: "128Mi" + cpu: "500m" +{% endraw %} +{% endhighlight %} + +## How Pods with Resource Requests are Scheduled + +When a pod is created, the Kubernetes scheduler selects a node for the pod to +run on. Each node has a maximum capacity for each of the resource types: the +amount of CPU and memory it can provide for pods. The scheduler ensures that, +for each resource type (CPU and memory), the sum of the resource requests of the +containers scheduled to the node is less than the capacity of the node. Note +that although actual memory or CPU resource usage on nodes is very low, the +scheduler will still refuse to place pods onto nodes if the capacity check +fails. This protects against a resource shortage on a node when resource usage +later increases, such as due to a daily peak in request rate. + +## How Pods with Resource Limits are Run + +When kubelet starts a container of a pod, it passes the CPU and memory limits to the container +runner (Docker or rkt). + +When using Docker: +- The `spec.container[].resources.limits.cpu` is multiplied by 1024, converted to an integer, and + used as the value of the [`--cpu-shares`]( + https://docs.docker.com/reference/run/#runtime-constraints-on-resources) flag to the `docker run` + command. +- The `spec.container[].resources.limits.memory` is converted to an integer, and used as the value + of the [`--memory`](https://docs.docker.com/reference/run/#runtime-constraints-on-resources) flag + to the `docker run` command. + +**TODO: document behavior for rkt** + +If a container exceeds its memory limit, it may be terminated. If it is restartable, it will be +restarted by kubelet, as will any other type of runtime failure. + +A container may or may not be allowed to exceed its CPU limit for extended periods of time. +However, it will not be killed for excessive CPU usage. + +To determine if a container cannot be scheduled or is being killed due to resource limits, see the +"Troubleshooting" section below. + +## Monitoring Compute Resource Usage + +The resource usage of a pod is reported as part of the Pod status. + +If [optional monitoring](http://releases.k8s.io/release-1.1/cluster/addons/cluster-monitoring/README.md) is configured for your cluster, +then pod resource usage can be retrieved from the monitoring system. + +## Troubleshooting + +### My pods are pending with event message failedScheduling + +If the scheduler cannot find any node where a pod can fit, then the pod will remain unscheduled +until a place can be found. An event will be produced each time the scheduler fails to find a +place for the pod, like this: + +{% highlight console %} +{% raw %} +$ kubectl describe pod frontend | grep -A 3 Events +Events: + FirstSeen LastSeen Count From Subobject PathReason Message + 36s 5s 6 {scheduler } FailedScheduling Failed for reason PodExceedsFreeCPU and possibly others + +{% endraw %} +{% endhighlight %} + +In the case shown above, the pod "frontend" fails to be scheduled due to insufficient +CPU resource on the node. Similar error messages can also suggest failure due to insufficient +memory (PodExceedsFreeMemory). In general, if a pod or pods are pending with this message and +alike, then there are several things to try: +- Add more nodes to the cluster. +- Terminate unneeded pods to make room for pending pods. +- Check that the pod is not larger than all the nodes. For example, if all the nodes +have a capacity of `cpu: 1`, then a pod with a limit of `cpu: 1.1` will never be scheduled. + +You can check node capacities and amounts allocated with the `kubectl describe nodes` command. +For example: + +{% highlight console %} +{% raw %} +$ kubectl describe nodes gke-cluster-4-386701dd-node-ww4p +Name: gke-cluster-4-386701dd-node-ww4p +[ ... lines removed for clarity ...] +Capacity: + cpu: 1 + memory: 464Mi + pods: 40 +Allocated resources (total requests): + cpu: 910m + memory: 2370Mi + pods: 4 +[ ... lines removed for clarity ...] +Pods: (4 in total) + Namespace Name CPU(milliCPU) Memory(bytes) + frontend webserver-ffj8j 500 (50% of total) 2097152000 (50% of total) + kube-system fluentd-cloud-logging-gke-cluster-4-386701dd-node-ww4p 100 (10% of total) 209715200 (5% of total) + kube-system kube-dns-v8-qopgw 310 (31% of total) 178257920 (4% of total) +TotalResourceLimits: + CPU(milliCPU): 910 (91% of total) + Memory(bytes): 2485125120 (59% of total) +[ ... lines removed for clarity ...] +{% endraw %} +{% endhighlight %} + +Here you can see from the `Allocated resources` section that that a pod which ask for more than +90 millicpus or more than 1341MiB of memory will not be able to fit on this node. + +Looking at the `Pods` section, you can see which pods are taking up space on the node. + +The [resource quota](../admin/resource-quota.html) feature can be configured +to limit the total amount of resources that can be consumed. If used in conjunction +with namespaces, it can prevent one team from hogging all the resources. + +### My container is terminated + +Your container may be terminated because it's resource-starved. To check if a container is being killed because it is hitting a resource limit, call `kubectl describe pod` +on the pod you are interested in: + +{% highlight console %} +{% raw %} +[12:54:41] $ ./cluster/kubectl.sh describe pod simmemleak-hra99 +Name: simmemleak-hra99 +Namespace: default +Image(s): saadali/simmemleak +Node: kubernetes-minion-tf0f/10.240.216.66 +Labels: name=simmemleak +Status: Running +Reason: +Message: +IP: 10.244.2.75 +Replication Controllers: simmemleak (1/1 replicas created) +Containers: + simmemleak: + Image: saadali/simmemleak + Limits: + cpu: 100m + memory: 50Mi + State: Running + Started: Tue, 07 Jul 2015 12:54:41 -0700 + Last Termination State: Terminated + Exit Code: 1 + Started: Fri, 07 Jul 2015 12:54:30 -0700 + Finished: Fri, 07 Jul 2015 12:54:33 -0700 + Ready: False + Restart Count: 5 +Conditions: + Type Status + Ready False +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {scheduler } scheduled Successfully assigned simmemleak-hra99 to kubernetes-minion-tf0f + Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-minion-tf0f} implicitly required container POD pulled Pod container image "gcr.io/google_containers/pause:0.8.0" already present on machine + Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-minion-tf0f} implicitly required container POD created Created with docker id 6a41280f516d + Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-minion-tf0f} implicitly required container POD started Started with docker id 6a41280f516d + Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-minion-tf0f} spec.containers{simmemleak} created Created with docker id 87348f12526a +{% endraw %} +{% endhighlight %} + +The `Restart Count: 5` indicates that the `simmemleak` container in this pod was terminated and restarted 5 times. + +You can call `get pod` with the `-o go-template=...` option to fetch the status of previously terminated containers: + +{% highlight console %} +{% raw %} +[13:59:01] $ ./cluster/kubectl.sh get pod -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}' simmemleak-60xbc +Container Name: simmemleak +LastState: map[terminated:map[exitCode:137 reason:OOM Killed startedAt:2015-07-07T20:58:43Z finishedAt:2015-07-07T20:58:43Z containerID:docker://0e4095bba1feccdfe7ef9fb6ebffe972b4b14285d5acdec6f0d3ae8a22fad8b2]][13:59:03] clusterScaleDoc ~/go/src/github.com/kubernetes/kubernetes $ +{% endraw %} +{% endhighlight %} + +We can see that this container was terminated because `reason:OOM Killed`, where *OOM* stands for Out Of Memory. + +## Planned Improvements + +The current system only allows resource quantities to be specified on a container. +It is planned to improve accounting for resources which are shared by all containers in a pod, +such as [EmptyDir volumes](volumes.html#emptydir). + +The current system only supports container requests and limits for CPU and Memory. +It is planned to add new resource types, including a node disk space +resource, and a framework for adding custom [resource types](../design/resources.html#resource-types). + +Kubernetes supports overcommitment of resources by supporting multiple levels of [Quality of Service](http://issue.k8s.io/168). + +Currently, one unit of CPU means different things on different cloud providers, and on different +machine types within the same cloud providers. For example, on AWS, the capacity of a node +is reported in [ECUs](http://aws.amazon.com/ec2/faqs/), while in GCE it is reported in logical +cores. We plan to revise the definition of the cpu resource to allow for more consistency +across providers and platforms. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/compute-resources.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/config-best-practices.md b/v1.1/docs/user-guide/config-best-practices.md new file mode 100644 index 0000000000000..142a2261604ea --- /dev/null +++ b/v1.1/docs/user-guide/config-best-practices.md @@ -0,0 +1,43 @@ +--- +layout: docwithnav +title: "Tips and tricks when working with config" +--- + + + + + +# Tips and tricks when working with config + +This document is meant to highlight and consolidate in one place configuration best practices that are introduced throughout the user-guide and getting-started documentation and examples. This is a living document so if you think of something that is not on this list but might be useful to others, please don't hesitate to file an issue or submit a PR. + +1. When writing configuration, use the latest stable API version (currently v1). +1. Configuration should be stored in version control before being pushed to the cluster. This allows configuration to be quickly rolled back if needed and will aid with cluster re-creation and restoration if the worst were to happen. +1. Use YAML rather than JSON. They can be used interchangeably in almost all scenarios but YAML tends to be more user-friendly for config. +1. Group related objects together in a single file. This is often better than separate files. +1. Use `kubectl create -f ` where possible. This looks for config objects in all `.yaml`, `.yml`, and `.json` files in `` and passes them to create. +1. Create a service before corresponding replication controllers so that the scheduler can spread the pods comprising the service. You can also create the replication controller without specifying replicas, create the service, then scale up the replication controller, which may work better in an example using progressive disclosure and may have benefits in real scenarios also, such as ensuring one replica works before creating lots of them) +1. Don't use `hostPort` unless absolutely necessary (e.g., for a node daemon) as it will prevent certain scheduling configurations due to port conflicts. Use the apiserver proxying or port forwarding for debug/admin access, or a service for external service access. If you need to expose a pod's port on the host machine, consider using a [NodePort](services.html#type--loadbalancer) service before resorting to `hostPort`. If you only need access to the port for debugging purposes, you can also use the [kubectl proxy and apiserver proxy](connecting-to-applications-proxy.html) or [kubectl port-forward](connecting-to-applications-port-forward.html). +1. Don't use `hostNetwork` for the same reasons as `hostPort`. +1. Don't specify default values unnecessarily, to simplify and minimize configs. For example, omit the selector and labels in ReplicationController if you want them to be the same as the labels in its podTemplate, since those fields are populated from the podTemplate labels by default. +1. Instead of attaching one label to a set of pods to represent a service (e.g., `service: myservice`) and another to represent the replication controller managing the pods (e.g., `controller: mycontroller`), attach labels that identify semantic attributes of your application or deployment and select the appropriate subsets in your service and replication controller, such as `{ app: myapp, tier: frontend, deployment: v3 }`. A service can be made to span multiple deployments, such as across rolling updates, by simply omitting release-specific labels from its selector, rather than updating a service's selector to match the replication controller's selector fully. +1. Use kubectl bulk operations (via files and/or labels) for get and delete. See [label selectors](labels.html#label-selectors) and [using labels effectively](managing-deployments.html#using-labels-effectively). +1. Use kubectl run and expose to quickly create and expose single container replication controllers. See the [quick start guide](quick-start.html) for an example. +1. Use headless services for easy service discovery when you don't need kube-proxy load balancing. See [headless services](services.html#headless-services). +1. Use kubectl delete rather than stop. Delete has a superset of the functionality of stop and stop is deprecated. +1. If there is a viable alternative to naked pods (i.e. pods not bound to a controller), go with the alternative. Controllers are almost always preferable to creating pods (except for some `restartPolicy: Never` scenarios). A minimal Job is coming. See [#1624](http://issue.k8s.io/1624). Naked pods will not be rescheduled in the event of node failure. +1. Put a version number or hash as a suffix to the name and in a label on a replication controller to facilitate rolling update, as we do for [--image](kubectl/kubectl_rolling-update.html). This is necessary because rolling-update actually creates a new controller as opposed to modifying the existing controller. This does not play well with version agnostic controller names. +1. Put an object description in an annotation to allow better introspection. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/config-best-practices.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/configuring-containers.md b/v1.1/docs/user-guide/configuring-containers.md new file mode 100644 index 0000000000000..520e23a09620c --- /dev/null +++ b/v1.1/docs/user-guide/configuring-containers.md @@ -0,0 +1,223 @@ +--- +layout: docwithnav +title: "Kubernetes User Guide: Managing Applications: Configuring and launching containers" +--- + + + + + +# Kubernetes User Guide: Managing Applications: Configuring and launching containers + +**Table of Contents** + + +- [Kubernetes User Guide: Managing Applications: Configuring and launching containers](#kubernetes-user-guide-managing-applications-configuring-and-launching-containers) + - [Configuration in Kubernetes](#configuration-in-kubernetes) + - [Launching a container using a configuration file](#launching-a-container-using-a-configuration-file) + - [Validating configuration](#validating-configuration) + - [Environment variables and variable expansion](#environment-variables-and-variable-expansion) + - [Viewing pod status](#viewing-pod-status) + - [Viewing pod output](#viewing-pod-output) + - [Deleting pods](#deleting-pods) + - [What's next?](#whats-next) + + + +## Configuration in Kubernetes + +In addition to the imperative-style commands, such as `kubectl run` and `kubectl expose`, described [elsewhere](quick-start.html), Kubernetes supports declarative configuration. Often times, configuration files are preferable to imperative commands, since they can be checked into version control and changes to the files can be code reviewed, which is especially important for more complex configurations, producing a more robust, reliable and archival system. + +In the declarative style, all configuration is stored in YAML or JSON configuration files using Kubernetes's API resource schemas as the configuration schemas. `kubectl` can create, update, delete, and get API resources. The `apiVersion` (currently “v1”), resource `kind`, and resource `name` are used by `kubectl` to construct the appropriate API path to invoke for the specified operation. + +## Launching a container using a configuration file + +Kubernetes executes containers in [*Pods*](pods.html). A pod containing a simple Hello World container can be specified in YAML as follows: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: hello-world +spec: # specification of the pod’s contents + restartPolicy: Never + containers: + - name: hello + image: "ubuntu:14.04" + command: ["/bin/echo","hello”,”world"] +{% endraw %} +{% endhighlight %} + +The value of `metadata.name`, `hello-world`, will be the name of the pod resource created, and must be unique within the cluster, whereas `containers[0].name` is just a nickname for the container within that pod. `image` is the name of the Docker image, which Kubernetes expects to be able to pull from a registry, the [Docker Hub](https://registry.hub.docker.com/) by default. + +`restartPolicy: Never` indicates that we just want to run the container once and then terminate the pod. + +The [`command`](containers.html#containers-and-commands) overrides the Docker container’s `Entrypoint`. Command arguments (corresponding to Docker’s `Cmd`) may be specified using `args`, as follows: + +{% highlight yaml %} +{% raw %} + command: ["/bin/echo"] + args: ["hello","world"] +{% endraw %} +{% endhighlight %} + +This pod can be created using the `create` command: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./hello-world.yaml +pods/hello-world +{% endraw %} +{% endhighlight %} + +`kubectl` prints the resource type and name of the resource created when successful. + +## Validating configuration + +If you’re not sure you specified the resource correctly, you can ask `kubectl` to validate it for you: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./hello-world.yaml --validate +{% endraw %} +{% endhighlight %} + +Let’s say you specified `entrypoint` instead of `command`. You’d see output as follows: + +{% highlight console %} +{% raw %} +I0709 06:33:05.600829 14160 schema.go:126] unknown field: entrypoint +I0709 06:33:05.600988 14160 schema.go:129] this may be a false alarm, see http://issue.k8s.io/6842 +pods/hello-world +{% endraw %} +{% endhighlight %} + +`kubectl create --validate` currently warns about problems it detects, but creates the resource anyway, unless a required field is absent or a field value is invalid. Unknown API fields are ignored, so be careful. This pod was created, but with no `command`, which is an optional field, since the image may specify an `Entrypoint`. +View the [Pod API +object](http://kubernetes.io/v1.1/docs/api-reference/v1/definitions.html#_v1_pod) +to see the list of valid fields. + +## Environment variables and variable expansion + +Kubernetes [does not automatically run commands in a shell](https://github.com/kubernetes/kubernetes/wiki/User-FAQ#use-of-environment-variables-on-the-command-line) (not all images contain shells). If you would like to run your command in a shell, such as to expand environment variables (specified using `env`), you could do the following: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: hello-world +spec: # specification of the pod’s contents + restartPolicy: Never + containers: + - name: hello + image: "ubuntu:14.04" + env: + - name: MESSAGE + value: "hello world" + command: ["/bin/sh","-c"] + args: ["/bin/echo \"${MESSAGE}\""] +{% endraw %} +{% endhighlight %} + +However, a shell isn’t necessary just to expand environment variables. Kubernetes will do it for you if you use [`$(ENVVAR)` syntax](../../docs/design/expansion.html): + +{% highlight yaml %} +{% raw %} + command: ["/bin/echo"] + args: ["$(MESSAGE)"] +{% endraw %} +{% endhighlight %} + +## Viewing pod status + +You can see the pod you created (actually all of your cluster's pods) using the `get` command. + +If you’re quick, it will look as follows: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +hello-world 0/1 Pending 0 0s +{% endraw %} +{% endhighlight %} + +Initially, a newly created pod is unscheduled -- no node has been selected to run it. Scheduling happens after creation, but is fast, so you normally shouldn’t see pods in an unscheduled state unless there’s a problem. + +After the pod has been scheduled, the image may need to be pulled to the node on which it was scheduled, if it hadn’t been pulled already. After a few seconds, you should see the container running: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +hello-world 1/1 Running 0 5s +{% endraw %} +{% endhighlight %} + +The `READY` column shows how many containers in the pod are running. + +Almost immediately after it starts running, this command will terminate. `kubectl` shows that the container is no longer running and displays the exit status: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +hello-world 0/1 ExitCode:0 0 15s +{% endraw %} +{% endhighlight %} + +## Viewing pod output + +You probably want to see the output of the command you ran. As with [`docker logs`](https://docs.docker.com/userguide/usingdocker/), `kubectl logs` will show you the output: + +{% highlight console %} +{% raw %} +$ kubectl logs hello-world +hello world +{% endraw %} +{% endhighlight %} + +## Deleting pods + +When you’re done looking at the output, you should delete the pod: + +{% highlight console %} +{% raw %} +$ kubectl delete pod hello-world +pods/hello-world +{% endraw %} +{% endhighlight %} + +As with `create`, `kubectl` prints the resource type and name of the resource deleted when successful. + +You can also use the resource/name format to specify the pod: + +{% highlight console %} +{% raw %} +$ kubectl delete pods/hello-world +pods/hello-world +{% endraw %} +{% endhighlight %} + +Terminated pods aren’t currently automatically deleted, so that you can observe their final status, so be sure to clean up your dead pods. + +On the other hand, containers and their logs are eventually deleted automatically in order to free up disk space on the nodes. + +## What's next? + +[Learn about deploying continuously running applications.](deploying-applications.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/configuring-containers.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/connecting-applications.md b/v1.1/docs/user-guide/connecting-applications.md new file mode 100644 index 0000000000000..73e31fc32a737 --- /dev/null +++ b/v1.1/docs/user-guide/connecting-applications.md @@ -0,0 +1,454 @@ +--- +layout: docwithnav +title: "Kubernetes User Guide: Managing Applications: Connecting applications" +--- + + + + + +# Kubernetes User Guide: Managing Applications: Connecting applications + +**Table of Contents** + + +- [Kubernetes User Guide: Managing Applications: Connecting applications](#kubernetes-user-guide-managing-applications-connecting-applications) +- [The Kubernetes model for connecting containers](#the-kubernetes-model-for-connecting-containers) + - [Exposing pods to the cluster](#exposing-pods-to-the-cluster) + - [Creating a Service](#creating-a-service) + - [Accessing the Service](#accessing-the-service) + - [Environment Variables](#environment-variables) + - [DNS](#dns) + - [Securing the Service](#securing-the-service) + - [Exposing the Service](#exposing-the-service) + - [What's next?](#whats-next) + + + +# The Kubernetes model for connecting containers + +Now that you have a continuously running, replicated application you can expose it on a network. Before discussing the Kubernetes approach to networking, it is worthwhile to contrast it with the "normal" way networking works with Docker. + +By default, Docker uses host-private networking, so containers can talk to other containers only if they are on the same machine. In order for Docker containers to communicate across nodes, they must be allocated ports on the machine's own IP address, which are then forwarded or proxied to the containers. This obviously means that containers must either coordinate which ports they use very carefully or else be allocated ports dynamically. + +Coordinating ports across multiple developers is very difficult to do at scale and exposes users to cluster-level issues outside of their control. Kubernetes assumes that pods can communicate with other pods, regardless of which host they land on. We give every pod its own cluster-private-IP address so you do not need to explicitly create links between pods or mapping container ports to host ports. This means that containers within a Pod can all reach each other’s ports on localhost, and all pods in a cluster can see each other without NAT. The rest of this document will elaborate on how you can run reliable services on such a networking model. + +This guide uses a simple nginx server to demonstrate proof of concept. The same principles are embodied in a more complete [Jenkins CI application](http://blog.kubernetes.io/2015/07/strong-simple-ssl-for-kubernetes.html). + +## Exposing pods to the cluster + +We did this in a previous example, but lets do it once again and focus on the networking perspective. Create an nginx pod, and note that it has a container port specification: + +{% highlight yaml %} +{% raw %} +$ cat nginxrc.yaml +apiVersion: v1 +kind: ReplicationController +metadata: + name: my-nginx +spec: + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx + ports: + - containerPort: 80 +{% endraw %} +{% endhighlight %} + +This makes it accessible from any node in your cluster. Check the nodes the pod is running on: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./nginxrc.yaml +$ kubectl get pods -l app=nginx -o wide +my-nginx-6isf4 1/1 Running 0 2h e2e-test-beeps-minion-93ly +my-nginx-t26zt 1/1 Running 0 2h e2e-test-beeps-minion-93ly +{% endraw %} +{% endhighlight %} + +Check your pods' IPs: + +{% highlight console %} +{% raw %} +$ kubectl get pods -l app=nginx -o json | grep podIP + "podIP": "10.245.0.15", + "podIP": "10.245.0.14", +{% endraw %} +{% endhighlight %} + +You should be able to ssh into any node in your cluster and curl both IPs. Note that the containers are *not* using port 80 on the node, nor are there any special NAT rules to route traffic to the pod. This means you can run multiple nginx pods on the same node all using the same containerPort and access them from any other pod or node in your cluster using IP. Like Docker, ports can still be published to the host node's interface(s), but the need for this is radically diminished because of the networking model. + +You can read more about [how we achieve this](../admin/networking.html#how-to-achieve-this) if you’re curious. + +## Creating a Service + +So we have pods running nginx in a flat, cluster wide, address space. In theory, you could talk to these pods directly, but what happens when a node dies? The pods die with it, and the replication controller will create new ones, with different IPs. This is the problem a Service solves. + +A Kubernetes Service is an abstraction which defines a logical set of Pods running somewhere in your cluster, that all provide the same functionality. When created, each Service is assigned a unique IP address (also called clusterIP). This address is tied to the lifespan of the Service, and will not change while the Service is alive. Pods can be configured to talk to the Service, and know that communication to the Service will be automatically load-balanced out to some pod that is a member of the Service. + +You can create a Service for your 2 nginx replicas with the following yaml: + +{% highlight yaml %} +{% raw %} +$ cat nginxsvc.yaml +apiVersion: v1 +kind: Service +metadata: + name: nginxsvc + labels: + app: nginx +spec: + ports: + - port: 80 + protocol: TCP + selector: + app: nginx +{% endraw %} +{% endhighlight %} + +This specification will create a Service which targets TCP port 80 on any Pod with the `app=nginx` label, and expose it on an abstracted Service port (`targetPort`: is the port the container accepts traffic on, `port`: is the abstracted Service port, which can be any port other pods use to access the Service). View [service API object](http://kubernetes.io/v1.1/docs/api-reference/v1/definitions.html#_v1_service) to see the list of supported fields in service definition. +Check your Service: + +{% highlight console %} +{% raw %} +$ kubectl get svc +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +kubernetes 10.179.240.1 443/TCP 8d +nginxsvc 10.179.252.126 122.222.183.144 80/TCP,81/TCP,82/TCP run=nginx2 11m +{% endraw %} +{% endhighlight %} + +As mentioned previously, a Service is backed by a group of pods. These pods are exposed through `endpoints`. The Service's selector will be evaluated continuously and the results will be POSTed to an Endpoints object also named `nginxsvc`. When a pod dies, it is automatically removed from the endpoints, and new pods matching the Service’s selector will automatically get added to the endpoints. Check the endpoints, and note that the IPs are the same as the pods created in the first step: + +{% highlight console %} +{% raw %} +$ kubectl describe svc nginxsvc +Name: nginxsvc +Namespace: default +Labels: app=nginx +Selector: app=nginx +Type: ClusterIP +IP: 10.0.116.146 +Port: 80/TCP +Endpoints: 10.245.0.14:80,10.245.0.15:80 +Session Affinity: None +No events. + +$ kubectl get ep +NAME ENDPOINTS +nginxsvc 10.245.0.14:80,10.245.0.15:80 +{% endraw %} +{% endhighlight %} + +You should now be able to curl the nginx Service on `10.0.116.146:80` from any node in your cluster. Note that the Service IP is completely virtual, it never hits the wire, if you’re curious about how this works you can read more about the [service proxy](services.html#virtual-ips-and-service-proxies). + +## Accessing the Service + +Kubernetes supports 2 primary modes of finding a Service - environment variables and DNS. The former works out of the box while the latter requires the [kube-dns cluster addon](http://releases.k8s.io/release-1.1/cluster/addons/dns/README.md). + +### Environment Variables + +When a Pod is run on a Node, the kubelet adds a set of environment variables for each active Service. This introduces an ordering problem. To see why, inspect the environment of your running nginx pods: + +{% highlight console %} +{% raw %} +$ kubectl exec my-nginx-6isf4 -- printenv | grep SERVICE +KUBERNETES_SERVICE_HOST=10.0.0.1 +KUBERNETES_SERVICE_PORT=443 +{% endraw %} +{% endhighlight %} + +Note there’s no mention of your Service. This is because you created the replicas before the Service. Another disadvantage of doing this is that the scheduler might put both pods on the same machine, which will take your entire Service down if it dies. We can do this the right way by killing the 2 pods and waiting for the replication controller to recreate them. This time around the Service exists *before* the replicas. This will given you scheduler level Service spreading of your pods (provided all your nodes have equal capacity), as well as the right environment variables: + +{% highlight console %} +{% raw %} +$ kubectl scale rc my-nginx --replicas=0; kubectl scale rc my-nginx --replicas=2; +$ kubectl get pods -l app=nginx -o wide +NAME READY STATUS RESTARTS AGE NODE +my-nginx-5j8ok 1/1 Running 0 2m node1 +my-nginx-90vaf 1/1 Running 0 2m node2 + +$ kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE +KUBERNETES_SERVICE_PORT=443 +NGINXSVC_SERVICE_HOST=10.0.116.146 +KUBERNETES_SERVICE_HOST=10.0.0.1 +NGINXSVC_SERVICE_PORT=80 +{% endraw %} +{% endhighlight %} + +### DNS + +Kubernetes offers a DNS cluster addon Service that uses skydns to automatically assign dns names to other Services. You can check if it’s running on your cluster: + +{% highlight console %} +{% raw %} +$ kubectl get services kube-dns --namespace=kube-system +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +kube-dns 10.179.240.10 53/UDP,53/TCP k8s-app=kube-dns 8d +{% endraw %} +{% endhighlight %} + +If it isn’t running, you can [enable it](http://releases.k8s.io/release-1.1/cluster/addons/dns/README.md#how-do-i-configure-it). The rest of this section will assume you have a Service with a long lived IP (nginxsvc), and a dns server that has assigned a name to that IP (the kube-dns cluster addon), so you can talk to the Service from any pod in your cluster using standard methods (e.g. gethostbyname). Let’s create another pod to test this: + +{% highlight yaml %} +{% raw %} +$ cat curlpod.yaml +apiVersion: v1 +kind: Pod +metadata: + name: curlpod +spec: + containers: + - image: radial/busyboxplus:curl + command: + - sleep + - "3600" + imagePullPolicy: IfNotPresent + name: curlcontainer + restartPolicy: Always +{% endraw %} +{% endhighlight %} + +And perform a lookup of the nginx Service + +{% highlight console %} +{% raw %} +$ kubectl create -f ./curlpod.yaml +default/curlpod +$ kubectl get pods curlpod +NAME READY STATUS RESTARTS AGE +curlpod 1/1 Running 0 18s + +$ kubectl exec curlpod -- nslookup nginxsvc +Server: 10.0.0.10 +Address 1: 10.0.0.10 +Name: nginxsvc +Address 1: 10.0.116.146 +{% endraw %} +{% endhighlight %} + +## Securing the Service + +Till now we have only accessed the nginx server from within the cluster. Before exposing the Service to the internet, you want to make sure the communication channel is secure. For this, you will need: +* Self signed certificates for https (unless you already have an identity certificate) +* An nginx server configured to use the certificates +* A [secret](secrets.html) that makes the certificates accessible to pods + +You can acquire all these from the [nginx https example](../../examples/https-nginx/README.html), in short: + +{% highlight console %} +{% raw %} +$ make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json +$ kubectl create -f /tmp/secret.json +secrets/nginxsecret +$ kubectl get secrets +NAME TYPE DATA +default-token-il9rc kubernetes.io/service-account-token 1 +nginxsecret Opaque 2 +{% endraw %} +{% endhighlight %} + +Now modify your nginx replicas to start a https server using the certificate in the secret, and the Service, to expose both ports (80 and 443): + +{% highlight yaml %} +{% raw %} +$ cat nginx-app.yaml +apiVersion: v1 +kind: Service +metadata: + name: nginxsvc + labels: + app: nginx +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 80 + protocol: TCP + name: http + - port: 443 + protocol: TCP + name: https + selector: + app: nginx +--- +apiVersion: v1 +kind: ReplicationController +metadata: + name: my-nginx +spec: + replicas: 1 + template: + metadata: + labels: + app: nginx + spec: + volumes: + - name: secret-volume + secret: + secretName: nginxsecret + containers: + - name: nginxhttps + image: bprashanth/nginxhttps:1.0 + ports: + - containerPort: 443 + - containerPort: 80 + volumeMounts: + - mountPath: /etc/nginx/ssl + name: secret-volume +{% endraw %} +{% endhighlight %} + +Noteworthy points about the nginx-app manifest: +- It contains both rc and service specification in the same file +- The [nginx server](../../examples/https-nginx/default.conf) serves http traffic on port 80 and https traffic on 443, and nginx Service exposes both ports. +- Each container has access to the keys through a volume mounted at /etc/nginx/ssl. This is setup *before* the nginx server is started. + +{% highlight console %} +{% raw %} +$ kubectl delete rc,svc -l app=nginx; kubectl create -f ./nginx-app.yaml +replicationcontrollers/my-nginx +services/nginxsvc +services/nginxsvc +replicationcontrollers/my-nginx +{% endraw %} +{% endhighlight %} + +At this point you can reach the nginx server from any node. + +{% highlight console %} +{% raw %} +$ kubectl get pods -o json | grep -i podip + "podIP": "10.1.0.80", +node $ curl -k https://10.1.0.80 +... +

            Welcome to nginx!

            +{% endraw %} +{% endhighlight %} + +Note how we supplied the `-k` parameter to curl in the last step, this is because we don't know anything about the pods running nginx at certificate generation time, +so we have to tell curl to ignore the CName mismatch. By creating a Service we linked the CName used in the certificate with the actual DNS name used by pods during Service lookup. +Lets test this from a pod (the same secret is being reused for simplicity, the pod only needs nginx.crt to access the Service): + +{% highlight console %} +{% raw %} +$ cat curlpod.yaml +vapiVersion: v1 +kind: ReplicationController +metadata: + name: curlrc +spec: + replicas: 1 + template: + metadata: + labels: + app: curlpod + spec: + volumes: + - name: secret-volume + secret: + secretName: nginxsecret + containers: + - name: curlpod + command: + - sh + - -c + - while true; do sleep 1; done + image: radial/busyboxplus:curl + volumeMounts: + - mountPath: /etc/nginx/ssl + name: secret-volume + +$ kubectl create -f ./curlpod.yaml +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +curlpod 1/1 Running 0 2m +my-nginx-7006w 1/1 Running 0 24m + +$ kubectl exec curlpod -- curl https://nginxsvc --cacert /etc/nginx/ssl/nginx.crt +... +Welcome to nginx! +... +{% endraw %} +{% endhighlight %} + +## Exposing the Service + +For some parts of your applications you may want to expose a Service onto an external IP address. Kubernetes supports two ways of doing this: NodePorts and LoadBalancers. The Service created in the last section already used `NodePort`, so your nginx https replica is ready to serve traffic on the internet if your node has a public IP. + +{% highlight console %} +{% raw %} +$ kubectl get svc nginxsvc -o json | grep -i nodeport -C 5 + { + "name": "http", + "protocol": "TCP", + "port": 80, + "targetPort": 80, + "nodePort": 32188 + }, + { + "name": "https", + "protocol": "TCP", + "port": 443, + "targetPort": 443, + "nodePort": 30645 + } + +$ kubectl get nodes -o json | grep ExternalIP -C 2 + { + "type": "ExternalIP", + "address": "104.197.63.17" + } +-- + }, + { + "type": "ExternalIP", + "address": "104.154.89.170" + } +$ curl https://104.197.63.17:30645 -k +... +

            Welcome to nginx!

            +{% endraw %} +{% endhighlight %} + +Lets now recreate the Service to use a cloud load balancer, just change the `Type` of Service in the nginx-app.yaml from `NodePort` to `LoadBalancer`: + +{% highlight console %} +{% raw %} +$ kubectl delete rc, svc -l app=nginx +$ kubectl create -f ./nginx-app.yaml +$ kubectl get svc nginxsvc +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +nginxsvc 10.179.252.126 162.222.184.144 80/TCP,81/TCP,82/TCP run=nginx2 13m + +$ curl https://162.22.184.144 -k +... +Welcome to nginx! +{% endraw %} +{% endhighlight %} + +The IP address in the `EXTERNAL_IP` column is the one that is available on the public internet. The `CLUSTER_IP` is only available inside your +cluster/private cloud network. + +## What's next? + +[Learn about more Kubernetes features that will help you run containers reliably in production.](production-pods.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/connecting-applications.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/connecting-to-applications-port-forward.md b/v1.1/docs/user-guide/connecting-to-applications-port-forward.md new file mode 100644 index 0000000000000..d3921a474498f --- /dev/null +++ b/v1.1/docs/user-guide/connecting-to-applications-port-forward.md @@ -0,0 +1,79 @@ +--- +layout: docwithnav +title: "Connecting to applications: kubectl port-forward" +--- + + + + + +# Connecting to applications: kubectl port-forward + +kubectl port-forward forwards connections to a local port to a port on a pod. Its man page is available [here](kubectl/kubectl_port-forward.html). Compared to [kubectl proxy](accessing-the-cluster.html#using-kubectl-proxy), `kubectl port-forward` is more generic as it can forward TCP traffic while `kubectl proxy` can only forward HTTP traffic. This guide demonstrates how to use `kubectl port-forward` to connect to a Redis database, which may be useful for database debugging. + +## Creating a Redis master + +{% highlight console %} +{% raw %} +$ kubectl create examples/redis/redis-master.yaml +pods/redis-master +{% endraw %} +{% endhighlight %} + +wait until the Redis master pod is Running and Ready, + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +redis-master 2/2 Running 0 41s +{% endraw %} +{% endhighlight %} + + +## Connecting to the Redis master[a] + +The Redis master is listening on port 6397, to verify this, + +{% highlight console %} +{% raw %} +$ kubectl get pods redis-master -t='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' +6379 +{% endraw %} +{% endhighlight %} + + +then we forward the port 6379 on the local workstation to the port 6379 of pod redis-master, + +{% highlight console %} +{% raw %} +$ kubectl port-forward redis-master 6379:6379 +I0710 14:43:38.274550 3655 portforward.go:225] Forwarding from 127.0.0.1:6379 -> 6379 +I0710 14:43:38.274797 3655 portforward.go:225] Forwarding from [::1]:6379 -> 6379 +{% endraw %} +{% endhighlight %} + +To verify the connection is successful, we run a redis-cli on the local workstation, + +{% highlight console %} +{% raw %} +$ redis-cli +127.0.0.1:6379> ping +PONG +{% endraw %} +{% endhighlight %} + +Now one can debug the database from the local workstation. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/connecting-to-applications-port-forward.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/connecting-to-applications-proxy.md b/v1.1/docs/user-guide/connecting-to-applications-proxy.md new file mode 100644 index 0000000000000..da252ebd9c576 --- /dev/null +++ b/v1.1/docs/user-guide/connecting-to-applications-proxy.md @@ -0,0 +1,53 @@ +--- +layout: docwithnav +title: "Connecting to applications: kubectl proxy and apiserver proxy" +--- + + + + + +# Connecting to applications: kubectl proxy and apiserver proxy + +You have seen the [basics](accessing-the-cluster.html) about `kubectl proxy` and `apiserver proxy`. This guide shows how to use them together to access a service([kube-ui](ui.html)) running on the Kubernetes cluster from your workstation. + + +## Getting the apiserver proxy URL of kube-ui + +kube-ui is deployed as a cluster add-on. To find its apiserver proxy URL, + +{% highlight console %} +{% raw %} +$ kubectl cluster-info | grep "KubeUI" +KubeUI is running at https://173.255.119.104/api/v1/proxy/namespaces/kube-system/services/kube-ui +{% endraw %} +{% endhighlight %} + +if this command does not find the URL, try the steps [here](ui.html#accessing-the-ui). + + +## Connecting to the kube-ui service from your local workstation + +The above proxy URL is an access to the kube-ui service provided by the apiserver. To access it, you still need to authenticate to the apiserver. `kubectl proxy` can handle the authentication. + +{% highlight console %} +{% raw %} +$ kubectl proxy --port=8001 +Starting to serve on localhost:8001 +{% endraw %} +{% endhighlight %} + +Now you can access the kube-ui service on your local workstation at [http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/kube-ui](http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/kube-ui) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/connecting-to-applications-proxy.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/container-environment.md b/v1.1/docs/user-guide/container-environment.md new file mode 100644 index 0000000000000..03e5fef6040e4 --- /dev/null +++ b/v1.1/docs/user-guide/container-environment.md @@ -0,0 +1,120 @@ +--- +layout: docwithnav +title: "Kubernetes Container Environment" +--- + + + + + +# Kubernetes Container Environment + +**Table of Contents** + + +- [Kubernetes Container Environment](#kubernetes-container-environment) + - [Overview](#overview) + - [Cluster Information](#cluster-information) + - [Container Information](#container-information) + - [Cluster Information](#cluster-information) + - [Container Hooks](#container-hooks) + - [Hook Details](#hook-details) + - [Hook Handler Execution](#hook-handler-execution) + - [Hook delivery guarantees](#hook-delivery-guarantees) + - [Hook Handler Implementations](#hook-handler-implementations) + + + + +## Overview + +This document describes the environment for Kubelet managed containers on a Kubernetes node (kNode).  In contrast to the Kubernetes cluster API, which provides an API for creating and managing containers, the Kubernetes container environment provides the container access to information about what else is going on in the cluster. + +This cluster information makes it possible to build applications that are *cluster aware*. +Additionally, the Kubernetes container environment defines a series of hooks that are surfaced to optional hook handlers defined as part of individual containers.  Container hooks are somewhat analogous to operating system signals in a traditional process model.   However these hooks are designed to make it easier to build reliable, scalable cloud applications in the Kubernetes cluster.  Containers that participate in this cluster lifecycle become *cluster native*. + +Another important part of the container environment is the file system that is available to the container. In Kubernetes, the filesystem is a combination of an [image](images.html) and one or more [volumes](volumes.html). + + +The following sections describe both the cluster information provided to containers, as well as the hooks and life-cycle that allows containers to interact with the management system. + +## Cluster Information + +There are two types of information that are available within the container environment.  There is information about the container itself, and there is information about other objects in the system. + +### Container Information + +Currently, the Pod name for the pod in which the container is running is set as the hostname of the container, and is accessible through all calls to access the hostname within the container (e.g. the hostname command, or the [gethostname][1] function call in libc), but this is planned to change in the future and should not be used. + +The Pod name and namespace are also available as environment variables via the [downward API](downward-api.html). Additionally, user-defined environment variables from the pod definition, are also available to the container, as are any environment variables specified statically in the Docker image. + +In the future, we anticipate expanding this information with richer information about the container.  Examples include available memory, number of restarts, and in general any state that you could get from the call to GET /pods on the API server. + +### Cluster Information + +Currently the list of all services that are running at the time when the container was created via the Kubernetes Cluster API are available to the container as environment variables.  The set of environment variables matches the syntax of Docker links. + +For a service named **foo** that maps to a container port named **bar**, the following variables are defined: + +{% highlight sh %} +{% raw %} +FOO_SERVICE_HOST= +FOO_SERVICE_PORT= +{% endraw %} +{% endhighlight %} + +Services have dedicated IP address, and are also surfaced to the container via DNS (If [DNS addon](http://releases.k8s.io/release-1.1/cluster/addons/dns/) is enabled).  Of course DNS is still not an enumerable protocol, so we will continue to provide environment variables so that containers can do discovery. + +## Container Hooks + +Container hooks provide information to the container about events in its management lifecycle.  For example, immediately after a container is started, it receives a *PostStart* hook.  These hooks are broadcast *into* the container with information about the life-cycle of the container.  They are different from the events provided by Docker and other systems which are *output* from the container.  Output events provide a log of what has already happened.  Input hooks provide real-time notification about things that are happening, but no historical log. + +### Hook Details + +There are currently two container hooks that are surfaced to containers: + +*PostStart* + +This hook is sent immediately after a container is created.  It notifies the container that it has been created.  No parameters are passed to the handler. + +*PreStop* + +This hook is called immediately before a container is terminated. No parameters are passed to the handler. This event handler is blocking, and must complete before the call to delete the container is sent to the Docker daemon. The SIGTERM notification sent by Docker is also still sent. A more complete description of termination behavior can be found in [Termination of Pods](pods.html#termination-of-pods). + +### Hook Handler Execution + +When a management hook occurs, the management system calls into any registered hook handlers in the container for that hook.  These hook handler calls are synchronous in the context of the pod containing the container. Typically we expect that users will make their hook handlers as lightweight as possible, but there are cases where long running commands make sense (e.g. saving state prior to container stop). + +### Hook delivery guarantees + +Hook delivery is intended to be "at least once", which means that a hook may be called multiple times for any given event (e.g. "start" or "stop") and it is up to the hook implementer to be able to handle this +correctly. + +We expect double delivery to be rare, but in some cases if the Kubelet restarts in the middle of sending a hook, the hook may be resent after the Kubelet comes back up. + +Likewise, we only make a single delivery attempt. If (for example) an http hook receiver is down, and unable to take traffic, we do not make any attempts to resend. + +Currently, there are (hopefully rare) scenarios where PostStart hooks may not be delivered. + +### Hook Handler Implementations + +Hook handlers are the way that hooks are surfaced to containers.  Containers can select the type of hook handler they would like to implement.  Kubernetes currently supports two different hook handler types: + + * Exec - Executes a specific command (e.g. pre-stop.sh) inside the cgroups and namespaces of the container.  Resources consumed by the command are counted against the container. + + * HTTP - Executes an HTTP request against a specific endpoint on the container. + +[1]: http://man7.org/linux/man-pages/man2/gethostname.2.html + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/container-environment.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/containers.md b/v1.1/docs/user-guide/containers.md new file mode 100644 index 0000000000000..43f813744f62c --- /dev/null +++ b/v1.1/docs/user-guide/containers.md @@ -0,0 +1,111 @@ +--- +layout: docwithnav +title: "Containers with Kubernetes" +--- + + + + + +# Containers with Kubernetes + +## Containers and commands + +So far the Pods we've seen have all used the `image` field to indicate what process Kubernetes +should run in a container. In this case, Kubernetes runs the image's default command. If we want +to run a particular command or override the image's defaults, there are two additional fields that +we can use: + +1. `Command`: Controls the actual command run by the image +2. `Args`: Controls the arguments passed to the command + +### How docker handles command and arguments + +Docker images have metadata associated with them that is used to store information about the image. +The image author may use this to define defaults for the command and arguments to run a container +when the user does not supply values. Docker calls the fields for commands and arguments +`Entrypoint` and `Cmd` respectively. The full details for this feature are too complicated to +describe here, mostly due to the fact that the docker API allows users to specify both of these +fields as either a string array or a string and there are subtle differences in how those cases are +handled. We encourage the curious to check out [docker's documentation]() for this feature. + +Kubernetes allows you to override both the image's default command (docker `Entrypoint`) and args +(docker `Cmd`) with the `Command` and `Args` fields of `Container`. The rules are: + +1. If you do not supply a `Command` or `Args` for a container, the defaults defined by the image + will be used +2. If you supply a `Command` but no `Args` for a container, only the supplied `Command` will be + used; the image's default arguments are ignored +3. If you supply only `Args`, the image's default command will be used with the arguments you + supply +4. If you supply a `Command` **and** `Args`, the image's defaults will be ignored and the values + you supply will be used + +Here are examples for these rules in table format + +| Image `Entrypoint` | Image `Cmd` | Container `Command` | Container `Args` | Command Run | +|--------------------|------------------|---------------------|--------------------|------------------| +| `[/ep-1]` | `[foo bar]` | <not set> | <not set> | `[ep-1 foo bar]` | +| `[/ep-1]` | `[foo bar]` | `[/ep-2]` | <not set> | `[ep-2]` | +| `[/ep-1]` | `[foo bar]` | <not set> | `[zoo boo]` | `[ep-1 zoo boo]` | +| `[/ep-1]` | `[foo bar]` | `[/ep-2]` | `[zoo boo]` | `[ep-2 zoo boo]` | + + +## Capabilities + +By default, Docker containers are "unprivileged" and cannot, for example, run a Docker daemon inside a Docker container. We can have fine grain control over the capabilities using cap-add and cap-drop.More details [here](https://docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration). + +The relationship between Docker's capabilities and [Linux capabilities](http://man7.org/linux/man-pages/man7/capabilities.7.html) + +| Docker's capabilities | Linux capabilities | +| ---- | ---- | +| SETPCAP | CAP_SETPCAP | +| SYS_MODULE | CAP_SYS_MODULE | +| SYS_RAWIO | CAP_SYS_RAWIO | +| SYS_PACCT | CAP_SYS_PACCT | +| SYS_ADMIN | CAP_SYS_ADMIN | +| SYS_NICE | CAP_SYS_NICE | +| SYS_RESOURCE | CAP_SYS_RESOURCE | +| SYS_TIME | CAP_SYS_TIME | +| SYS_TTY_CONFIG | CAP_SYS_TTY_CONFIG | +| MKNOD | CAP_MKNOD | +| AUDIT_WRITE | CAP_AUDIT_WRITE | +| AUDIT_CONTROL | CAP_AUDIT_CONTROL | +| MAC_OVERRIDE | CAP_MAC_OVERRIDE | +| MAC_ADMIN | CAP_MAC_ADMIN | +| NET_ADMIN | CAP_NET_ADMIN | +| SYSLOG | CAP_SYSLOG | +| CHOWN | CAP_CHOWN | +| NET_RAW | CAP_NET_RAW | +| DAC_OVERRIDE | CAP_DAC_OVERRIDE | +| FOWNER | CAP_FOWNER | +| DAC_READ_SEARCH | CAP_DAC_READ_SEARCH | +| FSETID | CAP_FSETID | +| KILL | CAP_KILL | +| SETGID | CAP_SETGID | +| SETUID | CAP_SETUID | +| LINUX_IMMUTABLE | CAP_LINUX_IMMUTABLE | +| NET_BIND_SERVICE | CAP_NET_BIND_SERVICE | +| NET_BROADCAST | CAP_NET_BROADCAST | +| IPC_LOCK | CAP_IPC_LOCK | +| IPC_OWNER | CAP_IPC_OWNER | +| SYS_CHROOT | CAP_SYS_CHROOT | +| SYS_PTRACE | CAP_SYS_PTRACE | +| SYS_BOOT | CAP_SYS_BOOT | +| LEASE | CAP_LEASE | +| SETFCAP | CAP_SETFCAP | +| WAKE_ALARM | CAP_WAKE_ALARM | +| BLOCK_SUSPEND | CAP_BLOCK_SUSPEND | + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/containers.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/debugging-services.md b/v1.1/docs/user-guide/debugging-services.md new file mode 100644 index 0000000000000..038b4b7ae08da --- /dev/null +++ b/v1.1/docs/user-guide/debugging-services.md @@ -0,0 +1,605 @@ +--- +layout: docwithnav +title: "My Service is not working - how to debug" +--- + + + + + +# My Service is not working - how to debug + +An issue that comes up rather frequently for new installations of Kubernetes is +that `Services` are not working properly. You've run all your `Pod`s and +`ReplicationController`s, but you get no response when you try to access them. +This document will hopefully help you to figure out what's going wrong. + +**Table of Contents** + + +- [My Service is not working - how to debug](#my-service-is-not-working---how-to-debug) + - [Conventions](#conventions) + - [Running commands in a Pod](#running-commands-in-a-pod) + - [Setup](#setup) + - [Does the Service exist?](#does-the-service-exist) + - [Does the Service work by DNS?](#does-the-service-work-by-dns) + - [Does any Service exist in DNS?](#does-any-service-exist-in-dns) + - [Does the Service work by IP?](#does-the-service-work-by-ip) + - [Is the Service correct?](#is-the-service-correct) + - [Does the Service have any Endpoints?](#does-the-service-have-any-endpoints) + - [Are the Pods working?](#are-the-pods-working) + - [Is the kube-proxy working?](#is-the-kube-proxy-working) + - [Is kube-proxy running?](#is-kube-proxy-running) + - [Is kube-proxy writing iptables rules?](#is-kube-proxy-writing-iptables-rules) + - [Is kube-proxy proxying?](#is-kube-proxy-proxying) + - [Seek help](#seek-help) + - [More information](#more-information) + + + +## Conventions + +Throughout this doc you will see various commands that you can run. Some +commands need to be run within `Pod`, others on a Kubernetes `Node`, and others +can run anywhere you have `kubectl` and credentials for the cluster. To make it +clear what is expected, this document will use the following conventions. + +If the command "COMMAND" is expected to run in a `Pod` and produce "OUTPUT": + +{% highlight console %} +{% raw %} +u@pod$ COMMAND +OUTPUT +{% endraw %} +{% endhighlight %} + +If the command "COMMAND" is expected to run on a `Node` and produce "OUTPUT": + +{% highlight console %} +{% raw %} +u@node$ COMMAND +OUTPUT +{% endraw %} +{% endhighlight %} + +If the command is "kubectl ARGS": + +{% highlight console %} +{% raw %} +$ kubectl ARGS +OUTPUT +{% endraw %} +{% endhighlight %} + +## Running commands in a Pod + +For many steps here you will want to see what a `Pod` running in the cluster +sees. Kubernetes does not directly support interactive `Pod`s (yet), but you can +approximate it: + +{% highlight console %} +{% raw %} +$ cat < +{% endraw %} +{% endhighlight %} + +or + +{% highlight console %} +{% raw %} +$ kubectl exec -ti busybox-sleep sh +/ # +{% endraw %} +{% endhighlight %} + +## Setup + +For the purposes of this walk-through, let's run some `Pod`s. Since you're +probably debugging your own `Service` you can substitute your own details, or you +can follow along and get a second data point. + +{% highlight console %} +{% raw %} +$ kubectl run hostnames --image=gcr.io/google_containers/serve_hostname \ + --labels=app=hostnames \ + --port=9376 \ + --replicas=3 +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +hostnames hostnames gcr.io/google_containers/serve_hostname app=hostnames 3 +{% endraw %} +{% endhighlight %} + +Note that this is the same as if you had started the `ReplicationController` with +the following YAML: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: ReplicationController +metadata: + name: hostnames +spec: + selector: + app: hostnames + replicas: 3 + template: + metadata: + labels: + app: hostnames + spec: + containers: + - name: hostnames + image: gcr.io/google_containers/serve_hostname + ports: + - containerPort: 9376 + protocol: TCP +{% endraw %} +{% endhighlight %} + +Confirm your `Pod`s are running: + +{% highlight console %} +{% raw %} +$ kubectl get pods -l app=hostnames +NAME READY STATUS RESTARTS AGE +hostnames-0uton 1/1 Running 0 12s +hostnames-bvc05 1/1 Running 0 12s +hostnames-yp2kp 1/1 Running 0 12s +{% endraw %} +{% endhighlight %} + +## Does the Service exist? + +The astute reader will have noticed that we did not actually create a `Service` +yet - that is intentional. This is a step that sometimes gets forgotten, and +is the first thing to check. + +So what would happen if I tried to access a non-existent `Service`? Assuming you +have another `Pod` that consumes this `Service` by name you would get something +like: + +{% highlight console %} +{% raw %} +u@pod$ wget -qO- hostnames +wget: bad address 'hostname' +{% endraw %} +{% endhighlight %} + +or: + +{% highlight console %} +{% raw %} +u@pod$ echo $HOSTNAMES_SERVICE_HOST +{% endraw %} +{% endhighlight %} + +So the first thing to check is whether that `Service` actually exists: + +{% highlight console %} +{% raw %} +$ kubectl get svc hostnames +Error from server: service "hostnames" not found +{% endraw %} +{% endhighlight %} + +So we have a culprit, let's create the `Service`. As before, this is for the +walk-through - you can use your own `Service`'s details here. + +{% highlight console %} +{% raw %} +$ kubectl expose rc hostnames --port=80 --target-port=9376 +service "hostnames" exposed +{% endraw %} +{% endhighlight %} + +And read it back, just to be sure: + +{% highlight console %} +{% raw %} +$ kubectl get svc hostnames +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +hostnames 10.0.0.1 80/TCP run=hostnames 1h +{% endraw %} +{% endhighlight %} + +As before, this is the same as if you had started the `Service` with YAML: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Service +metadata: + name: hostnames +spec: + selector: + app: hostnames + ports: + - name: default + protocol: TCP + port: 80 + targetPort: 9376 +{% endraw %} +{% endhighlight %} + +Now you can confirm that the `Service` exists. + +## Does the Service work by DNS? + +From a `Pod` in the same `Namespace`: + +{% highlight console %} +{% raw %} +u@pod$ nslookup hostnames +Server: 10.0.0.10 +Address: 10.0.0.10#53 + +Name: hostnames +Address: 10.0.1.175 +{% endraw %} +{% endhighlight %} + +If this fails, perhaps your `Pod` and `Service` are in different +`Namespace`s, try a namespace-qualified name: + +{% highlight console %} +{% raw %} +u@pod$ nslookup hostnames.default +Server: 10.0.0.10 +Address: 10.0.0.10#53 + +Name: hostnames.default +Address: 10.0.1.175 +{% endraw %} +{% endhighlight %} + +If this works, you'll need to ensure that `Pod`s and `Service`s run in the same +`Namespace`. If this still fails, try a fully-qualified name: + +{% highlight console %} +{% raw %} +u@pod$ nslookup hostnames.default.svc.cluster.local +Server: 10.0.0.10 +Address: 10.0.0.10#53 + +Name: hostnames.default.svc.cluster.local +Address: 10.0.1.175 +{% endraw %} +{% endhighlight %} + +Note the suffix here: "default.svc.cluster.local". The "default" is the +`Namespace` we're operating in. The "svc" denotes that this is a `Service`. +The "cluster.local" is your cluster domain. + +You can also try this from a `Node` in the cluster (note: 10.0.0.10 is my DNS +`Service`): + +{% highlight console %} +{% raw %} +u@node$ nslookup hostnames.default.svc.cluster.local 10.0.0.10 +Server: 10.0.0.10 +Address: 10.0.0.10#53 + +Name: hostnames.default.svc.cluster.local +Address: 10.0.1.175 +{% endraw %} +{% endhighlight %} + +If you are able to do a fully-qualified name lookup but not a relative one, you +need to check that your `kubelet` is running with the right flags. +The `--cluster-dns` flag needs to point to your DNS `Service`'s IP and the +`--cluster-domain` flag needs to be your cluster's domain - we assumed +"cluster.local" in this document, but yours might be different, in which case +you should change that in all of the commands above. + +### Does any Service exist in DNS? + +If the above still fails - DNS lookups are not working for your `Service` - we +can take a step back and see what else is not working. The Kubernetes master +`Service` should always work: + +{% highlight console %} +{% raw %} +u@pod$ nslookup kubernetes.default +Server: 10.0.0.10 +Address 1: 10.0.0.10 + +Name: kubernetes +Address 1: 10.0.0.1 +{% endraw %} +{% endhighlight %} + +If this fails, you might need to go to the kube-proxy section of this doc, or +even go back to the top of this document and start over, but instead of +debugging your own `Service`, debug DNS. + +## Does the Service work by IP? + +The next thing to test is whether your `Service` works at all. From a +`Node` in your cluster, access the `Service`'s IP (from `kubectl get` above). + +{% highlight console %} +{% raw %} +u@node$ curl 10.0.1.175:80 +hostnames-0uton + +u@node$ curl 10.0.1.175:80 +hostnames-yp2kp + +u@node$ curl 10.0.1.175:80 +hostnames-bvc05 +{% endraw %} +{% endhighlight %} + +If your `Service` is working, you should get correct responses. If not, there +are a number of things that could be going wrong. Read on. + +## Is the Service correct? + +It might sound silly, but you should really double and triple check that your +`Service` is correct and matches your `Pods`. Read back your `Service` and +verify it: + +{% highlight console %} +{% raw %} +$ kubectl get service hostnames -o json +{ + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "hostnames", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/services/hostnames", + "uid": "428c8b6c-24bc-11e5-936d-42010af0a9bc", + "resourceVersion": "347189", + "creationTimestamp": "2015-07-07T15:24:29Z", + "labels": { + "app": "hostnames" + } + }, + "spec": { + "ports": [ + { + "name": "default", + "protocol": "TCP", + "port": 80, + "targetPort": 9376, + "nodePort": 0 + } + ], + "selector": { + "app": "hostnames" + }, + "clusterIP": "10.0.1.175", + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } +} +{% endraw %} +{% endhighlight %} + +Is the port you are trying to access in `spec.ports[]`? Is the `targetPort` +correct for your `Pod`s? If you meant it to be a numeric port, is it a number +(9376) or a string "9376"? If you meant it to be a named port, do your `Pod`s +expose a port with the same name? Is the port's `protocol` the same as the +`Pod`'s? + +## Does the Service have any Endpoints? + +If you got this far, we assume that you have confirmed that your `Service` +exists and resolves by DNS. Now let's check that the `Pod`s you ran are +actually being selected by the `Service`. + +Earlier we saw that the `Pod`s were running. We can re-check that: + +{% highlight console %} +{% raw %} +$ kubectl get pods -l app=hostnames +NAME READY STATUS RESTARTS AGE +hostnames-0uton 1/1 Running 0 1h +hostnames-bvc05 1/1 Running 0 1h +hostnames-yp2kp 1/1 Running 0 1h +{% endraw %} +{% endhighlight %} + +The "AGE" column says that these `Pod`s are about an hour old, which implies that +they are running fine and not crashing. + +The `-l app=hostnames` argument is a label selector - just like our `Service` +has. Inside the Kubernetes system is a control loop which evaluates the +selector of every `Service` and save the results into an `Endpoints` object. + +{% highlight console %} +{% raw %} +$ kubectl get endpoints hostnames +NAME ENDPOINTS +hostnames 10.244.0.5:9376,10.244.0.6:9376,10.244.0.7:9376 +{% endraw %} +{% endhighlight %} + +This confirms that the control loop has found the correct `Pod`s for your +`Service`. If the `hostnames` row is blank, you should check that the +`spec.selector` field of your `Service` actually selects for `metadata.labels` +values on your `Pod`s. + +## Are the Pods working? + +At this point, we know that your `Service` exists and has selected your `Pod`s. +Let's check that the `Pod`s are actually working - we can bypass the `Service` +mechanism and go straight to the `Pod`s. + +{% highlight console %} +{% raw %} +u@pod$ wget -qO- 10.244.0.5:9376 +hostnames-0uton + +pod $ wget -qO- 10.244.0.6:9376 +hostnames-bvc05 + +u@pod$ wget -qO- 10.244.0.7:9376 +hostnames-yp2kp +{% endraw %} +{% endhighlight %} + +We expect each `Pod` in the `Endpoints` list to return its own hostname. If +this is not what happens (or whatever the correct behavior is for your own +`Pod`s), you should investigate what's happening there. You might find +`kubectl logs` to be useful or `kubectl exec` directly to your `Pod`s and check +service from there. + +## Is the kube-proxy working? + +If you get here, your `Service` is running, has `Endpoints`, and your `Pod`s +are actually serving. At this point, the whole `Service` proxy mechanism is +suspect. Let's confirm it, piece by piece. + +### Is kube-proxy running? + +Confirm that `kube-proxy` is running on your `Node`s. You should get something +like the below: + +{% highlight console %} +{% raw %} +u@node$ ps auxw | grep kube-proxy +root 4194 0.4 0.1 101864 17696 ? Sl Jul04 25:43 /usr/local/bin/kube-proxy --master=https://kubernetes-master --kubeconfig=/var/lib/kube-proxy/kubeconfig --v=2 +{% endraw %} +{% endhighlight %} + +Next, confirm that it is not failing something obvious, like contacting the +master. To do this, you'll have to look at the logs. Accessing the logs +depends on your `Node` OS. On some OSes it is a file, such as +/var/log/kube-proxy.log, while other OSes use `journalctl` to access logs. You +should see something like: + +{% highlight console %} +{% raw %} +I0707 17:34:53.945651 30031 server.go:88] Running in resource-only container "/kube-proxy" +I0707 17:34:53.945921 30031 proxier.go:121] Setting proxy IP to 10.240.115.247 and initializing iptables +I0707 17:34:54.053023 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/kubernetes: to [10.240.169.188:443] +I0707 17:34:54.053175 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/hostnames:default to [10.244.0.5:9376 10.244.0.6:9376 10.244.0.7:9376] +I0707 17:34:54.053284 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/kube-dns:dns to [10.244.3.3:53] +I0707 17:34:54.053310 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/kube-dns:dns-tcp to [10.244.3.3:53] +I0707 17:34:54.054780 30031 proxier.go:306] Adding new service "default/kubernetes:" at 10.0.0.1:443/TCP +I0707 17:34:54.054903 30031 proxier.go:247] Proxying for service "default/kubernetes:" on TCP port 40074 +I0707 17:34:54.079181 30031 proxier.go:306] Adding new service "default/hostnames:default" at 10.0.1.175:80/TCP +I0707 17:34:54.079273 30031 proxier.go:247] Proxying for service "default/hostnames:default" on TCP port 48577 +I0707 17:34:54.113665 30031 proxier.go:306] Adding new service "default/kube-dns:dns" at 10.0.0.10:53/UDP +I0707 17:34:54.113776 30031 proxier.go:247] Proxying for service "default/kube-dns:dns" on UDP port 34149 +I0707 17:34:54.120224 30031 proxier.go:306] Adding new service "default/kube-dns:dns-tcp" at 10.0.0.10:53/TCP +I0707 17:34:54.120297 30031 proxier.go:247] Proxying for service "default/kube-dns:dns-tcp" on TCP port 53476 +I0707 17:34:54.902313 30031 proxysocket.go:130] Accepted TCP connection from 10.244.3.3:42670 to 10.244.3.1:40074 +I0707 17:34:54.903107 30031 proxysocket.go:130] Accepted TCP connection from 10.244.3.3:42671 to 10.244.3.1:40074 +I0707 17:35:46.015868 30031 proxysocket.go:246] New UDP connection from 10.244.3.2:57493 +I0707 17:35:46.017061 30031 proxysocket.go:246] New UDP connection from 10.244.3.2:55471 +{% endraw %} +{% endhighlight %} + +If you see error messages about not being able to contact the master, you +should double-check your `Node` configuration and installation steps. + +### Is kube-proxy writing iptables rules? + +One of the main responsibilities of `kube-proxy` is to write the `iptables` +rules which implement `Service`s. Let's check that those rules are getting +written. + +{% highlight console %} +{% raw %} +u@node$ iptables-save | grep hostnames +-A KUBE-PORTALS-CONTAINER -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames:default" -m tcp --dport 80 -j REDIRECT --to-ports 48577 +-A KUBE-PORTALS-HOST -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames:default" -m tcp --dport 80 -j DNAT --to-destination 10.240.115.247:48577 +{% endraw %} +{% endhighlight %} + +There should be 2 rules for each port on your `Service` (just one in this +example) - a "KUBE-PORTALS-CONTAINER" and a "KUBE-PORTALS-HOST". If you do +not see these, try restarting `kube-proxy` with the `-V` flag set to 4, and +then look at the logs again. + +### Is kube-proxy proxying? + +Assuming you do see the above rules, try again to access your `Service` by IP: + +{% highlight console %} +{% raw %} +u@node$ curl 10.0.1.175:80 +hostnames-0uton +{% endraw %} +{% endhighlight %} + +If this fails, we can try accessing the proxy directly. Look back at the +`iptables-save` output above, and extract the port number that `kube-proxy` is +using for your `Service`. In the above examples it is "48577". Now connect to +that: + +{% highlight console %} +{% raw %} +u@node$ curl localhost:48577 +hostnames-yp2kp +{% endraw %} +{% endhighlight %} + +If this still fails, look at the `kube-proxy` logs for specific lines like: + +{% highlight console %} +{% raw %} +Setting endpoints for default/hostnames:default to [10.244.0.5:9376 10.244.0.6:9376 10.244.0.7:9376] +{% endraw %} +{% endhighlight %} + +If you don't see those, try restarting `kube-proxy` with the `-V` flag set to 4, and +then look at the logs again. + +## Seek help + +If you get this far, something very strange is happening. Your `Service` is +running, has `Endpoints`, and your `Pod`s are actually serving. You have DNS +working, `iptables` rules installed, and `kube-proxy` does not seem to be +misbehaving. And yet your `Service` is not working. You should probably let +us know, so we can help investigate! + +Contact us on +[Slack](../troubleshooting.html#slack) or +[email](https://groups.google.com/forum/#!forum/google-containers) or +[GitHub](https://github.com/kubernetes/kubernetes). + +## More information + +Visit [troubleshooting document](../troubleshooting.html) for more information. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/debugging-services.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/deploying-applications.md b/v1.1/docs/user-guide/deploying-applications.md new file mode 100644 index 0000000000000..340cbf55ec3e8 --- /dev/null +++ b/v1.1/docs/user-guide/deploying-applications.md @@ -0,0 +1,160 @@ +--- +layout: docwithnav +title: "Kubernetes User Guide: Managing Applications: Deploying continuously running applications" +--- + + + + + +# Kubernetes User Guide: Managing Applications: Deploying continuously running applications + +**Table of Contents** + + +- [Kubernetes User Guide: Managing Applications: Deploying continuously running applications](#kubernetes-user-guide-managing-applications-deploying-continuously-running-applications) + - [Launching a set of replicas using a configuration file](#launching-a-set-of-replicas-using-a-configuration-file) + - [Viewing replication controller status](#viewing-replication-controller-status) + - [Deleting replication controllers](#deleting-replication-controllers) + - [Labels](#labels) + - [What's next?](#whats-next) + + + +You previously read about how to quickly deploy a simple replicated application using [`kubectl run`](quick-start.html) and how to configure and launch single-run containers using pods ([Configuring containers](configuring-containers.html)). Here you’ll use the configuration-based approach to deploy a continuously running, replicated application. + +## Launching a set of replicas using a configuration file + +Kubernetes creates and manages sets of replicated containers (actually, replicated [Pods](pods.html)) using [*Replication Controllers*](replication-controller.html). + +A replication controller simply ensures that a specified number of pod "replicas" are running at any one time. If there are too many, it will kill some. If there are too few, it will start more. It’s analogous to Google Compute Engine’s [Instance Group Manager](https://cloud.google.com/compute/docs/instance-groups/manager/) or AWS’s [Auto-scaling Group](http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroup.html) (with no scaling policies). + +The replication controller created to run nginx by `kubectl run` in the [Quick start](quick-start.html) could be specified using YAML as follows: + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: ReplicationController +metadata: + name: my-nginx +spec: + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx + ports: + - containerPort: 80 +{% endraw %} +{% endhighlight %} + +Some differences compared to specifying just a pod are that the `kind` is `ReplicationController`, the number of `replicas` desired is specified, and the pod specification is under the `template` field. The names of the pods don’t need to be specified explicitly because they are generated from the name of the replication controller. +View the [replication controller API +object](http://kubernetes.io/v1.1/docs/api-reference/v1/definitions.html#_v1_replicationcontroller) +to view the list of supported fields. + +This replication controller can be created using `create`, just as with pods: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./nginx-rc.yaml +replicationcontrollers/my-nginx +{% endraw %} +{% endhighlight %} + +Unlike in the case where you directly create pods, a replication controller replaces pods that are deleted or terminated for any reason, such as in the case of node failure. For this reason, we recommend that you use a replication controller for a continuously running application even if your application requires only a single pod, in which case you can omit `replicas` and it will default to a single replica. + +## Viewing replication controller status + +You can view the replication controller you created using `get`: + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS +my-nginx nginx nginx app=nginx 2 +{% endraw %} +{% endhighlight %} + +This tells you that your controller will ensure that you have two nginx replicas. + +You can see those replicas using `get`, just as with pods you created directly: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +my-nginx-065jq 1/1 Running 0 51s +my-nginx-buaiq 1/1 Running 0 51s +{% endraw %} +{% endhighlight %} + +## Deleting replication controllers + +When you want to kill your application, delete your replication controller, as in the [Quick start](quick-start.html): + +{% highlight console %} +{% raw %} +$ kubectl delete rc my-nginx +replicationcontrollers/my-nginx +{% endraw %} +{% endhighlight %} + +By default, this will also cause the pods managed by the replication controller to be deleted. If there were a large number of pods, this may take a while to complete. If you want to leave the pods running, specify `--cascade=false`. + +If you try to delete the pods before deleting the replication controller, it will just replace them, as it is supposed to do. + +## Labels + +Kubernetes uses user-defined key-value attributes called [*labels*](labels.html) to categorize and identify sets of resources, such as pods and replication controllers. The example above specified a single label in the pod template, with key `app` and value `nginx`. All pods created carry that label, which can be viewed using `-L`: + +{% highlight console %} +{% raw %} +$ kubectl get pods -L app +NAME READY STATUS RESTARTS AGE APP +my-nginx-afv12 0/1 Running 0 3s nginx +my-nginx-lg99z 0/1 Running 0 3s nginx +{% endraw %} +{% endhighlight %} + +The labels from the pod template are copied to the replication controller’s labels by default, as well -- all resources in Kubernetes support labels: + +{% highlight console %} +{% raw %} +$ kubectl get rc my-nginx -L app +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS APP +my-nginx nginx nginx app=nginx 2 nginx +{% endraw %} +{% endhighlight %} + +More importantly, the pod template’s labels are used to create a [`selector`](labels.html#label-selectors) that will match pods carrying those labels. You can see this field by requesting it using the [Go template output format of `kubectl get`](kubectl/kubectl_get.html): + +{% highlight console %} +{% raw %} +$ kubectl get rc my-nginx -o template --template="{{.spec.selector}}" +map[app:nginx] +{% endraw %} +{% endhighlight %} + +You could also specify the `selector` explicitly, such as if you wanted to specify labels in the pod template that you didn’t want to select on, but you should ensure that the selector will match the labels of the pods created from the pod template, and that it won’t match pods created by other replication controllers. The most straightforward way to ensure the latter is to create a unique label value for the replication controller, and to specify it in both the pod template’s labels and in the selector. + +## What's next? + +[Learn about exposing applications to users and clients, and connecting tiers of your application together.](connecting-applications.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/deploying-applications.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/deployments.md b/v1.1/docs/user-guide/deployments.md new file mode 100644 index 0000000000000..48f0d2aaf77d3 --- /dev/null +++ b/v1.1/docs/user-guide/deployments.md @@ -0,0 +1,418 @@ +--- +layout: docwithnav +title: "Deployments" +--- + + + + + +# Deployments + +**Table of Contents** + + +- [Deployments](#deployments) + - [What is a _Deployment_?](#what-is-a-deployment) + - [Enabling Deployments on kubernetes cluster](#enabling-deployments-on-kubernetes-cluster) + - [Creating a Deployment](#creating-a-deployment) + - [Updating a Deployment](#updating-a-deployment) + - [Multiple Updates](#multiple-updates) + - [Writing a Deployment Spec](#writing-a-deployment-spec) + - [Pod Template](#pod-template) + - [Replicas](#replicas) + - [Selector](#selector) + - [Unique Label Key](#unique-label-key) + - [Strategy](#strategy) + - [Recreate Deployment](#recreate-deployment) + - [Rolling Update Deployment](#rolling-update-deployment) + - [Max Unavailable](#max-unavailable) + - [Max Surge](#max-surge) + - [Min Ready Seconds](#min-ready-seconds) + - [Alternative to Deployments](#alternative-to-deployments) + - [kubectl rolling update](#kubectl-rolling-update) + + + +## What is a _Deployment_? + +A _Deployment_ provides declarative update for Pods and ReplicationControllers. +Users describe the desired state in deployment object and deployment +controller changes the actual state to that at a controlled rate. +Users can define deployments to create new resources, or replace existing ones +by new ones. + +A typical use case is: +* Create a deployment to bring up a replication controller and pods. +* Later, update that deployment to recreate the pods (for ex: to use a new image). + +## Enabling Deployments on kubernetes cluster + +Deployments is part of the [`extensions` API Group](../api.html#api-groups) and is not enabled by default. +Set `--runtime-config=extensions/v1beta1/deployments=true` on API server to +enable it. +This can be achieved by exporting `ENABLE_DEPLOYMENTS=true` before running +`kube-up.sh` script on GCE. + +Note that Deployment objects effectively have [API version +`v1alpha1`](../api.html#api-versioning). +Alpha objects may change or even be discontinued in future software releases. +However, due to to a known issue, they will appear as API version `v1beta1` if +enabled. + +## Creating a Deployment + +Here is an example Deployment. It creates a replication controller to +bring up 3 nginx pods. + + + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + replicas: 3 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.7.9 + ports: + - containerPort: 80 +{% endraw %} +{% endhighlight %} + +[Download example](nginx-deployment.yaml) + + +Run the example by downloading the example file and then running this command: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/user-guide/nginx-deployment.yaml +deployment "nginx-deployment" created +{% endraw %} +{% endhighlight %} + +Running a get immediately will give: + +{% highlight console %} +{% raw %} +$ kubectl get deployments +NAME UPDATEDREPLICAS AGE +nginx-deployment 0/3 8s +{% endraw %} +{% endhighlight %} + +This indicates that deployment is trying to update 3 replicas. It has not +updated any one of those yet. + +Running a get again after a minute, will give: + +{% highlight console %} +{% raw %} +$ kubectl get deployments +NAME UPDATEDREPLICAS AGE +nginx-deployment 3/3 1m +{% endraw %} +{% endhighlight %} + +This indicates that deployent has created all the 3 replicas. +Running ```kubectl get rc``` and ```kubectl get pods``` will show the replication controller (RC) and pods created. + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +REPLICAS AGE +deploymentrc-1975012602 nginx nginx:1.7.9 deployment.kubernetes.io/podTemplateHash=1975012602,app=nginx 3 2m +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +deploymentrc-1975012602-4f2tb 1/1 Running 0 1m +deploymentrc-1975012602-j975u 1/1 Running 0 1m +deploymentrc-1975012602-uashb 1/1 Running 0 1m +{% endraw %} +{% endhighlight %} + +The created RC will ensure that there are 3 nginx pods at all time. + +## Updating a Deployment + +Lets say, now we want to update the nginx pods to start using nginx:1.9.1 image +instead of nginx:1.7.9. +For this, we update our deployment to be as follows: + + + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + replicas: 3 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.9.1 + ports: + - containerPort: 80 +{% endraw %} +{% endhighlight %} + +[Download example](new-nginx-deployment.yaml) + + + +{% highlight console %} +{% raw %} +$ kubectl apply -f docs/user-guide/new-nginx-deployment.yaml +deployment "nginx-deployment" configured +{% endraw %} +{% endhighlight %} + +Running a get immediately will still give: + +{% highlight console %} +{% raw %} +$ kubectl get deployments +NAME UPDATEDREPLICAS AGE +nginx-deployment 3/3 8s +{% endraw %} +{% endhighlight %} + +This indicates that deployment status has not been updated yet (it is still +showing old status). +Running a get again after a minute, will give: + +{% highlight console %} +{% raw %} +$ kubectl get deployments +NAME UPDATEDREPLICAS AGE +nginx-deployment 1/3 1m +{% endraw %} +{% endhighlight %} + +This indicates that deployment has updated one of the three pods that it needs +to update. +Eventually, it will get around to updating all the pods. + +{% highlight console %} +{% raw %} +$ kubectl get deployments +NAME UPDATEDREPLICAS AGE +nginx-deployment 3/3 3m +{% endraw %} +{% endhighlight %} + +We can run ```kubectl get rc``` to see that deployment updated the pods by creating a new RC +which it scaled up to 3 and scaled down the old RC to 0. + +{% highlight console %} +{% raw %} +kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +deploymentrc-1562004724 nginx nginx:1.9.1 deployment.kubernetes.io/podTemplateHash=1562004724,app=nginx 3 5m +deploymentrc-1975012602 nginx nginx:1.7.9 deployment.kubernetes.io/podTemplateHash=1975012602,app=nginx 0 7m +{% endraw %} +{% endhighlight %} + +Running get pods, will only show the new pods. + +{% highlight console %} +{% raw %} +kubectl get pods +NAME READY STATUS RESTARTS AGE +deploymentrc-1562004724-0tgk5 1/1 Running 0 9m +deploymentrc-1562004724-1rkfl 1/1 Running 0 8m +deploymentrc-1562004724-6v702 1/1 Running 0 8m +{% endraw %} +{% endhighlight %} + +Next time we want to update pods, we can just update the deployment again. + +Deployment ensures that not all pods are down while they are being updated. By +default, it ensures that minimum of 1 less than the desired number of pods are +up. For example, if you look at the above deployment closely, you will see that +it first created a new pod, then deleted some old pods and created new ones. It +does not kill old pods until a sufficient number of new pods have come up. + +{% highlight console %} +{% raw %} +$ kubectl describe deployments +Name: nginx-deployment +Namespace: default +CreationTimestamp: Thu, 22 Oct 2015 17:58:49 -0700 +Labels: app=nginx-deployment +Selector: app=nginx +Replicas: 3 updated / 3 total +StrategyType: RollingUpdate +RollingUpdateStrategy: 1 max unavailable, 1 max surge, 0 min ready seconds +OldReplicationControllers: deploymentrc-1562004724 (3/3 replicas created) +NewReplicationController: +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + ───────── ──────── ───── ──── ───────────── ────── ─────── + 10m 10m 1 {deployment-controller } ScalingRC Scaled up rc deploymentrc-1975012602 to 3 + 2m 2m 1 {deployment-controller } ScalingRC Scaled up rc deploymentrc-1562004724 to 1 + 2m 2m 1 {deployment-controller } ScalingRC Scaled down rc deploymentrc-1975012602 to 1 + 1m 1m 1 {deployment-controller } ScalingRC Scaled up rc deploymentrc-1562004724 to 3 + 1m 1m 1 {deployment-controller } ScalingRC Scaled down rc deploymentrc-1975012602 to 0 +{% endraw %} +{% endhighlight %} + +Here we see that when we first created the deployment, it created an RC and scaled it up to 3 replicas directly. +When we updated the deployment, it created a new RC and scaled it up to 1 and then scaled down the old RC by 1, so that at least 2 pods were available at all times. +It then scaled up the new RC to 3 and when those pods were ready, it scaled down the old RC to 0. + +### Multiple Updates + +Each time a new deployment object is observed, a replication controller is +created to bring up the desired pods if there is no existing RC doing so. +Existing RCs controlling pods whose labels match `.spec.selector` but the +template does not match `.spec.template` are scaled down. +Eventually, the new RC will be scaled to `.spec.replicas` and all old RCs will +be scaled to 0. +If the user updates the deployment while an existing deployment was in progress, +deployment will create a new RC as per the update and start scaling that up and +will roll the RC that it was scaling up before in its list of old RCs and will +start scaling it down. +For example: If user creates a deployment to create 5 replicas of nginx:1.7.9. +But then updates the deployment to create 5 replicas of nging:1.9.1, when only 3 +replicas of nginx:1.7.9 had been created, then deployment will immediately start +killing the 3 nginx:1.7.9 pods that it had created and will start creating +nginx:1.9.1 pods. It will not wait for 5 replicas of nginx:1.7.9 to be created +before changing course. + +## Writing a Deployment Spec + +As with all other Kubernetes configs, a Deployment needs `apiVersion`, `kind`, and +`metadata` fields. For general information about working with config files, +see [here](deploying-applications.html), [here](configuring-containers.html), and [here](working-with-resources.html). + +A Deployment also needs a [`.spec` section](../devel/api-conventions.html#spec-and-status). + +### Pod Template + +The `.spec.template` is the only required field of the `.spec`. + +The `.spec.template` is a [pod template](replication-controller.html#pod-template). It has exactly +the same schema as a [pod](pods.html), except it is nested and does not have an +`apiVersion` or `kind`. + +### Replicas + +`.spec.replicas` is an optional field that specifies the number of desired pods. Defaults +to 1. + +### Selector + +`.spec.selector` is an optional field that specifies label selectors for pods +targeted by this deployment. Deployment kills some of these pods, if their +template is different than `.spec.template` or if the total number of such pods +exceeds `.spec.replicas`. It will bring up new pods with `.spec.template` if +number of pods are less than the desired number. + +### Unique Label Key + +`.spec.uniqueLabelKey` is an optional field specifying key of the selector that +is added to existing RCs (and label key that is added to its pods) to prevent +the existing RCs to select new pods (and old pods being selected by new RC). +Users can set this to an empty string to indicate that the system should +not add any selector and label. If unspecified, system uses +"deployment.kubernetes.io/podTemplateHash". +Value of this key is hash of `.spec.template`. +No label is added if this is set to empty string. + +### Strategy + +`.spec.strategy` specifies the strategy to replace old pods by new ones. +`.spec.strategy.type` can be "Recreate" or "RollingUpdate". "RollingUpdate" is +the default value. + +#### Recreate Deployment + +All existing pods are killed before new ones are created when +`.spec.strategy.type==Recreate`. +Note: This is not implemented yet. + +#### Rolling Update Deployment + +Deployment updates pods in a [rolling update][update-demo/] fashion +when `.spec.strategy.type==RollingUpdate`. +Users can specify `maxUnavailable`, `maxSurge` and `minReadySeconds` to control +the rolling update process. + +##### Max Unavailable + +`.spec.strategy.rollingUpdate.maxUnavailable` is an optional field that specifies the +maximum number of pods that can be unavailable during the update process. +Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: +10%). +Absolute number is calculated from percentage by rounding up. +This can not be 0 if `.spec.strategy.rollingUpdate.maxSurge` is 0. +By default, a fixed value of 1 is used. +Example: when this is set to 30%, the old RC can be scaled down to +70% of desired pods immediately when the rolling update starts. Once new pods are +ready, old RC can be scaled down further, followed by scaling up the new RC, +ensuring that the total number of pods available at all times during the +update is at least 70% of desired pods. + +##### Max Surge + +`.spec.strategy.rollingUpdate.maxSurge` is an optional field that specifies the +maximum number of pods that can be created above the desired number of pods. +Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: +10%). +This can not be 0 if MaxUnavailable is 0. +Absolute number is calculated from percentage by rounding up. +By default, a value of 1 is used. +Example: when this is set to 30%, the new RC can be scaled up immediately when +the rolling update starts, such that the total number of old and new pods do not exceed +130% of desired pods. Once old pods have been killed, +new RC can be scaled up further, ensuring that total number of pods running +at any time during the update is atmost 130% of desired pods. + +##### Min Ready Seconds + +`.spec.strategy.rollingUpdate.minReadySeconds` is an optional field that specifies the +minimum number of seconds for which a newly created pod should be ready +without any of its container crashing, for it to be considered available. +Defaults to 0 (pod will be considered available as soon as it is ready). +Note: This is not implemented yet. + +## Alternative to Deployments + +### kubectl rolling update + +[Kubectl rolling update](kubectl/kubectl_rolling-update.html) also updates pods and replication controllers in a similar fashion. +But deployments is declarative and is server side. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/deployments.md?pixel)]() + + diff --git a/v1.1/reference/docker-cli-to-kubectl.md b/v1.1/docs/user-guide/docker-cli-to-kubectl.md similarity index 93% rename from v1.1/reference/docker-cli-to-kubectl.md rename to v1.1/docs/user-guide/docker-cli-to-kubectl.md index 3d9153c213abe..c24b3db646257 100644 --- a/v1.1/reference/docker-cli-to-kubectl.md +++ b/v1.1/docs/user-guide/docker-cli-to-kubectl.md @@ -1,12 +1,31 @@ --- +layout: docwithnav title: "kubectl for docker users" --- + + + + + +# kubectl for docker users In this doc, we introduce the Kubernetes command line for interacting with the api to docker-cli users. The tool, kubectl, is designed to be familiar to docker-cli users but there are a few necessary differences. Each section of this doc highlights a docker subcommand explains the kubectl equivalent. **Table of Contents** + + +- [kubectl for docker users](#kubectl-for-docker-users) + - [docker run](#docker-run) + - [docker ps](#docker-ps) + - [docker attach](#docker-attach) + - [docker exec](#docker-exec) + - [docker logs](#docker-logs) + - [docker stop and docker rm](#docker-stop-and-docker-rm) + - [docker login](#docker-login) + - [docker version](#docker-version) + - [docker info](#docker-info) -{% include pagetoc.html %} + #### docker run @@ -337,6 +356,13 @@ InfluxDB is running at https://108.59.85.141/api/v1/proxy/namespaces/kube-system {% endhighlight %} + + + + + + + [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/docker-cli-to-kubectl.md?pixel)]() diff --git a/v1.1/docs/user-guide/downward-api.md b/v1.1/docs/user-guide/downward-api.md new file mode 100644 index 0000000000000..1db0abd4a1700 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api.md @@ -0,0 +1,181 @@ +--- +layout: docwithnav +title: "Downward API" +--- + + + + + +# Downward API + +It is sometimes useful for a container to have information about itself, but we +want to be careful not to over-couple containers to Kubernetes. The downward +API allows containers to consume information about themselves or the system and +expose that information how they want it, without necessarily coupling to the +Kubernetes client or REST API. + +An example of this is a "legacy" app that is already written assuming +that a particular environment variable will hold a unique identifier. While it +is often possible to "wrap" such applications, this is tedious and error prone, +and violates the goal of low coupling. Instead, the user should be able to use +the Pod's name, for example, and inject it into this well-known variable. + +## Capabilities + +The following information is available to a `Pod` through the downward API: + +* The pod's name +* The pod's namespace +* The pod's IP + +More information will be exposed through this same API over time. + +## Exposing pod information into a container + +Containers consume information from the downward API using environment +variables or using a volume plugin. + +### Environment variables + +Most environment variables in the Kubernetes API use the `value` field to carry +simple values. However, the alternate `valueFrom` field allows you to specify +a `fieldRef` to select fields from the pod's definition. The `fieldRef` field +is a structure that has an `apiVersion` field and a `fieldPath` field. The +`fieldPath` field is an expression designating a field of the pod. The +`apiVersion` field is the version of the API schema that the `fieldPath` is +written in terms of. If the `apiVersion` field is not specified it is +defaulted to the API version of the enclosing object. + +The `fieldRef` is evaluated and the resulting value is used as the value for +the environment variable. This allows users to publish their pod's name in any +environment variable they want. + +## Example + +This is an example of a pod that consumes its name and namespace via the +downward API: + + + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: gcr.io/google_containers/busybox + command: [ "/bin/sh", "-c", "env" ] + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + restartPolicy: Never +{% endraw %} +{% endhighlight %} + +[Download example](downward-api/dapi-pod.yaml) + + + + +### Downward API volume + +Using a similar syntax it's possible to expose pod information to containers using plain text files. +Downward API are dumped to a mounted volume. This is achieved using a `downwardAPI` +volume type and the different items represent the files to be created. `fieldPath` references the field to be exposed. + +Downward API volume permits to store more complex data like [`metadata.labels`](labels.html) and [`metadata.annotations`](annotations.html). Currently key/value pair set fields are saved using `key="value"` format: + +``` +{% raw %} +key1="value1" +key2="value2" +{% endraw %} +``` + +In future, it will be possible to specify an output format option. + +Downward API volumes can expose: + +* The pod's name +* The pod's namespace +* The pod's labels +* The pod's annotations + +The downward API volume refreshes its data in step with the kubelet refresh loop. When labels will be modifiable on the fly without respawning the pod containers will be able to detect changes through mechanisms such as [inotify](https://en.wikipedia.org/wiki/Inotify). + +In future, it will be possible to specify a specific annotation or label. + +## Example + +This is an example of a pod that consumes its labels and annotations via the downward API volume, labels and annotations are dumped in `/etc/podlabels` and in `/etc/annotations`, respectively: + + + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: Pod +metadata: + name: kubernetes-downwardapi-volume-example + labels: + zone: us-est-coast + cluster: test-cluster1 + rack: rack-22 + annotations: + build: two + builder: john-doe +spec: + containers: + - name: client-container + image: gcr.io/google_containers/busybox + command: ["sh", "-c", "while true; do if [[ -e /etc/labels ]]; then cat /etc/labels; fi; if [[ -e /etc/annotations ]]; then cat /etc/annotations; fi; sleep 5; done"] + volumeMounts: + - name: podinfo + mountPath: /etc + readOnly: false + volumes: + - name: podinfo + downwardAPI: + items: + - path: "labels" + fieldRef: + fieldPath: metadata.labels + - path: "annotations" + fieldRef: + fieldPath: metadata.annotations +{% endraw %} +{% endhighlight %} + +[Download example](downward-api/volume/dapi-volume.yaml) + + +Some more thorough examples: + * [environment variables](environment-guide/) + * [downward API](downward-api/) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/downward-api.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/downward-api/README.md b/v1.1/docs/user-guide/downward-api/README.md new file mode 100644 index 0000000000000..497e822507cb3 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api/README.md @@ -0,0 +1,60 @@ +--- +layout: docwithnav +title: "Downward API example" +--- + + + + + +# Downward API example + +Following this example, you will create a pod with a container that consumes the pod's name and +namespace using the [downward API](../downward-api.html). + +## Step Zero: Prerequisites + +This example assumes you have a Kubernetes cluster installed and running, and that you have +installed the `kubectl` command line tool somewhere in your path. Please see the [getting +started](../../../docs/getting-started-guides/) for installation instructions for your platform. + +## Step One: Create the pod + +Containers consume the downward API using environment variables. The downward API allows +containers to be injected with the name and namespace of the pod the container is in. + +Use the [`examples/downward-api/dapi-pod.yaml`](dapi-pod.yaml) file to create a Pod with a container that consumes the +downward API. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/user-guide/downward-api/dapi-pod.yaml +{% endraw %} +{% endhighlight %} + +### Examine the logs + +This pod runs the `env` command in a container that consumes the downward API. You can grep +through the pod logs to see that the pod was injected with the correct values: + +{% highlight console %} +{% raw %} +$ kubectl logs dapi-test-pod | grep POD_ +2015-04-30T20:22:18.568024817Z MY_POD_NAME=dapi-test-pod +2015-04-30T20:22:18.568087688Z MY_POD_NAMESPACE=default +2015-04-30T20:22:18.568092435Z MY_POD_IP=10.0.1.6 +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/downward-api/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/downward-api/dapi-pod.yaml b/v1.1/docs/user-guide/downward-api/dapi-pod.yaml new file mode 100644 index 0000000000000..7d688aa0e9975 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api/dapi-pod.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: gcr.io/google_containers/busybox + command: [ "/bin/sh", "-c", "env" ] + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + restartPolicy: Never diff --git a/v1.1/docs/user-guide/downward-api/index.md b/v1.1/docs/user-guide/downward-api/index.md new file mode 100644 index 0000000000000..497e822507cb3 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api/index.md @@ -0,0 +1,60 @@ +--- +layout: docwithnav +title: "Downward API example" +--- + + + + + +# Downward API example + +Following this example, you will create a pod with a container that consumes the pod's name and +namespace using the [downward API](../downward-api.html). + +## Step Zero: Prerequisites + +This example assumes you have a Kubernetes cluster installed and running, and that you have +installed the `kubectl` command line tool somewhere in your path. Please see the [getting +started](../../../docs/getting-started-guides/) for installation instructions for your platform. + +## Step One: Create the pod + +Containers consume the downward API using environment variables. The downward API allows +containers to be injected with the name and namespace of the pod the container is in. + +Use the [`examples/downward-api/dapi-pod.yaml`](dapi-pod.yaml) file to create a Pod with a container that consumes the +downward API. + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/user-guide/downward-api/dapi-pod.yaml +{% endraw %} +{% endhighlight %} + +### Examine the logs + +This pod runs the `env` command in a container that consumes the downward API. You can grep +through the pod logs to see that the pod was injected with the correct values: + +{% highlight console %} +{% raw %} +$ kubectl logs dapi-test-pod | grep POD_ +2015-04-30T20:22:18.568024817Z MY_POD_NAME=dapi-test-pod +2015-04-30T20:22:18.568087688Z MY_POD_NAMESPACE=default +2015-04-30T20:22:18.568092435Z MY_POD_IP=10.0.1.6 +{% endraw %} +{% endhighlight %} + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/downward-api/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/downward-api/volume/README.md b/v1.1/docs/user-guide/downward-api/volume/README.md new file mode 100644 index 0000000000000..fac8c263a5ac7 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api/volume/README.md @@ -0,0 +1,95 @@ +--- +layout: docwithnav +title: "Downward API volume plugin" +--- + + + + + +# Downward API volume plugin + +Following this example, you will create a pod with a downward API volume. +A downward API volume is a k8s volume plugin with the ability to save some pod information in a plain text file. The pod information can be for example some [metadata](../../../../docs/devel/api-conventions.html#metadata). + +Supported metadata fields: + +1. `metadata.annotations` +2. `metadata.namespace` +3. `metadata.name` +4. `metadata.labels` + +### Step Zero: Prerequisites + +This example assumes you have a Kubernetes cluster installed and running, and the ```kubectl``` command line tool somewhere in your path. Please see the [gettingstarted](../../../../docs/getting-started-guides/) for installation instructions for your platform. + +### Step One: Create the pod + +Use the `docs/user-guide/downward-api/dapi-volume.yaml` file to create a Pod with a  downward API volume which stores pod labels and pod annotations to `/etc/labels` and  `/etc/annotations` respectively. + +{% highlight sh %} +{% raw %} +$ kubectl create -f docs/user-guide/downward-api/volume/dapi-volume.yaml +{% endraw %} +{% endhighlight %} + +### Step Two: Examine pod/container output + +The pod displays (every 5 seconds) the content of the dump files which can be executed via the usual `kubectl log` command + +{% highlight sh %} +{% raw %} +$ kubectl logs kubernetes-downwardapi-volume-example +cluster="test-cluster1" +rack="rack-22" +zone="us-est-coast" +build="two" +builder="john-doe" +kubernetes.io/config.seen="2015-08-24T13:47:23.432459138Z" +kubernetes.io/config.source="api" +{% endraw %} +{% endhighlight %} + +### Internals + +In pod's `/etc` directory one may find the file created by the plugin (system files elided): + +{% highlight sh %} +{% raw %} +$ kubectl exec kubernetes-downwardapi-volume-example -i -t -- sh +/ # ls -laR /etc +/etc: +total 32 +drwxrwxrwt 3 0 0 180 Aug 24 13:03 . +drwxr-xr-x 1 0 0 4096 Aug 24 13:05 .. +drwx------ 2 0 0 80 Aug 24 13:03 ..2015_08_24_13_03_44259413923 +lrwxrwxrwx 1 0 0 30 Aug 24 13:03 ..downwardapi -> ..2015_08_24_13_03_44259413923 +lrwxrwxrwx 1 0 0 25 Aug 24 13:03 annotations -> ..downwardapi/annotations +lrwxrwxrwx 1 0 0 20 Aug 24 13:03 labels -> ..downwardapi/labels + +/etc/..2015_08_24_13_03_44259413923: +total 8 +drwx------ 2 0 0 80 Aug 24 13:03 . +drwxrwxrwt 3 0 0 180 Aug 24 13:03 .. +-rw-r--r-- 1 0 0 115 Aug 24 13:03 annotations +-rw-r--r-- 1 0 0 53 Aug 24 13:03 labels +/ # +{% endraw %} +{% endhighlight %} + +The file `labels` is stored in a temporary directory (`..2015_08_24_13_03_44259413923` in the example above) which is symlinked to by `..downwardapi`. Symlinks for annotations and labels in `/etc` point to files containing the actual metadata through the `..downwardapi` indirection.  This structure allows for dynamic atomic refresh of the metadata: updates are written to a new temporary directory, and the `..downwardapi` symlink is updated atomically using `rename(2)`. + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/downward-api/volume/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/downward-api/volume/dapi-volume.yaml b/v1.1/docs/user-guide/downward-api/volume/dapi-volume.yaml new file mode 100644 index 0000000000000..be926498d19e6 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api/volume/dapi-volume.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kubernetes-downwardapi-volume-example + labels: + zone: us-est-coast + cluster: test-cluster1 + rack: rack-22 + annotations: + build: two + builder: john-doe +spec: + containers: + - name: client-container + image: gcr.io/google_containers/busybox + command: ["sh", "-c", "while true; do if [[ -e /etc/labels ]]; then cat /etc/labels; fi; if [[ -e /etc/annotations ]]; then cat /etc/annotations; fi; sleep 5; done"] + volumeMounts: + - name: podinfo + mountPath: /etc + readOnly: false + volumes: + - name: podinfo + downwardAPI: + items: + - path: "labels" + fieldRef: + fieldPath: metadata.labels + - path: "annotations" + fieldRef: + fieldPath: metadata.annotations diff --git a/v1.1/docs/user-guide/downward-api/volume/index.md b/v1.1/docs/user-guide/downward-api/volume/index.md new file mode 100644 index 0000000000000..fac8c263a5ac7 --- /dev/null +++ b/v1.1/docs/user-guide/downward-api/volume/index.md @@ -0,0 +1,95 @@ +--- +layout: docwithnav +title: "Downward API volume plugin" +--- + + + + + +# Downward API volume plugin + +Following this example, you will create a pod with a downward API volume. +A downward API volume is a k8s volume plugin with the ability to save some pod information in a plain text file. The pod information can be for example some [metadata](../../../../docs/devel/api-conventions.html#metadata). + +Supported metadata fields: + +1. `metadata.annotations` +2. `metadata.namespace` +3. `metadata.name` +4. `metadata.labels` + +### Step Zero: Prerequisites + +This example assumes you have a Kubernetes cluster installed and running, and the ```kubectl``` command line tool somewhere in your path. Please see the [gettingstarted](../../../../docs/getting-started-guides/) for installation instructions for your platform. + +### Step One: Create the pod + +Use the `docs/user-guide/downward-api/dapi-volume.yaml` file to create a Pod with a  downward API volume which stores pod labels and pod annotations to `/etc/labels` and  `/etc/annotations` respectively. + +{% highlight sh %} +{% raw %} +$ kubectl create -f docs/user-guide/downward-api/volume/dapi-volume.yaml +{% endraw %} +{% endhighlight %} + +### Step Two: Examine pod/container output + +The pod displays (every 5 seconds) the content of the dump files which can be executed via the usual `kubectl log` command + +{% highlight sh %} +{% raw %} +$ kubectl logs kubernetes-downwardapi-volume-example +cluster="test-cluster1" +rack="rack-22" +zone="us-est-coast" +build="two" +builder="john-doe" +kubernetes.io/config.seen="2015-08-24T13:47:23.432459138Z" +kubernetes.io/config.source="api" +{% endraw %} +{% endhighlight %} + +### Internals + +In pod's `/etc` directory one may find the file created by the plugin (system files elided): + +{% highlight sh %} +{% raw %} +$ kubectl exec kubernetes-downwardapi-volume-example -i -t -- sh +/ # ls -laR /etc +/etc: +total 32 +drwxrwxrwt 3 0 0 180 Aug 24 13:03 . +drwxr-xr-x 1 0 0 4096 Aug 24 13:05 .. +drwx------ 2 0 0 80 Aug 24 13:03 ..2015_08_24_13_03_44259413923 +lrwxrwxrwx 1 0 0 30 Aug 24 13:03 ..downwardapi -> ..2015_08_24_13_03_44259413923 +lrwxrwxrwx 1 0 0 25 Aug 24 13:03 annotations -> ..downwardapi/annotations +lrwxrwxrwx 1 0 0 20 Aug 24 13:03 labels -> ..downwardapi/labels + +/etc/..2015_08_24_13_03_44259413923: +total 8 +drwx------ 2 0 0 80 Aug 24 13:03 . +drwxrwxrwt 3 0 0 180 Aug 24 13:03 .. +-rw-r--r-- 1 0 0 115 Aug 24 13:03 annotations +-rw-r--r-- 1 0 0 53 Aug 24 13:03 labels +/ # +{% endraw %} +{% endhighlight %} + +The file `labels` is stored in a temporary directory (`..2015_08_24_13_03_44259413923` in the example above) which is symlinked to by `..downwardapi`. Symlinks for annotations and labels in `/etc` point to files containing the actual metadata through the `..downwardapi` indirection.  This structure allows for dynamic atomic refresh of the metadata: updates are written to a new temporary directory, and the `..downwardapi` symlink is updated atomically using `rename(2)`. + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/downward-api/volume/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/environment-guide/README.md b/v1.1/docs/user-guide/environment-guide/README.md new file mode 100644 index 0000000000000..a54b72aa0d8bd --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/README.md @@ -0,0 +1,112 @@ +--- +layout: docwithnav +title: "Environment Guide Example" +--- + + + + +Environment Guide Example +========================= +This example demonstrates running pods, replication controllers, and +services. It shows two types of pods: frontend and backend, with +services on top of both. Accessing the frontend pod will return +environment information about itself, and a backend pod that it has +accessed through the service. The goal is to illuminate the +environment metadata available to running containers inside the +Kubernetes cluster. The documentation for the Kubernetes environment +is [here](../../../docs/user-guide/container-environment.html). + +![Diagram](diagram.png) + +Prerequisites +------------- +This example assumes that you have a Kubernetes cluster installed and +running, and that you have installed the `kubectl` command line tool +somewhere in your path. Please see the [getting +started](../../../docs/getting-started-guides/) for installation instructions +for your platform. + +Optional: Build your own containers +----------------------------------- +The code for the containers is under +[containers/](containers/) + +Get everything running +---------------------- + + kubectl create -f ./backend-rc.yaml + kubectl create -f ./backend-srv.yaml + kubectl create -f ./show-rc.yaml + kubectl create -f ./show-srv.yaml + +Query the service +----------------- +Use `kubectl describe service show-srv` to determine the public IP of +your service. + +> Note: If your platform does not support external load balancers, + you'll need to open the proper port and direct traffic to the + internal IP shown for the frontend service with the above command + +Run `curl :80` to query the service. You should get +something like this back: + +``` +{% raw %} +Pod Name: show-rc-xxu6i +Pod Namespace: default +USER_VAR: important information + +Kubernetes environment variables +BACKEND_SRV_SERVICE_HOST = 10.147.252.185 +BACKEND_SRV_SERVICE_PORT = 5000 +KUBERNETES_RO_SERVICE_HOST = 10.147.240.1 +KUBERNETES_RO_SERVICE_PORT = 80 +KUBERNETES_SERVICE_HOST = 10.147.240.2 +KUBERNETES_SERVICE_PORT = 443 +KUBE_DNS_SERVICE_HOST = 10.147.240.10 +KUBE_DNS_SERVICE_PORT = 53 + +Found backend ip: 10.147.252.185 port: 5000 +Response from backend +Backend Container +Backend Pod Name: backend-rc-6qiya +Backend Namespace: default +{% endraw %} +``` + +First the frontend pod's information is printed. The pod name and +[namespace](../../../docs/design/namespaces.html) are retrieved from the +[Downward API](../../../docs/user-guide/downward-api.html). Next, `USER_VAR` is the name of +an environment variable set in the [pod +definition](show-rc.yaml). Then, the dynamic Kubernetes environment +variables are scanned and printed. These are used to find the backend +service, named `backend-srv`. Finally, the frontend pod queries the +backend service and prints the information returned. Again the backend +pod returns its own pod name and namespace. + +Try running the `curl` command a few times, and notice what +changes. Ex: `watch -n 1 curl -s ` Firstly, the frontend service +is directing your request to different frontend pods each time. The +frontend pods are always contacting the backend through the backend +service. This results in a different backend pod servicing each +request as well. + +Cleanup +------- + kubectl delete rc,service -l type=show-type + kubectl delete rc,service -l type=backend-type + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/environment-guide/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/environment-guide/backend-rc.yaml b/v1.1/docs/user-guide/environment-guide/backend-rc.yaml new file mode 100644 index 0000000000000..6c57b95dac912 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/backend-rc.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: v1 +kind: ReplicationController +metadata: + name: backend-rc + labels: + type: backend-type +spec: + replicas: 3 + template: + metadata: + labels: + type: backend-type + spec: + containers: + - name: backend-container + image: gcr.io/google-samples/env-backend:1.1 + imagePullPolicy: Always + ports: + - containerPort: 5000 + protocol: TCP + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace diff --git a/v1.1/docs/user-guide/environment-guide/backend-srv.yaml b/v1.1/docs/user-guide/environment-guide/backend-srv.yaml new file mode 100644 index 0000000000000..7083b37bf88e0 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/backend-srv.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: backend-srv + labels: + type: backend-type +spec: + ports: + - port: 5000 + protocol: TCP + selector: + type: backend-type diff --git a/v1.1/docs/user-guide/environment-guide/containers/README.md b/v1.1/docs/user-guide/environment-guide/containers/README.md new file mode 100644 index 0000000000000..619d80dc991b3 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/containers/README.md @@ -0,0 +1,41 @@ +--- +layout: docwithnav +title: "Building" +--- + + + + +Building +-------- +For each container, the build steps are the same. The examples below +are for the `show` container. Replace `show` with `backend` for the +backend container. + +Google Container Registry ([GCR](https://cloud.google.com/tools/container-registry/)) +--- + docker build -t gcr.io//show . + gcloud docker push gcr.io//show + +Docker Hub +---------- + docker build -t /show . + docker push /show + +Change Pod Definitions +---------------------- +Edit both `show-rc.yaml` and `backend-rc.yaml` and replace the +specified `image:` with the one that you built. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/environment-guide/containers/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/environment-guide/containers/backend/Dockerfile b/v1.1/docs/user-guide/environment-guide/containers/backend/Dockerfile new file mode 100644 index 0000000000000..3fa58ff7abe43 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/containers/backend/Dockerfile @@ -0,0 +1,2 @@ +FROM golang:onbuild +EXPOSE 8080 diff --git a/v1.1/docs/user-guide/environment-guide/containers/backend/backend.go b/v1.1/docs/user-guide/environment-guide/containers/backend/backend.go new file mode 100644 index 0000000000000..b4edf75ff5ddd --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/containers/backend/backend.go @@ -0,0 +1,37 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "log" + "net/http" + "os" +) + +func printInfo(resp http.ResponseWriter, req *http.Request) { + name := os.Getenv("POD_NAME") + namespace := os.Getenv("POD_NAMESPACE") + fmt.Fprintf(resp, "Backend Container\n") + fmt.Fprintf(resp, "Backend Pod Name: %v\n", name) + fmt.Fprintf(resp, "Backend Namespace: %v\n", namespace) +} + +func main() { + http.HandleFunc("/", printInfo) + log.Fatal(http.ListenAndServe(":5000", nil)) +} diff --git a/v1.1/docs/user-guide/environment-guide/containers/index.md b/v1.1/docs/user-guide/environment-guide/containers/index.md new file mode 100644 index 0000000000000..619d80dc991b3 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/containers/index.md @@ -0,0 +1,41 @@ +--- +layout: docwithnav +title: "Building" +--- + + + + +Building +-------- +For each container, the build steps are the same. The examples below +are for the `show` container. Replace `show` with `backend` for the +backend container. + +Google Container Registry ([GCR](https://cloud.google.com/tools/container-registry/)) +--- + docker build -t gcr.io//show . + gcloud docker push gcr.io//show + +Docker Hub +---------- + docker build -t /show . + docker push /show + +Change Pod Definitions +---------------------- +Edit both `show-rc.yaml` and `backend-rc.yaml` and replace the +specified `image:` with the one that you built. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/environment-guide/containers/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/environment-guide/containers/show/Dockerfile b/v1.1/docs/user-guide/environment-guide/containers/show/Dockerfile new file mode 100644 index 0000000000000..3fa58ff7abe43 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/containers/show/Dockerfile @@ -0,0 +1,2 @@ +FROM golang:onbuild +EXPOSE 8080 diff --git a/v1.1/docs/user-guide/environment-guide/containers/show/show.go b/v1.1/docs/user-guide/environment-guide/containers/show/show.go new file mode 100644 index 0000000000000..9a2cfc639dbe0 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/containers/show/show.go @@ -0,0 +1,95 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "io" + "log" + "net/http" + "os" + "sort" + "strings" +) + +func getKubeEnv() (map[string]string, error) { + environS := os.Environ() + environ := make(map[string]string) + for _, val := range environS { + split := strings.Split(val, "=") + if len(split) != 2 { + return environ, fmt.Errorf("Some weird env vars") + } + environ[split[0]] = split[1] + } + for key := range environ { + if !(strings.HasSuffix(key, "_SERVICE_HOST") || + strings.HasSuffix(key, "_SERVICE_PORT")) { + delete(environ, key) + } + } + return environ, nil +} + +func printInfo(resp http.ResponseWriter, req *http.Request) { + kubeVars, err := getKubeEnv() + if err != nil { + http.Error(resp, err.Error(), http.StatusInternalServerError) + return + } + + backendHost := os.Getenv("BACKEND_SRV_SERVICE_HOST") + backendPort := os.Getenv("BACKEND_SRV_SERVICE_PORT") + backendRsp, backendErr := http.Get(fmt.Sprintf( + "http://%v:%v/", + backendHost, + backendPort)) + if backendErr == nil { + defer backendRsp.Body.Close() + } + + name := os.Getenv("POD_NAME") + namespace := os.Getenv("POD_NAMESPACE") + fmt.Fprintf(resp, "Pod Name: %v \n", name) + fmt.Fprintf(resp, "Pod Namespace: %v \n", namespace) + + envvar := os.Getenv("USER_VAR") + fmt.Fprintf(resp, "USER_VAR: %v \n", envvar) + + fmt.Fprintf(resp, "\nKubernetes environment variables\n") + var keys []string + for key := range kubeVars { + keys = append(keys, key) + } + sort.Strings(keys) + for _, key := range keys { + fmt.Fprintf(resp, "%v = %v \n", key, kubeVars[key]) + } + + fmt.Fprintf(resp, "\nFound backend ip: %v port: %v\n", backendHost, backendPort) + if backendErr == nil { + fmt.Fprintf(resp, "Response from backend\n") + io.Copy(resp, backendRsp.Body) + } else { + fmt.Fprintf(resp, "Error from backend: %v", backendErr.Error()) + } +} + +func main() { + http.HandleFunc("/", printInfo) + log.Fatal(http.ListenAndServe(":8080", nil)) +} diff --git a/v1.1/docs/user-guide/environment-guide/diagram.png b/v1.1/docs/user-guide/environment-guide/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5d1551631f2adce68bfa4555050a2fa1250af0 GIT binary patch literal 18765 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 Jilj}R{4WuILE8WT literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/environment-guide/index.md b/v1.1/docs/user-guide/environment-guide/index.md new file mode 100644 index 0000000000000..a54b72aa0d8bd --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/index.md @@ -0,0 +1,112 @@ +--- +layout: docwithnav +title: "Environment Guide Example" +--- + + + + +Environment Guide Example +========================= +This example demonstrates running pods, replication controllers, and +services. It shows two types of pods: frontend and backend, with +services on top of both. Accessing the frontend pod will return +environment information about itself, and a backend pod that it has +accessed through the service. The goal is to illuminate the +environment metadata available to running containers inside the +Kubernetes cluster. The documentation for the Kubernetes environment +is [here](../../../docs/user-guide/container-environment.html). + +![Diagram](diagram.png) + +Prerequisites +------------- +This example assumes that you have a Kubernetes cluster installed and +running, and that you have installed the `kubectl` command line tool +somewhere in your path. Please see the [getting +started](../../../docs/getting-started-guides/) for installation instructions +for your platform. + +Optional: Build your own containers +----------------------------------- +The code for the containers is under +[containers/](containers/) + +Get everything running +---------------------- + + kubectl create -f ./backend-rc.yaml + kubectl create -f ./backend-srv.yaml + kubectl create -f ./show-rc.yaml + kubectl create -f ./show-srv.yaml + +Query the service +----------------- +Use `kubectl describe service show-srv` to determine the public IP of +your service. + +> Note: If your platform does not support external load balancers, + you'll need to open the proper port and direct traffic to the + internal IP shown for the frontend service with the above command + +Run `curl :80` to query the service. You should get +something like this back: + +``` +{% raw %} +Pod Name: show-rc-xxu6i +Pod Namespace: default +USER_VAR: important information + +Kubernetes environment variables +BACKEND_SRV_SERVICE_HOST = 10.147.252.185 +BACKEND_SRV_SERVICE_PORT = 5000 +KUBERNETES_RO_SERVICE_HOST = 10.147.240.1 +KUBERNETES_RO_SERVICE_PORT = 80 +KUBERNETES_SERVICE_HOST = 10.147.240.2 +KUBERNETES_SERVICE_PORT = 443 +KUBE_DNS_SERVICE_HOST = 10.147.240.10 +KUBE_DNS_SERVICE_PORT = 53 + +Found backend ip: 10.147.252.185 port: 5000 +Response from backend +Backend Container +Backend Pod Name: backend-rc-6qiya +Backend Namespace: default +{% endraw %} +``` + +First the frontend pod's information is printed. The pod name and +[namespace](../../../docs/design/namespaces.html) are retrieved from the +[Downward API](../../../docs/user-guide/downward-api.html). Next, `USER_VAR` is the name of +an environment variable set in the [pod +definition](show-rc.yaml). Then, the dynamic Kubernetes environment +variables are scanned and printed. These are used to find the backend +service, named `backend-srv`. Finally, the frontend pod queries the +backend service and prints the information returned. Again the backend +pod returns its own pod name and namespace. + +Try running the `curl` command a few times, and notice what +changes. Ex: `watch -n 1 curl -s ` Firstly, the frontend service +is directing your request to different frontend pods each time. The +frontend pods are always contacting the backend through the backend +service. This results in a different backend pod servicing each +request as well. + +Cleanup +------- + kubectl delete rc,service -l type=show-type + kubectl delete rc,service -l type=backend-type + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/environment-guide/README.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/environment-guide/show-rc.yaml b/v1.1/docs/user-guide/environment-guide/show-rc.yaml new file mode 100644 index 0000000000000..4de94c06ca30b --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/show-rc.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: v1 +kind: ReplicationController +metadata: + name: show-rc + labels: + type: show-type +spec: + replicas: 3 + template: + metadata: + labels: + type: show-type + spec: + containers: + - name: show-container + image: gcr.io/google-samples/env-show:1.1 + imagePullPolicy: Always + ports: + - containerPort: 8080 + protocol: TCP + env: + - name: USER_VAR + value: important information + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace diff --git a/v1.1/docs/user-guide/environment-guide/show-srv.yaml b/v1.1/docs/user-guide/environment-guide/show-srv.yaml new file mode 100644 index 0000000000000..25a2d7473e021 --- /dev/null +++ b/v1.1/docs/user-guide/environment-guide/show-srv.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: show-srv + labels: + type: show-type +spec: + type: LoadBalancer + ports: + - port: 80 + protocol: TCP + targetPort: 8080 + selector: + type: show-type diff --git a/v1.1/docs/user-guide/gcm.png b/v1.1/docs/user-guide/gcm.png new file mode 100644 index 0000000000000000000000000000000000000000..c2832c1d982672dbc70d40c31127e2558964cd48 GIT binary patch literal 209311 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 z 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%0D@n4eLLnh`5H8hn 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 C1w5s1<1LbBB64oUN%H%#2AhilQ8 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

            p3#^LG{E+)zxC> zb^kV6JzmOveP%DvykVu!o$2LfW3N}jwKFC?-yb2({o^k}$xZTe4L9Uzsp6bdMtR&l zgf!cdYwA}()ro2<>Jh*@Z){fo;L*P_WTA_3CbsFx6fjvU9LyZ}7cd-fz+Dr%S)0P- zdmqJ8=#OYOwC&5vK-5W6SJ2@rfhI<|$2h3(W&8fntZV#4 z`V^jUw(G1y;^os~=4zuR+)ZfjS2$VM>b2^=T)rVO~GXa@cG-{0GdvO4iGR zRScrA#(pNUXab|~)Yyo7w&Cubdfz!AJ@~nwMnd%Yb5QfGI39TWN*pz8o*$)56D2e9 zTEYRO8J9qZVB2|1<6{CBYyR7@6=``dm5GNv2^IHdmU!s8+H&25HS3Y-$T>CX(H}c? zvCQu(-3aGlU0oz5M3M@i0NMS#B?ZTt79uzngUj|bB5d-j_e!Vw+$BY=<9aZ;&;20k zagPO3;(ua_K9;Y+y@i@iq*IiWqSZg~^mWc!T#0k&5g;`c)BhuC9G->ON zm+xKR(Ou}N{VDIGE0*_FC+uys5V_pBm;H8`!f4XnF;vign{&D`xY}(yyB5z{KhvHC z`IoYDY&{%BpnQ^Li+7kOU7*LX=y-&!oK*HaQR>-&LlBH49xiPPr?GQ&Ib@5*Xi-q9v(M7|tRX-=?c>;kExE2i zv%M%&Q(SWo+(w+!5yFD>3%r?j1jJQI@#McOLvcLMQb||^X)q+R`l!;^E|I2$Oll*j za#qT+g^VQ9Zt(8FqI(aM|S;oafhxifM?N<1-GEG-+Qei=H{XXtOUc5LY}JN`q}m(_sZx?D*1w_9QG}}-Gth)ZVLgN+ z4YTHmJmX=3+j`((!OLDntPsIxmAmS^Lybqv2DLHwm_&v`viloS_kn0BVQ$v!9?O@JvF4k;;xG%ND@1to0U|#JjpV4@L~ghRR`f@6_xV! z@0o2-8dGJBQR7z{c{G*RXOuS>zVgdHSI}l0$1eAo^10q5SsZALQlv@p0d{r;Jf7>c$yf$J2j-_qSSyDw-##x=K)Bnb4?zmY#9fNU}a#`7x44=bX z5xYdaM#@F^P57cV*?N4~9>D=t!e_YndDQpk zwxoUfxo7_Q<8pMpMwMN5xkC4W5d`Gk zhtQu|mpRGsx=@`Q47&c&&?@Dp+vP!Zho@1tw zGn=4v9ZtaT49x4Rp)gXxOSxy>1x%Agjkkmo@D#Zy^kielgzshC={F;8eqy+~{VlCa z^Y^od4Fu%X7z^i|8=Jj4j#qadS*3!zoXd17qiSZkLfP}0ovUT3IuQIU@H8P69+rj2 z3DBoVba41Lpy33r`nBK3%5t?1u>IB}ZwuizNVPEY+JlB^+ zjU|hg7ViSHD38i!KXbNSdJ6ck-=cS>p$jt0oj(W>>HL=-(w?CWhz#+u`Ss)NX-+7&~pC#H7v68bCuKVc{z1tJJ6x^s1r&BIr z5c-Fd(Gc#P^t9{0IrAi!-UpsMzb=aS`CGFt!-b$v>dk-yCN~^vuYWe*y#;yhmqHQo zluTCY*}(Ho2K@`K&h@wp-|V2`1jHf}l9TU9uqVRFglS7iCf+hNsA? zyNTx1{_J2tfBN8n*Kky-iD1I)!9>aLmq1xQ71GMc-X>Y{BSj|-)1U~$(MziU-6%HG z-Mo%q>}NXUo~n6|%`rP`8{gUh5`N7wk2)6&U%Al4#0D8kY{UARAj0x{EWi;^&ztTH zI7Kc*-*g4b9rT1 zMiG4q4JI$qDfEt(DpF8h@?Bz)MR|VIiA#a6XVTu^5`g*1DGl(qi*=hUiSd(Xv6=s% zcojuq)ykG&n4kNih2|_c-zox+hLE05_~?jD-=54KSB~zttyxF=?Naa3+_q5$a|9VW zueG`I9OisMad*@~X+Z(i^H}eTfG&UW2gT-4bEXCH%+WA>gljUL!0bh5&tW z-h^Q9U32a7>;0xP#mg2V*v1yAv-AApe4Lkyc}TNZED1&$1&>L!xQ|5vnn4pU|3++` z#h^VqTsW%yJsBUvrPIGN{R`ndYY%D$aHiaXoTalAMGC$?sKfO(m`+?68>Q>$%;;|T zuD4zjYS7~sEiy}ZRX+f@k13yWy>l-N@C=3ew8)XDSuOUJ7H}{w?IHU~-HpPqaza^u z>XA!q_;H2u+sLR^ekJQZkaNhAslp$c8`|*udjB4*Uk<7T4xP)~)Olg!O2MW9m&)-# zg)UlFao38OFVuw@BBY>z&*U~`g%$n#$+ByPoG45)qorG~en718@NTNg_ie{0f9kQ{qn3{mOnl%jl)eBRSyPtoEw)?wMLA zB#Uqh%pQdHQOv4^W`=GzFZIA9oAb&^zx@(vmra_z&$Bx@O91VogLys&0LWJbO*((? zfWv6tdt$NikjXJJ5kM=lYCvB z(k8_fISs3m%rt+3Y2#44?BYvvv^oA(0(c)#f=YbOw0jDTc7$GXO+`-pofN{D7FR2y zEHQar{j@h1c|br0t6K1>L=XDk&bOmhNN)Sdd{tn%VJiW|Swy6<$KrVQLo8f`W+ zWx)7A@!xC46DdzzSiljg;trz43=d@NM1hZseikM*F`kSy6*Cn>)Gxp#&HK45+!PuH z*Li4gB(pVVm9g&jy+?gI>4W2W!hXYd=c_hTqVHWFsKD_Y!qBTI761N)8l$l%bV2&v zj??Dw&-2-bO}b9-Z`(kN}E;x_LTOYHSxTV8U~>hpqi8!nTd;5Cj-_7=QPy z3hm#nP>#*8sqRc*VM=Tmc*8o`RHiyw(~I6MCTn^?FdY=9yNpSfNg!BkUQg$h!oF8A z5^JWzkG3SD52GnqB^x=suSP6Ve(p+Q^ttlPb>rU+r%0iSi1{ zA`}GOVQv>RL#$9L$E3e8!QYx5Grjy&Oq)1Hec|wd0x}6u;-58g_{f->uT(z`K_%Md zQ3EUd5izv9MC?M_fnu#MV&<1VFxD%m;@iISvP@!l=FL$K*RHBF7#Ddxek+dV{Nux4 zzdr#94{imraO`)5n~e^b;y+?NA=q(n*Ta_d1KwP49#a$WM()WTfhV0O|4s?I=jhW7 zJO5--H4}(w2El#A-qOVVc%sK8Co{@0zgF1!x#zTBz6o%>& z77LQ9ST;x+hIGTq)6DuD=|kt|cy}0lontjC2t2$QYHOxq@YFN%wGeM@*YlWm9+J-; z=i#>ReB$FjP9>3y{?o&V|KL6Nhk(rhtLgXEA=aBFx%4)%6=XzK;!RpP6yZ;mJYH#^ z!WVux8WKZV9+AJH@r5PHFL`j4^Ey{AHEi}Yi=XLXo<-JQ-;PBl+X$KWR6WkDs5QZ-cgxk)uL7yJsdk z`|1yoTdLoNw|94wwxmOUGhrhzm@x=gx6BS z*NOfiNu8=ngsbmb+(iZ51m=Q51WZop0(*-4v}|y(pKmjXWA-}}Vd-e0bO_sq<{73R z3!|rW#NQ0@usG^SiVThSIg(~OJw)uI)e@x|u?+1(+bFl@s4@U0Pr=HZ^Z($tl7`|p zru;-YfP(oqFk!AEfp1(0sP$%Mj1;BHYBX+za!ZPl_Wd*hK->3>ObofTET$ zP5Dtf;l!i*6vf`~#z_n9Y2Zj5=#8b0#&1c%{y(`)!7DKi@ z^QcR#)3%t)TysV@59f%&@?w%ilC1zy;kVyi&(;=}vV$`9QFfP?tv2 zD9`!K+QM&@KtU_7GB2bTl>(+1%ip?-@SuiKOQ$Wpzo3JuqV#ArjK?^p$0_Rd1D@NO zZo`z};qX~&W2W|-y%c)IH|`?ad5_*E(3g0#8Uit%N|)I;p#>fZVrH$(?~ETjntB80 z?)kvu^uW=Uugg0S(CD13$TfE72R!S%G|Q>sgF68zm3SjF=lu`c?C{z3>DG>gg~fu5 z!STaxru@vs$7k*6=ok-h4aa}~kC6C3isDjURg6PKFJF$hl5m+N2WDw0br8PNcfgnu zITmuYLRF5sm$U|m!<4`iyob8GqYFmFq&M1%2s*V}!5W3U!E>VTCP7mb7hO8M%OpR> zN}2t`&R_-_71=4~&_Z&u#MrffQwt{P#psNR;RE!{Ph#qZ>R~Nu)XSg3GlsK^Z!|kk(J~mBX zg;9(j=$ob01LL&V=q1eCK6#~+wjE@ClxpYx-3;t&1$T{v3N5M}Ltlsj1rIIds;YNkyaIxPZj6>CRj^qc1k1rcWjqlNFS)DRujyG17-7qJG&v=!o*oxr? zGXoU-cgnZJ;eOpMht(xamd#DRP9(Rh6Lf#Co{rLYnlZH@2+6YBi(NN7?%{9Cs;#R- z-7uR(d4SU&b_+sD$A!a6^bY!jlZdj?dv^K%=n(A0+(8%iKTbK~$_G=q@%k%_m@$$M z3a%fR&fS&XkmG+RP(&=OzXh|0E&dcr!_yJ;68t}(A4HY%y~EFnnWcINdKYVQpJ1Z* z0JWCDpTi%OF#E38zV$lOZtw!i8=6@9Q}jrfgl!WR=_CIOoGisH(jLh4D0evf7oxAI zvMUVd^-Ur`lS=L`i@~nzsbJF_&cC`~b0vLHB{1-H!5geUia0>m!IFXtZ1-ft;3>L; zKx-QiFd|=$P_-p)(Pik_)j~lRaOSNdc&|)$kYtbDp?>zeKOH6#8wJ=`5xkuyWF7@m z&nMeD^vWsEBoyH(^6)f>dGJLVbO`Gp^n>MPSjaski3 zUD&&t=iaa0bRts_(8;s{HW8;CRE=>GZz0R!@vccuK&%zME)0V9-WY>p52Is3ki24T zpsfdk1l>3$7~`qEyXfga@#4D4^EDscc?qjQb_w<<_~p-3ie@ayz{}^~rseD+fc~2= zJSG0%w{sMi00~w z8>6FKih!O>Pu515()^b4mcI3;YZ1(qfSd2Rg9J$TE)*#iLYv7Ah!wTd)is&g-%gkb&8=tjuvQ|>LKFX7A-SbS^jVShxrWT@KA(@r!$7phfbp&aDVvg~}Cp-4E z*dcsPmW4!0qP_!)!9hKH{I!{{5`%`5O&3DoA>H;pO-1rXst8GptByq*&8D7tGI$@k z%RiXCxi@$QLR$ZQyFR*M4gvTsN;c8W94Nh`eb!#M?o@mUf~qudm>S}N){^~U?eArS z?S2>g1HOB@RB*q)e1UgRtW+ruwX_wom1gMspn^CY^mc<~o(}sx0O7O?CO|Rz zAp1G$;xo{Wi1uDOD>RkphYW**}p9Ef8Eyz}&6+H8RVfLAE~v0cOS1$vK8m(clTSmJV>X#ze|krTZkO$ zaF+EE<{U^79mrCIV;T#Io;As%vYMxOs^#{Sl=$rV2ws~O^Z z#!JqjQ6i(I7@kp}KWzDzl=*9IlZ$-}uY>FOCs6Ufax$B4eCxf==Lw3S3*^_p3a_f8 zN_j8N2_9Zlm96*NlYmbW4`4v_m8zd~R-&fZAu!&U zlT0BCAD?w|^JdSz?4|ORhM~lfRq~(iNUgLkX^CyVrZ*S<|5N=bzQd63;6AbV0DC?* z8?Fn!%=lO?^pa3&K*0cD5$$Wwp2h?Qb@)Gjp~y(uXZM+edu|$6cbvNRbvp##PwK+>ga!Mc_YfH7q z%xnha@o|`AO%`iK{fKmVW*w4JX;byvZanvLj}1w^UWMxwyea-ZL>uF%j6}g7_Q0iq zhc2w`*$sc`ISAAb80$csEq(5(+3`pqFi~f5NKtD?nuSlYlTY>v2uAt6PGocJ;0~L~ zVq5*pkKIgfQwxADTPpDlP31fz6+(+ z!O4Nu5=Ki-G!JedO();Av@91g^HBIFYnOusI{o+`W9$Cfc-&f- z>gV{9MT`!O28ElAxXXso`6bMTf>eB9p-ocYFKDA4MoS8Rnq4Wum&2(ub(0-J{Iq?r z-TY6L5Fl<5UqFJx&+ftVA%*`vlKTIYWETNrzEZ63a_^T~q3>wju?o;AAgN^lMLrVc zadobYpO`fmwxR@vkOwHbgxN0$9MKF9A2KY*!h1~CS*O2Lx24;^TN1#Wxr9z6U4xIF zrCPR#)T6AX!|?!VETMV3PEyPlb(5#QbnyffuMsJara+)zL#o$2#jRx_tfsq)Vr%P^ zo#}GP#Int1Mj{FE=7W_@K_eg5jG3rUiL?tzNy=kaZ3Muk4D>%T)>LEqA$RpAN&+_S zgzz!XbMGj_ihk^C-&_Z^TO!CF<|5p4TcdSc5d@3>v6(e#&cV9l?20@R*eVtZxc!h< zkL~uyD-#zdE_@%8K_cGcGj3@Gs`kMA$e zi^m?!c1$+f2MtC(J{GG*Dl1JE2EfIIy;wA@c!)m-Mw-nDR0+j(@?z~1qv9Wx>50Ci zY^b>#5*Ko=Ew}h`WmxdV-$r{|jdy>RgT*JSWCfTt?~{iX@x>%@z-@*%e{9akpKpvF z8?(zZzwDwH*32exleAvhPN41P`>%|Za6X>@(h*W&d5@J1?eA*r(a;T!x3iE2ohlB_ z)uER7H$x0EP=cb5(<^fC=GBnQ-ZKx3t#Xks4LH7}GjuL7z-x#fTo@{un~^p4j>U4C zpdfOY2ZAAGzBml##;jt4{KJ#Z183aPz5i!y^Pk7qCr&lkyEYWTT*UYoPa0yZv2*^2 zC7DGv+H%M0lSG@8-uMDNCl&sW)nD*5*Nxg@J}ypI5{`!!>W>dms7JE#C9}fTa%)yP zqsC+bj2;XfcLEi$vsuz#ZZPIg@4(EO==N$5XLgnbw&wP zTlvlcH~76&IFANS9V=uoyKkSox-J))+PHzGMczmqZe!v%adiX#sAj>RxR12?n#sw4 z@iV`d)3^FMxd59(xVw4hbG2#BeJ&6&$3F$x@9RiwapMP4qFl7%ZDl@C$RhXBlxdqH??XRLuK}IoJKHSzJUz9$n zEl7QVkp(o`c5%0zBttZ^LNs;7+qwGXZP%Y)|M5qT+vIshhMCo5Fg%r$YE{^Tpgs$+ zl-)~en?cGv_ZVK4ZH4z$!c1KTxEuGvEbatO^zk&R)TKv4k5D@D{~mQM9FI>ta!-0= zIpSBa>#6@Jdnosdx9y3kXB8(A$eOhM*h8jf2Vqqenlt}r`1gM#T`-Kv>xquhWn%B^ zYHtppit~77?6@`Pxz&hQ(x~k)*Y8aD!Z+dd!1=B813g5;;~TWmbIGUmZGY1TgHM3- z9frt7AfDh+Y{PFG77FUKM8k%2?a-SEbUE)LGxIVpsz(GvSU40B%x4Hk9Y;lJ@Xz8I zi7$c9!qc#naQOnNqgLNZUJ155bZJbEHLLr>(X`4Z5?`=9coqlq@$8lSXNhXQMfsbH zHKjBoh9$1eq}lTkruZfYN1mYlQ3a-z%&YkZ`f17`3A!v^3Qc<+Q0@JsTuJ1`Nrn>C zAf)0>&NK`ejqLjnvlwTcF&)Yx(8^$S5VcwQu^d{a9d0jUsZB>|C2?Y3mFUyo@gM<& zGFe9feW#L)fGF49RE3L9Hfx<)WL$Hd&y^;rKf;14JLc`b;(ey87l7K4U{!|ltA4IBx( zjeL0}d_jX)fTKy|oRkIm8x>-r3Do;+IrCrB&X=IZUPKnd3kk;?i%G z`DF`wO+seJ;u)5;K#aEM18ru58>MkK0Y<`?YDeQ}FPvWFX33i>tW{LNCUM2D2AB<4ez_b6N| zCQY{U-VBMV3H?u>+m*&ddHTJ*qO)`L_7S4fW3D3l+H}6$_}dDco!wNH`weowON(In zv1*OKdRSTPu?~7&401GiyG}nO_;>Q|bz!(sRjaMA!-?>1`^j`5XzB#M*5L~Zl$6U+ zJWN;4AlO|5>hfl6uf+FjB34I6H(WRol=_N}I29Xcq`aHTqZgL=MSC;Ag<6bq`hrvu z8jkxBXNf=#yODaUI2BpuC$$7G-J~=$sxA>groUO%$}ItcA6oFGd!1Y0*L_>@HYt9G z_M@;1&?q?YJN|o@Eq3UxnsGpJj@p|(-%$+Ag8VXn|GA??6Eo1FBnm4-&BXuw2ZX>j z_E+_2p2UItmN?>CS5Ku1c_S@nt;6I>OlicmoT3OJ4EPJhVIXt|@zLRMv=FzA!D=<5 zBsqGUC%qQTou(pwa6=7V96@D@3;ljyo-HfAIPct3G9SZ_-q)=^SOcDDabFqsDj$;W^MISpX!X z0Z`nn zs40_lOPbWh&~A+qeH$rWW7VqnED6cB%)!;RK%E-2iC`UQ_YXuzE~K^tF8{MhDsLK0 zT@#5qcVaxX?QD#K&d6_t}hUJ_Y5NGC^Q*`wUxy8R0w-$ z&r?mpAwxlC*Ipcc&B%mRUz1{-zl>hMLK$g<9!mLq z7|Y$FLQm!mIj_p$u4Qlh1ar)cvVkERL7DPbdz?H=jw zv5IbAF2qQ*T>4a&SX$V@5X_k#4^-dWW0CB=#n#}k9_OO5@5)2zad^trH z0<=9#D@^!u-P?!e;xlVVf3-(#|3_hFTtPO|XCM1n7Pa!yfsH)oe{XO;+VN04tXbEs zKIrFPn1QDMVd`5j&rJ*u%RKLjzFD*eX^=+kH&~4sUNrwY>)d>G>ij^kp8uz$TgYv^ zzuk9wUq<0FoWW8&KwV_zHMT}(N@n@MGautWLg;&C5Hsvzp(^@7*`R-r`IxRQ-Y_E} z!RHe+X9s9wF#9n%bTkt66Ha$Iv@dqHwG|AvbonABR8^`=H_UM(&VJPXE42gV74ZE5Spw`o)-4%-uPG70M=`iUN@6$}AIq}Cg)ol~uItTZa zt4wAq!fTYhS%yipNqR!Q9{)6;CKrIDS2f5>($rv3oql2xX_NQi^}4Q8Hh8K`k_roFy6fhN zNO_w)LtEvA)}7$bSMpMTL7GL^zJu6EzEhQPcp)3C5Q;9t|wCRL7=O8@=Q{@@zYZ^KR}FU;e>3=Mz;6i?8Li@_rd zT)sOUT@yT|qOeG?<}0c_%$=XDE7pTx)SE$z)KBC;z0@3lI+P&=b589?y5g%@xu@9g z#5lp?TIyNwhFUcjrq!Y~#WKbE@B(6&D&<$WwLZIAfXeJzReWRV5xsA0bHL>n%>aFpjzTDG^O}HO3^0>?QTd)Qix70=L1YtXM$QV43Qgij zq*+0nWw7{R_rQt$jp@J2#m7;d^1Vm>keP+$=g*%L9~ivqiVC~ZUUS;FJ(agXk+-V^ z1L|$yfX3EFYwzp1*GJwV<%1-rv6|WW`T5`6o*t3sEksdUSXfvdtCtsl*H}d7cd*VA z%OdZ_K1LW4FC=w1om2kHkzmqEXRs0c8|76Jy8~EgZ#pu#yssH5byibVmoK)6k>ic` zNb+8X+86K0mBRxnOe|zlFogjc?}QL45u6m9BVwNt96eqQr%$@I1&1I-pn$aIr#{zk zM)X0SW<}BjLYQ2t_FOZdu*TV_DWede&fcGXs%Ipu#ae&2?x?Gn|HYIQT<}L2Cb!an z%5L8J{1;V3aHHHsw=hqb8w9zwDs%9t+6i5so1|f=$d5DNljY2}STWu{`XAdF=&|`s zIE=7^C1OS}a+Q+FW@PYZ@P$z$yOAP3g_wft!Pt{>S0zN#rloxKEe^;?PIX1IJt4v}3ysV&Dum&zSJ;zh{Jbqo zWya+w54POU*}@s)cNHf9E?FyG;vL0MXImbxpGjb1gJ#9BMkMa+^}mcRfXgKO1pj&&t&GHYR>mT9KlS{u z248P{i`&NqVOhZUWx^wbpSGO`_QB;25Df&VG~=K^+qiQ`yOsHf z9r@NryR)U-&gP80I65M}ycANiV39;UwAKStp}&ql%bROO6mIg1xwUF@X;xf?M+5n~gSY526x%9r@G*eyUY@!tZuHA$^SD6Oic3uCTkv=z70z{-VNb%F{tGQX{ zkusPP@z~P>9g)@R;{!!KdNQK%9-(I!-(g|)Zx9;f-|V-oA1>@lk0-V3b!x{r2i&J*_Y>W4Wm2I?y*Rv zKfP#QQRH3ZeJ~tyb29;WT0UGjB;cMZ_F9YJ!oVBp;Rk@~YdG7`D&xoFf?)G+ybw=wUvy1AugC2QlB-usOw?=f~Z zdv1OnAT#W|GBt($b?K z&+IF7{%!`vFJjgh*#8A>K$5@CK}OS|Qs)y9#>WB30I)%8LitY82|$pPUcFY21>gjZ z9J8ZyoD_JG35NU-#N3pHQ%<^@Ev>O~d=_MHKLtSXpaN~@ekB1G-Cu#0Mj%VS1?VJM zolbiF6lmmj#{kKkN!kQ8LIAde4bmj#6wsA6K+@KxYG5#h)?zNMdZihNAbAz=a-fQO zQur9WZrA^|4cTM(ws0S9Z!S|5uCPsJ!w!r)07YJvQHR-<+Ms?qFbELRuG6}vd;&^( z&*-~wR){a^gJ>l>`bms|Oa3wcQ}_8Gi(*_7tyC8zap_}s#9f4|Qq_em*m(^5g(4hDl>36EuNUwNH$Y=8M`VnyCMh_G>I+m=tMzP$<~x`gzup z>;-rtE9ac9%fu_5^d7kK2@>Pt#+7Rc=;IOxML7~(B!PGR;DYMbX9}%SO!VWr61OsD zeE249i5N)LC5L0}C!*_0I_kWR8dm{mKRNniizH@e^J2`r7I;y{G#?$Kt$XILCaF zDH9uG%B-kxUZ~wlqD$d1KqhU@sPh_wcQa>7E2vW@e6&^V)-}y(%^4-l6U|+jTvdlB ztSUh(=!!n7Q}^g22KrZCAGRe6*qi79 z;gH7|S3wiy4#nc^fIrB z48PW2@FNeltlN$rvI$U-{G(HWil}<{>7(!Y9XfMK)(jt)bZ%}wfQgb{mVb10X#veG zZ%*BQe*fs#>k9n^|C2fANjv>xVRr;@QzyD+PG!ywdf%Z}rjK_ibjprS@R^-&=7yK~ zGE?5m|^Xg*Rh% zuAk>kex1y{nQ~n{9hTo?i{ex?h`LAPi9q;toq5R6{%0)=WG0i=xoyRS67COpy zpZ9{8iMgq~yxhL`z3(}OM2txUoGbIHdGqGkCqMZ~+p=Ygee7c&bDEGZe({TT<&{_3 zRaaeQ|L_n0!22r?Oy(B)YX0UW{i?Mp1mjVOnTUIdYr$!jkbGxb0n4aRsGuN7t~5Pt zalo6Tj>;-6Nsb++Lky;Ro%OV_&lVWt#!Vn0%xGW|I?`(Rfj)G*4uk7Z38Vg9(u4 z!hbgkKz@RQoz!rm9ZwIyXIJ_mymRM<~|O)6W5`AZJcK1cl)$X30Vy%qhXer4vB=mHV{8gw2n{O<#icTxeLn3K@K&njp3N&l zHrDGg76QMegj!YDRkhoJc^CTDwVa}5l9aW{NGU!f)2{7e(q<)oih*=sv>!Uv*74B5 z=Y~GYwqL0Mr*Sb^&OB^0;`JVu1m(x$L9ct+dNj^YP$_b-kA>@H`gfEX~ zXwQUWp2S#*Az?P#B$}CuQZJ;iN{}=6yn3`)-6=cThra@ia*})oE$!L_5QFPeo5VBS zvVn2BM}6lUKv#^3GsQyN(K}3m^j!?w*d*Xxa}zKo@Ls41x%0M!edD2N@_1U17#wr` z_+hJ_IAdAbsU(IjJ~?jh-#Bjje^^5FCyl>=J`Uml^w+P3!8j7PG=$O8TEu3GTQ-zf zCz6>Hi?6ldK({UG8L*RqE37s_C|j5Y?sjvm9>%kW@$gc9UTEMcUt{5R)}Tx=cj4)z zH4Y6DoPfE_29nh!H5~@vo!fuM9$)&Kw!h*E@~170;H{y=G4Mk%7!>^dGwQ3JvLy?@kwi{3E8h)9k#!?H)jJqYUv9joYQlJ`JAOKVlxzu zS8GReRt#%-VAQ568j#kF+Iw#a+n;umSGa;Aq!}5VU`!yAnwsWWk|QX9rnH#gN(B{w zN%rTT>&$E5kAOtxRF6fkTxqGJofcWwVrgE=;l=YT4QLA15Z`$+?~D&OoE;z_MRTpC zxkoA7)^Of@HqJ(!broJ&Yg$~{QI-At2@5T0(t^@rd!f7&)S1txHq2_vvSv#iJY&%f zZ4UT^8Y(Y%%mRD@jGJRr^jz#4vCzW07v-OoPaRF9HP&e693@3q`GD-q^>*Wl@g z_F44eMV2}O03IH*EORDB-!o?b<->%2AA-s3LWrySNde|lZiFW@U?)>*~*lxxpq`0tfl*>DiImcGQ7;uiSz*i_w^pFpLK2rN*2MRI;{M0~yvyrUPN4 z=D3^~^UT0`^D*aLewcARr`*F@1D5+l+yr@3i_K zLIq(8a?=S5>$j2!ruI$@S#kpKS|7CWQT$s1EON|Vrf5e60F(&0E(Itn0u=tUHz({% z_b2VI|8v5v*ZUu%Z0Z#t)@F?AWC|@)6^z1a_VCzu7?YM{Ii@CT0=PHaYCf(S|43JP~l;I?;vpz|&Ib-WxZssQt~| zX`2u5-+89Y8lya**%6&-=S;DJ-C4IsizunktYZGeXb8T_?8@yMfts%|Gh!ca|DOHv z{5zn5H%JZm7p#oNtTi%hK!3-0Eu0szbtiV%fx&5ea^Ys?{DjqG{x=Y)v|H9??OB<8 zvNVEeG#NB^3LyTz8^iX+Z+BQ{mKQ41L}oz&Xe@sgselsrL5c2qw%S>wW*LY<(tOk> z&VC;kPanp73RF%KV^fJqTB^OzMv1%-72rdI(>Q*@S~87x*}ROM0OaJP@*tJqf3c;0 z!g_Z7h4r;;vZk?pw&C3K_E_6xFv&1ov`O_#`Y)l3tCu>;;0l(amFX{Sw$_mWB3h+v ziacVL6*OOi4hET_HRGdwj6!-V!T%tG`TZl~>F zZyxQ2u4q}Jfu2JF9y}5@q)~(9$Ul*b+4Wn$Yme7&wpy6g9Q0$s*}ADic6H}r`-`@> zSa~pIBfL8cY+F!bCkEDxaK=TjSIwFS_W z+H=YQlnnDc4C9hUQu)HMk>A}GT2Kq{BuE3Q&@7T&aft#KVpzQV7sy9Hf=C4f^n&#j z4veU8q2`*|s?4%5 z6Uk=}1B3vDBZn=#zSV4AwI#P6_7)tVO2CL89_^uD5U0s3TBID{$W2r=5V|A*%z?Uc z$9SanQ)d~{W`Jny>a`X?b(y2A%qc+Lf*Q*lK!Q!38p8k&r0m3`g#d2?yXwDFg=*0f z-aIoj<^Z|RG^x6uHU)T*WsY`P+A}cCjGuZ z${_$tG0u9R1Tl{e!Ca>(F8~wn9*Ft-1l-fi1JN{(1mrD$S&Y|HF zFjmUI#PITE>}C4Je;8J`p7@bvtYw=jV4Z;x$ufrSA;>z&p7P3cM|DS9H8I5PfO+Ot zMn_VbxIJolB9=Q9!FzTZ;7!IhPrhGLYrovq(e~<_{(sBjC zS6Swi3CwFvGCzY7IxwFl9M=3(3c}#MC?5>G`W&og-Q+b+K}qU#p7m#x?aK4>K~Klj zz(9$S2y)c(DKwAy4?Q)8$tMna0tPWZ$|oj?wq@03%Csvpi%$~THh@@(OlQV=Emc}) z(di)oOr>4Zb%2OdfCVj5?oCI_tOn52g0r&btmbG2O+f(WpgDck666mh+blkQ8g_*R zfb>`(H##*6BrUhdV7o1y*Jy9uoUrda!%hKY$^aZPXftkDi`L{M8WkQS2#>5YsqnE# zYWZJ@Pe)?B$EL&UsT1J9#OIJ_JXkoa2br)`u_woZ$qs90eaF+%L}2~|h>s$5&j75Q zc?xYU?>&P=iU%SOZuvmu2GmNfPYl|!^by-#eG!t8)BFZ-rI^4-qqR?jv;p%=i0}mn zFM&}JFq4@}63P0S1OH@KUe-+iw`d)yc`lU$hNWGqggMF%A=yU@@W#X6ws|!lu-|=S z+qRow0Fh*~pHI?& zXlxTKHrJ zC0QFJn$ybZE?YaW+YX{#Af}g-(xeecW$_UjN3=bzy6f7^sgUwV|?V zn6)HhUB-E!it~l=+v*=TbUkZtc<1#nXE_)8cYF#;B&uyqBM(m3Uzjbl1qv(>6?2GI zpfNdQed(A*>SZS7F`|mJ)k-^8c5SozI1(b-BS5Q(bjQK_Z2MUN>Iqcgb+sF--!YBDynHI_T=&&IZ9JF*%nT;V zthVQ{H4YxN+jsw=CCyEgrq{noy3+pg50oo1TJ43DRQEgU{%p}l*U z7xgZzbrtPT0xWMB*<~B2tE?>5XQ`1g`ZsE~UV)#}R_61>FpLLUQ|z@A;Wopr>y63N zNYg@g!}^FdSJP_hPfYW|f{sJ&CoNI8oDqrHg3%sZy)kFk@ID_Mf*INRw5@&Q@2q<1 z^^R!{!ob3FT6}oWHlAs>p6Lp-I=tlg%**xJ)N>uS67W2Z8Ctffh4slmz*Stb|7nZU zt_+i1w3X#SfR}B}6w*CTM0nYXCwZ-;G@vwq)G;Y=he?QcWUd}z{j+#v#$hm$0vB2d zdH`h5diV=VW1n_qB6mKBx|Wk+YpvIRZYIGPpVbX)|po z%uk!LhnO6a@bBh+#wEG^xSP&NNtQ{;9VgriC5v=e4>%{e)N`H`puQg~AIy#l&2%F% z_a2fS_~d&UDY}@U9A)b0z>^pNwMBK4{5nKWfg5RPG=Ch3;khfb8G365ljk%&ysO;v zRi-a8rvZ#ffP&PI>wrnoRUEmb#xRB6H9bQ_GbW%^f_xPaS5K$z+hu8iKAy!gft`gvS@vB^jFehF>;}W^=dUq z^!X_g>n=y1q`?t`CZ^$nWon%YqyqM*pE<~U8FX{TfmOhvYcq5f_!MxTNz9e_rOTiR zrZtZrbijD#+WEfFXQzcbd=4hFn&)%|iGRXL{N4R};VIFc&^$CrXd#kMAJI=Yw%)}T z{wlW^4>49UGcv|DD>EzBMDpoFFJ$DK%d7gYTII}u^tzU&Dj-lTpsysxif4})Ehib_ zR50G)F@PL$$?T=nGetF8r{0+6B3559xwNNIE zhx^SO62m7AN<@x~tUEO}gA^ySY+gQp{yxBb@&KC1RrB4NaC5DjNTy4h9rG4{!+N)7 zL(9ODXQ_{RJtm1_rQw4i3(c>#44N&a&|=#0W8@33q&`yeDR9`bCi(_4C@k-2w?)=3 zL|D)GET6D__%N#~{v6lIdb|<``9tQW6Mb<8~>E}*3O|BT0NDH)m zl;_xggv1o#mHz6aAP>kz`*vE@x{GY}vBzy{JZQVBuC_XyIPYBDVZYnI(iW$BZ80WH zD6nkpxt-P(D6vu)hb7rw>o2Rah5h&nZ2zH6Br0rPnulr>30MTRJKSTM#XXJbRo&oT zTXFV?EnQxL{5WN0ox3ep-ei^SyDfl(?GJ9pFXaDp+vu@}y zw_asYoXSHyn9EAST*pLb5Z{Rt><7Vvx8lt6_RYV$+&wCP@6JA?o z{e9HH@3e`XyX{Z!dav2??^-4MQ?~-7564j#A{k!V{j8N9pu@}7*~s_qw{pgE=p!Gn zg-!3Z$%boP+2Ou%>-@*Rv+SELp^Vi4SIm!)PUdR$LW9xK!-mQOqb$m{W}80SZh{~u(|MM%)+Gn32KQF?v!9I)Cl~}wqVpqrZ+sY%1U!v67&?hPamvO4=A~$NK;5nn`ZMzI1NORu-zAFF_0~6nxfx7i+!!0QD*P?hEs59| z%*}WzYz;vC4|UuNwJ<}-zZB)5-9!l8Fy>ODII=Gv-*1ZV&SC;-c6IWU4W(Mq%%G7%z!1gj{?36X?HH2pPnBP9)i7%c zPlZy^D#s|BHcY_yN2%wIga}bSY9OhzE|I;?Q^dejT^dq)7y^b;Hfqh$Q zYsPlis`j*9GdbT%#z$>K>Y#=DOKqTXv3>IJ=k4@{dH7*O9mB2H@9N#pFb_IWJ|wJp z_oLSQ8`mJrD7X3ebsd1A8#{c+rlt`o6ambx z1Revt4~CYP^~V;6vazJF|V z()_>zKn*4pGEK?JG)XUh%8lN-(P=#*Yg$c`{m9ZL2LuDPWtbiT&eayROOng}F^gcn zqLkWs(t_lXS;kM4kFuNu7>!M24Pa*fX~0RFC7)#8(gq1fT)p{x(rO4`1uk9c%&we? z7~o#!SDG}EZbvsS;n@Oc1pEb1%?Ins97v5Un{P=>(ZWjscsy@p>Xm%{q{X+abl@t5 z)H*aDGdE1JqH9|%x$~IQphQ(Z05{ZD=YdPnO)7urAE`$JvvHBreArr~;*uKkj+E3m zEAt%2It)!+8_-^b7@sVrX<|a9sd0|OJRg4Q#7j(bB!1OO1WtOZy~F|{Zx|Xz-h3Hj zjD`!k=w%e(c`6N#Ycl{b#9RqVVlyX6a2Z*>aL(D6__?9Y(~yxRfSOmDqQpD4yyylw zVaufL-#f*xUF#UV0021XOzB>j&siAyFdB$-yR;twLo|tc&PEnBqP3!@n0{%^N=p)k z9)|f{sI4At3ns)HT0N67)-XMD^Hk-DZps&trVTBUcf{&~Ii>aK7!0%kS~D^k)F*|X zNO;M-g8bYkle8%q!AqAwaON{ir5!_xK8nnf&?J zbjtt!W8_oz_zmkk=3GBWv&y54=w-`XnJ*l@wj^%e2q7^~yo_~6zTh%%4n<`~$8RyV zA=#ZHJaOgntP*qcnosmG{Hk>lu6TU+bGCHVFWcqMeBKt^{C0Z^Fnh_?M=kuXU$^=z zzi12Cz-%Ee{wY9G6&j8nz)#6|r@i~oM{VMDcUZ+Zdmv+O(^XY%txw!-hvFM7R*jj( zSk$iQyvME@Scqv-&fa+9n`ka#vJ$oqI44!O1z2{4OE5}y0E18R`a@Ibrs#QoNF_#sPvJ89F`UTzJsNn6-= z#xAKFvu5o{(cgSaSV`rKKks$M?TX)C*T*(iH2jAQP?Bit^H_F1CikX`f4Znvpl zWA`aQf(-TO2)^l6JCotg*eZ^Hzq65IBPzA3x`{kPYZ+aw`ulMlh9;Fw;zyvg3! zi1XIJK4@!V*qT-W7AUj-s}Ep$B}NL9yU{Ky3v^Qb^)^vjZHs#Vjb}~)h+$U#@`skH zY_fOm`X5$;M(bZ%-fcl7<_j}pwrbD)s1e>~sZpYnRn=SXcfW1rQ@z&Q1GstawEfzt zP8-`R3Dz1I%^~&)k#9qZt(`h-n*t}T7sj{}TCM4M%$6s*Y=7=eXc00t52iB`#m@ld zrk=SyJ#gCASg$qk&^3U27=M^%)`5JPWXd*$=3}yBx0N40hIS)h6PO;R0_`xb0NQhv zc4jC0eIP-Xrfa&Z+u9!dXREn-jZN>~Z=ue1t64l~i-voxqA_CEq#MYCv=ZN{7~|Y< za;M!;-D^=8_1mw+rgqnETX;#GJ#-FrG2Eygfq^k3v!uj8A5P(E6ig#F5d}m764oDo z$Rf;zDx~x|{1(P=LYdgR7mZB2mFwogBbLD*Xu&x^5JCjm314^QS$p7A6l{V-nw?k6 zrv|L7{fy1eB&-HAs}0@%LWHojRy){j^+TAi5Og7hMq?BPxc&e63#-`wl!Ypq?Z!^D zDboXX&AtECDn9cq>rJ;?+1a>_K*oXRcG)Ed`)zWx-`=|TV(SM?EI#l(TU&asWp8*N zCRJlr`^dKdt^h1~mmfc3w-5dZNi*6DqQuRgIBl!XJz=}EE1}aVyY%5dCHfS$yM*eV zd~&zb`o#th<9t71m-g;L3bxo1sr-^#<5n_>Nn%gXR#=bKw;!>E<(OK8M=dzM z&)!m#wRgO=-lo1eVrOGG*)u0(UNC-walou?4AX?bu>+P^y81Q4bZGtv;73*>^+VDr zfLj4<*pC}*w5@R8zOmzlIyf(zH!IVjANY<09cTPSZV9BS$nTCki zr0C_#EsQCQz?{^W0%tNw@l$vbO)|_@kd1{L$Q3}!1E3tjj8Fr>mww8WErk7k2;dzQ zFd~HvP)f>SBBnOaN&TdW=iiF`9Wwb9m7FpnM6jEPfSNX>AO3peDa^tJ1XCw5Ya@= zTORr3|EByiN6o9IYFDZlAk9scr6jXM>9L#aLXj)U`=@!ptAHM#zVxS*K?1_sj84 z=Kto)o^{PXSD4X1=O6uRyccFA|N6@vSyL|g`TRoizeAW?&PsFh&ARv+`oVk)ee@6C z{%2EglMn8kwvzG&OhB`?X4TT4c`wg?>VMc&eA?=f{MPJ#0vqZjR*tRn#U~#{9sH!V zUVDSB#*8BV`~%1=(v})WB7uE>G&^JqN4sGp25kEDRvgN+HpHeXP2HVVy|C5lmb6)P z_g0G!4O?QO9n*|swiGG!)G!V{*ef<5v9CyVBITXNTnp(V((=2@Ywh+YzhGBa@gh3* zEE|xOSrQFPFJP$pse3Jz9JA_03oLki%z%AX3kX?|Ew^aI7DT#SfDRG_;Z+*&^E#`sSbJnJI zK8Mu2+`^|&4?;WH{U>q8PNQAOWk&2E(!OPY|3%{9`sB?ayH64zx}&8-1Sp8|PUCTtenF zD(kI1_;Pg;GI$iG6R?icS^3auOOE$iIX)UkG4gLce8figZbi_KQzg>V$YhU=v4La= ze~xiX^GdL#nI1Sr8~{%WVvK7HB60L<;Xt#Fferi0GCX6116JJ z4Z~PIatOMyL0zWCy7oO}nWv9h>Vac6^6Zb0x&Tr;*)yi6*N(ziHuM~^P=DCEaE$Mn zS7*OQe-<8ijQO+A4)WkG&z9NZf#+;J^LKuCkL6B0g@bsrJyLOrwd4-k!j5OG4?C$} z>*})Z*r+XrRs&D}tJO#AZF2II9go6TPmNf`558>aQM4VgMflcC*rAf+_J(tqIgNGL zH;0fw^&Cf|!#*g0=ooaFKYiL3-TMs~Rm{8^SJ(|`{Vax5e&<0;^z6f25vKO}r)}dS ze~s3l*1khqS9I;RjU6X!>MMU}-SeAlv=e8yZeDGszO$$Xq)S8n=!_($*b2jzs$uOcrJ+ z&@+}CG^~a(!!PTpeb(K-*XrJIy>*;9LmP80RH8STe{uiHv_vo3 z0H9iq%Rzuj2z%-fz6f$O4FdR`1Rv@51@q}1X%&=*dli;Uz+YfWz5~HB!Z~A7A;;Ll ze185}N0^D3{3;L0x7wuSndcN71-@YH12Tbtr$1`sIeoa$5_nZAV(<~fP~9AH!k zN(-tke*Jl-0AuLJZSH*b=M{{E&rFSQnT^el-fBR9;?&-zi~z!j0B@YMZ_F z_3OoWyaUE#3dSS#iZUKOpMdeGD#wgr5}=8sDOGRH2mZ+dQ$03{RCla@k5%p^W-%Z| z4w_-|q2RVA?PEdIAn*>rJ%tfgz>d`*$sQu&LP>=+l$O}UzO9xT1O#RJka(X)iYaw# zUbPR{j|0>rIGjo4Rs%|<47rMd)qxuT|NWJgpJ{k zF(H68m9WX-y*ALY2;1CFt2_iSMJp2+MO`?2#`<^(eg#!($-y1A>Dl|xN>tg%v8OCm zgOd_W)9CP!P4}K8CNq1K0Fpu@Lss2&(uQ(KMw3VZ&K$C!>~66;KOHHznyypetO&ju zs1~t>&dFAs1t=PLwxDPLhELc$_IwCDaJSvNZk3H7&8lrj+rcJfVSG?TGw1k<19J|L zJ_e`_J@%004j#937hnq@Sc8-}jf6Z5P@M+cVYy6R)Ttw9tRAgP4!@eox+)8FVeZg# z0xeXdC5SUUHP&wT*M@9ee>ah#U}C#=T5xc{cHofM43OLMw(BkWt-nRuTtXn4!#4iR z6PQt?Y!JVKUl-fOjeI6}6cu?O4cTjOw-a}u9EcGR|>MtXb(O-kQc z+h0>^U6>D5o<3z*!}AZPJULgxNTBHFiRP_p{hdHEvU~G&nBz^_nuE_-q|QkLvELqA(2BD(CI~F1 zr%GTdk`=ZVrm?;66rl*a>_layEk_g31k)RaNt>qZ?Bp4Xp`p9J>pq*FgxMK5fm!=F z%+|2&NS(7bK=Js{QQKLL&k=oTE6X}x3Palv5L1O_ZX`5qyGlmw`jdz3Oc@(J4xS(y z)iAzA5#}`;>cLbth6ZhN2nLaU4Tdl$p{|AaWK`f#o@PA_;X{<|BQl62PtjJ}7d&MR z4}2dd2JG7>Pgo_OIMRFA>Q}!T(+t4-f#aCBjoL_b(zc^ia*vQzE5M50~W*Y<3~#u+rvn^u0g{Wz`S8}*HNx% zZA0IIr%;`<9$23(z0cV3T!)R~d(?rM;|A7P2p=!E?zR5isPTu%KXvjrX4*)fWu_$? zEygkjU<#05&fBmOXb*T&z?`Ab(5RD#ta@4UY?xA%6?{p6j+|ufa9+;~{mlW+jAum< z4OJ{$X%n&0N++Lx)}F1xw1l-4nP6Rxqjf=(lE&09GTC5BG;H0^-G^D`LOaJMsB+G2WizQ? z^d!4^B?s088~{2Fbm%)E#CNKE>3km8@bk<9Ba|Jif^pE8<{5&SeEGUx^jrCLU;euL z@ml#)0Os7Y(0d%d(7Qa7;XfzEV9X@{UjLkq{<)b<#V0CP{{d^-@!+7cw26TE~Y zfJaFIam90t!xZO^S5(^C{sDWmu^BBz9H5JolNVY9ASS0$5bn(U@E@-s0Ef(35`g5E z{xdj-16^^PR{rEjI}%mQKwyXx*f0*`2k>xJjV;H2;4q9z6AZ#+8s{jqA3Zn>X9fY6 zFbOB%!bdT4%D^~P1Hf834&s-R=DvO#MUp>W6|*ygJ=P63KgOOCX8Zm+JgC3~K-(?}}EVPYzKkw&ADilTj~8^!JyKa?bZ zI*SAI6AiVtz8~#HC)%cSdkz0w3lb4%Ct93+)it)_*kS9y_&c1)F` zBdM=7FoID4<22@WOS;b@aXxDu)s=RxtQ?I+%IX!}h}jT=7E$^c#6N%mXKVo=`SX*^ zh3yx=9>?QxTeE*B!3gvs`!f}siteP9@~Guk_ax;M!j8qS=v z)~=&gg>(7S4fx!^gbkuyJIfp>W!*Gj8kNI@PyjrM9kF~66gVL~eipx!0c$U-X8hvT zQPX5gd(SZ+Qr3dD4kIJ9CPWs21m*0FGY!q=XO~+A=8dD7LpIU_v(a~wem-Xh>Kh1L zFlEgnIEONC+F{gMnL~Rj*l&lBfMsL!aiSYWfb|os2B?o(AK?kY^vozk&Nb<&KRH**R%?(C95aa}do;#tzih+rm!hS%&EiLX_Ix{nmpCPSd%A zmhCw1=1L1eAqMDkQ|~FBGt)NMwAM~jMq;er#?izjMldsc{2@En0G$^vwiW~<#Z;s~ zkpe{u6e;l9rNDm}#^d#`BIEJt$1wc?P}CvG{KPH4YG-Sk?ZARH*o|+uot&Q!fc^Zn zZ??a9-J5I~Qskuo`c9ct4G-HN|MG9yP5ZVvDQ^-pj!a{N4dF=sY}0%@SXXaX9N**Y zwFNq4^B)#q0Z0i*Ogm|2zyoS97ZZT9I!w(ZNfpy^t_-JafX2P+F0~DqI^DN+Gtqn| z?b*6ITYMIiqKddZ@uoYh3($4X(v^1Okv-P6;Bq?{9I_9;{R4KcqTC)?y2ei8*c}I; zG}7+J(4ZWzZ?wO;^Y?8B;cGe?7g}Pp&;I_pJ1~*L3~WIY%+fh~bkPdyEUyLxrR@io zy~X~jZXtH>!?yh75&M6C{SWN#S6^-GPVcb>fTe)XIAK=>n2uEv&4<1OVJ^OS*^SnZ zR$>Ha;}M*IZ{5Gk4%gS)-D@tk_IWL~@zhcK*NZN-`9lNtPn%wcRwQO+^uH9XOBAL@ zpzH58T?@m7LoEVEMZt)0{>haaY{!zd)_nS~eQWV*n<}fY!!U*0+Ll^3;H&$$ej91- zcKh;`HxdS7*dAVesS#Vm{_2;1-^NOsZNZTT?5kJZYV*(S!tZ0m{^)IgWIZd_+2X_7 z?QgHV$*PBX?5mewVX;FyYyl>5Q}k_+Xjb!KOf_y@Wu^AOqGk5y*T2o~p?wYAC-JSw z*h0o(3a~E5L(Ih4%4!(Kq#cDO6@a>4B4tejI(NSAMtnVzcJVWhvO{$QCN_-OQ_yxa z)Z_FWg$~s?_p_-F0ACE<08-dDAkNnE-*}bc;uqRsA*pJ%U(A3Sd1>MJOAEpT3 z*tpr=wH33trX_Zw9-ksY2p=phx0Ua>!{SdqZa-SJ4(WfF{o|(B6WyrY{_(Om*yhtm zZ5WfG7|dOYHh=iGU&oPq(!O;0E$rnmVWXv0whZ&P35Y*HjM(n_COZKm^YG%O_Td|U z)viAL9DR{3xyEhUj={i%>5u#^CSf+mV8Evs|KqHed)95Xk3q8>W^^Zz1b_0zJ8i|e z19lFxpUY5(j>A~}3-h=hGr2CDtt((&cFt?IN}{BFztYy8InMZ&+Bes2w7t#ERvV02A4;U^;T{_!lQC>XWa#*|sihv1^Y!Z`0|Y6cC@0*<^jSc01w~ae5K7lMJTw7uCSd8mRjQ@_t-PbmSLKN zEhEZUFsy56qF9(_tuNzU)$d^OQ@?%8maU43Ym-M{i8 zsFOy^khG88^iB&dUTg2X@hbZaQMsiA*CB&yjERm-9*I7Rae`y zfaDy}9xC7e`}V*mKW@LXajE_8Q5@uP0^46zMTDacdm8YwsjnNLCwD(Y&x=~^mjV7; zA9~OxkW>#=R1rloXWw7B(M~tE*l1OwUAOab`@x1Swu%To-?-wJ?2qsv{KAt@+8^MT zatc7V9x!@ipvC^^&0C0Ub;PcO5okg4bQIuw1h8~H0BY;XOYQ2lDI3Br{_fS6TX^MW zY=|o@^``%9mt&uJ{L)M9p}q;*x?~mLc+w89Ai7G!`|REY3+;9E>HixXva^^uT(qjq z_BDRg76bl2Uf+V5iP|R zUR(eGKmbWZK~&*Pk+OizKEjj^z+9BWWRwBI4`Sk0K^WKvHox93hbhdV)tNUiXw^7v zzIEl*_L0sJd+$Sc*(n&4B`~+>bnKayCD5wIe*KBFb`r*Ot@jG_?wukMK1H0`ACS6qx^Q`*6e8{$c z;-hG`{(tt)0zRr^ZR5{M+}+(EA%p-y5(vTF3lyl+QtBQT#6Qo z6%85^;t4V0zDd@;XLb`BC{QExqs;sWyLmpjOy6Ln#U|35MS=b9-Z(gP90R~h@j4agdXBB@%5t#EGXUEy9S}|n zNDHrz6%~7by71Mi4cHkNjeU{*QS3$Q3OL!oD!1jyR@HvJ0g!nkD&+3NA1G}+jz%UdJ z8$sWDT035R2(ApG&gqkgZ+oX;6n*vUsOUU5a5xp0aHJ)M!i!mX3f+Qm3s)H(!5Q4= zUBfVy0!o#O5n~v5{w5c@N@Onb^~}jUjzKA5S6zwyX@wXX9gLpo#dy!2Zc_BA_n~id z|K8p>(ij2X%37q%oP(VQ_QNM606k**U~6^>?u(7$3f@-uqNE(5J$m4oMNi^`s7Qo1 zWg_8*`FLQ*0r)Wh(01S;W@dT>TS8*#>ahZTgObs2`Y@Dl&BXUZ`oPxN5kGDG28aEl z5Kh1HS_ZKmpzu}3H9eeTx|^~@Bn*thGxZ8w&6VGmQ9%80_g?f03*}0g(I_Hs4Hxm- zqV~qM;}bFeU=AL>dLdf5hQ{PUv3P>B!ruNq=*KKR3zFmT(}`-P?BzA3Wx{e_CPIfN z;n_o3NQeo>^`7onwQe`!Moz^?m0TNvv*9;(3qXRmJ1VFYe9lZYeZm7!%YbtCtFOeW z)KvJy^}tqILaeAz46iew+pH=0GBpcMKA!kFIuW58mm|y8hWY0mP)cP_;iSaIp_9>j z??!06ec(lxl@Bc<@Bl3YuH>FX%fO2^UZ|Te1tr!F=)Q3?6k{jg#-813Fe#afi`|4ZN#P)$ZU2}Xn`)y>3=CQ#(T;p1Pz zcBmz`GxlTBz=0Tb(`<~QlJMFO|3h2ya6Hg^5T-G!NiY|b@@4R@Zpa7(aDAH;7f&=( zVfit9Fv8q?;L~d`15cf(cq%Z{!xx{1cw=);InwU7W)m*1V zk7BF0173OKRpiiOb-9Nv7Bh9}Xh%1?Lmk83fur#VGuriC@*twQkj59OhnRM^1kY_- z&H!^@@RFriOLxvND*j7`&NRg(jO4mJ+E70%$SA-q{LQ}_+aIqd#l!chuTXK%bo{%u z0yBmU!jlJb5FFSOQ~O0@b%Patu5&@Z$Y8iIvrJ-;FN5P7aZiLFKFT}}7fzlG)aVdG z%W4TNY6jE9&;`CZ%hO2$l7J*22}lB6MBs0;csxD07YKo|w71ZF!izWf5-&n&>)&;UHKlk06TxBIl4F2{7b*kq}epq}nNb4yw= zx<@ShxE6wY@+@Qq$070kmk{ksx0r8!fGYb0=24jWrl1GP=?_1Lf_G9>0M;{aeBb0` z+-Kp52PTccPA%XKMyDWDBz`qhY@!5F0Q zp-YlIDw1On!v$?@?JIE~{b#JAf>6x031$X*A)1cxN2uaWW3Kr$3aoK5wli_He3HD(ToH3hmhr7>WbGq86vM|uba>nD4Jpodo2^*!&eS!d2U-My-NrmOa@-et+$u^D!7EwZ|avw}s< z{hT^EymV#jb5dR;tPj7o^XHE(41>JDXz5zC6}AsUwpAS(MC@q(Ir@i?*Pe+q7C}c6 zq|Ilby3P0#>R??TG2-MDcG+LPfw&%(h)%eSJQYw_g;A@98#3>SO znV*F(6RbT(Nwr^Wljul1sImzeRMh6QQBNXQN`f(%2U%gzK6$?Uou@5M9()XPB$dqB^Ht|qDBS6N}q72@8s%U|rAZpv_%n#C->&6j9oXut%v%SPlX zFl8d@L#)8l%)#3n75`s>pPbx$&a?v#+9yqSs`U7rzSc5_w)i~gV6>erZk?+(!B4W@q!lZvDBuX=hkd(Kth4=_wFzx_#ZaOp)&7_*eB})isABcx1hjo8i&ST2`;kUT_izaz z8F>O85ft$I&!bRe`#L>Xl?Z*PBFci1pz5Ee)5|w9NDeY)@yy>M0nh8k#4_(^?VIWz z#JczE6M-m%(pmMrabcH?1^TBT>_|g-S$*eBhyXZ4K_y`{{CG$yYKg!y?cl%b!nT+2 zJ*#Ja5jopm3`eKRU)>FZdl1)B-E&ht(A@`MS;^N!fNKG^RbjtAn^LH7H;9ZKS7+(D zXiN2vhZ?bjgqw39pO`4l6J!0cW$-!v{+k0{HpJ*tJp*H<(WrVkY`CH5CPM{;57Zmq z9gnR1ENhIHDh}SEaPM6FYn&Kn4D@G+UqYBo@bE>X8nYR) zE}duoCiOLiyOe+ZBm65^-#l+ISTI)ihT&SM0k36;i61o~P}LAU%v(yi?Y?l>v`ncp zb0iWev3`AY>(+#CuftwsAtfIQ_2-?Ta5ftFB1MXKwC|_dA`hd;O-hW>^T|pdyY>*- zHviM8nid&Z;C1^&d(?iJM|>)^i3^fAH%@xfAbiBm$#c>H4e~J#Dm7x9n!R1?_ch3^ zdA7g`J#DSvQ<4<)A!%Ca*CFKyRO#>dee6+FvUe9dlBtrgG2!08WJO+{u1Kp$Bg8?P zGe9@uk9Vs>>%8rVb~q!}Rle2c?Iwc!b_{hGjXD0Xd`;BjL}-V4krxJ9!$Wmp zfg;3_zsrR0yCWb!rAtH9M&kOjBJSr(Pzw_r2FP18<&MZnX5x=8Ish%bGq7<6XV0|5 zyBF4G8$>F?cn5;R5S|Z*8bT>?RqJ*#BY!6Ua%m(-RK+-xm9Ku?J#i64{AfrW3_xCt zWcdDX5r}?B-#Ki{@?$!A<1syI2930W?b>)IaX_>sL{Uni5nCK>A4j^H?9(LV{`Q8;C@Dd`%8z5yc@@z=#rV+%3oKq2kylH-hJi7ngXoxaW zwQ5Uw+VGpU)|7osYO!f$2z=g~{um6?$^rs9LGD949Ow|YqMJGR*Jo`4YSug(VpHiX zu`WnIV!?vBI5%spyQzSR@CIbt8ia7>dWn|>Nvl-9odvkZ(z& zUH+ZF^sZKihr%d`XI_Vt`Zu1)@6@#KGhQsaFZH{hfrDkrUAJhMZXMXVX#49J^3y!{ z@oGR-MtGO+IQW;(xcTxYpz8Bs9z*WpZTvCknB0p;oJ$!$z@WL)1pmElJC>H`)etp4 zuX9;3>0{=_yms#5^>4%Q>i&gJECiR%2xuO?0=02ZXknyV5g3#Ow@3hAa zTT_z^b}X1-@F;v&CEk}Vu71)!&E&fo5B)pv7 z6SX*#$o3|QNV&$REwj(QTd>=^u6QycSS<$+!%HEQQI-rTPXk1l5|^a90jqVVdsXcL z08=Iu^3_dtspzXemRF(#O8WPsdhWs`b=)EjA|JlyDQ&bBm%;lfehb`_?T>~G`?gDc zTvJ%3GW6h2;ka*SQWp3}H79CYMh%sJBHN^@%HIpaiH#K3uX>brvmeHn2M3TLRmT%C ztRsPt{RtqNU*TY9pv7M-Uo^-PBK=xS??gkAevjqFc|YbalHU9(f?rqYyFa2~NO$Q~ zh&jafE^^7PBS@=^2rI6|JmedUH*%i@-n7as#bZP}rr&?=M@?X>`kzbg`Z6J4%b} zG+5hJr@E!&{kk(g(x%EL=cBt1{egL&iaM@i+s!xC?(TxiqluP4k;73zI}$lvohUJ_ z?%?NeavzelZTAQF?6e+JOH<|+1-n~nUIlFB&wbT7kvZHo-ed-Axhf#tGW?N^02)e} zV)dqpx}GYt@JGSeuvvdb3rSwY3BHD0Zih0Y-;#9`?9Pv3`z+u7{!qB7lcxRV$XhGp zA1PnJi^oe!CYQaD(TP<(;GaZeyWJ4yQU5N^6Gb2bGao;8QDA>~)D4_?5G%~I2U#nZ zxxRj=uYFh++vTgH?bgF-lQs23H_0psIKs<*hr2Eta%5lvmq}y#`M1OxsWfc}2re```4r$&KA&b+u*JrznO<{W7Hhdy3>p-@1 z2=54o|LmBX+n-}nQ!O-~C_aDQ**+2SDE09mi6*7qtq3p4HT-&WkNw-VuU z+9%*U7zs$`5yxs+TN`sqUfm2t6G^7CD#8Jd6>nEjI%0){;E8F1s&x z7e>#`biD0SF&Oy(4$D5jZ#g^CuyulkEHqy$+V7V2P7f!NvZtpNXYO)xC|jtX-p$FH zh5zMlZEjPLmn|hqW+!rmkEYodYuhZz{lfxkC{yPj!goeoP8N8`^`Oh-{XSe_G5C7471*N`y zz2eVY3AM}k+yDQoe?B1$;-h^>{`U<1%c=Z{aKLWQkonG)I9?0JEwC7fVUzeJSQROxo5u_Fp)A3C99F8vEkhH2R zYuc%-2#F<2`N7=971oay`*X8fdiN*d;AS3=VHbB}veJRd%A;?*ulZ;=5?7bYSB5Va zOQfEjJ12mri_r4LxOX_FI}Ocw#hHkwjVB6co(9%dOt<(aSuLJ+j-!~^59YE$s_^J- za-{*5ccT_!^Kl^5!$$ zUk)>8B^Q^I$gEHzc@A#f>*|t$zMSQ;;c+Df`K%%{i?Aqysfd7Y$48ozmQSPS?3%M2 zrp=OVq+?^6v-6F9HZo!>Ibu#aslTe`7F0HOU04nNxFsj(&Q8sGGctaQUM8Ghx?J+) z)>L=#@2E-Qey%3S6KR=K!z@VPQ|qILBF5*}KSn%B+>auNzf zI92tyo{^>|dVOwnWu47_Ugl?}AsDx-)^C=519GTFQsPLo)58kqL?MqZMgTCs|u29E@&C;ukR+$IcRS!HqTTP)ea zKP^ir^)IZHNK4Cfa?H1)e;d?5js%4kzHsLbZ> zqt$A@z%G}vhgEMJ)*jvucpWb>DPb6ujd@xj%>#@8>0wSUJtg(8q~rrapvOM-N~3h@ z<4wTKz44MA8cVc{v!X%dWt>-)i3+Lr;cp3>-BR+d)+qXa|B3t&TEM{fa-g(6wvM*Z zT@U1kF;u-vRB>1H`Wy8Xz;RNpY&u*lqFarl`)Ud=&}qfsygx7Wy2JuK{;PWitgYag zhYypmuiLCEj4>c$*0mK`{7|rrwg6Py%FP{b@@ard;Pb>*(*{Rl)wz34+Cwg>%)9E_ zp;>x3Fhw1e(Nq=Nz8cH%-5z-N=@A4AFn}&sonbKB>WglW2b8eNE?%a!X*qe+gW<9( zmA*uglnQIwu~i+?+?guV6hmgXGUHk#oQlTgb3`TL+m7V81}@gDq?qtIj^I9^T!_zC z!~O{35!sMOE7hICKUMUb6_@+#*@>fty>44nA{W)Z5zJ0@w~up@UsY2u&{KhH5i9=hR7D&3zfAI8#GZ9QB`gwu5HMCN0tlI(?EDP zK#QGNWM`|yBd}E7SNnbxq(-(H%7TV09ziGnCqCLk_gilu#5}jWS-1pV6L?-r5hDdV zicX2X>ZFv_wb)U<|HtOu<+$tJlvNe7eRr%f%9HkzfOl%@1-L=;2F1K@Ob(Btx)UV| zM{9E!!ujV&iSR-7S8i@K@KB}2X8AO^w>xB6qYY>pSxZ}R7HgwyNWzr~uw!g)cQ5Ky zec9P64>k>+w*Nxf#DHJ2QSS7KK%xYFZlduRn!$@UR^Y>xJWF6HvI#As1nEjk3@m6mrS6~nn!#96ZL*}}uIK4g^74KkDek@H z0XMF1$5^%tjY9n_Uf1}#$_f6nm^-(3z~1UyS3n`G^MGn#WK{p?I_lsEqr}7md7jnx zzJ55u z8}shifnwlY3~|0&Zv<_Xu?yKy(C#b$ro20ReTsb3N)r0uI}b(-ZnP}(j@G{&f@?YQ zuLGFp?H6nU4;p@qMIWx@*M`6oH{#if6o7M>gw5&T!dYrgc5Q6`;O5Yma^81SS=W@jS8w-2H z>j9Z-4+Gge$Z@0Xs*62qnz3T>)Y#g)oMhFgBwlLNd)a&8aSY91?s%Jg^M3Pj%jjk* z2$v1w$Uo)4BDK;<2a(U#9ktZ-G`{)q7sQSl#WSTWCZ5n=k#7T9E})4$T)QjkFq@z0 zHs`26X&hg(B=yW#arKc8ry#+{Np;2O(>FEaK_0p*t_rA>j}40ClRbMYk!f=cqqsA2 zdP*wLOj@X8@2xGO2_(2nH#4Hv!Y*zKx#Oswac;)0cxPS z8OHJ2gPkOx5BC1(g|&Q=<8GXzinOZCxuoR#2JcXD6kx2v-+*_7vEGXpUWwM*F$aUs zK}XuSMif2p3iDHHOqdGT0pz;txo{(VIrXH1ETuHTFF8Vw)?f}~EWct5_paM8^)CQR(8*G(4E{b(rx0BZ%?y&@oen&0+ zp)#5MIE{iIEkA{|!GE);yOY^h4mxtV-%`i`U%sF8%v9!W<>AR$G5l?CM&~IHOX!%h zIT5w$G>w3--Az(U{`dgFs>3E_56uvX8%uESDR>c3L}8EZ7{O=_ITB?gC>)4= z(V;#5!0L;gH#VDtPy#RIK_1-z4x;1O(QCPbivBRNBLlEWG{Lo@-I}ruw}a<~y#$&o z`y9EG7KC{Kl^qDBoq4npgSX~*>!Ug*(%uiFDRpW~J-x{EWFBO~qp*S=Li~VL{UJ_u z&0^snUxPT)7EQB$k9`@$x!&t1U)BJ2twSVnaN-Au;0$tWMmoW1vP2^ey%Y;y)K41p zws=CL+<<0>AU&g6i0;{L1y}8>Y0@N|WEfw*VB zhx-ruVYa=d3M0TSHWy`E?pc1G*#3z}17!X)i6b`0$fhYjiQXTj^jscU?nug#Q`1Jk z9~9KPM*6d`>T6gAngkLpYmZIepUjnmiEL8~Q3D_cV(8|;^)D6dvu ziEAth7io?qu7jOt=&*GVs*(*QZc)*=`UIt8dc)&T_;jmmv{r-s5J~h&MTa2@?|AFv z$9RItohn~_f;E$*E|u-GIA$?U9Yh!O+uA9rXmffj(+2E?9 zHAE_-7~$LDQR-xtV;2s1O`*Da+L(d0#!K>}pbGqNmHy=CIg2Zd?_D75)E_#>v)czj zyl0NQPFf&puP-%P=`2IHi2-RIuwaC@*A^OPeMx%QmnS4^1%p*5FXpp|jZhZzx1OJP zbXsI^X+KLL1}>JvPmPOA1f>}^`#G8om(=AS3p}t>qUTUA$37{2}~s(5w86 zl~O;MJe^J>atbcCYO!7Ks{Z1YCjO61vG$rYNndH6*B^4Pvfh9GMZv^CkHh(mlA(f+ zv^clZQJfC=yI}g?R{}~i#=Ek#;I`)^o+*KBp$y#u2Qq$LEd{V-o}R?ny*)9QR-v)i z9=YEA&eHA947yS<0FrMCX}S2^BL{sN6N%Qh1Al^}viiqR@{3_UN{tvT{+Tz&tf=)F z?zvKtsD5esVi+tzJ{3CrLj#HR;LSJ;#S|?C-TS;}L;L5xjI_#(gFbr7713nT)aFmz zwO?hHQ{tr}n&l`#Pt&`_H7MVU(|*;Pb_d"aCh)OUZP*8C+N4gceBE6iFm^4E74 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 eUyc?FIeVoXQ|4>qhv)=x07_ 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/getting-into-containers.md b/v1.1/docs/user-guide/getting-into-containers.md new file mode 100644 index 0000000000000..9bf70ffef6109 --- /dev/null +++ b/v1.1/docs/user-guide/getting-into-containers.md @@ -0,0 +1,107 @@ +--- +layout: docwithnav +title: "Getting into containers: kubectl exec" +--- + + + + + +# Getting into containers: kubectl exec + +Developers can use `kubectl exec` to run commands in a container. This guide demonstrates two use cases. + +## Using kubectl exec to check the environment variables of a container + +Kubernetes exposes [services](services.html#environment-variables) through environment variables. It is convenient to check these environment variables using `kubectl exec`. + + +We first create a pod and a service, + +{% highlight console %} +{% raw %} +$ kubectl create -f examples/guestbook/redis-master-controller.yaml +$ kubectl create -f examples/guestbook/redis-master-service.yaml +{% endraw %} +{% endhighlight %} + +wait until the pod is Running and Ready, + +{% highlight console %} +{% raw %} +$ kubectl get pod +NAME READY REASON RESTARTS AGE +redis-master-ft9ex 1/1 Running 0 12s +{% endraw %} +{% endhighlight %} + +then we can check the environment variables of the pod, + +{% highlight console %} +{% raw %} +$ kubectl exec redis-master-ft9ex env +... +REDIS_MASTER_SERVICE_PORT=6379 +REDIS_MASTER_SERVICE_HOST=10.0.0.219 +... +{% endraw %} +{% endhighlight %} + +We can use these environment variables in applications to find the service. + + +## Using kubectl exec to check the mounted volumes + +It is convenient to use `kubectl exec` to check if the volumes are mounted as expected. +We first create a Pod with a volume mounted at /data/redis, + +{% highlight console %} +{% raw %} +kubectl create -f docs/user-guide/walkthrough/pod-redis.yaml +{% endraw %} +{% endhighlight %} + +wait until the pod is Running and Ready, + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY REASON RESTARTS AGE +storage 1/1 Running 0 1m +{% endraw %} +{% endhighlight %} + +we then use `kubectl exec` to verify that the volume is mounted at /data/redis, + +{% highlight console %} +{% raw %} +$ kubectl exec storage ls /data +redis +{% endraw %} +{% endhighlight %} + +## Using kubectl exec to open a bash terminal in a pod + +After all, open a terminal in a pod is the most direct way to introspect the pod. Assuming the pod/storage is still running, run + +{% highlight console %} +{% raw %} +$ kubectl exec -ti storage -- bash +root@storage:/data# +{% endraw %} +{% endhighlight %} + +This gets you a terminal. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/getting-into-containers.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaler.md b/v1.1/docs/user-guide/horizontal-pod-autoscaler.md new file mode 100644 index 0000000000000..85b6184ccbf71 --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaler.md @@ -0,0 +1,114 @@ +--- +layout: docwithnav +title: "Horizontal Pod Autoscaler" +--- + + + + + +# Horizontal Pod Autoscaler + +This document describes the current state of Horizontal Pod Autoscaler in Kubernetes. + + + +- [Horizontal Pod Autoscaler](#horizontal-pod-autoscaler) + - [What is Horizontal Pod Autoscaler?](#what-is-horizontal-pod-autoscaler) + - [How does Horizontal Pod Autoscaler work?](#how-does-horizontal-pod-autoscaler-work) + - [API Object](#api-object) + - [Support for horizontal pod autoscaler in kubectl](#support-for-horizontal-pod-autoscaler-in-kubectl) + - [Autoscaling during rolling update](#autoscaling-during-rolling-update) + - [Further reading](#further-reading) + + + + +## What is Horizontal Pod Autoscaler? + +Horizontal pod autoscaling allows the number of pods in a replication controller or deployment +to scale automatically based on observed CPU utilization. +It is a [beta](../api.html#api-versioning) feature in Kubernetes 1.1. + +The autoscaler is implemented as a Kubernetes API resource and a controller. +The resource describes behavior of the controller. +The controller periodically adjusts the number of replicas in a replication controller or deployment +to match the observed average CPU utilization to the target specified by user. + + +## How does Horizontal Pod Autoscaler work? + +![Horizontal Pod Autoscaler diagram](horizontal-pod-autoscaler.png) + +The autoscaler is implemented as a control loop. +It periodically queries CPU utilization for the pods it targets. +(The period of the autoscaler is controlled by `--horizontal-pod-autoscaler-sync-period` flag of controller manager. +The default value is 30 seconds). +Then, it compares the arithmetic mean of the pods' CPU utilization with the target and adjust the number of replicas if needed. + +CPU utilization is the recent CPU usage of a pod divided by the sum of CPU requested by the pod's containers. +Please note that if some of the pod's containers do not have CPU request set, +CPU utilization for the pod will not be defined and the autoscaler will not take any action. +Further details of the autoscaling algorithm are given [here](../design/horizontal-pod-autoscaler.html#autoscaling-algorithm). + +Autoscaler uses heapster to collect CPU utilization. +Therefore, it is required to deploy heapster monitoring in your cluster for autoscaling to work. + +Autoscaler accesses corresponding replication controller or deployment by scale sub-resource. +Scale is an interface which allows to dynamically set the number of replicas and to learn the current state of them. +More details on scale sub-resource can be found [here](../design/horizontal-pod-autoscaler.html#scale-subresource). + + +## API Object + +Horizontal pod autoscaler is a top-level resource in the Kubernetes REST API (currently in [beta](../api.html#api-versioning)). +More details about the API object can be found at +[HorizontalPodAutoscaler Object](../design/horizontal-pod-autoscaler.html#horizontalpodautoscaler-object). + +## Support for horizontal pod autoscaler in kubectl + +Horizontal pod autoscaler, like every API resource, is supported in a standard way by `kubectl`. +We can create a new autoscaler using `kubectl create` command. +We can list autoscalers by `kubectl get hpa` and get detailed description by `kubectl describe hpa`. +Finally, we can delete an autoscaler using `kubectl delete hpa`. + +In addition, there is a special `kubectl autoscale` command that allows for easy creation of horizontal pod autoscaler. +For instance, executing `kubectl autoscale rc foo --min=2 --max=5 --cpu-percent=80` +will create an autoscaler for replication controller *foo*, with target CPU utilization set to `80%` +and the number of replicas between 2 and 5. +The detailed documentation of `kubectl autoscale` can be found [here](kubectl/kubectl_autoscale.html). + + +## Autoscaling during rolling update + +Currently in Kubernetes, it is possible to perform a rolling update by managing replication controllers directly, +or by using the deployment object, which manages the underlying replication controllers for you. +Horizontal pod autoscaler only supports the latter approach: the horizontal pod autoscaler is bound to the deployment object, +it sets the size for the deployment object, and the deployment is responsible for setting sizes of underlying replication controllers. + +Horizontal pod autoscaler does not work with rolling update using direct manipulation of replication controllers, +i.e. you cannot bind a horizontal pod autoscaler to a replication controller and do rolling update (e.g. using `kubectl rolling-update`). +The reason this doesn't work is that when rolling update creates a new replication controller, +the horizontal pod autoscaler will not be bound to the new replication controller. + + +## Further reading + +* Design documentation: [Horizontal Pod Autoscaling](../design/horizontal-pod-autoscaler.html). +* Manual of autoscale command in kubectl: [kubectl autoscale](kubectl/kubectl_autoscale.html). +* Usage example of [Horizontal Pod Autoscaler](horizontal-pod-autoscaling/README.html). + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/horizontal-pod-autoscaler.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaler.png b/v1.1/docs/user-guide/horizontal-pod-autoscaler.png new file mode 100644 index 0000000000000000000000000000000000000000..dafc41610487ba005ca576ebb56bd276d0c3050d GIT binary patch literal 21898 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaler.svg b/v1.1/docs/user-guide/horizontal-pod-autoscaler.svg new file mode 100644 index 0000000000000..34d3a8aa053ea --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaler.svg @@ -0,0 +1,4 @@ + + + + diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaling/README.md b/v1.1/docs/user-guide/horizontal-pod-autoscaling/README.md new file mode 100644 index 0000000000000..47d2262019ab8 --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaling/README.md @@ -0,0 +1,233 @@ +--- +layout: docwithnav +title: "Horizontal Pod Autoscaler" +--- + + + + + +# Horizontal Pod Autoscaler + +Horizontal pod autoscaling is a [beta](../../../docs/api.html#api-versioning) feature in Kubernetes 1.1. +It allows the number of pods in a replication controller or deployment to scale automatically based on observed CPU usage. +In the future also other metrics will be supported. + +In this document we explain how this feature works by walking you through an example of enabling horizontal pod autoscaling with the php-apache server. + +## Prerequisites + +This example requires a running Kubernetes cluster and kubectl in the version at least 1.1. +[Heapster](https://github.com/kubernetes/heapster) monitoring needs to be deployed in the cluster +as horizontal pod autoscaler uses it to collect metrics +(if you followed [getting started on GCE guide](../../../docs/getting-started-guides/gce.html), +heapster monitoring will be turned-on by default). + + +## Step One: Run & expose php-apache server + +To demonstrate horizontal pod autoscaler we will use a custom docker image based on php-apache server. +The image can be found [here](https://releases.k8s.io/release-1.1/docs/user-guide/horizontal-pod-autoscaling/image). +It defines [index.php](image/index.php) page which performs some CPU intensive computations. + +First, we will start a replication controller running the image and expose it as an external service: + + + +{% highlight console %} +{% raw %} +$ kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m +replicationcontroller "php-apache" created + +$ kubectl expose rc php-apache --port=80 --type=LoadBalancer +service "php-apache" exposed +{% endraw %} +{% endhighlight %} + +Now, we will wait some time and verify that both the replication controller and the service were correctly created and are running. We will also determine the IP address of the service: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +php-apache-wa3t1 1/1 Running 0 12m + +$ kubectl describe services php-apache | grep "LoadBalancer Ingress" +LoadBalancer Ingress: 146.148.24.244 +{% endraw %} +{% endhighlight %} + +We may now check that php-apache server works correctly by calling ``curl`` with the service's IP: + +{% highlight console %} +{% raw %} +$ curl http://146.148.24.244 +OK! +{% endraw %} +{% endhighlight %} + +Please notice that when exposing the service we assumed that our cluster runs on a provider which supports load balancers (e.g.: on GCE). +If load balancers are not supported (e.g.: on Vagrant), we can expose php-apache service as ``ClusterIP`` and connect to it using the proxy on the master: + +{% highlight console %} +{% raw %} +$ kubectl expose rc php-apache --port=80 --type=ClusterIP +service "php-apache" exposed + +$ kubectl cluster-info | grep master +Kubernetes master is running at https://146.148.6.215 + +$ curl -k -u : https://146.148.6.215/api/v1/proxy/namespaces/default/services/php-apache/ +OK! +{% endraw %} +{% endhighlight %} + + +## Step Two: Create horizontal pod autoscaler + +Now that the server is running, we will create a horizontal pod autoscaler for it. +To create it, we will use the [hpa-php-apache.yaml](hpa-php-apache.yaml) file, which looks like this: + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: HorizontalPodAutoscaler +metadata: + name: php-apache + namespace: default +spec: + scaleRef: + kind: ReplicationController + name: php-apache + namespace: default + minReplicas: 1 + maxReplicas: 10 + cpuUtilization: + targetPercentage: 50 +{% endraw %} +{% endhighlight %} + +This defines a horizontal pod autoscaler that maintains between 1 and 10 replicas of the Pods +controlled by the php-apache replication controller we created in the first step of these instructions. +Roughly speaking, the horizontal autoscaler will increase and decrease the number of replicas +(via the replication controller) so as to maintain an average CPU utilization across all Pods of 50% +(since each pod requests 200 milli-cores by [kubectl run](#kubectl-run), this means average CPU utilization of 100 milli-cores). +See [here](../../../docs/design/horizontal-pod-autoscaler.html#autoscaling-algorithm) for more details on the algorithm. + +We will create the autoscaler by executing the following command: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml +horizontalpodautoscaler "php-apache" created +{% endraw %} +{% endhighlight %} + +Alternatively, we can create the autoscaler using [kubectl autoscale](../kubectl/kubectl_autoscale.html). +The following command will create the equivalent autoscaler as defined in the [hpa-php-apache.yaml](hpa-php-apache.yaml) file: + +``` +{% raw %} +$ kubectl autoscale rc php-apache --cpu-percent=50 --min=1 --max=10 +replicationcontroller "php-apache" autoscaled +{% endraw %} +``` + +We may check the current status of autoscaler by running: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 0% 1 10 27s +{% endraw %} +{% endhighlight %} + +Please note that the current CPU consumption is 0% as we are not sending any requests to the server +(the ``CURRENT`` column shows the average across all the pods controlled by the corresponding replication controller). + +## Step Three: Increase load + +Now, we will see how the autoscaler reacts on the increased load of the server. +We will start an infinite loop of queries to our server (please run it in a different terminal): + +{% highlight console %} +{% raw %} +$ while true; do curl http://146.148.6.244; done +{% endraw %} +{% endhighlight %} + +We may examine, how CPU load was increased (the results should be visible after about 3-4 minutes) by executing: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 305% 1 10 4m +{% endraw %} +{% endhighlight %} + +In the case presented here, it bumped CPU consumption to 305% of the request. +As a result, the replication controller was resized to 7 replicas: + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +php-apache php-apache gcr.io/google_containers/hpa-example run=php-apache 7 18m +{% endraw %} +{% endhighlight %} + +Now, we may increase the load even more by running yet another infinite loop of queries (in yet another terminal): + +{% highlight console %} +{% raw %} +$ while true; do curl http://146.148.6.244; done +{% endraw %} +{% endhighlight %} + +In the case presented here, it increased the number of serving pods to 10: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 65% 1 10 14m + +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +php-apache php-apache gcr.io/google_containers/hpa-example run=php-apache 10 24m +{% endraw %} +{% endhighlight %} + +## Step Four: Stop load + +We will finish our example by stopping the user load. +We will terminate both infinite ``while`` loops sending requests to the server and verify the result state: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 0% 1 10 21m + +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +php-apache php-apache gcr.io/google_containers/hpa-example run=php-apache 1 31m +{% endraw %} +{% endhighlight %} + +As we see, in the presented case CPU utilization dropped to 0, and the number of replicas dropped to 1. + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/horizontal-pod-autoscaling/README.md?pixel)]() + diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml b/v1.1/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml new file mode 100644 index 0000000000000..1a2067714d487 --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml @@ -0,0 +1,14 @@ +apiVersion: extensions/v1beta1 +kind: HorizontalPodAutoscaler +metadata: + name: php-apache + namespace: default +spec: + scaleRef: + kind: ReplicationController + name: php-apache + namespace: default + minReplicas: 1 + maxReplicas: 10 + cpuUtilization: + targetPercentage: 50 diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaling/image/Dockerfile b/v1.1/docs/user-guide/horizontal-pod-autoscaling/image/Dockerfile new file mode 100644 index 0000000000000..56f2d6252eba7 --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaling/image/Dockerfile @@ -0,0 +1,5 @@ +FROM php:5-apache + +ADD index.php /var/www/html/index.php + +RUN chmod a+rx index.php diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaling/image/index.php b/v1.1/docs/user-guide/horizontal-pod-autoscaling/image/index.php new file mode 100755 index 0000000000000..8f0b1c0cf3c83 --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaling/image/index.php @@ -0,0 +1,7 @@ + diff --git a/v1.1/docs/user-guide/horizontal-pod-autoscaling/index.md b/v1.1/docs/user-guide/horizontal-pod-autoscaling/index.md new file mode 100644 index 0000000000000..47d2262019ab8 --- /dev/null +++ b/v1.1/docs/user-guide/horizontal-pod-autoscaling/index.md @@ -0,0 +1,233 @@ +--- +layout: docwithnav +title: "Horizontal Pod Autoscaler" +--- + + + + + +# Horizontal Pod Autoscaler + +Horizontal pod autoscaling is a [beta](../../../docs/api.html#api-versioning) feature in Kubernetes 1.1. +It allows the number of pods in a replication controller or deployment to scale automatically based on observed CPU usage. +In the future also other metrics will be supported. + +In this document we explain how this feature works by walking you through an example of enabling horizontal pod autoscaling with the php-apache server. + +## Prerequisites + +This example requires a running Kubernetes cluster and kubectl in the version at least 1.1. +[Heapster](https://github.com/kubernetes/heapster) monitoring needs to be deployed in the cluster +as horizontal pod autoscaler uses it to collect metrics +(if you followed [getting started on GCE guide](../../../docs/getting-started-guides/gce.html), +heapster monitoring will be turned-on by default). + + +## Step One: Run & expose php-apache server + +To demonstrate horizontal pod autoscaler we will use a custom docker image based on php-apache server. +The image can be found [here](https://releases.k8s.io/release-1.1/docs/user-guide/horizontal-pod-autoscaling/image). +It defines [index.php](image/index.php) page which performs some CPU intensive computations. + +First, we will start a replication controller running the image and expose it as an external service: + + + +{% highlight console %} +{% raw %} +$ kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m +replicationcontroller "php-apache" created + +$ kubectl expose rc php-apache --port=80 --type=LoadBalancer +service "php-apache" exposed +{% endraw %} +{% endhighlight %} + +Now, we will wait some time and verify that both the replication controller and the service were correctly created and are running. We will also determine the IP address of the service: + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +php-apache-wa3t1 1/1 Running 0 12m + +$ kubectl describe services php-apache | grep "LoadBalancer Ingress" +LoadBalancer Ingress: 146.148.24.244 +{% endraw %} +{% endhighlight %} + +We may now check that php-apache server works correctly by calling ``curl`` with the service's IP: + +{% highlight console %} +{% raw %} +$ curl http://146.148.24.244 +OK! +{% endraw %} +{% endhighlight %} + +Please notice that when exposing the service we assumed that our cluster runs on a provider which supports load balancers (e.g.: on GCE). +If load balancers are not supported (e.g.: on Vagrant), we can expose php-apache service as ``ClusterIP`` and connect to it using the proxy on the master: + +{% highlight console %} +{% raw %} +$ kubectl expose rc php-apache --port=80 --type=ClusterIP +service "php-apache" exposed + +$ kubectl cluster-info | grep master +Kubernetes master is running at https://146.148.6.215 + +$ curl -k -u : https://146.148.6.215/api/v1/proxy/namespaces/default/services/php-apache/ +OK! +{% endraw %} +{% endhighlight %} + + +## Step Two: Create horizontal pod autoscaler + +Now that the server is running, we will create a horizontal pod autoscaler for it. +To create it, we will use the [hpa-php-apache.yaml](hpa-php-apache.yaml) file, which looks like this: + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: HorizontalPodAutoscaler +metadata: + name: php-apache + namespace: default +spec: + scaleRef: + kind: ReplicationController + name: php-apache + namespace: default + minReplicas: 1 + maxReplicas: 10 + cpuUtilization: + targetPercentage: 50 +{% endraw %} +{% endhighlight %} + +This defines a horizontal pod autoscaler that maintains between 1 and 10 replicas of the Pods +controlled by the php-apache replication controller we created in the first step of these instructions. +Roughly speaking, the horizontal autoscaler will increase and decrease the number of replicas +(via the replication controller) so as to maintain an average CPU utilization across all Pods of 50% +(since each pod requests 200 milli-cores by [kubectl run](#kubectl-run), this means average CPU utilization of 100 milli-cores). +See [here](../../../docs/design/horizontal-pod-autoscaler.html#autoscaling-algorithm) for more details on the algorithm. + +We will create the autoscaler by executing the following command: + +{% highlight console %} +{% raw %} +$ kubectl create -f docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml +horizontalpodautoscaler "php-apache" created +{% endraw %} +{% endhighlight %} + +Alternatively, we can create the autoscaler using [kubectl autoscale](../kubectl/kubectl_autoscale.html). +The following command will create the equivalent autoscaler as defined in the [hpa-php-apache.yaml](hpa-php-apache.yaml) file: + +``` +{% raw %} +$ kubectl autoscale rc php-apache --cpu-percent=50 --min=1 --max=10 +replicationcontroller "php-apache" autoscaled +{% endraw %} +``` + +We may check the current status of autoscaler by running: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 0% 1 10 27s +{% endraw %} +{% endhighlight %} + +Please note that the current CPU consumption is 0% as we are not sending any requests to the server +(the ``CURRENT`` column shows the average across all the pods controlled by the corresponding replication controller). + +## Step Three: Increase load + +Now, we will see how the autoscaler reacts on the increased load of the server. +We will start an infinite loop of queries to our server (please run it in a different terminal): + +{% highlight console %} +{% raw %} +$ while true; do curl http://146.148.6.244; done +{% endraw %} +{% endhighlight %} + +We may examine, how CPU load was increased (the results should be visible after about 3-4 minutes) by executing: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 305% 1 10 4m +{% endraw %} +{% endhighlight %} + +In the case presented here, it bumped CPU consumption to 305% of the request. +As a result, the replication controller was resized to 7 replicas: + +{% highlight console %} +{% raw %} +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +php-apache php-apache gcr.io/google_containers/hpa-example run=php-apache 7 18m +{% endraw %} +{% endhighlight %} + +Now, we may increase the load even more by running yet another infinite loop of queries (in yet another terminal): + +{% highlight console %} +{% raw %} +$ while true; do curl http://146.148.6.244; done +{% endraw %} +{% endhighlight %} + +In the case presented here, it increased the number of serving pods to 10: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 65% 1 10 14m + +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +php-apache php-apache gcr.io/google_containers/hpa-example run=php-apache 10 24m +{% endraw %} +{% endhighlight %} + +## Step Four: Stop load + +We will finish our example by stopping the user load. +We will terminate both infinite ``while`` loops sending requests to the server and verify the result state: + +{% highlight console %} +{% raw %} +$ kubectl get hpa +NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE +php-apache ReplicationController/default/php-apache/ 50% 0% 1 10 21m + +$ kubectl get rc +CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE +php-apache php-apache gcr.io/google_containers/hpa-example run=php-apache 1 31m +{% endraw %} +{% endhighlight %} + +As we see, in the presented case CPU utilization dropped to 0, and the number of replicas dropped to 1. + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/horizontal-pod-autoscaling/README.md?pixel)]() + diff --git a/v1.1/docs/user-guide/identifiers.md b/v1.1/docs/user-guide/identifiers.md new file mode 100644 index 0000000000000..c15d5c4fed9a0 --- /dev/null +++ b/v1.1/docs/user-guide/identifiers.md @@ -0,0 +1,35 @@ +--- +layout: docwithnav +title: "Identifiers" +--- + + + + + +# Identifiers + +All objects in the Kubernetes REST API are unambiguously identified by a Name and a UID. + +For non-unique user-provided attributes, Kubernetes provides [labels](labels.html) and [annotations](annotations.html). + +## Names + +Names are generally client-provided. Only one object of a given kind can have a given name at a time (i.e., they are spatially unique). But if you delete an object, you can make a new object with the same name. Names are the used to refer to an object in a resource URL, such as `/api/v1/pods/some-name`. By convention, the names of Kubernetes resources should be up to maximum length of 253 characters and consist of lower case alphanumeric characters, `-`, and `.`, but certain resources have more specific restrictions. See the [identifiers design doc](../design/identifiers.html) for the precise syntax rules for names. + +## UIDs + +UID are generated by Kubernetes. Every object created over the whole lifetime of a Kubernetes cluster has a distinct UID (i.e., they are spatially and temporally unique). + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/identifiers.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/images.md b/v1.1/docs/user-guide/images.md new file mode 100644 index 0000000000000..427a84b118c22 --- /dev/null +++ b/v1.1/docs/user-guide/images.md @@ -0,0 +1,277 @@ +--- +layout: docwithnav +title: "Images" +--- + + + + + +# Images + +Each container in a pod has its own image. Currently, the only type of image supported is a [Docker Image](https://docs.docker.com/userguide/dockerimages/). + +You create your Docker image and push it to a registry before referring to it in a Kubernetes pod. + +The `image` property of a container supports the same syntax as the `docker` command does, including private registries and tags. + +**Table of Contents** + + +- [Images](#images) + - [Updating Images](#updating-images) + - [Using a Private Registry](#using-a-private-registry) + - [Using Google Container Registry](#using-google-container-registry) + - [Configuring Nodes to Authenticate to a Private Repository](#configuring-nodes-to-authenticate-to-a-private-repository) + - [Pre-pulling Images](#pre-pulling-images) + - [Specifying ImagePullSecrets on a Pod](#specifying-imagepullsecrets-on-a-pod) + - [Use Cases](#use-cases) + + + +## Updating Images + +The default pull policy is `IfNotPresent` which causes the Kubelet to not +pull an image if it already exists. If you would like to always force a pull +you must set a pull image policy of `Always` or specify a `:latest` tag on +your image. + +## Using a Private Registry + +Private registries may require keys to read images from them. +Credentials can be provided in several ways: + - Using Google Container Registry + - Per-cluster + - automatically configured on Google Compute Engine or Google Container Engine + - all pods can read the project's private registry + - Configuring Nodes to Authenticate to a Private Registry + - all pods can read any configured private registries + - requires node configuration by cluster administrator + - Pre-pulling Images + - all pods can use any images cached on a node + - requires root access to all nodes to setup + - Specifying ImagePullSecrets on a Pod + - only pods which provide own keys can access the private registry +Each option is described in more detail below. + + +### Using Google Container Registry + +Kubernetes has native support for the [Google Container +Registry (GCR)](https://cloud.google.com/tools/container-registry/), when running on Google Compute +Engine (GCE). If you are running your cluster on GCE or Google Container Engine (GKE), simply +use the full image name (e.g. gcr.io/my_project/image:tag). + +All pods in a cluster will have read access to images in this registry. + +The kubelet will authenticate to GCR using the instance's +Google service account. The service account on the instance +will have a `https://www.googleapis.com/auth/devstorage.read_only`, +so it can pull from the project's GCR, but not push. + +### Configuring Nodes to Authenticate to a Private Repository + +**Note:** if you are running on Google Container Engine (GKE), there will already be a `.dockercfg` on each node +with credentials for Google Container Registry. You cannot use this approach. + +**Note:** this approach is suitable if you can control node configuration. It +will not work reliably on GCE, and any other cloud provider that does automatic +node replacement. + +Docker stores keys for private registries in the `$HOME/.dockercfg` file. If you put this +in the `$HOME` of `root` on a kubelet, then docker will use it. + +Here are the recommended steps to configuring your nodes to use a private registry. In this +example, run these on your desktop/laptop: + 1. run `docker login [server]` for each set of credentials you want to use. + 1. view `$HOME/.dockercfg` in an editor to ensure it contains just the credentials you want to use. + 1. get a list of your nodes + - for example: `nodes=$(kubectl get nodes -o template --template='{{range.items}}{{.metadata.name}} {{end}}')` + 1. copy your local `.dockercfg` to the home directory of root on each node. + - for example: `for n in $nodes; do scp ~/.dockercfg root@$n:/root/.dockercfg; done` + +Verify by creating a pod that uses a private image, e.g.: + +{% highlight yaml %} +{% raw %} +$ cat < /tmp/private-image-test-1.yaml +apiVersion: v1 +kind: Pod +metadata: + name: private-image-test-1 +spec: + containers: + - name: uses-private-image + image: $PRIVATE_IMAGE_NAME + imagePullPolicy: Always + command: [ "echo", "SUCCESS" ] +EOF +$ kubectl create -f /tmp/private-image-test-1.yaml +pods/private-image-test-1 +$ +{% endraw %} +{% endhighlight %} + +If everything is working, then, after a few moments, you should see: + +{% highlight console %} +{% raw %} +$ kubectl logs private-image-test-1 +SUCCESS +{% endraw %} +{% endhighlight %} + +If it failed, then you will see: + +{% highlight console %} +{% raw %} +$ kubectl describe pods/private-image-test-1 | grep "Failed" + Fri, 26 Jun 2015 15:36:13 -0700 Fri, 26 Jun 2015 15:39:13 -0700 19 {kubelet node-i2hq} spec.containers{uses-private-image} failed Failed to pull image "user/privaterepo:v1": Error: image user/privaterepo:v1 not found +{% endraw %} +{% endhighlight %} + + +You must ensure all nodes in the cluster have the same `.dockercfg`. Otherwise, pods will run on +some nodes and fail to run on others. For example, if you use node autoscaling, then each instance +template needs to include the `.dockercfg` or mount a drive that contains it. + +All pods will have read access to images in any private registry once private +registry keys are added to the `.dockercfg`. + +**This was tested with a private docker repository as of 26 June with Kubernetes version v0.19.3. +It should also work for a private registry such as quay.io, but that has not been tested.** + +### Pre-pulling Images + +**Note:** if you are running on Google Container Engine (GKE), there will already be a `.dockercfg` on each node +with credentials for Google Container Registry. You cannot use this approach. + +**Note:** this approach is suitable if you can control node configuration. It +will not work reliably on GCE, and any other cloud provider that does automatic +node replacement. + +Be default, the kubelet will try to pull each image from the specified registry. +However, if the `imagePullPolicy` property of the container is set to `IfNotPresent` or `Never`, +then a local image is used (preferentially or exclusively, respectively). + +If you want to rely on pre-pulled images as a substitute for registry authentication, +you must ensure all nodes in the cluster have the same pre-pulled images. + +This can be used to preload certain images for speed or as an alternative to authenticating to a private registry. + +All pods will have read access to any pre-pulled images. + +### Specifying ImagePullSecrets on a Pod + +**Note:** This approach is currently the recommended approach for GKE, GCE, and any cloud-providers +where node creation is automated. + +Kubernetes supports specifying registry keys on a pod. + +First, create a `.dockercfg`, such as running `docker login `. +Then put the resulting `.dockercfg` file into a [secret resource](secrets.html). For example: + +{% highlight console %} +{% raw %} +$ docker login +Username: janedoe +Password: ●●●●●●●●●●● +Email: jdoe@example.com +WARNING: login credentials saved in /Users/jdoe/.dockercfg. +Login Succeeded + +$ echo $(cat ~/.dockercfg) +{ "https://index.docker.io/v1/": { "auth": "ZmFrZXBhc3N3b3JkMTIK", "email": "jdoe@example.com" } } + +$ cat ~/.dockercfg | base64 +eyAiaHR0cHM6Ly9pbmRleC5kb2NrZXIuaW8vdjEvIjogeyAiYXV0aCI6ICJabUZyWlhCaGMzTjNiM0prTVRJSyIsICJlbWFpbCI6ICJqZG9lQGV4YW1wbGUuY29tIiB9IH0K + +$ cat > /tmp/image-pull-secret.yaml <

            =PV69x$SW zN82U*ch_N1wIvv~<$`;nq+>ovNX>S1b@)>1|?b=9fwR<<{1g`;@dO z(mf+L?#0+J&Duk=|6KdbqL4zgw)rgYn@Hh%2L+g>KS$8t^%0Au<7uRFURRJq=yC@) zPA{N0%XxgfMfXf_{qLU3o zHB67^FYCgu2e-@9hv?fU1s=0Tb;j+`gv#r>?!R|@@u-7&zTWQCB)p;}#!Rc9y zn-2f_GQ7F}2p?|91^_4pt5OsCI(|Ot(p|Z}>YdeiE9T;UcA9AD{0V|cjY5M*04E=A z+?iB$%>CahFcYN3grG!~46&#*5a!~$cX+*2a_|{!W9ht(x?){{4d+4b@7ka&jeXPzv*rnBz>Ptyed;F5DTYkw9Bg+I%}buYPDsE_P26BtAV zLPlT=_^t04B<`mx7tdK;wCEQW0WV#`j~1`>^z-ctX0WbIJbp|BpZ?vTuUZP6D1rkB z1l3U|gBT*XM8ALlX(qB8o zy-NdJWmd`v=WFSm{$EIjm&66Y08qsyryv4#K?Iiir{`bYoKn3%*!8|p7(P7{z4_AG z8XbU&_tbk;%&5^y&d>XJk%#{MheegH()0+IL+xNnG$50y-N?>bMjP*q+9O`ipP=WI zytC@*_Eux7e|zknYA>On>%p(J4j-QEj$xQQ$0>Bfq4_MF0^R@imw339-vJeQ+ud0k zNZbhEN64Pynd6r zx3>pFV~N6v0?2Ygp9s3{Og|acFt!4H+OfHtx{!TnG=P&947j;Cl_69|Ct7RX?T-c~1MSA(){=B%5rsfC+mr-*=H zsu>=oOOHWnAcGL!s9E33+nAvhtwyy=EYC&_2&cgJy$O5b)u-=)2Nx?G$VJhF|CE7; z2l7ok3~4yJNAp#$64DxBH@~g2;ht~GB1&>=_T^DCxZV{O;=jHU@9cp?4yCkRX22i) zjI7DFRbix5j6RpLN2~e^rHd0F>UwUoi8lR4A)@ob^ zZ=Z&siPsIU_ah|hzT1ddtiWH1(t_-XN2EZ@C@7uQS|^^;9#>TbZv zt{D16|5QE=pV~H-^joilne1smZL2(`k(tI_TLL^JAIqH*!7gdaAOTB4t3DF+M1R|; zDD^4ydyuAh2anGnCL(h^*KjK}IoZj9UX4lb(uq{D&1Xc&Akhh*_ifdj{*6sBP2dL> z0aDD=Z@u9((b)amBIIj3d!+g(gQ!8s;I|g~;E#w8rb;!e(FpQpbA0> zA}}Xxw6*2+>pxrGrvz+#iy(kk6}tgDEPPfc4T4(F5Max5Dn<_7J>zzy*!;h7zU~gwk_TLGB28*`q_U&;QbZNdp-z50e|mnrqc4Wiq4svJQ4tt;YvD=2n6uB% zenN^iVSHR%KfK46U@Ajje`F!{i93%~Qk8_FbR$S9>zdhhB63kr36Woqj`oz))CNMW!TG_?6d?lm@30XqAepS!VZ!{tGkW=$ zT`(Z2egZG=k1>DI(eKtK$dM;`I`{vUWBjwBMxOmCI;<@xm#`qUQp3PypG^4VljlZ# zz{7m6xcK_hUxjn;$wy4`PcRcEDXD!#m~X|x%h6P4r||u6^3VTV)dtI?!wx|c+ z0E23)Ok_d_Rlvp*8n1!-1AgHBLSdY9&-ScQF(e}^M+_OnkRm(m)Tu0648y!yvPrSN zYufw~n!J0aJ~@RGp-+)59@%wvCT6K3DpqaLRg`ANPO!>Mk?p@~4^0pKC-6~a$oUp1 z0Z0f|#XGTijNO>@^gT!!b&MU?^gYa$=9u-PhL#sn{Dlst}{EfNhxnjS8)Mr_op= z8CvkGo7tIy-u=TMT9sxuOEEI2K$=^<(D;=eto)O7BJFQ^PlMc;T&lJdV_p9yP2L0x zXej-D4WrCV%jE8Bm(5p>mT>HR;<8*ZQ#9RFY}UKSXS0V9ksYNY3gm8}qx=l0z}!l$ zBKQ1}Ei*rIfQ1?yQ=NC>?OG!i@aXxc+Trwmf%yJsJ>oLJ;qRfr&$;5g#|fv$5o@(n z)=6miGqofko{YP_PF4S=Akved$CnsYwaN?Nh9y74y|Y67tU>JM>{KZp@-LlY>^vF` zTB!|m6pHk@fpDM-VK~@zWKRZiy}KXGTj>Ns6pVdXjt!6MP6K}1b|x_q%8?!YZd$trOK@=L(|Z{*lhH6a{`X6^iw%G*hqI=&%l7kzcv~qFXFbWLoJi#bH%ziJQ7q zAS0I2k#v03o^1mf9P}~CfC-N6>wVWkPx%>Z;VaLH8BNIkV+iXf_WO(q9bUI|{;VdY z9DN3LhBVVY#}Bd@?M;NYsYTuF4*XzHxgRgQVtLs)NvqD_ig@> zrRGceB6=y)Wj4}inG!!OQ2zkyy)X_%U=PLF4_xgW7mi2`5IlT%{m0KpQfM6OZzr$z z{|(yAgNz9E^z<4GTDBKrabHhjp1TP-nb81z9=6M60X}jzB!D6aOr(Ma5P?ZA8nF1i zaJG^XeXUyt-Yo;iN%^_$=9LAN5oQH~WGVTuNiXS{Efq4W?QkmU+J`eaZXoE`KboJy z8|agQOlqW6xK$esQHSQQaEJ>{{Oge^Ug1(Q@*SI7H6= z9nfdOz&@(e&XZC$2WTQd~*sos?-gOF;qVm#K^f zn!Mfh!2CA`R+y#~fj5*H`3#GQOQdkn5q4&O6ZN@={DhiH^P8NB+R2Dx)1@25Ns6eU zjK7o1*ybWZtm!k;U}>_(rEj)W$`EqB`Bkk zSj^b!EKsN%IJdRxtgUdqgJb>3%lh335sshU9SWdMsHUK%8=MU?Fb;gMN z<8p^{v5h=xr?rdM0O^c^Uo!i1Lb#~3HWR;eMU;~x$;1v>fVJQ#Q zjfU(1nX3VpL4ICPyed`oDZ|NX&XOR4G~bfCwH3 z6<`3URVIuBYPp*_XJdF3pn*d~)4fQ2^NlIxQ+-_B!+mLZzrcPB)O51&h!jR{oDMmE z9R&as@H!iUlde^#&XpIP5+WPKW6`SI#BNb2MIhDu5AY}vs6E@On?dbN2-XATsQA~( zrbQcuJxC(qY&#NB->Rvr^-f=>2d+(|f|V!ACs4Z6@M2G)%+&G9s8-a<*_$PMPKTk; zZv19Y?|c)X9g9KAu3Z(~+atqIW0|&UN$grbIr#TT8?Vv>zB3JGgw$-OH$7|e;n4BC z+&GIMp>kmEM(2pOR7FX_l25)qeKn+%P(M=~^1lvKpaQkpH8WkTBkjouXl1H{ zL1U=Ij|O1n)Z{p1WD!xlMt%4`&a8*&AL;DXGL%IDKA(?AXtsxY3$dM%19cmgo=o;F zJkSyDNdK%@CCRWNAc)kS714o|!Bs`F;8{r{O9Zxq8J~H9imbuYbUe|B(TUTV2}>NU zXwLANv=9KF7`yV_IpZB(fp-rg_M@DU(uL>OEOL6rWg#IhFmyNGSEl}2PyzvlQ1E>c z1py4{i^$Izo?kw+G*vcsH5N|WZcy{vlSV-S)mmmA+(b@)iF?9~GS%YLix*k#)(dk-g6mV0=SdyEk*qfZqCYd&euGd!Lr zwhIak-n^7-EM|Lp3hyc$tcoJxCx&%aeB9_HvQ2NL;qK%UFwKpq9?PUBLj zx*&${F+7;~nTNT_<@`O85@Pc42hT7CJOwCMF^ovz<#+cRr>$skowmC`>Vg8Z6DC(L zo9(>1eXEmKO5L)+{L3`bY6D4%5v57k%S(-Rj=51^Xzg8O9=X?%Q{a>pWtEPp?ah~S zzT^2%>~$U*E&CLgi!$PcryQA;73wUge)wTG1fW3UcVGD{;&T4C@J(_BLdSXRzDZt1 zOJ^&zG-g4ci$D?yAb=`(^T%)&zgTvq7DaZ-_I$N_we~LZ+fx>URCd+XjnAm6zNpJT z*t(y4Un1~J6gZbLku^KmQZ2@ERX`=o{okFH)YAKp8Nsex2+wBg97>|wrW z3KYS<(b%a)Rfv@p2lKc~k^tGl$+Qyg@J-OMPm<;=(fjhqF{?C*o<{f=3F6*%nC&7v zBJiAGAQ(D7osKUy<)vWGYWh>hFwPN|ORlf$-)l8#kWWJav(jXA;1nQ2bV|5Nz9Yj8 z0vw~ijNrg9?;S`?mb+apDN%&$ zNWTa#EEZMhkoU5PM$9O^MI8?wntlq}FG?;?l_{%H1r*~H8zn%fX>)3&LZK^8ElFY% zw7*eML$usi`vXPfSk{+rZVl8|_;NMhm!xK3BRhV5{550nl+{C!M@2+wG6RF}K?L%D zP`1OQJD#cyY+t7pMw|4zwvS)wAPStx1c3$d8Sil6-BeIMoHndmUcu8MUx{6!2W512vC%)f=3x_rHyv|_7T zpdTV`W*L20(6W-PO~vDp5R)~9lCe|`LCYZY*g+=7^;Cebi{@!eO^6|SZ+eu~KKW_h z;+dWLMSbleC94=Cof-h%#)i^|Sd4GCSWl+{<^3Ie4x=58Jnyv196BK*gf8o`48ie3 zdrWIj9(+uyYzOo`hIY8?zl`Ns94sVlEjcGGajc>>#PJ{9fXH75GJ?wU|F#Vxy}C%5 z{nVc}H00nSYUQ3ZwvbS5X=dQEpPC!g>J=;`Kd6=6x)ADKFw74s^7 zFZA$uKM!^1>im-yr$@dx&EX_CLL_-KUN4{-_JBC0Kq)b ze!icN5_d680s(d`Sky6|5H`)scl1eRkv>**f6Ke@)>@W*@`Vo=pJ(tHk*gi z*h6Z8(yYN|WiyNHZ@ahd@3CJ8+vN5=GK)oS-t9!=$HBeNlRtj?gx6EmvoXA8XlL%4 zXGyr?6vKf^zYEgrVgqu!6TkzM%l9P2I5;>KCq}DyAXbN7D~+XuMWN7CtMG&|kMqg% zRT+q4PTrAgAk?(zi6Kni5AR}u9FC}IDK$I{TZ;_)urY+xKo8ElQrinc8VpBygr*S+f<;x^`scwdd`xA&)S29ESi zcc~&6IwCUIwnCpxGk>~uBqY%L01Fm>JL4dJ#B5p(xqET!#c;4)cQ$*)#p22FQ?Xxt zYo5Lxtu&-r($KN0$nCIz$7WL0l=f8PYpJxOVM3sQj}Wq)OTKu)F^kCnM(Cb0*mq+Z z3%HU}aa}_s=-kdZ_r5)Z`53NG@=NuN6X@;u__NHnU!1tOpD)pe{t;qDe>338kdo;^ z@^A7hllpV)LE?u!qzT1JYmT=J(}w98pmCRvT3My?JJ4C>exxUQiTnat@bY7a>^Ebr z;6V8q%s1o!pb^nYB~17AA1*+1IcyvX%H}Alz?p)UB2z$ABVidUO|+CZf)-nqf+GfA zK7YgU_bT2{N`04QkVeMm&N}&vKbQI;^<(OZF7|gDcJHVJ0+pxZqwJx@Y-IV^O8T{r zIPWW@5j_1Dnh-{pgaDqF240VbnkZ$R?O?W@;k7ytd^D9f1;{a-pkSZTwkC%LA)CYK z+A6I7PusE_?|C4l5<4LFOO#-EPxmHnX#WgbU>2RaJWac#(N_j4_d!(7B%7~9jCGkh zm3!|@W1!8aKkQmK-1a29bl;^Cd9SHXDg%SqW5X9!h`k>2x|B~paxKS*l?E=i{?rzqz#HQ^kLL|i4 zN5)Rt6PK{bu%3|G@u&P(nM`k-%p34ktBI(Oc9Ee%()}{YQc(d}i0GU#WGbFFBmxay z$ft<7f`2x?JP}9%QAVX#=GrM!jCEE+LQ2E6hDkwEa;>zRRxhOkG)H~ODk~ZJF<^NmKvS%%1JdOY?7vrr^=-c zlNfSkC5aC7mNfm^+;KG&j{t75oPXHAiEHYG}riC#=06KJ2d2G61 z8W*RDy(}as6i)`F2$=9w`QgP9d3ndCFc8jc?t4UQj1ZW5MRjy>zrn6^On)uxr{#AQ z%;rr_=4>{B?7LB;euK8xJ-{2^Hku6qrswfTADj_p)!t(?BLe&26?}DWhLbeAN(x zGHhh3Pof0h!chbR#U!TnTXmTXvd)hMuP>uT%h<%#=|za%`b`R-k{yei;=T?LZfCcY zMr2`ntmp~fpYfAFG++N-8+=c;&>`;qVrjc^U>DD4!n5D|W{?iOPDVfs#Qpr?vOz#EA~z_hZxh2g{G@=QmKTTC6A}x zY-d5u3mK`4Qn^ae61$VOIQ43Po80vahTpA)YeIdjY-^c-h46(iWYYhxB?Tzp+L z<%0BPa^=Ih-GY(Hg6KnJQkx&C0L}2{3u-U-hzeLwtxon4{Y0I=&%N?nO)M^k-=B+! zG6dg?@_`tL(}1$rF%o4l+(7tW-#GAj3pu0Tz}OY^h_Z=^^-$&yJ3sXrIXVh#+Plyb zW5PW;aZ;oChR;nBGC-TWGW-`x$V2>1qzNNMsa0$$)~ngVINwonqD&?Tg|VAux8Pj$Kr$g#>) za%yGs!RLTny|%R>)1253D_kUZAc|gvtQv(ggdC{c+5sV!P(#u67vrLh1(1u0hk z!;qwH%LQU!G4opHRvhW~PERgfD1x*ZVj4?B)6Jt*Pt5k^*w{MPa-|w%FLHp7^xUuV zvg+p0nd0@xB1D*9xl)pvP@7aCoHSujhZ>yj>Ptehtjq1bp=mg(6crvvouZmAyhjHf zO23?`%SM{1(-zFWEmq&>5aAIQNrEimSETBCF>94M8HgG-pZ%GMvwaN6lbVqkL9s8Q zLvOL8$^vrADef~^EHZG7ZSQ^%8CbcEUC|=pWSmq^r3yg?0&DG#y!5fpo*oL3$eXi> z+}0$K8U9o}ci>5^)EP$k@qxq#Jf96Ll8W-!ce2|K&)OVx+%9%4{5DKjU!D!1V`Gs~ z()6frs8S>+BpAN%CGC7qu5Y(_m^;p#a{!I1CD`IUp&C)63~?cVNIrRAC%isB^w>@6 zFx$ZvW~L1s#D%;Pdmq7gv5cey{8E%S9Oa=|OCDGAX}XS1Gjk*%-Q*|7Xwk*BsXeV= zdxSu~EsV8Sk;ylAq5VP}v0@YjsNx{8iN*Ur)$*T{VhXHhajQl#sOWol@Nn`{p#Zk9 zov3Uo4nuU@8U#JMNy&HQ&!{!tYo%QHc>cbD6CQhKYq%OMk>$@7yrHr-Uo}c zA$}!QW;hXBrGmygs3jq+4o?ibboi^pilYkN#iDSqj^TAEzuZ=*X{NdJ9vpxT-Nc@E z1QB$$36X8=j@wQSqD2{{eiHg_l9HGS- zsg!8=Ira5y?_{soon5(MHJ+gS$1sbwb-?AC$wT0tMsFg*alNmW`je?a|JLvV84IAO zh>1WH5m1;l0?kyTEnqfomgaoWK7Lt>&}dMf8rhgJ-sVg71m~z>2xWI{=CsG$4c(Gp?|1h!%!Oa(=5%P z}X3NB`gRj&~xQhxD8Xpl8*8ekhxznTH z;o1H+f|me`905A>Ta83Ep1OFp(REf(I8k6*ejqHvE>l+Yn-5k-OX}0Fq1y;@{=ZL2 zDh(Veza=Ro)j-CyyG?LO_|QWlC!EWb0I*9lEbpDdlLz~l&CQ_ z0MT!so}L5IgbT(ouCVPWt-cGbMOg4l$x3Ts)Q+6}$;`gsA?jR!-y=#8C4vdl|ItJ3mWv_u z{P6DpgyHN$LfP5cIAWnjnk;F(Z1NLdXK?po`e+bE<0to%3g5v60*zr0TiDmRUd9wz zAOhM_FB&DH90Y2=@hDF900Y?=GU6a3T;rRYn_dphhzy3sx~Y)NRD85%*^%;n*zc_0 zg>>_x_crF-kFcTtBU|S)VJ8mrU8_6QtYqA|DpQRLgm&MxOG}Ex+gZ!Tdi!$#yG2B% zG?U&&od7YDe~;klx2(u!*tQR%{1CLYtFP^xWkcNN9Crc#GQE&4d%arNsEvxs@dM^> z%uI8=o^V(4Ryo;w7q6I(Ss)?f>;1BK#DpbM2jFS5GYv}AAas~s6?#_OO?H1zl`_Wd z8m`3oO+xwVETrx}Hbv|v_Gm`uTyIr$Ylt?879~a{8`LeSFSN`N-TH%9WSHA-#}$qz zbLf=fahOm2%c!5X7kgTORzwn=!k#CVo3mv7XU`nS=IKGeUP#%J4=*y5}aVZH=v>6%#;B)9he%a^p z?HyIw(zoV|9dR$Ne{#dO(Ix9o6WaToZbeDCGEe+g($Xv zs1JtVVFwQ2$Wa0*P5L|6OeQ~J$Dlin=9ZsF-Ye;UV8Z*pH&=@#_t!BC4vhB}X@lAB z>SV53jWC)mXnX{6XDf3?Q0&e$NJMMqJxmzFPf4$y++3NH;A2zQCIKl#SE^cnLp010Atk~;orq=LT zKJnp&<3!89BEk}mV};f2Eyby`(%7y%L>5J9?BID*T;D=qPu%ZKG1u>;r^Kl3@#Y5@ z$dDe~h>A9;BEof-TY>_lyR_Gh>AfzWmhAkUI#!E@$YWQyQ)t&Ru5EAJL&K>#Ks4k60O=sP`NoLhHo6rj|j zViPUuTK8LTk%sYq_Q6HPW;pPBS-cbpc$T6xHuLl}eO=R5CBWw1ckZR4q9~*gF8B$6 zxp5$}gL`PTe`>1Ip9dVgT&+F6#L872d2O(84QAI2ymKs^N^el+fQXda%{$xRg(bcjz$SDh6Awc{Mq6K>xf5q^=s4IT|io{!o)iR%F|9P& z{DZ7qwSr}5TYo$^@-{tfyX-zTlIiPW9RC&pwrS|BCSCRRk(zwZ(}e%z>&nSBK%738T}^gvG{RWh zum?)tdl7$9_|BH_EsPG&o)({2ltin1|cAv)v3YI z_9ok7H_0kH-FA{d5}kEZD7|N8UmNXqJJ*gj*uN6RrYdtV+}+-X3?f?w6HCZa_SSk+ zfZx8odK){Sgsk{Ug3B59Xtne(r!lwfDTr6MZ(v+=&cxz>Rmr0OCF1bMZC5v2RroTHc#)?KMVOfW;=%hVQ$fDy%+oO$(#)6U<6rs9?$rJJ}Y8b0ZjAs zL4Du7{K=;TUJg7w7@t8!nyWayssQSQ2@sNL!Q;v_E%-qFf8<|95C$A9ZMomKGn0RvUG!H2buKREg)9e8jh^9^`w!%Et-!`8(T@z z1uG|J&#{F!I}E+fl4D@1($7gkf7iv{_Vi%Kj%{F&7CN37U~+m5{9X&j-~wVQUmqCc zl0Ec}>bw^|LClvW!r)?xZ7%P}3D?3{(3#)Kw0r3vM54;xqRGUn;#Hi8~AfWU0Qaps@7TVLORN;?Wqw-_0) zPrNoCe&#<94zhyi`F}j8&||5KGm#(OBE@c{doejIGYcyojh$ zS0#g5E=S5mMFnQTauO+!!(rA}m&rFC3KO|;L+QXF#0kPu0eAkIw=eEPnjKdJ9B+rV zqW3N8#A6s>35PC^(ZK+lne!JF%`sT~vcfUG$8%N$2rOV@+WjJr*#af=9qGSJGI$<= zb#=_206^~#+rhGA*-(m=>rjLRC!&Gu6T|D@okT{Yj#WxjN0>ij(fFF;GL#0$M@c-& zH&?4cvE242`n>&Z2`-s;kQm{1KI{h70CFNh8P|leS;*7!7BTK;kKf`D;wqj6#Tr&h zYz3djy_LC$|I+*RT*a{I1EtHg&c;eb86dJKoyr$Q;6B?n$gS-sgZ22pl$EC-sNE?U ztWM?XRN=E z&uez>rSqkHpWPH9D`snF*LJWKot2r{+J@ykV001_&0mE#IH3vL_NYuWR3O%{(3-RT zQwxsg*{DmI_{&p&@R^;jGuR9n#(X(u)!I z=en`;;nO;2zFV1LUax2Wdwi^o1{W!L;SY|#i)4Rm`tJFl{%$`mnO2gD2mH0>+g6n} zqq(0w4X3=%uybL9OYmMW)LqBNdQletE$}=d5`CgTdZ5%^Ymtvcz}!Hvm8TNK+f!6@~g6(+venNG{7)h4`h{t8J_^KG#8yMT9h5 zP!uSUQeqQ*Sq7AAf7E`<%uJv=W@q6W2K0cKyD&;%1OCp!Y6{jc5lQG5L*5UQw?8++ zW-vN*WQwF=)sIS&gT0^BHjsM7C#H9eYB#X1qg`ocT3iL>_EJ25Ok9aFmK>6;xEvhP z>dfU~@Y@{x!9Mg^>z)jOU;~=%mhH%9JE^Ft;6=J&bj<0Xj+WWuEf11#qvb}eGU|Pb zXl-WZM#{m+H_T>uv;DtW>%1DYWfeiu+DkM2Jf@@<&+Po_{rkut%6;Z1a0T<1VgL9; zsh6Y#*oZLqpi=k0%A0H+y5QRwGt{Yronu^a2JN{F8ymZ&`mXuAchqP;pNfonVMf!pYrRF=XR$<<+4+#l;icwCT0qZtR zey^#Un+Xnn=cx_>+a$G@YJ&MUq2F?j_%?x(GQX^U5>$;MOFBn|O2cnt*6!uP{PMZf~ z#@gy*epDt#xDj3Pimu$cxJUIveV6sJr~aWMFGV>U#RpLt&iQHAIU0{$qO%chP6+~> zCcUZJ>xG~^KvwX6R+O{x z<%*Ma+gTSlPi>6p*4eHx8c80-sphgm$2udNKI?Tgl}PivkKEYsqhH0`46B8{(Vw7o?MrS z5|;@zFsslV={`DkBuq`29q-k!TSSR2p~{j%MMMv;BqjqX{%-GQpc7H~@^`AoFp9fN zwT71!4Ni-cgx^XOFIV#mS(8GUwSZok>fZ93iUg(@WB_aOMx^+NA>S|@<0lGqg#AxW z>sUXDl%h$*!$cpwvUI9jE?OK`@M1sw$%R9}m-P3iW_o8G@jQEi9vx7XCM`(cp3K?De8-ZjvU*mzAc_APQ2Lnzdwl~ujl z%O(j|VM$Xuv4j4T(>gq(ap9Zzqy_&@f|4SOP+JMi0WXqG>huv&Rt0Q0;mzz{L+#<` z{G8@9y?#H%X|=2j4uXFZM0;kK{EbSTO&&7oJMdP{wkW zMUd+6sa%^8zBU6v4mk`)#eq#0Q|X@vGSgp{pNiL$TPWfIB^p%y9Y?Cj97L@m|r5^?>ybdj@<7l@?v&nB7dB z&g=fJ4+T1%cVzS_Kq2Jdvk)Zc!7yzeP!}LZnb(vvwS2O}4Z^Iha5_2w8Qo9_ zlA`=J;bi2GP3uW?+7cOkqgUBgna^Y10Y+unBpfdE-JA5o>>gZ+FYFHR?-HWKzD8(*07llY4@N)-Ag$<5W^exBjm>1DXZT-f7>K2;_n06u0M= z@p33ydOsbC@#>k(1=|%}(-r*sW#r61hw?kNpT?7W@01dB?x$5fOq{yUYwbp95c6qc zgq%gZ=lgq!_A*q1`lOXE$AAtOD0t>d(En;8og^y-uKkGO)CmB9V-&P)#U&|01Dcha z@0PQ-fhx}07}kC=BVer*t|T13t*`d_vcWRL-wXIBjay z=gD>dO2Mk*H8n}aV0kG=0hHvKwUvc+B$CIQq4BJ$G@8ZnGR1tqY`sJ>~|J7=EOG z88Ysox~5z&bGF;Y}D@Qlt9lv z$SColX$Y4%`eJLWJ7H;eiShA$MyTNkF+}JHA$B#pUWvA7WwV*u5D&SJ9%>r1WRr`> zqvUt$vl;d`c8iH4d;VPpSa;|?=PtLO9jSnMkc2(F zpZkWI)?PIYI_0gB0aI-sao!EMF5%N5r1Tp_`v z{% z92PZ&zDLNhXMJ$x7M${c)rEIh+Hb#D_p@$E{6ag@MGSDpSogC$x?lVfA^0v%glgeco|*71=VmI2!W zhT$Gv6pKFJdO#3;G3nrk0`>YsKE<|K>-=Hxch$DlqfwXdRo~fM)>*~r-OSw7=w}aI zVa9II$ksWWsZ>@O8e8gN5DGN?Oy~OYY7sKtVxh#QHZ4RUuVsVZ??1a67Bv&QbC|N$ z-{?30hLPNl#oCi~@^rP6B@p%S9h_*mAcL_E5}EQ66D$;#yX(+GqNo3G+FC076qI!S z`Vqtp68!Yn(WLJt%U<}duaE}4;nBEV#bb3y2~&F4YcgQ#rTB5JuCwmq#OHN4Y%&06 zj-fK;n0}CcOi4p`Ph&{IYF-hKRnT4OS_|iy=CnKj?r<6LCGNmi_Y zs>!?J-1W1oIkdY^ZB-Q%O+8U$u|dwNdp;FhxF7>w6BhXLVQsunb5tWWX49SgUT zd%kVK8WRVvS0s1OV-`AjFVUZucL5`AU5||eNO|^EdW*{RCV+9|*gfB~Q?Vb$?b{`X zZ+tBL4?_l7sy!N`>Vm^sU$NG_uh;$W4=of8R<@)79I>6-e;*=pg@pgw)=t$UFqF>s zne3#@)j*Wfp6+J%rIOAKgNt0G zW5N6IVy6D`=s9WqY5?Z;@_K>gd&vK4&4muwHWK7SYBhSSA|%A@gi?FSYJ|m1Lp*x*QRk(q7Re)f!waxa2vQ^XUIKq%>C8%{l{^;Gxv~tSPx!>L)to-3x2{UQ-O8& z!CZIS^{d4s>0cJ(guJZku$tqMb@L=4WRntjAG+Q!u@M}+o}Z2i-x(gSlHW&P&f447 ziYwSg@+W21tk$nPO*&WZybKC|)R!4Ue=hBw**TPd%aUxfdv37z>LeyWGEO?>K3>7m zoI3Vtb!d*}xRTK(EN=f`!~n3u225z?w3eQi!!n436((<|+7}>nZQ{@#oYU@kW1-RISml$?TxG0r zB{!_!GoWLO2d0jtK9c!8Q)Lqj@rO7vs5uxfRdPplHufxe)<-{6yHfl=M150WWzn*2 z*sYNvt!$~-LY-kwqNeK@4WXjKi2x4RkNzbs4-gf%yy)IMz z(WTDL5xHey)tZUudxr3B(70Uq9p9KJmemw?oFKTiMaC&g&RlYm_rbVWmzgR$+*=W= zYj&$(@<3@55|R&7$Twr^>Q1AnBLXgm^L_E~zHkAc^W6j$n1m)vXuL(D|H#NFQm66B ziG#(}=eh&7UTn9?&0@N-H7~I|Sb zvD}TeNJRfFxX{DoBwA(M=jP>bRfIxld7ze^V^jiALqtnn># z3*kPf@nU?72e5RN?yY6@5%5+_;B)xC_!l{LaDF~!i{&o6fy3LGlqEbW>!bG#v1YI1 z3_OO6qe3~7jRvZ^LvQPABT_n3ZAJyROOEExlhoI-g~{hbVxvj*{r%y>Lu&wm+uRP6 zjOMEgfh)C|xaGmL-wQKVRYSUp9sUY6HCX3O)!FCy+)zB8GJM*NE#+|#-oeR`wPDm@ zLGoXaD3ON?sCSdn*SqYNzrU4O-5;;IKZgOM8}ylHzg3o+T}_Zt0L^$JxVZVA^bxvd zwI~9(BgV5e%I0V+p%pqSqPMFmoHt9|uhVCl4p(j!TEB9`yGSC#+x^4`Rzr2|i*91B zQa>+-B(gpC8@T)dD=*O><;@cd;*(Q8*I@@J&=uaa757C5MrIipvtQ^nzZf9HS7vrYZLW4uJ7k2v%I+=PKlQdZ4ZPG zpKYcmQVw#ix{opV+!zBJdB;d_vNkxkysd=5rXKH3e=Y871q{{LBvBoeoaK=58Y?HC| zH`5oQy5Qi9&Qlq`~GAKg#N{ik)(^{azQ_iYlMaR?H#@OzT`}NUY=Zo|m`z$-Db!5{z2r zYZS`*YbN0WgDLXZzcpwr1{U@irXZF&%pZ*Yu`ZQE#k|JPHKY!=t5?tbtK(~z?Y<;e zC_R#4)JxS`GESUq_9Lx_=l1^kp!mGz*%-r8L#RU3?;KRT$o@Rfb@5(0`g)0JQ}Fm> zNxSR1)@iYf;lyelVpCI4#eFxgl7#a{4F))1?YiZ>`JWVlZQzMu(A>=g>WUV>LfRED zPY?vM4l&v|Y!7$3nbv4eyI`coG`#fssEmH035VPl7!{a5jKCFd#=U%cRsvbbV^qBS6i<|kR5da^9v z6${fY`#~Tigx<*^c!ND12KGXfC0ku$&%~d(gkR%r`mw)LsZ~xQrbHG)Ut{PUT&ABDQ+;evGN3D zoXkvZL^zTR-3M96uB}Pj%*W<2uTy}ik zJ78sTIheHz35WnB)}bSnsi2~iBZZg~M;1qc`QNo+5v#=6?%cQEoqx<><-+fJ_4mmb-OM_rzbf|}fT(~4ON4t8R!-&tT zaMR=1Fu13V7^umhwLI*6ew<4~IIBLf@II~pC0mTu9zCf@)E}B}-@&-*&(W|;cwHH~ ze7^vyS9q^*#eQ4;c`R2zP<0}5kY1I2ti}E|V?sIdFVjr;>jTQhU+ z(oPPnMO=sk24@=qARu2k7)_gYyDo}WjO(9z97x=zKn;W3YnRu-Ktdz;)@y#do%Wwp zCQEY-MmZEN;a7Yd4kgIOO^_h}EUN3m;h48!V_HLgo#e7k*Km6+-SYf6HX0iuQOQ6wuGyNX3rTs;a?S42VGoT%=3dDnBvd5cljZt(yTW|prhTG8QPQOOK@fe?(41LA z3}E|}(s^|}-~BbWXDxkqY=LbwFjWCmM+lD5f885e+IlkN8s0D*P_%Di!^sy^aVV&G z{kGi_pxOO4WPLv6?7A6v0N=Xvdh7mx8b)er)1hK9v8rCtSj@uo&C&405EZI z;c7_eGbfelP<<^vX+6<@T|ci#;Ev3KG`K5U931if4q~?n&{IGqe#<3TYuC2B&eqy` z{dE0Oh$*%NM}{#quS3k(#I%9*TzWsd^4=h!nCv?G{8NvIIlN=}OWDxAOuIDj+m$YZ zi@U*A>sWWBZ2bfXA*)F`YTp(l)5-B1Q*7h5^v0{QqQAu-uGWJMjbjs00pvffVJgCN zPeyBWBzX(widk>*In?UDE0v@{4aF15ad1IL&egyyCkWkXU;D!q&N8z8Z{1VKed1ys z!-OqQ=QGwLQ~Rym`=l2>1d_V#kQOv%d;+3Ka0t7$Rh0-u({iXP|IFH0w8nsIK5-nX zmQlRD3L|zs3ZvJ2Y0)dwE*(rX7~)fP#ElpQ#+$mm{6bsKL(O_&2;TZ6wh$?-Hvg<@#rrr#?xKayCZX9CqK44I zs)zhaetbqeac-ZERQ!|g_`}|0Kxmy~I3_se;O7!wF zT~g+KtYS%{WhD*WWQT+CM@*Ft@56ZO#YK*oN|9sC+&dMDFbbkf2#qs~h}D@pWXREJ zp*ah^=tjiBrbg11t>dkU_Y=LQrN<;Jm_m7>gf$~O*Hf)uO3 zsGbZd2ltO_z|_I`L4+tWOC$QVVm@#U1Akh@12&<-vOWC*=Z8@?7&6ts;Qmp&_ZSR+ zLf1#FZX4z%1MWOte@=mM492?q8PVDqkLUaRVm*m}z6W_gjpFjQH0gvY&Pgg1uxeLz zx+I8#P-7;s}q}$WFs6p!?w^gK78w-#sw-t4;=%uj5 zP4LmXxuP%?nYO!U0fG?Xb0cv!LaQu0(Irszi)%!We;2zG(Oqh|Xp^i$Lx+a;ypo`+ zs>4Oc&Dzc+4~qEUKxlKZSm*`$;Tyulp&>|K9DtVLga^P6rkd0vq60cao&rz{#x=3ph&^3KD%1#uumi3wv(> zmaof_!ghuYIs8)}OmWQbs>C5V{U@%BoL?vQK%LFh_~XzzdByO*_x|#S0hO(m_cfnK z*%m5aV*b|suL+x$o7sWHt=H#xDmmQ6rJ*UE`y$E%MqpykLtmV+sr1iOke~Tu>Z;}Y zUZDcayg@&_xJ=$=L-B-dGzqnHb!rpj1?jhkUhU;Jk-E)ai(noME>7V3AaiS3p4p97 z2l~-WWpb<>${0x%85uNngZ)aT_6nn1d9g*#ELQMUqplBmCV8O7+wJ!UCSM})G8+Zo zlmL~9@*{a|m{1aw0{}TYyyYZ3e+%F2$7sEl*pjCy>x0;cUa4COC+P%bPX zVY~@HKVjR;;6UP>iPK~x&F)J{-i1AOa}f1QCl}G0T{uYWcurWwdI$GQrcKv_SGMcB z!ip=;emW_C{{DPI;*B=NcXtHy16#pm&5UpcHqv`36Ga`8r?*)~3EXpFBD zR$LHDvd3UO*h$%krX)1wu+fpOzqETe@QOQX(OqkEnTl52yd2JI>VxbtN;fXW?cz+9 zS_UE+WX&;EH8A9T8@IVK+N`4oVg-DDX}sYvzh?Q%xplOW)QyPh56^?d_;6Sru<7 zL6MwB^H<{$o&BXFn|) z?fOUCh|1p=&9KJR7l zUy;6$s5akgF6PEw#sU>8arvIdIMDyMYscP$)MZ0at=N@b3oP_k)c56MO#Qh25$4-U zSw!@fisTy9|N1*?BKplynIEJ5NQ{cErLWcJaL=bRA58%o+E#O zo)8f62xn8qfQ)Jn7noZfrL3^fvp~JaOthvmwx*k>O*0{_0&SLySG7>y2R-lIjHM$B zTHmX@Ep8Lq+S2Dm^%*{KPyC%0oGvr3Ec@MjdVa%kEQfY6Lo-R*qOXyJV0LeEzeS8W z41Mm3HI{y$1Qg-nQggMl4^8o=Q(3{N9JXSh6nBn+Oh+dFvIikQD^wrhx>*-L)VqlB z<6(Y?pqL^Jie&6>FOF#oUt6MlP%qfg_!ihv;c&Og_t2O3StdTR6YUbCDg#xtR~(^z z)I&jLPUZ<&y)YySbw^mcw_mkX-maN%=r1)vL(9!aCrGJu)=xkKCPKHxM$sIks3KC1 zZuLYbR`W5r?d=RadA_bREV!DXpT#JSp7JA8Q%S; z0D+D;9R2>Aw;)1|c6nh+LD{|his9H|v>RDJ78?CvlLid6_W=qk%kA=eTQUbU)=x4= zVaF1kxz^k=V`e#dS2fwY4iXX&GgEz&X2i+u+Z~qQv9bcRDbJ^tBSAZjw#lh!+o(yBl|~kl`WU zXgW370xxu3x|cD+bH*!fqjhAl4Ox0!oh9ldteLedet0JM>b>2lPJD3kqdZigkQtB@ zCy5DbSOlr`+W-6>o`2YS+eu19{ZBvp-PEe!wTJfTTdf{VDPcb4#cKhfkR>PfWkBUd zT#m{%2OL`Iv1PY8#3I0eh`Usl^Cc#5-CHT8SJD`5(OWCYB;xeY)h5X( zWK$l`Z-|mab5Y=BH*(8H5IdHM{YTTEKm=qflj<(5(nEmvES?$C@5TH>>$l#z%j zKNdAGtFmvsAB8%j3T9u5n6;EqB3lAW0xua5%Y7qpE_qa*mk;q~ejpR;xF2jLYD-H8 zg@UYNi7S{=ciM@@Fo6!*Jx;w*WOu}sk~O)t7WAs6o`ph=#pfOkM)lm=bCbUkx2QGw zA6=a0Aiy*PRl6+eunGB~x|dH_o#x_>IXPhTitIpu=P1)2(17%o7ClkS6z+KCXtqRFtxpy;8*Ojv#aHR*a}3@u@rflnve7a&;$&LO$26XUiE0?J;l$e;nLyhLtpT#Uf7Z{Sw`QZ>!bh z(;-?NzB-+IAYLhz48caZ!$hLYxy$JUt|qAj$Og3Yv} z4tkTK?V1Y$QhTwud$!f__01!F--{V5l5LAJFu;Q^QnhyCl<9nGp7MO3Dp*n)w0uHF z16(AGDRzmdtR};(+GV?ay-o5yuPhAV*Ir;U*W2CxB>HByuU!lhlXsZge_MC_=k{Xn z1?gg;r~)Cv676ISf569!UgK%q+%GIuyagfSs+x$(w|ySj8`|kIDVDk9ke=m)-M_36 z%$!{C4nPvw0D*>zeoD}?x;5B@V#=U~=*)JD8$T2oQyy-X7wB)OLusng=>d(k#V9~b zZ9jJJ8>~)|#n)k6hE#tMA}5CaJ$`}N(q+mf`?*cC31=TlD_eO(C4llcHu;hw1W{Iw z^JE1?I1ZW`UK-ucPVExPc|JWL*D#y9nbt9p5va^ezPWEje(3Q zFNi~u0csvZ*2*oy7;sn(=XSTjRrUK8cW8|EOpAz7 zYreR;wNS_lULX)Wj$yOV0VNzMc8tKR4$~A+z0&xJ6V-(2%(qKto?x=eobgVC)ip4*>oyuXAztb z|1@!etWsKTN_mw^H3DWN!)$Vug1n$9={hV9f#e7MI5l4u6$aTVpNB4kp*Aj^0AJ0D z7dFR+Ps>{Dpt97+{u?7SCmCaG)4XSaz7nZ2#bJfdOji+& z>Y$)7StG}6$=(hlQgF3YqsLoSw`f1Xt2ohP+&yQ+x24?QF=1;Fh&Hfj$23QXhPB=? zjCg~l55}+rjq9hTQ`ljuyqF)p{O5Nr=j1fT^0F0#y_dTvOi~#cWporU6ZmLRWk@Gz{?5OyebKoEE1B$}A9Uw$Yfr;70%eRYhM~kks z_Tm4gFN4UNI^AXzRkfbM1@J%X=2Cfv4ev=*$j&y0_5 zp1EQobFf3--urO5)s zQYkLl0+{SSVF;bo1SdHO?tP4aoq@w9f#M~@p?J0|CxptC3A3xR31Ko;>gVa#v3Kn? zIc;Miv2<}`M8pHF*R{EN;UE~x$%M1xSq9o3CGPLbbCVGU<1h?zk58=r@e~S&`ixPW zrgY>*E|Yr;`^g>)f2Jr0<*kgi)FGj20R01oe(3bGPWO$c_wKg@+ z%koI&x+kGB1o`l`p45-m*brCwv`iFC>flD7Z>yq1hO%elI=QOhmpVr{ZAD=grkrq* z46>}=*OS;KmDfJjDGVE5q@Y;xj@O=kaHL_xQcDFR6eW&HOT}>2SZZhtLy*B^_nZiO zY0oGyesr;f;Sa!KdKTYx6kmas3xftq0&DNNCVO|m+1whN34m~E_qNo8;Cn%&`~8`5 z?Se%n%NII*UJN4jR?K#_kxg|(_KHWw`6$E&q^r6mck8ZTR=!3RH zxR3*|*j*yf;D(o8o_QvI@p*BGyZA)&4MLO4et-9o37cZ6@|?eOpe2g17CVFH6oXJ1OTupY-o_lLM$9PBy)mYM?!k!~W3 zO49dXsm`LJ{az=FlFSVKw+sicT?^jFW@@s?_hhHFV}G zI@P0Ps5A^ED(}201XNHCKa3%lJMd2xx;*kbSf7{gGD3ZKYN}aDQDZ8vI|d-)3ps=& zXu~t34&ya95nZ&In~wsz3=aSc2?V6N1q`m$U^~MnRe!*bMvP16)Pnt^$zV(n3wEGEnEy z@{r~Dd1RvzV&KwX^XiJV@?8k6nc4$~|1#*IZ`@a+hGzqbK_PLhtC|J+$04h%fP`gB z<@P)F#!etW9hk%mM;MI@>9@z%V2dtLSo8Dj9Yi?A$(L)jyfiCfl}Zaoy=Zn}boU>v zSahrueR25_`Mh%tY#`LF;Wefz@jK0!4XQ}wWuOI=m)%oupM^x#(6WQ2Tle9mvNl0V z7E7I!)#4n^x-{{eX+aWVn*YnHesFA!RVP)fy$F~)l+ohzV(EtPyZr^yt z{W6u=e{i$!!J$o=!Ur4 zw{gZ{4x=Gm13qF#JROYAm?x?44x{(=Z}n;JFfyL<{-c+}s%hbIGpwdkv`j}uYy=Y^-T@QvCV@JX?FXes4prJwW8^dpP=5C>h z(M0BHp^7Wd5wE^dc4`dZC9+#noC$Y4WBp2OmfgC_d1jmKY2+eF`5TrTbDugrP~Bqa zxDvc#pc1MmYEQPU6l@-xSpf+m)01QQlZ{A93Xj;Hsws~t(3r0wBsGc}n>MvX9vL!P zJ%bulh-1PFtv4CM+S+3?6&@&=QnbjT`Yih1i9jc&K{Sp#1(qI#ic_R^#X;fgrosIbeATcw%_O^!4fw?yxm+l z8jni!7zGZ~+`IEUYEtxGRcb8QFSROZ_jhHz*-k_xv50U$sli}!*$5r4B`>0ICWZa= z_AFGiPL73(?h4U6hYpFa{J<4GJUiN2#^EGLPHK|p3G|YEJJ=T0eypG39!-txlhD@0 zK}%r%!mOiMjdF*k!u^k*vK}YAwU{pWX%xmg=i_@NM7_5;!5#>`GxV&S7fl%7diqWq z+SRy!YG+sPIw-?;DQ5>=Hwj-%=g)-Y3Zfoa_iod^ZG6w#s^D^3Yj>aozDmy@+Vq1$ z|H+G4AoNhFM0f0Q;Y6J(Q$s4ho~PdV+yJ_3ymxPC@xxPBuop!*=*s=R3K<6z#5WFq zFndIe6Hos4L1rA32-yJYGBTETd@mxRY#S;p*y{AJVp3QefLd!;a9_U&fPnFLSr{J` zfdYt?!!2upULWEv%c-SRl3EunZ$~&3*{cj;rfGUc=v4qXxdEd}*s>mDyAd7`bF%Ez z6gm30DY)0N2@rF?xsqq6iX^J^Ipl!n(FBxfk}8R@KhjSY^^Y}*yqsv2I_ke%Uy(JL zNt=qV)V6hJJH=Tmy`P627x+>c8a;;;0Y6q~9dPCURM?1BeB%X{2vj=gvm*0!_o~_94+y ziLoNR3nd%4e?HR00U=q#cHb8Of>QEImMIEc~teybmvEOKxGm2EshBQ-HPF-KPnT}~h&{nKHJ$R^Rv5xOi%KpQ{$ictW5Z*FE zP+F;^6gT9XL_Ym?WXVPGL8oH5gqxg_XMDL*f@KwklLw)0Cd(i^?KEQQT|G9T$U6*# zc5|IJQu8mzQVXLq$iDtU^Pl{kGp35H%Iar9N95IGluTu|Ew>4lx}jM32x5A6N~*hm ziKV2oHXnwi$5!`zNjL43ZTmLGhMYp}j(S_sVzOGy3u?%2;hBjPtfZa`Qhwsr=bHxeMJT+PBFUK;3!aY zA$6vyQ77C-X4aQokD5I-Dz$xH`xSgXbCJ4EXmz?>+}sXs51u|QJ#?Oe+3?w2ukTC$ z^Y^uD>%#f!+rK*hPc@&*<$3n|)Yl1=_qWGui1+>#_v>(9_UAlB!YtpdfzOk{lTU$W z74lx&nN5kZxqA85%f(X$pN}*Eqfvu`@4a{`q)^IDHp$xLU?#+}{Q}F#P1?WFxKPy$ zKPf=(znL3*kF0k%nuwlPl}jbdYxL&hb|yd7(AGEM2rCquN+T0`AGeBA6FCz!t;!W< z!veeT-#0bvW#FaNy(J(kp5W7;Gnb+^(U51%oIVlzW8Ursg-i zgj#|!Uzvg^{X@*n-ZI#1l6G7<-~z`WA}9>?;B~+sCprNEXONR)&MBnf21MIuC|3L5 ziZCOsG&+#|t^D=F0%0-Gln5I0;R)|r$WMI7x_fGYtDEJyb2hSfDa+uJ178_(8VC_l33?uEw zSud=FFL}AIS}tpRo4LbUtxpC|kr8Z&iCv{1qmdL4Ps`~M+^$1t;Lp#U)5=YuLd1!* z<1mm)3w~1huCcx-Md z@}>Aj*Zn{0ANH@8(^jli)9O-fwf+_(A3CgK>eU4IKmvDIg2<%+R~mkz)fw5GTIL zP>;;nRSUQ-TOL=rLLq#2r83{DUJo{JgJEG|^t{j82yE-BmCBWkXlQ6`8=hxa_?|u3 zccWaFq4^~n*0l6j?H@|j+O3{$U!UM1h`*{7%VO|7zP(&QvY-2hct3Aqy6!Z(D;F$L z>w%pSNZzmO6nvha@dO-CBQY6o{UP++*JdXVgRsi~57<*daYpeI9=9v*6Q>%I;z~sJ zQ%&z+fyvbBM6Rt5h1bm3lXY`9&9DyqX+OL4OZ*B7~Gg7V%_J$s`3O z2YF#s!8&)_`GI$xDj!%vo>};u_e))<7ZKf#NNXn_LoSem;_}e?@EU-P-tyt|Hy;B@ zqX(ZBpz|fFux}><9K=pU?mLA+lzvS!{HZdVHdNt9oPTJ}0`Bb}hpVXG-{BaDn7BhJ z7>zt8QonyD`Zmsp0qObhgu*C*(CQEl=h@-fl1y07Y46IKPYb!r--aJ|BR`M6svsc! zWsdvu4iPpEy4FtIn|o4&x3A=jDs1Fpmr63py~MxbQd}I-CmLdJwN3#F_c$6YWBrN8 zLemBdQbH#@6G6ygNJ>dgpX*}?*?gIqmX!`En^IewqmF~l8(ErB_5+T^#sU?OAuPR3 zrFGUdJdNeF@JJF-(a!dM(QHH-RoA$!No{R`Ua#CddEm&xmJ>`C_SYXQVLwK>So;nk zJ8z3VRpNc78H|81$1Nn*k9V;C@qee}8Edzsc@u6LSWhzDG4-A|irZ~je_G!<@%M@f z(}ocXDCPL7i35Y-IglZ%N?k=}ahuJj@VIqnDc`yrBPj8S9yy$c4=G-{2!1h}Xjcbx z60_l_MAgsKLQ3i90U2~hXX3&*Wf3DZYD`(s+b9tolZSPv3MVr-?zXΝ{fqdd4TB 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%0D;xGtslf~`F$&FD;agD>R* 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ï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

            tLU@5mBs-PPlVJ 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%0D0b%c)$9<#<-^IzQ61 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

            APAJrb#F`JJ+fgrcI|>HVwO&%x_!`zdYlp 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ⅅ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 T@Risv!5 + + + + +# Ingress + +**Table of Contents** + + +- [Ingress](#ingress) + - [What is Ingress?](#what-is-ingress) + - [Prerequisites](#prerequisites) + - [The Ingress Resource](#the-ingress-resource) + - [Ingress controllers](#ingress-controllers) + - [Types of Ingress](#types-of-ingress) + - [Single Service Ingress](#single-service-ingress) + - [Simple fanout](#simple-fanout) + - [Name based virtual hosting](#name-based-virtual-hosting) + - [Loadbalancing](#loadbalancing) + - [Updating an Ingress](#updating-an-ingress) + - [Future Work](#future-work) + - [Alternatives](#alternatives) + + + +__Terminology__ + +Throughout this doc you will see a few terms that are sometimes used interchangably elsewhere, that might cause confusion. This section attempts to clarify them. + +* Node: A single virtual or physical machine in a Kubernetes cluster. +* Cluster: A group of nodes firewalled from the internet, that are the primary compute resources managed by Kubernetes. +* Edge router: A router that enforces the firewall policy for your cluster. This could be a gateway managed by a cloudprovider or a physical piece of hardware. +* Cluster network: A set of links, logical or physical, that facilitate communication within a cluster according to the [Kubernetes networking model](https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/admin/networking.md). Examples of a Cluster network include Overlays such as [flannel](https://github.com/coreos/flannel#flannel) or SDNs such as [OVS](https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/admin/ovs-networking.md). +* Service: A Kubernetes [Service](https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/services.md) that identifies a set of pods using label selectors. Unless mentioned otherwise, Services are assumed to have virtual IPs only routable within the cluster network. + +## What is Ingress? + +Typically, services and pods have IPs only routable by the cluster network. All traffic that ends up at an edge router is either dropped or forwarded elsewhere. Conceptually, this might look like: + +``` +{% raw %} + internet + | + ------------ + [ Services ] +{% endraw %} +``` + +An Ingress is a collection of rules that allow inbound connections to reach the cluster services. + +``` +{% raw %} + internet + | + [ Ingress ] + --|-----|-- + [ Services ] +{% endraw %} +``` + +It can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. Users request ingress by POSTing the Ingress resource to the API server. An [Ingress controller](#ingress-controllers) is responsible for fulfilling the Ingress, usually with a loadbalancer, though it may also configure your edge router or additional frontends to help handle the traffic in an HA manner. + +## Prerequisites + +Before you start using the Ingress resource, there are a few things you should understand: +* The Ingress resource is not available in any Kubernetes release prior to 1.1 +* You need an Ingress controller to satisfy an Ingress. Simply creating the resource will have no effect. +* On GCE/GKE there should be a [L7 cluster addon](https://releases.k8s.io/release-1.1/cluster/addons/cluster-loadbalancing/glbc/README.md#prerequisites), on other platforms you either need to write your own or [deploy an existing controller](https://github.com/kubernetes/contrib/tree/master/Ingress) as a pod. +* The resource currently does not support HTTPS, but will do so before it leaves beta. + +## The Ingress Resource + +A minimal Ingress might look like: + +{% highlight yaml %} +{% raw %} +01. apiVersion: extensions/v1beta1 +02. kind: Ingress +03. metadata: +04. name: test-ingress +05. spec: +06. rules: +07. - http: +08. paths: +09. - path: /testpath +10. backend: +11. serviceName: test +12. servicePort: 80 +{% endraw %} +{% endhighlight %} + +*POSTing this to the API server will have no effect if you have not configured an [Ingress controller](#ingress-controllers).* + +__Lines 1-4__: As with all other Kubernetes config, an Ingress needs `apiVersion`, `kind`, and `metadata` fields. For general information about working with config files, see [here](simple-yaml.html), [here](configuring-containers.html), and [here](working-with-resources.html). + +__Lines 5-7__: Ingress [spec](../devel/api-conventions.html#spec-and-status) has all the information needed to configure a loadbalancer or proxy server. Most importantly, it contains a list of rules matched against all incoming requests. Currently the Ingress resource only supports http rules. + +__Lines 8-9__: Each http rule contains the following information: A host (eg: foo.bar.com, defaults to * in this example), a list of paths (eg: /testpath) each of which has an associated backend (test:80). Both the host and path must match the content of an incoming request before the loadbalancer directs traffic to the backend. + +__Lines 10-12__: A backend is a service:port combination as described in the [services doc](services.html). Ingress traffic is typically sent directly to the endpoints matching a backend. + +__Global Parameters__: For the sake of simplicity the example Ingress has no global parameters, see the [api-reference](https://releases.k8s.io/release-1.1/pkg/apis/extensions/v1beta1/types.go) for a full definition of the resource. One can specify a global default backend in the absence of which requests that don't match a path in the spec are sent to the default backend of the Ingress controller. Though the Ingress resource doesn't support HTTPS yet, security configs would also be global. + +## Ingress controllers + +In order for the Ingress resource to work, the cluster must have an Ingress controller running. This is unlike other types of controllers, which typically run as part of the `kube-controller-manager` binary, and which are typically started automatically as part of cluster creation. You need to choose the ingress controller implementation that is the best fit for your cluster, or implement one. Examples and instructions can be found [here](https://github.com/kubernetes/contrib/tree/master/Ingress). + +## Types of Ingress + +### Single Service Ingress + +There are existing Kubernetes concepts that allow you to expose a single service (see [alternatives](#alternatives)), however you can do so through an Ingress as well, by specifying a *default backend* with no rules. + + + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: test-ingress +spec: + backend: + serviceName: testsvc + servicePort: 80 +{% endraw %} +{% endhighlight %} + +[Download example](ingress.yaml) + + +If you create it using `kubectl -f` you should see: + +{% highlight sh %} +{% raw %} +$ kubectl get ing +NAME RULE BACKEND ADDRESS +test-ingress - testsvc:80 107.178.254.228 +{% endraw %} +{% endhighlight %} + +Where `107.178.254.228` is the IP allocated by the Ingress controller to satisfy this Ingress. The `RULE` column shows that all traffic send to the IP is directed to the Kubernetes Service listed under `BACKEND`. + +### Simple fanout + +As described previously, pods within kubernetes have ips only visible on the cluster network, so we need something at the edge accepting ingress traffic and proxying it to the right endpoints. This component is usually a highly available loadbalancer/s. An Ingress allows you to keep the number of loadbalancers down to a minimum, for example, a setup like: + +``` +{% raw %} +foo.bar.com -> 178.91.123.132 -> / foo s1:80 + / bar s2:80 +{% endraw %} +``` + +would require an Ingress such as: + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: test +spec: + rules: + - host: foo.bar.com + http: + paths: + - path: /foo + backend: + serviceName: s1 + servicePort: 80 + - path: /bar + backend: + serviceName: s2 + servicePort: 80 +{% endraw %} +{% endhighlight %} + +When you create the Ingress with `kubectl create -f`: + +``` +{% raw %} +$ kubectl get ing +NAME RULE BACKEND ADDRESS +test - + foo.bar.com + /foo s1:80 + /bar s2:80 +{% endraw %} +``` + +The Ingress controller will provision an implementation specific loadbalancer that satisfies the Ingress, as long as the services (s1, s2) exist. When it has done so, you will see the address of the loadbalancer under the last column of the Ingress. + +### Name based virtual hosting + +Name-based virtual hosts use multiple host names for the same IP address. + +``` +{% raw %} + +foo.bar.com --| |-> foo.bar.com s1:80 + | 178.91.123.132 | +bar.foo.com --| |-> bar.foo.com s2:80 +{% endraw %} +``` + +The following Ingress tells the backing loadbalancer to route requests based on the [Host header](https://tools.ietf.org/html/rfc7230#section-5.4). + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: test +spec: + rules: + - host: foo.bar.com + http: + paths: + - backend: + serviceName: s1 + servicePort: 80 + - host: bar.foo.com + http: + paths: + - backend: + serviceName: s2 + servicePort: 80 +{% endraw %} +{% endhighlight %} + + +__Default Backends__: An Ingress with no rules, like the one shown in the previous section, sends all traffic to a single default backend. You can use the same technique to tell a loadbalancer where to find your website's 404 page, by specifying a set of rules *and* a default backend. Traffic is routed to your default backend if none of the Hosts in your Ingress match the Host in the request header, and/or none of the paths match the url of the request. + +### Loadbalancing + +An Ingress controller is bootstrapped with some loadbalancing policy settings that it applies to all Ingress, such as the loadbalancing algorithm, backend weight scheme etc. More advanced loadbalancing concepts (eg: persistent sessions, dynamic weights) are not yet exposed through the Ingress. You can still get these features through the [service loadbalancer](https://github.com/kubernetes/contrib/tree/master/service-loadbalancer). With time, we plan to distil loadbalancing patterns that are applicable cross platform into the Ingress resource. + +It's also worth noting that even though health checks are not exposed directly through the Ingress, there exist parallel concepts in Kubernetes such as [readiness probes](https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/production-pods.md#liveness-and-readiness-probes-aka-health-checks) which allow you to achieve the same end result. + +## Updating an Ingress + +Say you'd like to add a new Host to an existing Ingress, you can update it by editing the resource: + +{% highlight sh %} +{% raw %} +$ kubectl get ing +NAME RULE BACKEND ADDRESS +test - 178.91.123.132 + foo.bar.com + /foo s1:80 +$ kubectl edit ing test +{% endraw %} +{% endhighlight %} + +This should pop up an editor with the existing yaml, modify it to include the new Host. + +{% highlight yaml %} +{% raw %} +spec: + rules: + - host: foo.bar.com + http: + paths: + - backend: + serviceName: s1 + servicePort: 80 + path: /foo + - host: bar.baz.com + http: + paths: + - backend: + serviceName: s2 + servicePort: 80 + path: /foo +.. +{% endraw %} +{% endhighlight %} + +saving it will update the resource in the API server, which should tell the Ingress controller to reconfigure the loadbalancer. + +{% highlight sh %} +{% raw %} +$ kubectl get ing +NAME RULE BACKEND ADDRESS +test - 178.91.123.132 + foo.bar.com + /foo s1:80 + bar.baz.com + /foo s2:80 +{% endraw %} +{% endhighlight %} + +You can achieve the same by invoking `kubectl replace -f` on a modified Ingress yaml file. + +## Future Work + +* Various modes of HTTPS/TLS support (edge termination, sni etc) +* Requesting an IP or Hostname via claims +* Combining L4 and L7 Ingress +* More Ingress controllers + +Please track the [L7 and Ingress proposal](https://github.com/kubernetes/kubernetes/pull/12827) for more details on the evolution of the resource, and the [Ingress sub-repository](https://github.com/kubernetes/contrib/tree/master/Ingress) for more details on the evolution of various Ingress controllers. + +## Alternatives + +You can expose a Service in multiple ways that don't directly involve the Ingress resource: +* Use [Service.Type=LoadBalancer](https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/services.md#type-loadbalancer) +* Use [Service.Type=NodePort](https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/services.md#type-nodeport) +* Use a [Port Proxy] (https://github.com/kubernetes/contrib/tree/master/for-demos/proxy-to-service) +* Deploy the [Service loadbalancer](https://github.com/kubernetes/contrib/tree/master/service-loadbalancer). This allows you to share a single IP among multiple Services and achieve more advanced loadbalancing through Service Annotations. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/ingress.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/ingress.yaml b/v1.1/docs/user-guide/ingress.yaml new file mode 100644 index 0000000000000..163c1d5b9d022 --- /dev/null +++ b/v1.1/docs/user-guide/ingress.yaml @@ -0,0 +1,9 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: test-ingress +spec: + backend: + serviceName: testsvc + servicePort: 80 + diff --git a/v1.1/docs/user-guide/introspection-and-debugging.md b/v1.1/docs/user-guide/introspection-and-debugging.md new file mode 100644 index 0000000000000..8eaf2bb864ce1 --- /dev/null +++ b/v1.1/docs/user-guide/introspection-and-debugging.md @@ -0,0 +1,363 @@ +--- +layout: docwithnav +title: "Kubernetes User Guide: Managing Applications: Application Introspection and Debugging" +--- + + + + + +# Kubernetes User Guide: Managing Applications: Application Introspection and Debugging + +Once your application is running, you’ll inevitably need to debug problems with it. +Earlier we described how you can use `kubectl get pods` to retrieve simple status information about +your pods. But there are a number of ways to get even more information about your application. + +**Table of Contents** + + +- [Kubernetes User Guide: Managing Applications: Application Introspection and Debugging](#kubernetes-user-guide-managing-applications-application-introspection-and-debugging) + - [Using `kubectl describe pod` to fetch details about pods](#using-kubectl-describe-pod-to-fetch-details-about-pods) + - [Example: debugging Pending Pods](#example-debugging-pending-pods) + - [Example: debugging a down/unreachable node](#example-debugging-a-downunreachable-node) + - [What's next?](#whats-next) + + + +## Using `kubectl describe pod` to fetch details about pods + +For this example we’ll use a ReplicationController to create two pods, similar to the earlier example. + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +kind: ReplicationController +metadata: + name: my-nginx +spec: + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx + resources: + limits: + memory: "128Mi" + cpu: "500m" + ports: + - containerPort: 80 +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +$ kubectl create -f ./my-nginx-rc.yaml +replicationcontrollers/my-nginx +{% endraw %} +{% endhighlight %} + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY REASON RESTARTS AGE +my-nginx-gy1ij 1/1 Running 0 1m +my-nginx-yv5cn 1/1 Running 0 1m +{% endraw %} +{% endhighlight %} + +We can retrieve a lot more information about each of these pods using `kubectl describe pod`. For example: + +{% highlight console %} +{% raw %} +$ kubectl describe pod my-nginx-gy1ij +Name: my-nginx-gy1ij +Image(s): nginx +Node: kubernetes-minion-y3vk/10.240.154.168 +Labels: app=nginx +Status: Running +Reason: +Message: +IP: 10.244.1.4 +Replication Controllers: my-nginx (2/2 replicas created) +Containers: + nginx: + Image: nginx + Limits: + cpu: 500m + memory: 128Mi + State: Running + Started: Thu, 09 Jul 2015 15:33:07 -0700 + Ready: True + Restart Count: 0 +Conditions: + Type Status + Ready True +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + Thu, 09 Jul 2015 15:32:58 -0700 Thu, 09 Jul 2015 15:32:58 -0700 1 {scheduler } scheduled Successfully assigned my-nginx-gy1ij to kubernetes-minion-y3vk + Thu, 09 Jul 2015 15:32:58 -0700 Thu, 09 Jul 2015 15:32:58 -0700 1 {kubelet kubernetes-minion-y3vk} implicitly required container POD pulled Pod container image "gcr.io/google_containers/pause:0.8.0" already present on machine + Thu, 09 Jul 2015 15:32:58 -0700 Thu, 09 Jul 2015 15:32:58 -0700 1 {kubelet kubernetes-minion-y3vk} implicitly required container POD created Created with docker id cd1644065066 + Thu, 09 Jul 2015 15:32:58 -0700 Thu, 09 Jul 2015 15:32:58 -0700 1 {kubelet kubernetes-minion-y3vk} implicitly required container POD started Started with docker id cd1644065066 + Thu, 09 Jul 2015 15:33:06 -0700 Thu, 09 Jul 2015 15:33:06 -0700 1 {kubelet kubernetes-minion-y3vk} spec.containers{nginx} pulled Successfully pulled image "nginx" + Thu, 09 Jul 2015 15:33:06 -0700 Thu, 09 Jul 2015 15:33:06 -0700 1 {kubelet kubernetes-minion-y3vk} spec.containers{nginx} created Created with docker id 56d7a7b14dac + Thu, 09 Jul 2015 15:33:07 -0700 Thu, 09 Jul 2015 15:33:07 -0700 1 {kubelet kubernetes-minion-y3vk} spec.containers{nginx} started Started with docker id 56d7a7b14dac +{% endraw %} +{% endhighlight %} + +Here you can see configuration information about the container(s) and Pod (labels, resource requirements, etc.), as well as status information about the container(s) and Pod (state, readiness, restart count, events, etc.) + +The container state is one of Waiting, Running, or Terminated. Depending on the state, additional information will be provided -- here you can see that for a container in Running state, the system tells you when the container started. + +Ready tells you whether the container passed its last readiness probe. (In this case, the container does not have a readiness probe configured; the container is assumed to be ready if no readiness probe is configured.) + +Restart Count tells you how many times the container has restarted; this information can be useful for detecting crash loops in containers that are configured with a restart policy of “always.” + +Currently the only Condition associated with a Pod is the binary Ready condition, which indicates that the pod is able to service requests and should be added to the load balancing pools of all matching services. + +Lastly, you see a log of recent events related to your Pod. The system compresses multiple identical events by indicating the first and last time it was seen and the number of times it was seen. "From" indicates the component that is logging the event, "SubobjectPath" tells you which object (e.g. container within the pod) is being referred to, and "Reason" and "Message" tell you what happened. + +## Example: debugging Pending Pods + +A common scenario that you can detect using events is when you’ve created a Pod that won’t fit on any node. For example, the Pod might request more resources than are free on any node, or it might specify a label selector that doesn’t match any nodes. Let’s say we created the previous Replication Controller with 5 replicas (instead of 2) and requesting 600 millicores instead of 500, on a four-node cluster where each (virtual) machine has 1 CPU. In that case one of the Pods will not be able to schedule. (Note that because of the cluster addon pods such as fluentd, skydns, etc., that run on each node, if we requested 1000 millicores then none of the Pods would be able to schedule.) + +{% highlight console %} +{% raw %} +$ kubectl get pods +NAME READY REASON RESTARTS AGE +my-nginx-9unp9 0/1 Pending 0 8s +my-nginx-b7zs9 0/1 Running 0 8s +my-nginx-i595c 0/1 Running 0 8s +my-nginx-iichp 0/1 Running 0 8s +my-nginx-tc2j9 0/1 Running 0 8s +{% endraw %} +{% endhighlight %} + +To find out why the my-nginx-9unp9 pod is not running, we can use `kubectl describe pod` on the pending Pod and look at its events: + +{% highlight console %} +{% raw %} +$ kubectl describe pod my-nginx-9unp9 +Name: my-nginx-9unp9 +Image(s): nginx +Node: / +Labels: app=nginx +Status: Pending +Reason: +Message: +IP: +Replication Controllers: my-nginx (5/5 replicas created) +Containers: + nginx: + Image: nginx + Limits: + cpu: 600m + memory: 128Mi + State: Waiting + Ready: False + Restart Count: 0 +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + Thu, 09 Jul 2015 23:56:21 -0700 Fri, 10 Jul 2015 00:01:30 -0700 21 {scheduler } failedScheduling Failed for reason PodFitsResources and possibly others +{% endraw %} +{% endhighlight %} + +Here you can see the event generated by the scheduler saying that the Pod failed to schedule for reason `PodFitsResources` (and possibly others). `PodFitsResources` means there were not enough resources for the Pod on any of the nodes. Due to the way the event is generated, there may be other reasons as well, hence "and possibly others." + +To correct this situation, you can use `kubectl scale` to update your Replication Controller to specify four or fewer replicas. (Or you could just leave the one Pod pending, which is harmless.) + +Events such as the ones you saw at the end of `kubectl describe pod` are persisted in etcd and provide high-level information on what is happening in the cluster. To list all events you can use + +``` +{% raw %} +kubectl get events +{% endraw %} +``` + +but you have to remember that events are namespaced. This means that if you're interested in events for some namespaced object (e.g. what happened with Pods in namespace `my-namespace`) you need to explicitly provide a namespace to the command: + +``` +{% raw %} +kubectl get events --namespace=my-namespace +{% endraw %} +``` + +To see events from all namespaces, you can use the `--all-namespaces` argument. + +In addition to `kubectl describe pod`, another way to get extra information about a pod (beyond what is provided by `kubectl get pod`) is to pass the `-o yaml` output format flag to `kubectl get pod`. This will give you, in YAML format, even more information than `kubectl describe pod`--essentially all of the information the system has about the Pod. Here you will see things like annotations (which are key-value metadata without the label restrictions, that is used internally by Kubernetes system components), restart policy, ports, and volumes. + +{% highlight yaml %} +{% raw %} +$ kubectl get pod my-nginx-i595c -o yaml +apiVersion: v1 +kind: Pod +metadata: + annotations: + kubernetes.io/created-by: '{"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicationController","namespace":"default","name":"my-nginx","uid":"c555c14f-26d0-11e5-99cb-42010af00e4b","apiVersion":"v1","resourceVersion":"26174"}}' + creationTimestamp: 2015-07-10T06:56:21Z + generateName: my-nginx- + labels: + app: nginx + name: my-nginx-i595c + namespace: default + resourceVersion: "26243" + selfLink: /api/v1/namespaces/default/pods/my-nginx-i595c + uid: c558e44b-26d0-11e5-99cb-42010af00e4b +spec: + containers: + - image: nginx + imagePullPolicy: IfNotPresent + name: nginx + ports: + - containerPort: 80 + protocol: TCP + resources: + limits: + cpu: 600m + memory: 128Mi + terminationMessagePath: /dev/termination-log + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: default-token-zkhkk + readOnly: true + dnsPolicy: ClusterFirst + nodeName: kubernetes-minion-u619 + restartPolicy: Always + serviceAccountName: default + volumes: + - name: default-token-zkhkk + secret: + secretName: default-token-zkhkk +status: + conditions: + - status: "True" + type: Ready + containerStatuses: + - containerID: docker://9506ace0eb91fbc31aef1d249e0d1d6d6ef5ebafc60424319aad5b12e3a4e6a9 + image: nginx + imageID: docker://319d2015d149943ff4d2a20ddea7d7e5ce06a64bbab1792334c0d3273bbbff1e + lastState: {} + name: nginx + ready: true + restartCount: 0 + state: + running: + startedAt: 2015-07-10T06:56:28Z + hostIP: 10.240.112.234 + phase: Running + podIP: 10.244.3.4 + startTime: 2015-07-10T06:56:21Z +{% endraw %} +{% endhighlight %} + +## Example: debugging a down/unreachable node + +Sometimes when debugging it can be useful to look at the status of a node -- for example, because you've noticed strange behavior of a Pod that’s running on the node, or to find out why a Pod won’t schedule onto the node. As with Pods, you can use `kubectl describe node` and `kubectl get node -o yaml` to retrieve detailed information about nodes. For example, here's what you'll see if a node is down (disconnected from the network, or kubelet dies and won't restart, etc.). Notice the events that show the node is NotReady, and also notice that the pods are no longer running (they are evicted after five minutes of NotReady status). + +{% highlight console %} +{% raw %} +$ kubectl get nodes +NAME LABELS STATUS +kubernetes-minion-861h kubernetes.io/hostname=kubernetes-minion-861h NotReady +kubernetes-minion-bols kubernetes.io/hostname=kubernetes-minion-bols Ready +kubernetes-minion-st6x kubernetes.io/hostname=kubernetes-minion-st6x Ready +kubernetes-minion-unaj kubernetes.io/hostname=kubernetes-minion-unaj Ready + +$ kubectl describe node kubernetes-minion-861h +Name: kubernetes-minion-861h +Labels: kubernetes.io/hostname=kubernetes-minion-861h +CreationTimestamp: Fri, 10 Jul 2015 14:32:29 -0700 +Conditions: + Type Status LastHeartbeatTime LastTransitionTime Reason Message + Ready Unknown Fri, 10 Jul 2015 14:34:32 -0700 Fri, 10 Jul 2015 14:35:15 -0700 Kubelet stopped posting node status. +Addresses: 10.240.115.55,104.197.0.26 +Capacity: + cpu: 1 + memory: 3800808Ki + pods: 100 +Version: + Kernel Version: 3.16.0-0.bpo.4-amd64 + OS Image: Debian GNU/Linux 7 (wheezy) + Container Runtime Version: docker://Unknown + Kubelet Version: v0.21.1-185-gffc5a86098dc01 + Kube-Proxy Version: v0.21.1-185-gffc5a86098dc01 +PodCIDR: 10.244.0.0/24 +ExternalID: 15233045891481496305 +Pods: (0 in total) + Namespace Name +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + Fri, 10 Jul 2015 14:32:28 -0700 Fri, 10 Jul 2015 14:32:28 -0700 1 {kubelet kubernetes-minion-861h} NodeNotReady Node kubernetes-minion-861h status is now: NodeNotReady + Fri, 10 Jul 2015 14:32:30 -0700 Fri, 10 Jul 2015 14:32:30 -0700 1 {kubelet kubernetes-minion-861h} NodeNotReady Node kubernetes-minion-861h status is now: NodeNotReady + Fri, 10 Jul 2015 14:33:00 -0700 Fri, 10 Jul 2015 14:33:00 -0700 1 {kubelet kubernetes-minion-861h} starting Starting kubelet. + Fri, 10 Jul 2015 14:33:02 -0700 Fri, 10 Jul 2015 14:33:02 -0700 1 {kubelet kubernetes-minion-861h} NodeReady Node kubernetes-minion-861h status is now: NodeReady + Fri, 10 Jul 2015 14:35:15 -0700 Fri, 10 Jul 2015 14:35:15 -0700 1 {controllermanager } NodeNotReady Node kubernetes-minion-861h status is now: NodeNotReady + + +$ kubectl get node kubernetes-minion-861h -o yaml +apiVersion: v1 +kind: Node +metadata: + creationTimestamp: 2015-07-10T21:32:29Z + labels: + kubernetes.io/hostname: kubernetes-minion-861h + name: kubernetes-minion-861h + resourceVersion: "757" + selfLink: /api/v1/nodes/kubernetes-minion-861h + uid: 2a69374e-274b-11e5-a234-42010af0d969 +spec: + externalID: "15233045891481496305" + podCIDR: 10.244.0.0/24 + providerID: gce://striped-torus-760/us-central1-b/kubernetes-minion-861h +status: + addresses: + - address: 10.240.115.55 + type: InternalIP + - address: 104.197.0.26 + type: ExternalIP + capacity: + cpu: "1" + memory: 3800808Ki + pods: "100" + conditions: + - lastHeartbeatTime: 2015-07-10T21:34:32Z + lastTransitionTime: 2015-07-10T21:35:15Z + reason: Kubelet stopped posting node status. + status: Unknown + type: Ready + nodeInfo: + bootID: 4e316776-b40d-4f78-a4ea-ab0d73390897 + containerRuntimeVersion: docker://Unknown + kernelVersion: 3.16.0-0.bpo.4-amd64 + kubeProxyVersion: v0.21.1-185-gffc5a86098dc01 + kubeletVersion: v0.21.1-185-gffc5a86098dc01 + machineID: "" + osImage: Debian GNU/Linux 7 (wheezy) + systemUUID: ABE5F6B4-D44B-108B-C46A-24CCE16C8B6E +{% endraw %} +{% endhighlight %} + +## What's next? + +Learn about additional debugging tools, including: +* [Logging](logging.html) +* [Monitoring](monitoring.html) +* [Getting into containers via `exec`](getting-into-containers.html) +* [Connecting to containers via proxies](connecting-to-applications-proxy.html) +* [Connecting to containers via port forwarding](connecting-to-applications-port-forward.html) + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/introspection-and-debugging.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/job.yaml b/v1.1/docs/user-guide/job.yaml new file mode 100644 index 0000000000000..c1c7008233792 --- /dev/null +++ b/v1.1/docs/user-guide/job.yaml @@ -0,0 +1,20 @@ +apiVersion: extensions/v1beta1 +kind: Job +metadata: + name: pi +spec: + selector: + matchLabels: + app: pi + template: + metadata: + name: pi + labels: + app: pi + spec: + containers: + - name: pi + image: perl + command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] + restartPolicy: Never + diff --git a/v1.1/docs/user-guide/jobs.md b/v1.1/docs/user-guide/jobs.md new file mode 100644 index 0000000000000..7ce14883f3691 --- /dev/null +++ b/v1.1/docs/user-guide/jobs.md @@ -0,0 +1,257 @@ +--- +layout: docwithnav +title: "Jobs" +--- + + + + + +# Jobs + +**Table of Contents** + + +- [Jobs](#jobs) + - [What is a _job_?](#what-is-a-job) + - [Running an example Job](#running-an-example-job) + - [Writing a Job Spec](#writing-a-job-spec) + - [Pod Template](#pod-template) + - [Pod Selector](#pod-selector) + - [Multiple Completions](#multiple-completions) + - [Parallelism](#parallelism) + - [Handling Pod and Container Failures](#handling-pod-and-container-failures) + - [Alternatives to Job](#alternatives-to-job) + - [Bare Pods](#bare-pods) + - [Replication Controller](#replication-controller) + - [Caveats](#caveats) + - [Future work](#future-work) + + + +## What is a _job_? + +A _job_ creates one or more pods and ensures that a specified number of them successfully terminate. +As pods successfully complete, the _job_ tracks the successful completions. When a specified number +of successful completions is reached, the job itself is complete. Deleting a Job will cleanup the +pods it created. + +A simple case is to create 1 Job object in order to reliably run one Pod to completion. +A Job can also be used to run multiple pods in parallel. + +## Running an example Job + +Here is an example Job config. It computes π to 2000 places and prints it out. +It takes around 10s to complete. + + +{% highlight yaml %} +{% raw %} +apiVersion: extensions/v1beta1 +kind: Job +metadata: + name: pi +spec: + selector: + matchLabels: + app: pi + template: + metadata: + name: pi + labels: + app: pi + spec: + containers: + - name: pi + image: perl + command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] + restartPolicy: Never +{% endraw %} +{% endhighlight %} + +[Download example](job.yaml) + + +Run the example job by downloading the example file and then running this command: + +{% highlight console %} +{% raw %} +$ kubectl create -f ./job.yaml +jobs/pi +{% endraw %} +{% endhighlight %} + +Check on the status of the job using this command: + +{% highlight console %} +{% raw %} +$ kubectl describe jobs/pi +Name: pi +Namespace: default +Image(s): perl +Selector: app=pi +Parallelism: 2 +Completions: 1 +Labels: +Pods Statuses: 1 Running / 0 Succeeded / 0 Failed +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + ───────── ──────── ───── ──── ───────────── ────── ─────── + 1m 1m 1 {job } SuccessfulCreate Created pod: pi-z548a + +{% endraw %} +{% endhighlight %} + +To view completed pods of a job, use `kubectl get pods --show-all`. The `--show-all` will show completed pods too. + +To list all the pods that belong to job in a machine readable form, you can use a command like this: + +{% highlight console %} +{% raw %} +$ pods=$(kubectl get pods --selector=app=pi --output=jsonpath={.items..metadata.name}) +echo $pods +pi-aiw0a +{% endraw %} +{% endhighlight %} + +Here, the selector is the same as the selector for the job. The `--output=jsonpath` option specifies an expression +that just gets the name from each pod in the returned list. + +View the standard output of one of the pods: + +{% highlight console %} +{% raw %} +$ kubectl logs pi-aiw0a +3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901 +{% endraw %} +{% endhighlight %} + +## Writing a Job Spec + +As with all other Kubernetes config, a Job needs `apiVersion`, `kind`, and `metadata` fields. For +general information about working with config files, see [here](simple-yaml.html), +[here](configuring-containers.html), and [here](working-with-resources.html). + +A Job also needs a [`.spec` section](../devel/api-conventions.html#spec-and-status). + +### Pod Template + +The `.spec.template` is the only required field of the `.spec`. + +The `.spec.template` is a [pod template](replication-controller.html#pod-template). It has exactly +the same schema as a [pod](pods.html), except it is nested and does not have an `apiVersion` or +`kind`. + +In addition to required fields for a Pod, a pod template in a job must specify appropriate +lables (see [pod selector](#pod-selector) and an appropriate restart policy. + +Only a [`RestartPolicy`](pod-states.html) equal to `Never` or `OnFailure` are allowed. + +### Pod Selector + +The `.spec.selector` field is a label query over a set of pods. + +The `spec.selector` is an object consisting of two fields: +* `matchLabels` - works the same as the `.spec.selector` of a [ReplicationController](replication-controller.html) +* `matchExpressions` - allows to build more sophisticated selectors by specyfing key, + list of values and an operator that relates the key and values. + +When the two are specified the result is ANDed. + +If `.spec.selector` is unspecified, `.spec.selector.matchLabels` will be defaulted to +`.spec.template.metadata.labels`. + +Also you should not normally create any pods whose labels match this selector, either directly, +via another Job, or via another controller such as ReplicationController. Otherwise, the Job will +think that those pods were created by it. Kubernetes will not stop you from doing this. + +### Multiple Completions + +By default, a Job is complete when one Pod runs to successful completion. You can also specify that +this needs to happen multiple times by specifying `.spec.completions` with a value greater than 1. +When multiple completions are requested, each Pod created by the Job controller has an identical +[`spec`](../devel/api-conventions.html#spec-and-status). In particular, all pods will have +the same command line and the same image, the same volumes, and mostly the same environment +variables. It is up to the user to arrange for the pods to do work on different things. For +example, the pods might all access a shared work queue service to acquire work units. + +To create multiple pods which are similar, but have slightly different arguments, environment +variables or images, use multiple Jobs. + +### Parallelism + +You can suggest how many pods should run concurrently by setting `.spec.parallelism` to the number +of pods you would like to have running concurrently. This number is a suggestion. The number +running concurrently may be lower or higher for a variety of reasons. For example, it may be lower +if the number of remaining completions is less, or as the controller is ramping up, or if it is +throttling the job due to excessive failures. It may be higher for example if a pod is gracefully +shutdown, and the replacement starts early. + +If you do not specify `.spec.parallelism`, then it defaults to `.spec.completions`. + +## Handling Pod and Container Failures + +A Container in a Pod may fail for a number of reasons, such as because the process in it exited with +a non-zero exit code, or the Container was killed for exceeding a memory limit, etc. If this +happens, and the `.spec.template.containers[].restartPolicy = "OnFailure"`, then the Pod stays +on the node, but the Container is re-run. Therefore, your program needs to handle the the case when it is +restarted locally, or else specify `.spec.template.containers[].restartPolicy = "Never"`. +See [pods-states](pod-states.html) for more information on `restartPolicy`. + +An entire Pod can also fail, for a number of reasons, such as when the pod is kicked off the node +(node is upgraded, rebooted, delelted, etc.), or if a container of the Pod fails and the +`.spec.template.containers[].restartPolicy = "Never"`. When a Pod fails, then the Job controller +starts a new Pod. Therefore, your program needs to handle the case when it is restarted in a new +pod. In particular, it needs to handle temporary files, locks, incomplete output and the like +caused by previous runs. + +Note that even if you specify `.spec.parallelism = 1` and `.spec.completions = 1` and +`.spec.template.containers[].restartPolicy = "Never"`, the same program may +sometimes be started twice. + +If you do specify `.spec.parallelism` and `.spec.completions` both greater than 1, then there may be +multiple pods running at once. Therefore, your pods must also be tolerant of concurrency. + +## Alternatives to Job + +### Bare Pods + +When the node that a pod is running on reboots or fails, the pod is terminated +and will not be restarted. However, a Job will create new pods to replace terminated ones. +For this reason, we recommend that you use a job rather than a bare pod, even if your application +requires only a single pod. + +### Replication Controller + +Jobs are complementary to [Replication Controllers](replication-controller.html). +A Replication Controller manages pods which are not expected to terminate (e.g. web servers), and a Job +manages pods that are expected to terminate (e.g. batch jobs). + +As discussed in [life of a pod](pod-states.html), `Job` is *only* appropriate for pods with +`RestartPolicy` equal to `OnFailure` or `Never`. (Note: If `RestartPolicy` is not set, the default +value is `Always`.) + +## Caveats + +Job objects are in the [`extensions` API Group](../api.html#api-groups). + +Job objects have [API version `v1beta1`](../api.html#api-versioning). Beta objects may +undergo changes to their schema and/or semantics in future software releases, but +similar functionality will be supported. + +## Future work + +Support for creating Jobs at specified times/dates (i.e. cron) is expected in the next minor +release. + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/jobs.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/jsonpath.md b/v1.1/docs/user-guide/jsonpath.md new file mode 100644 index 0000000000000..070f46f3cc5c8 --- /dev/null +++ b/v1.1/docs/user-guide/jsonpath.md @@ -0,0 +1,89 @@ +--- +layout: docwithnav +title: "JSONPath template syntax" +--- + + + + + +# JSONPath template syntax + +JSONPath template is composed of JSONPath expressions enclosed by {}. +And we add three functions in addition to the original JSONPath syntax: + +1. The `$` operator is optional since the expression always start from the root object by default. +2. We can use `""` to quote text inside JSONPath expression. +3. We can use `range` operator to iterate list. + + +The result object is printed as its String() function. + +Given the input: + +{% highlight json %} +{% raw %} +{ + "kind": "List", + "items":[ + { + "kind":"None", + "metadata":{"name":"127.0.0.1"}, + "status":{ + "capacity":{"cpu":"4"}, + "addresses":[{"type": "LegacyHostIP", "address":"127.0.0.1"}] + } + }, + { + "kind":"None", + "metadata":{"name":"127.0.0.2"}, + "status":{ + "capacity":{"cpu":"8"}, + "addresses":[ + {"type": "LegacyHostIP", "address":"127.0.0.2"}, + {"type": "another", "address":"127.0.0.3"} + ] + } + } + ], + "users":[ + { + "name": "myself", + "user": {} + }, + { + "name": "e2e", + "user": {"username": "admin", "password": "secret"} + } + ] +} +{% endraw %} +{% endhighlight %} + +Function | Description | Example | Result +---------|--------------------|--------------------|------------------ +text | the plain text | kind is {.kind} | kind is List +"" | quote | {"{"} | { +@ | the current object | {@} | the same as input +. or [] | child operator | {.kind} or {['kind']}| List +.. | recursive descent | {..name} | 127.0.0.1 127.0.0.2 myself e2e +* | wildcard. Get all objects| {.items[*].metadata.name} | [127.0.0.1 127.0.0.2] +[start:end :step] | subscript operator | {.users[0].name}| myself +[,] | union operator | {.items[*]['metadata.name', 'status.capacity']} | 127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8] +?() | filter | {.users[?(@.name=="e2e")].user.password} | secret +range, end | iterate list | {range .items[*]}[{.metadata.name}, {.status.capacity}] {end} | [127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]] + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/jsonpath.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/k8s-ui-explore-filter.png b/v1.1/docs/user-guide/k8s-ui-explore-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a53d0edf2e9026270d6db08fd51cd7993bd260 GIT binary patch literal 71468 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 z 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/k8s-ui-explore-groupby.png b/v1.1/docs/user-guide/k8s-ui-explore-groupby.png new file mode 100644 index 0000000000000000000000000000000000000000..4f313af850d07cd40d037e32af1789ef07c2e3e2 GIT binary patch literal 72408 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

            f{CYVyDcJ5_&Gh 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/k8s-ui-explore-poddetail.png b/v1.1/docs/user-guide/k8s-ui-explore-poddetail.png new file mode 100644 index 0000000000000000000000000000000000000000..ddcf6918c702fe9aec6a78049d5d30140989baa5 GIT binary patch literal 52998 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�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

          1. miy5%j3@+HJOKM>S`=2TWDI-0B zvWD90l@_4OtTB5-^R16Y^Q(xqR~irv+{|lBqj%91MM}H2ad!Pq)RyaiBeyx2XekG z-)E%{#9P!(*s3s2nHH)lzsT6wFPF1$*16$M(P{C5pv``$K(Twl26wMJOGYU}S$~r99=WkszbJ#w zd4j!nuJKzQ1W^3A)#sWn%5r;F#i#$eJ6ORJzf_jcS00x*36H$&2vbGcDCt6E=a#^Om6R+ zOqKGks|8L1F=Qh=-(HoUNyzb{f~v%LNkT*ws9m38gG5?}9EDca5M^U99^fEQmPSj- zM(L_-BQVX!+mQRf89Q^F&NRNF?)ghk1C}FM(>37{JHPpR6-1DsE@LG=t>dZ5(;`WF zgsjA3^|Nm%KWcatTEoRpqhUq^XxCc)wz*|zwPO|+JFf%7ME|;%vBP*Ni)X}6O0`Q$ zo)+#QuqkJB<62SB0#A+a$F%kxJE_74o6kV3L$~oIrWl3fgvv||9$Fw!AOa{62eh6y zy84544d^z_OZnA&v$H|W%i%pEr_Aw9DyKLo5!b35`_$g9cu9cZ?12?!6@TelYiVl5 zRB{q>XAVIp+jq8gr|g*zq~%Xv1j!f$)B=-AI}Wj0-J3RA6F16gM~=oZLETUil8~7c z6>HPG*ssDTVg7olIo zE}9Wmrpkr8@vv@e30?5qkGh&0^>7MP&e}_Lgd>SeJOp$$fAqP04eeOt&;Qg1U1{e? zoXejS_Wq8QxM3#oaNAQJ2lhJoo$Wh)doV;?qIu?ZdWq$cfOax7Pk9JkS^gO@&%+0+ z#cXfWB|_0RJHJRPngeqfjO!TJ7>YEc_qloR?{gTl+qyCK7jG`eNVGD2SMY|^3vDI* zUaPfoAt^A!vqHcE`B$G{(F!-+`@f{-iIFF|K)ZfY#8c+TlCTsWN_6>7YSPjh8t4=3(yl?)9s2edN zfwOeDpW=C5&C3XGn%$G5B_jB;;w6Bp!TiS;I2uTKuK_(S=f+1VHo5e#!h0K0udbe! zp$yZFVjYt8MHm!d(9!~lxCbERPHmGSahFF6ml1t$@nEx@XN%MJTsl};#!=B5>c82` z67s)*J>_n}1oJkFYP?x_snI&~7dpmU|MFyHbobfTnWaI<@UH ztRv2AW4iqKuw7L1a%vyN{)fc!exh)@PiC=!vD5tiRflPsOpu1n(ftCe+4N5AYvgGu zbB?RZ20wi12p!nNh69r!>?^^WJ`;pjGji-N-D=an2aJufYS;0n_8s5B(6AJYy0l`r zztLI_(A?N!w`%?~)n`18 zpj7!BlnJIWJHQ1hauEzZeR^07zycc+T@Igf_MuJIR@mar){SrYnwbDrSZ!n z`aeE2`sO2+st=ecdx^=cMa<8Ml-nT8BB8(Dml%#ugPZcvmL^)gweJbfS3Rvtr6kLM zUbwjZJkL%5UY$-vbMEu8Y}kU z+M>f69e5`vKMC#em^1mxpe``|!Cq=r)KJKi@4Nzo1eSWB9|F=6p%D~i;?Ac}4%(2( zicL4ywRP;UZ5fywk4{*=S$%MmsZ&aD>fUa-shb^IKSgr;8)i3?vX-|~$vs$U%?Trb zOtmq}TE7IlgUE-qWQ&UCSYZ)<6*M`iW!}H-LG`q4y?bcAa-CUDn&at9q?c7%)R15U z14-^!&b0gb77x((XB|_FIuc7HtN5jTWIqKe#D=fDi)AsM8#qmV-)XGN?E|`6!Opp0za8(rU@V{Dd oNdJ3Ev}gRk2S@+!-r5x|s^Y0Yw#YaGNOO>^q>@C1nBnLD2ZJ=n2mk;8 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/k8s-ui-explore.png b/v1.1/docs/user-guide/k8s-ui-explore.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6b8b7bf5deae9738db82d335df412302a45ea9 GIT binary patch literal 68948 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 z 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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/k8s-ui-overview.png b/v1.1/docs/user-guide/k8s-ui-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..ca98b28255c450d8cfa30291d67b51ac004f101d GIT binary patch literal 78341 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�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 literal 0 HcmV?d00001 diff --git a/v1.1/docs/user-guide/known-issues.md b/v1.1/docs/user-guide/known-issues.md new file mode 100644 index 0000000000000..e1a03e5a80246 --- /dev/null +++ b/v1.1/docs/user-guide/known-issues.md @@ -0,0 +1,43 @@ +--- +layout: docwithnav +title: "Known Issues" +--- + + + + + +## Known Issues + +This document summarizes known issues with existing Kubernetes releases. + +Please consult this document before filing new bugs. + +### Release 1.0.1 + + * `exec` liveness/readiness probes leak resources due to Docker exec leaking resources (#10659) + * `docker load` sometimes hangs which causes the `kube-apiserver` not to start. Restarting the Docker daemon should fix the issue (#10868) + * The kubelet on the master node doesn't register with the `kube-apiserver` so statistics aren't collected for master daemons (#10891) + * Heapster and InfluxDB both leak memory (#10653) + * Wrong node cpu/memory limit metrics from Heapster (https://github.com/GoogleCloudPlatform/heapster/issues/399) + * Services that set `type=LoadBalancer` can not use port `10250` because of Google Compute Engine firewall limitations + * Add-on services can not be created or deleted via `kubectl` or the Kubernetes API (#11435) + * If a pod with a GCE PD is created and deleted in rapid succession, it may fail to attach/mount correctly leaving PD data inaccessible (or corrupted in the worst case). (http://issue.k8s.io/11231#issuecomment-122049113) + * Suggested temporary work around: introduce a 1-2 minute delay between deleting and recreating a pod with a PD on the same node. + * Explicit errors while detaching GCE PD could prevent PD from ever being detached (#11321) + * GCE PDs may sometimes fail to attach (#11302) + * If multiple Pods use the same RBD volume in read-write mode, it is possible data on the RBD volume could get corrupted. This problem has been found in environments where both apiserver and etcd rebooted and Pods were redistributed. + * A workaround is to ensure there is no other Ceph client using the RBD volume before mapping RBD image in read-write mode. For example, `rados -p poolname listwatchers image_name.rbd` can list RBD clients that are mapping the image. + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/known-issues.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/kubeconfig-file.md b/v1.1/docs/user-guide/kubeconfig-file.md new file mode 100644 index 0000000000000..358e85be6aaa5 --- /dev/null +++ b/v1.1/docs/user-guide/kubeconfig-file.md @@ -0,0 +1,243 @@ +--- +layout: docwithnav +title: "kubeconfig files" +--- + + + + + +# kubeconfig files + +Authentication in kubernetes can differ for different individuals. + +- A running kubelet might have one way of authenticating (i.e. certificates). +- Users might have a different way of authenticating (i.e. tokens). +- Administrators might have a list of certificates which they provide individual users. +- There may be multiple clusters, and we may want to define them all in one place - giving users the ability to use their own certificates and reusing the same global configuration. + +So in order to easily switch between multiple clusters, for multiple users, a kubeconfig file was defined. + +This file contains a series of authentication mechanisms and cluster connection information associated with nicknames. It also introduces the concept of a tuple of authentication information (user) and cluster connection information called a context that is also associated with a nickname. + +Multiple kubeconfig files are allowed. At runtime they are loaded and merged together along with override options specified from the command line (see rules below). + +## Related discussion + +http://issue.k8s.io/1755 + +## Example kubeconfig file + +The below file contains a `current-context` which will be used by default by clients which are using the file to connect to a cluster. Thus, this kubeconfig file has more information in it then we will necessarily have to use in a given session. You can see it defines many clusters, and users associated with those clusters. The context itself is associated with both a cluster AND a user. + +{% highlight yaml %} +{% raw %} +current-context: federal-context +apiVersion: v1 +clusters: +- cluster: + api-version: v1 + server: http://cow.org:8080 + name: cow-cluster +- cluster: + certificate-authority: path/to/my/cafile + server: https://horse.org:4443 + name: horse-cluster +- cluster: + insecure-skip-tls-verify: true + server: https://pig.org:443 + name: pig-cluster +contexts: +- context: + cluster: horse-cluster + namespace: chisel-ns + user: green-user + name: federal-context +- context: + cluster: pig-cluster + namespace: saw-ns + user: black-user + name: queen-anne-context +kind: Config +preferences: + colors: true +users: +- name: blue-user + user: + token: blue-token +- name: green-user + user: + client-certificate: path/to/my/client/cert + client-key: path/to/my/client/key +{% endraw %} +{% endhighlight %} + +### Building your own kubeconfig file + +NOTE, that if you are deploying k8s via kube-up.sh, you do not need to create your own kubeconfig files, the script will do it for you. + +In any case, you can easily use this file as a template to create your own kubeconfig files. + +So, lets do a quick walk through the basics of the above file so you can easily modify it as needed... + +The above file would likely correspond to an api-server which was launched using the `--token-auth-file=tokens.csv` option, where the tokens.csv file looked something like this: + +``` +{% raw %} +blue-user,blue-user,1 +mister-red,mister-red,2 +{% endraw %} +``` + +Also, since we have other users who validate using **other** mechanisms, the api-server would have probably been launched with other authentication options (there are many such options, make sure you understand which ones YOU care about before crafting a kubeconfig file, as nobody needs to implement all the different permutations of possible authentication schemes). + +- Since the user for the current context is "green-user", any client of the api-server using this kubeconfig file would naturally be able to log in succesfully, because we are providigin the green-user's client credentials. +- Similarly, we can operate as the "blue-user" if we choose to change the value of current-context. + +In the above scenario, green-user would have to log in by providing certificates, whereas blue-user would just provide the token. All this information would be handled for us by the + +## Loading and merging rules + +The rules for loading and merging the kubeconfig files are straightforward, but there are a lot of them. The final config is built in this order: + 1. Get the kubeconfig from disk. This is done with the following hierarchy and merge rules: + + + If the CommandLineLocation (the value of the `kubeconfig` command line option) is set, use this file only. No merging. Only one instance of this flag is allowed. + + + Else, if EnvVarLocation (the value of $KUBECONFIG) is available, use it as a list of files that should be merged. + Merge files together based on the following rules. + Empty filenames are ignored. Files with non-deserializable content produced errors. + The first file to set a particular value or map key wins and the value or map key is never changed. + This means that the first file to set CurrentContext will have its context preserved. It also means that if two files specify a "red-user", only values from the first file's red-user are used. Even non-conflicting entries from the second file's "red-user" are discarded. + + + Otherwise, use HomeDirectoryLocation (~/.kube/config) with no merging. + 1. Determine the context to use based on the first hit in this chain + 1. command line argument - the value of the `context` command line option + 1. current-context from the merged kubeconfig file + 1. Empty is allowed at this stage + 1. Determine the cluster info and user to use. At this point, we may or may not have a context. They are built based on the first hit in this chain. (run it twice, once for user, once for cluster) + 1. command line argument - `user` for user name and `cluster` for cluster name + 1. If context is present, then use the context's value + 1. Empty is allowed + 1. Determine the actual cluster info to use. At this point, we may or may not have a cluster info. Build each piece of the cluster info based on the chain (first hit wins): + 1. command line arguments - `server`, `api-version`, `certificate-authority`, and `insecure-skip-tls-verify` + 1. If cluster info is present and a value for the attribute is present, use it. + 1. If you don't have a server location, error. + 1. Determine the actual user info to use. User is built using the same rules as cluster info, EXCEPT that you can only have one authentication technique per user. + 1. Load precedence is 1) command line flag, 2) user fields from kubeconfig + 1. The command line flags are: `client-certificate`, `client-key`, `username`, `password`, and `token`. + 1. If there are two conflicting techniques, fail. + 1. For any information still missing, use default values and potentially prompt for authentication information + +## Manipulation of kubeconfig via `kubectl config ` + +In order to more easily manipulate kubeconfig files, there are a series of subcommands to `kubectl config` to help. +See [kubectl/kubectl_config.md](kubectl/kubectl_config.html) for help. + +### Example + +{% highlight console %} +{% raw %} +$ kubectl config set-credentials myself --username=admin --password=secret +$ kubectl config set-cluster local-server --server=http://localhost:8080 +$ kubectl config set-context default-context --cluster=local-server --user=myself +$ kubectl config use-context default-context +$ kubectl config set contexts.default-context.namespace the-right-prefix +$ kubectl config view +{% endraw %} +{% endhighlight %} + +produces this output + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +clusters: +- cluster: + server: http://localhost:8080 + name: local-server +contexts: +- context: + cluster: local-server + namespace: the-right-prefix + user: myself + name: default-context +current-context: default-context +kind: Config +preferences: {} +users: +- name: myself + user: + password: secret + username: admin +{% endraw %} +{% endhighlight %} + +and a kubeconfig file that looks like this + +{% highlight yaml %} +{% raw %} +apiVersion: v1 +clusters: +- cluster: + server: http://localhost:8080 + name: local-server +contexts: +- context: + cluster: local-server + namespace: the-right-prefix + user: myself + name: default-context +current-context: default-context +kind: Config +preferences: {} +users: +- name: myself + user: + password: secret + username: admin +{% endraw %} +{% endhighlight %} + +#### Commands for the example file + +{% highlight console %} +{% raw %} +$ kubectl config set preferences.colors true +$ kubectl config set-cluster cow-cluster --server=http://cow.org:8080 --api-version=v1 +$ kubectl config set-cluster horse-cluster --server=https://horse.org:4443 --certificate-authority=path/to/my/cafile +$ kubectl config set-cluster pig-cluster --server=https://pig.org:443 --insecure-skip-tls-verify=true +$ kubectl config set-credentials blue-user --token=blue-token +$ kubectl config set-credentials green-user --client-certificate=path/to/my/client/cert --client-key=path/to/my/client/key +$ kubectl config set-context queen-anne-context --cluster=pig-cluster --user=black-user --namespace=saw-ns +$ kubectl config set-context federal-context --cluster=horse-cluster --user=green-user --namespace=chisel-ns +$ kubectl config use-context federal-context +{% endraw %} +{% endhighlight %} + +### Final notes for tying it all together + +So, tying this all together, a quick start to creating your own kubeconfig file: + +- Take a good look and understand how you're api-server is being launched: You need to know YOUR security requirements and policies before you can design a kubeconfig file for convenient authentication. + +- Replace the snippet above with information for your cluster's api-server endpoint. + +- Make sure your api-server is launched in such a way that at least one user (i.e. green-user) credentials are provided to it. You will of course have to look at api-server documentation in order to determine the current state-of-the-art in terms of providing authentication details. + + + + + + + + + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/kubeconfig-file.md?pixel)]() + + diff --git a/v1.1/docs/user-guide/kubectl-overview.md b/v1.1/docs/user-guide/kubectl-overview.md new file mode 100644 index 0000000000000..8ad803b6cbc0d --- /dev/null +++ b/v1.1/docs/user-guide/kubectl-overview.md @@ -0,0 +1,315 @@ +--- +layout: docwithnav +title: "kubectl overview" +--- + + + + + +# kubectl overview + +Use this overview of the `kubectl` command line interface to help you start running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](kubectl/kubectl.html) reference documentation. + +**Table of contents:** + + +- [kubectl overview](#kubectl-overview) + - [Syntax](#syntax) + - [Operations](#operations) + - [Resource types](#resource-types) + - [Output options](#output-options) + - [Formatting output](#formatting-output) + - [Syntax](#syntax) + - [Example](#example) + - [Custom columns](#custom-columns) + - [Examples](#examples) + - [Sorting list objects](#sorting-list-objects) + - [Syntax](#syntax) + - [Example](#example) + - [Examples: Common operations](#examples-common-operations) + - [Next steps](#next-steps) + + + +TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177). + +## Syntax + +Use the following syntax to run `kubectl` commands from your terminal window: + +``` +{% raw %} +kubectl [command] [TYPE] [NAME] [flags] +{% endraw %} +``` + +where `command`, `TYPE`, `NAME`, and `flags` are: + +* `command`: Specifies the operation that you want to perform on one or more resources, for example `create`, `get`, `describe`, `delete`. +* `TYPE`: Specifies the [resource type](#resource-types). Resource types are case-sensitive and you can specify the singular, plural, or abbreviated forms. For example, the following commands produce the same output: + + ``` +{% raw %} + $ kubectl get pod pod1 + $ kubectl get pods pod1 + $ kubectl get po pod1 +{% endraw %} + ``` + +* `NAME`: Specifies the name of the resource. Names are case-sensitive. If the name is omitted, details for all resources are displayed, for example `$ kubectl get pods`. + + When performing an operation on multiple resources, you can specify each resource by type and name or specify one or more files: + * To specify resources by type and name: + * To group resources if they are all the same type: `TYPE1 name1 name2 name<#>`
            + Example: `$ kubectl get pod example-pod1 example-pod2` + * To specify multiple resource types individually: `TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`
            + Example: `$ kubectl get pod/example-pod1 replicationcontroller/example-rc1` + * To specify resources with one or more files: `-f file1 -f file2 -f file<#>` + [Use YAML rather than JSON](config-best-practices.html) since YAML tends to be more user-friendly, especially for configuration files.
            + Example: `$ kubectl get pod -f ./pod.yaml` +* `flags`: Specifies optional flags. For example, you can use the `-s` or `--server` flags to specify the address and port of the Kubernetes API server.
            +**Important**: Flags that you specify from the command line override default values and any corresponding environment variables. + +If you need help, just run `kubectl help` from the terminal window. + +## Operations + +The following table includes short descriptions and the general syntax for all of the `kubectl` operations: + +Operation | Syntax | Description +-------------------- | -------------------- | -------------------- +`annotate` | `kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]` | Add or update the annotations of one or more resources. +`api-versions` | `kubectl api-versions [flags]` | List the API versions that are available. +`apply` | `kubectl apply -f FILENAME [flags]`| Apply a configuration change to a resource from a file or stdin. +`attach` | `kubectl attach POD -c CONTAINER [-i] [-t] [flags]` | Attach to a running container either to view the output stream or interact with the container (stdin). +`autoscale` | `autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]` | Automatically scale the set of pods that are managed by a replication controller. +`cluster-info` | `kubectl cluster-info [flags]` | Display endpoint information about the master and services in the cluster. +`config` | `kubectl config SUBCOMMAND [flags]` | Modifies kubeconfig files. See the individual subcommands for details. +`create` | `kubectl create -f FILENAME [flags]` | Create one or more resources from a file or stdin. +`delete` | `kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]` | Delete resources either from a file, stdin, or specifying label selectors, names, resource selectors, or resources. +`describe` | `kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]` | Display the detailed state of one or more resources. +`edit` | `kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]` | Edit and update the definition of one or more resources on the server by using the default editor. +`exec` | `kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]` | Execute a command against a container in a pod. +`expose` | `kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags]` | Expose a replication controller, service, or pod as a new Kubernetes service. +`get` | `kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]` | List one or more resources. +`label` | `kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]` | Add or update the labels of one or more resources. +`logs` | `kubectl logs POD [-c CONTAINER] [--follow] [flags]` | Print the logs for a container in a pod. +`patch` | `kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]` | Update one or more fields of a resource by using the strategic merge patch process. +`port-forward` | `kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]` | Forward one or more local ports to a pod. +`proxy` | `kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]` | Run a proxy to the Kubernetes API server. +`replace` | `kubectl replace -f FILENAME` | Replace a resource from a file or stdin. +`rolling-update` | `kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]` | Perform a rolling update by gradually replacing the specified replication controller and its pods. +`run` | `kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]` | Run a specified image on the cluster. +`scale` | `kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]` | Update the size of the specified replication controller. +`stop` | `kubectl stop` | Deprecated: Instead, see `kubectl delete`. +`version` | `kubectl version [--client] [flags]` | Display the Kubernetes version running on the client and server. + +Remember: For more about command operations, see the [kubectl](kubectl/kubectl.html) reference documentation. + +## Resource types + +The following table includes a list of all the supported resource types and their abbreviated aliases: + +Resource type | Abbreviated alias +-------------------- | -------------------- +`componentstatuses` | `cs` +`events` | `ev` +`endpoints` | `ep` +`horizontalpodautoscalers` | `hpa` +`limitranges` | `limits` +`nodes` | `no` +`namespaces` | `ns` +`pods` | `po` +`persistentvolumes` | `pv` +`persistentvolumeclaims` | `pvc` +`resourcequotas` | `quota` +`replicationcontrollers` | `rc` +`secrets` | +`serviceaccounts` | +`services` | `svc` +`ingress` | `ing` + +## Output options + +Use the following sections for information about how you can format or sort the output of certain commands. For details about which commands support the various output options, see the [kubectl](kubectl/kubectl.html) reference documentation. + +### Formatting output + +The default output format for all `kubectl` commands is the human readable plain-text format. To output details to your terminal window in a specific format, you can add either the `-o` or `-output` flags to a supported `kubectl` command. + +#### Syntax + +``` +{% raw %} +kubectl [command] [TYPE] [NAME] -o= +{% endraw %} +``` + +Depending on the `kubectl` operation, the following output formats are supported: + +Output format | Description +--------------| ----------- +`-o=custom-columns=` | Print a table using a comma separated list of [custom columns](#custom-columns). +`-o=custom-columns-file=` | Print a table using the [custom columns](#custom-columns) template in the `` file. +`-o=json` | Output a JSON formatted API object. +`-o=jsonpath=

          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ⅅ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